用Excel制作贪吃蛇

这篇具有很好参考价值的文章主要介绍了用Excel制作贪吃蛇。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

此文章最先发布于我的博客
废话不多说,先放成果。在GitHub上查看源代码 。

用Excel制作贪吃蛇

开始编写

阅读此教程,你需要了解

  • 什么是VBA,对VBA初步了解

  • 如何在Excel中编辑VBA,并启用它

否则请另行百度。

##最重要的两个函数

RangeCells是整个游戏程序中的核心,它们都能返回一个 表示一个单元格、一行、一列、一个包含单个或若干连续单元格区域的选定单元格范围,或者一个三维区域。(摘自https://docs.microsoft.com/zh-cn/office/vba/api/excel.range(object))

简单来说姐是能帮助我们获取到Excel中的每一个格子,以便我们操作他们的属性。

如以下代码:

Cells(2, 22) = "贪吃蛇撞墙过猛,游戏结束"

获取了y坐标为2x坐标为22的单元格,并设置它的文本。(这里可能和我们平时的认知不太一样,Cells函数是y在前x在后的)

初始化

游戏初始化过程的代码如下:

Option Explicit

'定义贪吃蛇坐标变量
Dim snackX(400) As Integer
Dim snackY(400) As Integer
'定义贪吃蛇坐标引索
Dim snackIndex As Integer
'定义贪吃蛇移动变量
Dim snackMoveX As Integer
Dim snackMoveY As Integer
'苹果坐标
Dim appleX As Integer
Dim appleY As Integer
'游戏是否运行
Dim isGameRunning As Integer

'导入win32API模块
#If VBA7 And Win64 Then
  Private Declare PtrSafe Function GetTickCount Lib "kernel32" () As Long
#Else
  Private Declare Function GetTickCount Lib "kernel32" () As Long
#End If

'工具类函数
Private Sub Sleep(numa As Double)
    Dim num1 As Double
    Dim num2 As Double
    Dim numb As Double
    
    numb = 0
    num1 = GetTickCount
    
    Do While numa - numb > 0
      num2 = GetTickCount
      numb = num2 - num1
      DoEvents
    Loop
End Sub

其中,第一行规定全局的变量必须定义后才可以使用,当然取消后代码也能正确运行,但会存在许多潜在的漏洞。

之后,是贪吃蛇和苹果位置信息的定义,以便我们可以全局使用它。需要注意的是,贪吃蛇坐标变量定义了两个长度为400的整形数组,这是经过了计算的,即贪吃蛇沾满格子的长度。

最后,我们导入了kernel32模块。又利用其中的GetTickCount定义了一个Sleep函数,用于延时,以控制游戏帧数。

游戏基础——画布类

'画布类
Public Sub CanvasClean()
    With Range("B2:S19").Interior
        .Pattern = xlNone
        .TintAndShade = 0
        .PatternTintAndShade = 0
    End With
End Sub

Public Sub CanvasReLoad()
    With Range("A1:T20").Interior
        .PatternColorIndex = xlAutomatic
        .ThemeColor = xlThemeColorLight1
        .TintAndShade = 0
        .PatternTintAndShade = 0
    End With
End Sub

CanvasClean函数,顾名思义,我们用其清理画布的区域。其中,使用Range("B2:S19")获取了Excel中的格子区域(图中框选区域),并将它清空。用Excel制作贪吃蛇

CanvasReLoad中,我们将整个黑框区域恢复原样,及在CanvasClean的基础上,将黑框也重新绘制。

为什么要这么做,给你看个图就知道了:

用Excel制作贪吃蛇

主角——贪吃蛇类

'贪吃蛇类
Private Sub TextBox1_Change()
    Select Case TextBox1.Text
        Case Is = "w"
            If snackMoveY <> 1 Then
                snackMoveY = -1
                snackMoveX = 0
            End If
        Case Is = "s"
            If snackMoveY <> -1 Then
                snackMoveY = 1
                snackMoveX = 0
            End If
        Case Is = "a"
            If snackMoveX <> 1 Then
                snackMoveX = -1
                snackMoveY = 0
            End If
        Case Is = "d"
            If snackMoveX <> -1 Then
                snackMoveX = 1
                snackMoveY = 0
            End If
    End Select
    TextBox1.Text = ""
End Sub

Public Sub snackCreate()
    snackIndex = 3
    Dim i As Integer
    Dim x As Integer
    Dim y As Integer
    x = Int(Rnd * 13) + 3
    y = Int(Rnd * 13) + 3
    For i = 0 To snackIndex
        snackX(i) = x
        snackY(i) = y + i
    Next
End Sub

Public Sub snackMove()
    Dim i As Integer
    For i = snackIndex To 1 Step -1
        snackX(i) = snackX(i - 1)
        snackY(i) = snackY(i - 1)
    Next
    snackX(0) = snackX(0) + snackMoveX
    snackY(0) = snackY(0) + snackMoveY
End Sub

Public Sub snackDraw()
    Dim i As Integer
    For i = 0 To snackIndex
        Cells(snackY(i), snackX(i)).Interior.Color = 255
    Next
End Sub

Public Sub snackHitWall()
    If snackX(0) = 1 Or snackX(0) = 20 Or snackY(0) = 1 Or snackY(0) = 20 Then
        Cells(2, 22) = "贪吃蛇撞墙过猛,游戏结束"
        isGameRunning = 0
    End If
End Sub

Public Sub snackEatApple()
    If snackX(0) = appleX And snackY(0) = appleY Then
        appleCreate
        snackIndex = snackIndex + 1
        Cells(4, 22) = Int(Cells(4, 22).Value) + 1
    End If
End Sub

Public Sub snackHitHimself()
    Dim i As Integer
    For i = 1 To snackIndex
        If snackX(0) = snackX(i) And snackY(0) = snackY(i) Then
            Cells(2, 22) = "贪吃蛇把自己吃了,游戏结束"
            isGameRunning = 0
        End If
    Next
End Sub

如果你熟悉VB,那你一定看出来了,TextBox1_Change是TextBox1中的文本改变时自动调用的一个过程。我们在这里进行判断,已根据WASD的方向键调整贪吃蛇的移动量,最后再将其内容清空,以便下一次检测

其次,就是故名思意了:

  • snackCreate——创建贪吃蛇
  • snackMove——根据贪吃蛇的移动量移动贪吃蛇
  • snackDraw——绘制贪吃蛇
  • snackHitWall——检测贪吃蛇是否撞到墙
  • snackEatApple——检测贪吃蛇是否吃到苹果
  • snackHitHimself——检测贪吃蛇是否把自己吃了

食物——苹果类

'苹果类
Public Sub appleCreate()
    appleX = Int(Rnd * 15) + 3
    appleY = Int(Rnd * 15) + 3
End Sub

Public Sub appleDraw()
    Cells(appleY, appleX).Interior.Color = 100
End Sub

与贪吃蛇基本相同,但简单许多:

  • appleCreate——创建苹果
  • appleDraw——绘制苹果

游戏中的Main函数——游戏类

'游戏类
Public Sub restGame()
    snackMoveY = 0
    snackMoveX = 1
    Cells(2, 22) = "游戏中"
    Cells(4, 22) = 0
End Sub

Public Sub beginGame()
    isGameRunning = 1
    restGame
    
    CanvasReLoad
    
    snackCreate
    appleCreate
    
    Do While isGameRunning = 1
        CanvasClean
        
        appleDraw
        
        snackMove
        snackDraw
        
        snackHitWall
        snackEatApple
        snackHitHimself
        
        Sleep (300)
    Loop
End Sub

Public Sub stopGame()
    isGameRunning = 0
    Cells(2, 22) = "游戏结束"
End Sub

restGame重置游戏,stopGame停止游戏。

beginGame函数的逻辑为。文章来源地址https://www.toymoban.com/news/detail-439997.html

到了这里,关于用Excel制作贪吃蛇的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 使用QT制作贪吃蛇小游戏(含登录注册界面)

    login.h register.h user.h userlist.h widget.h login.cpp main.cpp register.cpp user.cpp userlist.cpp widget.cpp login.ui register.ui widget.ui

    2024年02月13日
    浏览(38)
  • 【Unity】3D贪吃蛇游戏制作/WebGL本地测试及项目部署

    本文是Unity3D贪吃蛇游戏从制作到部署的相关细节 项目开源代码:https://github.com/zstar1003/3D_Snake 试玩链接:http://xdxsb.top/Snake_Game_3D 效果预览: 试玩链接中的内容会和该效果图略有不同,后面会详细说明。 经典贪吃蛇游戏:蛇身随着吃食物的增加不断变长,通过A/D或方向键←→

    2024年02月07日
    浏览(47)
  • 100个Python实战项目(九)制作贪吃蛇游戏(评论抽奖送书)

    💂 个人网站:【海拥】【摸鱼小游戏】【开发文档导航】 🤟 风趣幽默的人工智能学习网站:👉人工智能 💅 想寻找共同学习交流的小伙伴,请点击【全栈技术交流群】 💬 免费且实用的计算机相关知识题库:👉进来逛逛 给大家安利一个免费且实用的 Python 刷题(面经大全

    2024年02月01日
    浏览(67)
  • Python制作AI贪吃蛇,很多很多细节、思路都写下来了!

    前提:本文实现AI贪吃蛇自行对战,加上人机对战,读者可再次基础上自行添加电脑VS电脑和玩家VS玩家(其实把人机对战写完,这2个都没什么了,思路都一样) 1.智能模式:电脑自己玩(自己吃食物) 2.人机对战:电脑和人操作(在上步的基础上加一个键盘控制的贪吃蛇即可

    2024年02月05日
    浏览(44)
  • 强化学习Agent系列(一)——PyGame游戏编程,Python 贪吃蛇制作实战教学

    大家好,未来的开发者们请上座 随着人工智能的发展,强化学习基本会再次来到人们眼前,遂想制作一下相关的教程。强化学习第一步基本离不开虚拟环境的搭建,下面用大家耳熟能详的贪吃蛇游戏为基础,制作一个Agent,完成对这个游戏的绝杀。 万里长城第一步:用pytho

    2024年01月21日
    浏览(62)
  • 通过Python+Selenium获取我的所有文章质量分

    大家好,我是空空star,本篇给大家分享一下 《通过Python+Selenium获取我的所有文章质量分》 。 目前在质量分查询界面只能一篇文章一篇文章查,如果我们想快速知道我们哪些文章质量分不是高质量,手动一篇一篇查太慢,借助Selenium代替手动,快速查出我们所有文章的质量分

    2024年02月16日
    浏览(33)
  • 【通知】我的教学文章《Rust跟我学》已全部上线

    大家好,我是get_local_info开源库作者带剑书生,现在我的《Rust跟我学》专栏文章已全部上线,它记录了我在写库时获得的重要Rust经验和技巧,是不同于《Rust语言编程》等简单实践的书籍。为您节省了学习时间,让您可以快速上手熟悉Rust并进入项目。 具体介绍,请翻看我的上

    2024年01月20日
    浏览(50)
  • 我的OpenAI库发布了!!!

    chatGPT正式发布已经有段时间了,这段时间我也深度体验了chatGPT的魅力。 OpenAI除了提供网页版的chatGPT,还通过api的形式提供了很多其它服务,包括文字纠错、图片生成、音频转换等等。 作为程序员,即使有现成的openai库,但还是免不了想自己造轮子,所以就有这个openai库。

    2023年04月21日
    浏览(29)
  • 宝塔面板快速搭建贪吃蛇小游戏web网站 - 无需云服务器,网站发布上线

    转载自远程内网穿透的文章:Linux使用宝塔面板搭建网站,并内网穿透实现公网访问 宝塔面板作为简单好用的服务器运维管理面板,它支持Linux/Windows系统,我们可用它来一键配置LAMP/LNMP环境、网站、数据库、FTP等,通过Web端轻松管理服务器。 以下教程,我们将演示使用宝塔

    2024年02月05日
    浏览(59)
  • HTML5网页制作 我的心灵小屋

    代码如下:

    2024年02月08日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包