• 按键公众号 :
按键精灵电脑版
立即下载

软件版本:2014.06
软件大小:22.9M
更新时间:2021-12-03

按键精灵安卓版
立即下载

软件版本:3.7.2
软件大小:46.2M
更新时间:2023-05-10

按键精灵iOS版
立即下载

软件版本:1.8.0
软件大小:29.2M
更新时间:2023-03-21

按键手机助手
立即下载

软件版本:3.8.0
软件大小:262M
更新时间:2023-05-30

快捷导航

登录 后使用快捷导航
没有帐号? 注册

发新话题 回复该主题

[神梦] 【游戏】用按键精灵制作贪吃蛇小游戏 [复制链接]

1#
用按键精灵制作贪吃蛇小游戏,不用第三方插件,完全用按键自带命令实现:

基本思路:
1、用记事本来画游戏界面
2、设置游戏窗口信息
3、生成小蛇、投放食物
4、检测键盘操作,控制小蛇前进方向
5、碰撞检测,“咬蛇自尽”、“撞墙而死”



【游戏思路】

 


  • 用记事本来画游戏界面
    注:为了画面效果,需要将记事本的字体改为“宋体”


  • 设置游戏窗口信息
    1. Hwnd = Plugin.Window.Find("Notepad", "贪吃蛇 - by:神梦无痕")
    2. If Hwnd = 0 Then Hwnd = Plugin.Window.Find("Notepad", "无标题 - 记事本")
    3. If Hwnd = 0 Then
    4.     RunApp "notepad.exe"
    5.     Do
    6.         Hwnd = Plugin.Window.Find("Notepad", "无标题 - 记事本")
    7.         Delay 100
    8.     Loop Until Hwnd > 0
    9. End If
    10. Call Plugin.Window.SetText(Hwnd, "贪吃蛇 - by:神梦无痕")
    11. Call Plugin.Window.Restore(Hwnd)
    12. Call Plugin.Window.Active(Hwnd)
    13. Call Plugin.Window.Size(Hwnd, 地图大小*16.7 + 30, 地图大小*16.7 + 160)
    14. HwndEdit = Plugin.Window.FindEx(Hwnd, 0, "Edit", "")
    复制代码


  • 生成小蛇、投放食物






  • 检测键盘操作,控制小蛇前进方向


  • 碰撞检测










