双11狂欢大促

盲盒赢 定制羽绒服

开启惊喜盲盒,抽取你的专属好礼

— 惊喜奖品抢先看 —

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

按键精灵小Q 按键精灵小Q 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区

作者:神梦科技

 

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

 

基本思路:

1、用记事本来画游戏界面

2、设置游戏窗口信息

3、生成小蛇、投放食物

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

5、碰撞检测,“咬蛇自尽”、“撞墙而死”

 

 

 

【游戏思路】

 

1、用记事本来画游戏界面

注:为了画面效果,需要将记事本的字体改为“宋体”

 

 

2、设置游戏窗口信息

Hwnd = Plugin.Window.Find("Notepad", "贪吃蛇 - by:神梦无痕")

If Hwnd = 0 Then Hwnd = Plugin.Window.Find("Notepad", "无标题 - 记事本")

If Hwnd = 0 Then

    RunApp "notepad.exe"

    Do

        Hwnd = Plugin.Window.Find("Notepad", "无标题 - 记事本")

        Delay 100

    Loop Until Hwnd > 0

End If

Call Plugin.Window.SetText(Hwnd, "贪吃蛇 - by:神梦无痕")

Call Plugin.Window.Restore(Hwnd)

Call Plugin.Window.Active(Hwnd)

Call Plugin.Window.Size(Hwnd, 地图大小*16.7 + 30, 地图大小*16.7 + 160)

HwndEdit = Plugin.Window.FindEx(Hwnd, 0, "Edit", "")

 

 

3、生成小蛇、投放食物

 


 

 

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

 

 

 

 

5、碰撞检测


 

 

 

【游戏完整代码】

'# 【游戏】贪吃蛇

'#----------------------------------------------------------------

'# 【作者】:神梦无痕

'# 【QQ】:1042207232

'# 【Q群】:624655641

'# 【更新】:2022-09-04

'#----------------------------------------------------------------

'# 注意:为了画面效果,需要将记事本的字体改为“宋体”

'#================================================================

Dim 地图, 食物坐标, 贪吃蛇坐标, 运动方向, 运动速度

 

Call 初始化界面(16)

Call 贪吃蛇出生()

Call 投放食物()

Do

    // 检查键盘操作

    key = GetLastKey()

    Select Case key

    Case 38

        TracePrint "上"

        Call 贪吃蛇爬行(1)

    Case 40

        TracePrint "下"

        Call 贪吃蛇爬行(2)

    Case 37

        TracePrint "左"

        Call 贪吃蛇爬行(3)

    Case 39

        TracePrint "右"

        Call 贪吃蛇爬行(4)

    Case Else

        TracePrint "自动前行"

        Call 贪吃蛇爬行(0)

    End Select

    Delay 运动速度

Loop

 

//=======================================【功能函数】=======================================

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

' 初始化界面

DimEnv 全局_窗口句柄

Function 初始化界面(地图大小)

    Dim Hwnd, HwndEdit

    

    食物坐标 = Array(0, 0)

    贪吃蛇坐标 = Array("5,7", "5,6", "5,5")

    运动方向 = 4

    运动速度 = 1000

    Hwnd = Plugin.Window.Find("Notepad", "贪吃蛇 - by:神梦无痕")

    If Hwnd = 0 Then Hwnd = Plugin.Window.Find("Notepad", "无标题 - 记事本")

    If Hwnd = 0 Then

        RunApp "notepad.exe"

        Do

            Hwnd = Plugin.Window.Find("Notepad", "无标题 - 记事本")

            Delay 100

        Loop Until Hwnd > 0

    End If

    Call Plugin.Window.SetText(Hwnd, "贪吃蛇 - by:神梦无痕")

    Call Plugin.Window.Restore(Hwnd)

    Call Plugin.Window.Active(Hwnd)

    Call Plugin.Window.Size(Hwnd, 地图大小*16.7 + 30, 地图大小*16.7 + 160)

    HwndEdit = Plugin.Window.FindEx(Hwnd, 0, "Edit", "")

    全局_窗口句柄 = HwndEdit

    

    ReDim 地图(地图大小)

    地图(0) = String(地图大小, "■")

    For i = 1 To 地图大小 - 1

        地图(i) = "■" & String(地图大小 - 2, " ") & "■"

    Next

    地图(地图大小) = String(地图大小, "■")

    

    Call 绘制地图(HwndEdit)

End Function

' 投放食物

Function 投放食物()

    Assert Plugin.Window.IsWindow(全局_窗口句柄), "出错,游戏窗口句柄不存在!"

    

    Do

        食物坐标 = 随机坐标()

    Loop Until Array_In(贪吃蛇坐标, Join(食物坐标, ",")) = False

    Call 设置地图(食物坐标(0), 食物坐标(1), "★")

    Call 绘制地图(全局_窗口句柄)

End Function

' 贪吃蛇出生

