21_贪食蛇游戏.ppt
文本预览下载声明
21 贪食蛇游戏 程序设计基础 本节目标 本节课即将学习 贪食蛇游戏实现原理 MVC 设计模式 贪食蛇游戏 16-1 游戏规则 方向键控制黑色小蛇前进 碰到四周的墙壁、自己的身体游戏结束 只能前进、左转、右转,向回走会碰到自己,立即 “死亡” 蛇头经过红色的食物,会吃掉食物;每次吃掉食物,得一分,蛇的长度会增加一节 贪食蛇游戏 16-2 游戏原理 Snake角色,是黑色的一个小方块,代表蛇身体的一节,蛇身是由多节组成的;通过Snake角色的“图章”功能来绘制蛇身 Eraser 角色,是白色的一个小方块,大小和Snake角色相同;其颜色和背景色相同,利用Eraser 角色的“图章”功能可擦除蛇身 food角色,是红色的一个小方块,代表食物,大小和Snake角色相同 贪食蛇游戏 16-3 Snake 角色代码 蛇是本游戏的主角,其实现方式是游戏设计的核心 其设计可分为模型和视图两部分 模型负责蛇的内部数据表示 视图负责蛇的界面显示 贪食蛇游戏 16-4 Snake 角色代码 蛇的模型 蛇身由多节组成,每节在屏幕上都有一个坐标(x,y) 用链表 listX, listY 代表蛇身体每节的坐标位置, listX 存放横坐标x, listY 存放纵坐标y,两个链表长度相等 如果蛇身长4节,则listX, listY 的长度都是4 蛇身长度增加一节,通过在listX, listY 中各增加一个数据来实现 蛇身前进一步:根据前进方向,确定蛇头要进入的位置的坐标,假如是(x1,y1),那么将x1插入到listX的第一项,将y1插入到listY的第一项,然后删除listX, listY 的最后一项就可以了 贪食蛇游戏 16-5 Snake 角色代码 蛇的视图 通过将 snake 角色移到链表listX, listY中每个元素对应的位置绘制图章,就可以逐节绘制蛇身 右边代码就完成上述功能 贪食蛇游戏 16-6 Snake 角色代码 为了提高效率,并不需要每次都要绘制整个蛇身 程序开始时绘制完整的蛇身 以后每次前进,只有蛇头和蛇尾发生变化,因此只要绘制新的蛇头,擦除原来的蛇尾就可以了 右边代码实现绘制蛇头,变量 headX和headY代表蛇头的横坐标和纵坐标 贪食蛇游戏 16-7 eraser角色代码,实现擦除蛇尾 程序开始时,角色隐藏 链表 listX, listY代表蛇身体每节的坐标位置 收到“清除尾格”消息后,将链表 listX, listY最后元素取出,得到蛇尾即蛇身体最后一节的坐标,将角色移动到蛇尾位置,利用图章功能,将蛇尾一节绘制为背景色,实现视图中蛇尾被擦除一节的效果。删除链表 listX, listY最后元素,从模型中删除蛇尾 变量i是局部变量,可以避免使用全局变量可能导致的和其他角色脚本的冲突 贪食蛇游戏 16-8 Snake 角色代码 变量 direct 代表蛇前进的方向:0-向上;1-向右;2-向下;3-向左 右边代码实现通过上下左右方向键来改变蛇前进的方向 贪食蛇游戏 16-9 Snake 角色代码 主控程序 1、绘制游戏区域边框 2、得分清0,建立snake链表模型listX,listY, 绘制蛇完整身体 3、将游戏开始标志变量running设置为1 贪食蛇游戏 16-10 Snake 角色代码 主控程序 4、重复执行,进入游戏 1)前进一步,根据前进方向修改蛇头坐标headX,headY,如果蛇头碰到边框或蛇身,将变量running设为0 2)如果running为0显示游戏结束,程序停止 3)否则,将新的蛇头坐标插入链表listX, listY第一项 贪食蛇游戏 16-11 Snake 角色代码 主控程序 4、重复执行,进入游戏 4)绘制蛇头 5)如果蛇头和食物位置相同,广播吃掉食物消息,使食物food角色改变到新位置出现。这样因为蛇头增长,蛇身变长一节 6)否则,广播清除尾格消息,擦除蛇尾,抵消蛇头增长的一节,使蛇身长度不变,但前进一步 贪食蛇游戏 16-12 Snake 角色代码 绘制边框消息处理程序 绘制边长为60的绿色正方形,正方形中心在(0,0) 贪食蛇游戏 16-13 Snake 角色代码 游戏准备消息处理程序 得分清0 链表 listX,listY 清空 方向向上 插入10个坐标到listX,listY,代表初始长度为10节的蛇身,(0,9) (0,8) (0,7)…(0,0) 绘制完整蛇身 贪食蛇游戏 16-14 Snake 角色代码 前进一步消息处理程序 1)根据前进方向修改蛇头坐标 2)如果蛇头碰到边框,即坐标绝对值等于30,将变量running设为0,代表游戏结束 贪食蛇游戏 16-15 Snake 角色代码 前进一步消息处理程序 3)检查蛇头位置是否与某一节蛇身位置重合,如果是,则将变量r
显示全部