【游戏完整代码】

 

  1. '#================================================================
  2. '# 【游戏】贪吃蛇
  3. '#----------------------------------------------------------------
  4. '# 【作者】:神梦无痕
  5. '# 【QQ】:1042207232
  6. '# 【Q群】:624655641
  7. '# 【更新】:2022-09-04
  8. '#----------------------------------------------------------------
  9. '# 注意:为了画面效果,需要将记事本的字体改为“宋体”
  10. '#================================================================
  11. Dim 地图, 食物坐标, 贪吃蛇坐标, 运动方向, 运动速度

  12. Call 初始化界面(16)
  13. Call 贪吃蛇出生()
  14. Call 投放食物()
  15. Do
  16.     // 检查键盘操作
  17.     key = GetLastKey()
  18.     Select Case key
  19.     Case 38
  20.         TracePrint "上"
  21.         Call 贪吃蛇爬行(1)
  22.     Case 40
  23.         TracePrint "下"
  24.         Call 贪吃蛇爬行(2)
  25.     Case 37
  26.         TracePrint "左"
  27.         Call 贪吃蛇爬行(3)
  28.     Case 39
  29.         TracePrint "右"
  30.         Call 贪吃蛇爬行(4)
  31.     Case Else
  32.         TracePrint "自动前行"
  33.         Call 贪吃蛇爬行(0)
  34.     End Select
  35.     Delay 运动速度
  36. Loop









  37. //=======================================【功能函数】=======================================
  38. Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal Hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As string) As Long
  39. ' 初始化界面
  40. DimEnv 全局_窗口句柄
  41. Function 初始化界面(地图大小)
  42.     Dim Hwnd, HwndEdit
  43.     
  44.     食物坐标 = Array(0, 0)
  45.     贪吃蛇坐标 = Array("5,7", "5,6", "5,5")
  46.     运动方向 = 4
  47.     运动速度 = 1000
  48.     Hwnd = Plugin.Window.Find("Notepad", "贪吃蛇 - by:神梦无痕")
  49.     If Hwnd = 0 Then Hwnd = Plugin.Window.Find("Notepad", "无标题 - 记事本")
  50.     If Hwnd = 0 Then
  51.         RunApp "notepad.exe"
  52.         Do
  53.             Hwnd = Plugin.Window.Find("Notepad", "无标题 - 记事本")
  54.             Delay 100
  55.         Loop Until Hwnd > 0
  56.     End If
  57.     Call Plugin.Window.SetText(Hwnd, "贪吃蛇 - by:神梦无痕")
  58.     Call Plugin.Window.Restore(Hwnd)
  59.     Call Plugin.Window.Active(Hwnd)
  60.     Call Plugin.Window.Size(Hwnd, 地图大小*16.7 + 30, 地图大小*16.7 + 160)
  61.     HwndEdit = Plugin.Window.FindEx(Hwnd, 0, "Edit", "")
  62.     全局_窗口句柄 = HwndEdit
  63.     
  64.     ReDim 地图(地图大小)
  65.     地图(0) = String(地图大小, "■")
  66.     For i = 1 To 地图大小 - 1
  67.         地图(i) = "■" & String(地图大小 - 2, " ") & "■"
  68.     Next
  69.     地图(地图大小) = String(地图大小, "■")
  70.     
  71.     Call 绘制地图(HwndEdit)
  72. End Function
  73. ' 投放食物
  74. Function 投放食物()
  75.     Assert Plugin.Window.IsWindow(全局_窗口句柄), "出错,游戏窗口句柄不存在!"
  76.     
  77.     Do
  78.         食物坐标 = 随机坐标()
  79.     Loop Until Array_In(贪吃蛇坐标, Join(食物坐标, ",")) = False
  80.     Call 设置地图(食物坐标(0), 食物坐标(1), "★")
  81.     Call 绘制地图(全局_窗口句柄)
  82. End Function
  83. ' 贪吃蛇出生
  84. Function 贪吃蛇出生()
  85.     Dim XY, i
  86.     Assert Plugin.Window.IsWindow(全局_窗口句柄), "出错,游戏窗口句柄不存在!"
  87.     
  88.     XY = Split(贪吃蛇坐标(0), ",")
  89.     Call 设置地图(Int(XY(0)), Int(XY(1)), "●")
  90.     For i = 1 To UBound(贪吃蛇坐标)
  91.         XY = Split(贪吃蛇坐标(i), ",")
  92.         Call 设置地图(Int(XY(0)), Int(XY(1)), "■")
  93.     Next
  94.     Call 绘制地图(全局_窗口句柄)
  95. End Function
  96. ' 贪吃蛇爬行
  97. Function 贪吃蛇爬行(动作)
  98.     Dim 蛇头坐标
  99.     
  100.     蛇头坐标 = 获取蛇头坐标()
  101.     If 动作 = 0 Then
  102.         动作 = 运动方向
  103.     ElseIf 动作 = 1 And 运动方向 = 2 Then
  104.         动作 = 运动方向
  105.     ElseIf 动作 = 2 And 运动方向 = 1 Then
  106.         动作 = 运动方向
  107.     ElseIf 动作 = 3 And 运动方向 = 4 Then
  108.         动作 = 运动方向
  109.     ElseIf 动作 = 4 And 运动方向 = 3 Then
  110.         动作 = 运动方向
  111.     Else
  112.         运动方向 = 动作
  113.     End If
  114.     Select Case 动作
  115.     Case 1'上
  116.         蛇头坐标(0) = Int(蛇头坐标(0)) - 1
  117.         蛇头坐标(1) = Int(蛇头坐标(1))
  118.     Case 2'下
  119.         蛇头坐标(0) = Int(蛇头坐标(0)) + 1
  120.         蛇头坐标(1) = Int(蛇头坐标(1))
  121.     Case 3'左
  122.         蛇头坐标(0) = Int(蛇头坐标(0))
  123.         蛇头坐标(1) = Int(蛇头坐标(1)) - 1
  124.     Case 4'右
  125.         蛇头坐标(0) = Int(蛇头坐标(0))
  126.         蛇头坐标(1) = Int(蛇头坐标(1)) + 1
  127.     End Select
  128.     Call 贪吃蛇碰撞(蛇头坐标)
  129.     Call 绘制地图(全局_窗口句柄)
  130. End Function
  131. ' 贪吃蛇碰撞
  132. Function 贪吃蛇碰撞(新坐标)
  133.     Assert 新坐标(0) > 0 And 新坐标(0) < UBound(地图), "糟糕,贪吃蛇撞墙上了!"
  134.     Assert 新坐标(1) > 0 And 新坐标(1) < UBound(地图), "糟糕,贪吃蛇撞墙上了!"
  135.     Assert Array_Not_In(贪吃蛇坐标, Join(新坐标, ",")), "糟糕,贪吃蛇把自己吃了!"
  136.     
  137.     Call 设置地图(新坐标(0), 新坐标(1), "●")
  138.     Dim XY: XY = 获取蛇头坐标()
  139.     Call 设置地图(XY(0), XY(1), "■")
  140.     If 食物坐标(0) = 新坐标(0) And 食物坐标(1) = 新坐标(1) Then
  141.         ' 食物被吃了,蛇身变长
  142.         贪吃蛇坐标 = Array_Combine(Array(Join(新坐标, ",")), 贪吃蛇坐标)
  143.         Call 投放食物()
  144.         运动速度 = 运动速度 - 10
  145.     Else
  146.         ' 删除蛇尾坐标
  147.         Dim 蛇尾坐标
  148.         蛇尾坐标 = 获取蛇尾坐标()
  149.         Call 设置地图(蛇尾坐标(0), 蛇尾坐标(1), " ")
  150.         贪吃蛇坐标 = Array_Combine(Array(Join(新坐标, ",")), 贪吃蛇坐标)
  151.         Redim Preserve 贪吃蛇坐标(UBound(贪吃蛇坐标) - 1)
  152.     End If
  153.     TracePrint Join(贪吃蛇坐标, "|")
  154. End Function
  155. ' 获取蛇坐标
  156. Function 获取蛇坐标(Index)
  157.     Dim XY
  158.     Assert Index <= UBound(贪吃蛇坐标), "出错,贪吃蛇没有那么长!"
  159.     
  160.     If Index = -1 Then Index = UBound(贪吃蛇坐标)
  161.     XY = Split(贪吃蛇坐标(Index), ",")
  162.     XY(0) = Int(XY(0)) : XY(1) = Int(XY(1))
  163.     获取蛇坐标 = XY
  164. End Function
  165. ' 获取蛇头坐标
  166. Function 获取蛇头坐标()
  167.     获取蛇头坐标 = 获取蛇坐标(0)
  168. End Function
  169. ' 获取蛇尾坐标
  170. Function 获取蛇尾坐标()
  171.     获取蛇尾坐标 = 获取蛇坐标(-1)
  172. End Function
  173. ' 获取地图
  174. Function 获取地图(x, y)
  175.     Assert x <= UBound(地图), "出错,坐标X在地图上越界!"
  176.     Assert y + 1 <= Len(地图(x)), "出错,坐标X在地图上越界!"
  177.     
  178.     获取地图 = Mid(地图(x), y+1, 1)
  179. End Function
  180. ' 设置地图
  181. Function 设置地图(x, y, value)
  182.     Assert x <= UBound(地图), "出错,坐标X在地图上越界!"
  183.     Assert y + 1 <= Len(地图(x)), "出错,坐标Y在地图上越界!"
  184.     
  185.     地图(x) = Left(地图(x), y) & value & Right(地图(x), len(地图(x)) - y - 1)
  186. End Function
  187. ' 绘制地图
  188. Function 绘制地图(Hwnd)
  189.     Dim map
  190.     Dim WM_SETTEXT
  191.     
  192.     WM_SETTEXT = &HC
  193.     map = Join(地图, vbCrLf)
  194.     map = map & "    ↑" & String(UBound(地图) - 5, " ") & vbCrLf
  195.     map = map & "控制:←↓→" & vbCrLf
  196.     map = map & "作者:神梦无痕" & vbCrLf
  197.     Call SendMessage(Hwnd, WM_SETTEXT, 0, map)
  198. End Function
  199. ' 随机坐标
  200. Function 随机坐标()
  201.     Dim x, y
  202.     x = RandNum(1, UBound(地图) - 2)
  203.     y = RandNum(1, UBound(地图) - 2)
  204.     随机坐标 = Array(x, y)
  205. End Function
  206. ' 绘制报错
  207. Function 绘制报错(ErrInfo)
  208.     Dim h, l
  209.     l = UBound(地图)
  210.     h = UBound(地图) \ 2
  211.     ErrInfo = ErrInfo & String(l - 3 - len(ErrInfo), " ")
  212.     地图(h - 1) = "■┎" & String(l - 4, "—") & "┒■"
  213.     地图(h) = "■ " & ErrInfo & "■"
  214.     地图(h + 1) = "■┖" & String(l - 4, "—") & "┚■"
  215.     Call 绘制地图(全局_窗口句柄)
  216. End Function
  217. ' 断言报错
  218. Function Assert(expression, ErrInfo)
  219.     If expression Then
  220.     Else
  221.         TracePrint ErrInfo
  222.         Call 绘制报错(ErrInfo)
  223.         ExitScript
  224.     End If
  225. End Function
  226. '生成随机数
  227. Function RandNum(Min, Max)
  228. Randomize
  229. RandNum = Int(((Max - Min + 1) * Rnd) + Min)
  230. End Function
  231. ' 数组拼接
  232. Function Array_Combine(List, Arr)
  233.     Dim i
  234.     Result_Arr = Array()
  235.     If IsArray(List) And IsArray(Arr) Then
  236.         ReDim Result_Arr(UBound(List) + UBound(Arr) + 1)
  237.         For i = 0 To UBound(List)
  238.             Result_Arr(i) = List(i)
  239.         Next
  240.         For i = 0 To UBound(Arr)
  241.             Result_Arr(i + UBound(List) + 1) = Arr(i)
  242.         Next
  243.     End If
  244.     Array_Combine = Result_Arr
  245. End Function
  246. ' 数组切片
  247. Function Array_Slice(List, StartIndex, EndIndex)
  248.     Dim i
  249.     ReDim Result_Arr(EndIndex-StartIndex)
  250.     If StartIndex >= LBound(List) And EndIndex <= UBound(List) Then
  251.         For i = StartIndex To EndIndex
  252.             Result_Arr(i-StartIndex) = List(i)
  253.         Next
  254.     End If
  255.     Array_Slice = Result_Arr
  256.     Result_Arr = Empty
  257. End Function
  258. ' 数组包含元素
  259. Function Array_In(List, Item)
  260.     Array_In = CSng(InStr("|" & Join(List, "|") & "|", "|" & Item & "|") > 0)
  261. End Function
  262. ' 数组不包含元素
  263. Function Array_Not_In(List, Item)
  264.     Array_Not_In = (Array_In(List, Item) = 0)
  265. End Function
复制代码

最后编辑神梦科技 最后编辑于 2022-09-04 09:47:15
2#

用按键精灵制作贪吃蛇小游戏

3#

菜鸟报到。。前面观摩

4#

1111111111111111111111111

5#

想看看用按键精灵制作贪吃蛇小游戏的思路

6#

谢谢分享,学习一下!

7#

安静学习

8#

太6了

11111

9#

学习,学习下。

10#

学习学习

11#

学习一下

12#


13#

发呢未付费

14#

蝇营狗苟给他

15#

111111111111111111

16#

66666

17#

这个好玩,这个好玩

18#

菜鸟报到。。前面观摩

19#

顶礼,膜拜

20#

66666

发新话题 回复该主题