Function 贪吃蛇出生()

    Dim XY, i

    Assert Plugin.Window.IsWindow(全局_窗口句柄), "出错,游戏窗口句柄不存在!"

    

    XY = Split(贪吃蛇坐标(0), ",")

    Call 设置地图(Int(XY(0)), Int(XY(1)), "●")

    For i = 1 To UBound(贪吃蛇坐标)

        XY = Split(贪吃蛇坐标(i), ",")

        Call 设置地图(Int(XY(0)), Int(XY(1)), "■")

    Next

    Call 绘制地图(全局_窗口句柄)

End Function

' 贪吃蛇爬行

Function 贪吃蛇爬行(动作)

    Dim 蛇头坐标

    

    蛇头坐标 = 获取蛇头坐标()

    If 动作 = 0 Then

        动作 = 运动方向

    ElseIf 动作 = 1 And 运动方向 = 2 Then

        动作 = 运动方向

    ElseIf 动作 = 2 And 运动方向 = 1 Then

        动作 = 运动方向

    ElseIf 动作 = 3 And 运动方向 = 4 Then

        动作 = 运动方向

    ElseIf 动作 = 4 And 运动方向 = 3 Then

        动作 = 运动方向

    Else

        运动方向 = 动作

    End If

    Select Case 动作

    Case 1'上

        蛇头坐标(0) = Int(蛇头坐标(0)) - 1

        蛇头坐标(1) = Int(蛇头坐标(1))

    Case 2'下

        蛇头坐标(0) = Int(蛇头坐标(0)) + 1

        蛇头坐标(1) = Int(蛇头坐标(1))

    Case 3'左

        蛇头坐标(0) = Int(蛇头坐标(0))

        蛇头坐标(1) = Int(蛇头坐标(1)) - 1

    Case 4'右

        蛇头坐标(0) = Int(蛇头坐标(0))

        蛇头坐标(1) = Int(蛇头坐标(1)) + 1

    End Select

    Call 贪吃蛇碰撞(蛇头坐标)

    Call 绘制地图(全局_窗口句柄)

End Function

' 贪吃蛇碰撞

Function 贪吃蛇碰撞(新坐标)

    Assert 新坐标(0) > 0 And 新坐标(0) < UBound(地图), "糟糕,贪吃蛇撞墙上了!"

    Assert 新坐标(1) > 0 And 新坐标(1) < UBound(地图), "糟糕,贪吃蛇撞墙上了!"

    Assert Array_Not_In(贪吃蛇坐标, Join(新坐标, ",")), "糟糕,贪吃蛇把自己吃了!"

    

    Call 设置地图(新坐标(0), 新坐标(1), "●")

    Dim XY: XY = 获取蛇头坐标()

    Call 设置地图(XY(0), XY(1), "■")

    If 食物坐标(0) = 新坐标(0) And 食物坐标(1) = 新坐标(1) Then

        ' 食物被吃了,蛇身变长

        贪吃蛇坐标 = Array_Combine(Array(Join(新坐标, ",")), 贪吃蛇坐标)

        Call 投放食物()

        运动速度 = 运动速度 - 10

    Else

        ' 删除蛇尾坐标

        Dim 蛇尾坐标

        蛇尾坐标 = 获取蛇尾坐标()

        Call 设置地图(蛇尾坐标(0), 蛇尾坐标(1), " ")

        贪吃蛇坐标 = Array_Combine(Array(Join(新坐标, ",")), 贪吃蛇坐标)

        Redim Preserve 贪吃蛇坐标(UBound(贪吃蛇坐标) - 1)

    End If

    TracePrint Join(贪吃蛇坐标, "|")

End Function

' 获取蛇坐标

Function 获取蛇坐标(Index)

    Dim XY

    Assert Index <= UBound(贪吃蛇坐标), "出错,贪吃蛇没有那么长!"

    

    If Index = -1 Then Index = UBound(贪吃蛇坐标)

    XY = Split(贪吃蛇坐标(Index), ",")

    XY(0) = Int(XY(0)) : XY(1) = Int(XY(1))

    获取蛇坐标 = XY

End Function

' 获取蛇头坐标

Function 获取蛇头坐标()

    获取蛇头坐标 = 获取蛇坐标(0)

End Function

' 获取蛇尾坐标

Function 获取蛇尾坐标()

    获取蛇尾坐标 = 获取蛇坐标(-1)

End Function

' 获取地图

Function 获取地图(x, y)

    Assert x <= UBound(地图), "出错,坐标X在地图上越界!"

    Assert y + 1 <= Len(地图(x)), "出错,坐标X在地图上越界!"

    

    获取地图 = Mid(地图(x), y+1, 1)

End Function

' 设置地图

Function 设置地图(x, y, value)

    Assert x <= UBound(地图), "出错,坐标X在地图上越界!"

    Assert y + 1 <= Len(地图(x)), "出错,坐标Y在地图上越界!"

    

    地图(x) = Left(地图(x), y) & value & Right(地图(x), len(地图(x)) - y - 1)

End Function

' 绘制地图

Function 绘制地图(Hwnd)

    Dim map

    Dim WM_SETTEXT

    

    WM_SETTEXT = &HC

    map = Join(地图, vbCrLf)

    map = map & "    ↑" & String(UBound(地图) - 5, " ") & vbCrLf

    map = map & "控制:←↓→" & vbCrLf

    map = map & "作者:神梦无痕" & vbCrLf

    Call SendMessage(Hwnd, WM_SETTEXT, 0, map)

End Function

' 随机坐标

Function 随机坐标()

    Dim x, y

    x = RandNum(1, UBound(地图) - 2)

    y = RandNum(1, UBound(地图) - 2)

    随机坐标 = Array(x, y)

End Function

' 绘制报错

Function 绘制报错(ErrInfo)

    Dim h, l

    l = UBound(地图)

    h = UBound(地图) \ 2

    ErrInfo = ErrInfo & String(l - 3 - len(ErrInfo), " ")

    地图(h - 1) = "■┎" & String(l - 4, "—") & "┒■"

    地图(h) = "■ " & ErrInfo & "■"

    地图(h + 1) = "■┖" & String(l - 4, "—") & "┚■"

    Call 绘制地图(全局_窗口句柄)

End Function

' 断言报错

Function Assert(expression, ErrInfo)

    If expression Then

    Else

        TracePrint ErrInfo

        Call 绘制报错(ErrInfo)

        ExitScript

    End If

End Function

'生成随机数

Function RandNum(Min, Max)

Randomize

RandNum = Int(((Max - Min + 1) * Rnd) + Min)

End Function

' 数组拼接

Function Array_Combine(List, Arr)

    Dim i

    Result_Arr = Array()

    If IsArray(List) And IsArray(Arr) Then

        ReDim Result_Arr(UBound(List) + UBound(Arr) + 1)

        For i = 0 To UBound(List)

            Result_Arr(i) = List(i)

        Next

        For i = 0 To UBound(Arr)

            Result_Arr(i + UBound(List) + 1) = Arr(i)

        Next

    End If

    Array_Combine = Result_Arr

End Function

' 数组切片

Function Array_Slice(List, StartIndex, EndIndex)

    Dim i

    ReDim Result_Arr(EndIndex-StartIndex)

    If StartIndex >= LBound(List) And EndIndex <= UBound(List) Then

        For i = StartIndex To EndIndex

            Result_Arr(i-StartIndex) = List(i)

        Next

    End If

    Array_Slice = Result_Arr

    Result_Arr = Empty

End Function

' 数组包含元素

Function Array_In(List, Item)

    Array_In = CSng(InStr("|" & Join(List, "|") & "|", "|" & Item & "|") > 0)

End Function

' 数组不包含元素

Function Array_Not_In(List, Item)

    Array_Not_In = (Array_In(List, Item) = 0)

End Function

原文地址:http://bbs.anjian.com/showtopic-701961-1.aspx

...全文

相关推荐

STM32制作的贪吃蛇小游戏

STM32F103制作的贪吃蛇小游戏,TFT显示控制,提供源码

咩咩布吉岛

java贪吃蛇小游戏代码java小游戏源码.zip

java贪吃蛇小游戏代码java小游戏源码

探索者我有我路向

java小游戏 贪吃蛇 java小游戏 贪吃蛇

java小游戏 贪吃蛇java小游戏 贪吃蛇java小游戏 贪吃蛇java小游戏 贪吃蛇java小游戏 贪吃蛇java小游戏 贪吃蛇java小游戏 贪吃蛇java小游戏 贪吃蛇java小游戏 贪吃蛇java小游戏 贪吃蛇java小游戏 贪吃蛇java小游戏 贪吃蛇java小游戏 贪吃蛇java小游戏 贪吃蛇java小游戏 贪吃蛇java小游戏 贪吃蛇java小游戏 贪吃蛇java小游戏 贪吃蛇java小游戏 贪吃蛇java小游戏 贪吃蛇java小游戏 贪吃蛇java小游戏 贪吃蛇java小游戏 贪吃蛇java小游戏 贪吃蛇java小游戏 贪吃蛇java小游戏 贪吃蛇java小游戏 贪吃蛇java小游戏 贪吃蛇java小游戏 贪吃蛇java小游戏 贪吃蛇java小游戏 贪吃蛇java小游戏 贪吃蛇java小游戏 贪吃蛇java小游戏 贪吃蛇java小游戏 贪吃蛇java小游戏 贪吃蛇java小游戏 贪吃蛇java小游戏 贪吃蛇java小游戏 贪吃蛇java小游戏 贪吃蛇java小游戏 贪吃蛇java小游戏 贪吃蛇java小游戏 贪吃蛇java小游戏 贪吃蛇java小游戏 贪吃蛇java小

金枝玉叶9

python编写贪吃蛇小游戏

200行代码编写的贪吃蛇,带文件图片,代码备注,用到了pygame等自带的库 初学者练手好项目

qq_42677463

小游戏制作源码

小游戏制作,可以帮助新手快速入门,我们不生产源码,我们只是源码的搬运工

qq_37870465
评论
收藏 已收藏
分享
返回顶部
按键精灵小Q
按键精灵小Q 按键精灵官方账号 按键精灵官方账号
按键精灵小Q 11 成员 188 内容