易码技术论坛

 找回密码
 加入易码
搜索
查看: 4154|回复: 36

[演示] 求贪食蛇游戏算法

[复制链接]
发表于 2008-10-9 15:22:25 | 显示全部楼层 |阅读模式
本人刚学编程,想做自己的游戏,,求大侠们指点下食蛇游戏算法
发表于 2008-10-9 18:18:41 | 显示全部楼层
链表。
实现一个链表,每个节点记录如下信息:
该节点的位置(x,y)

实现正常的链表功能,如下使用则可以完成贪吃蛇:
1.吃到果子的时候,就是在链表头添加一个节点(位置为果子的位置)。
2.每帧蛇都向前走一格,实际做法是在链表头添加一个节点(该帧蛇头要走的位置),然后删除链表最后一个节点。
3.判断蛇有没有咬到自己,时间是遍历链表,将链表头与后面的所有节点进行比较,如果相同就是撞到一起了。
4.绘制蛇,实际是遍历链表,按每个节点的信息在屏幕上绘制蛇的头、尾。

编辑下

[ 本帖最后由 Alanwywy 于 2008-10-28 12:09 编辑 ]
发表于 2008-10-9 20:53:31 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2008-10-9 21:14:07 | 显示全部楼层
要限制长度只需要,添加一个链表的方法,以获取链表的长度。

如果要检测撞墙,就添加一个方法,获取链表头的位置,并返回是否越界。
发表于 2008-10-9 23:10:07 | 显示全部楼层
何必那么麻烦
用数组
简单就是美
越简单越可靠
发表于 2008-10-9 23:17:47 | 显示全部楼层
说是说链表,但是可以是以数组做的链表。
发表于 2008-10-9 23:28:01 | 显示全部楼层
判断是否和自己相撞,如果采用历遍似乎不合理。
其实只要建立一个显示蛇的专有图层,在蛇头即将运动的下一坐标处判断该坐标是否是黑色,即可。就是用GetPoint函数,可以判断有无黑点。若在缓冲区作图,可以用getblock代替,但是稍显麻烦。
发表于 2008-10-9 23:45:09 | 显示全部楼层
当然如此,楼主说他是新手,我就用了个非常简单的pc上绝对够速度的方法咯。
这方法比较直观,几乎都是围绕这链表这数据来处理的。

如果要优化,方法就多了。只是我自己也知道的很少。
发表于 2008-10-9 23:58:31 | 显示全部楼层
恩,如果脱离星星,我的那个算法就几乎没有价值了。
发表于 2008-10-10 00:05:58 | 显示全部楼层
嗯,新手恐怕对链表操作一无所知吧。
还是数组好,在手机上速度也上得去。
发表于 2008-10-10 00:08:29 | 显示全部楼层
问题的关键还是在于你用的什么硬件运行。
发表于 2008-10-10 09:33:15 | 显示全部楼层
手机上用链表和数字的运行速度不会差很远吧,我觉得都是n的时间复杂度啊。难道我想错了……

话说,不是有种链表就是数组做的么。。。
数据结构是必学啦, 如果是用vc++或者java,还有容器直接可用。

[ 本帖最后由 Alanwywy 于 2008-10-10 10:15 编辑 ]
发表于 2008-10-10 13:35:40 | 显示全部楼层
链表占用空间大,而且读第n个元素,必须从头开始,所以速度比数组慢

[ 本帖最后由 leesoft 于 2008-10-10 13:37 编辑 ]
 楼主| 发表于 2008-10-20 10:53:33 | 显示全部楼层
用数组怎么做。。。????
发表于 2008-10-27 21:37:11 | 显示全部楼层
循环队列就可以……用上位运算更快
发表于 2008-10-27 22:32:50 | 显示全部楼层
舍近求远。
 楼主| 发表于 2008-10-29 09:22:29 | 显示全部楼层
有没有们老大告诉我数组怎么做呀.....
详细呀....
发表于 2008-11-12 18:32:45 | 显示全部楼层
用一组一维数组记录每节蛇身的坐标,注意,蛇身长度请多定义一个字节,并保证蛇身后面的数据都为0,再用一组二维数据记录地图,地图中用0表示空格,用1表示食物,用2表示障碍,
然后对地图与地图进入判断
 楼主| 发表于 2008-11-13 14:57:18 | 显示全部楼层
谢谢.....
'然后对地图与地图进入判断'
什么意思??
发表于 2008-11-20 06:26:25 | 显示全部楼层
你可以定义数组Map来表示地图。然后定义一个数组比如Snake表示蛇,这样蛇的数组只要记录坐标,比如10×10的地图里面,Map有11×11=121个字节容量来记录地图信息。
把最外面的那一圈全部设置成墙壁。(这样可以在以后判断是否到达边界的时候处理方便些)比如蛇是2,果子是3,墙是1,空白的地方就是0。
然后根据蛇的第二节和第一节的位置关系判断蛇行进的方向,然后看看蛇头所在的下一个格子是不是有墙或者蛇的身体,如果有就是碰壁了,就GameOver。你还可以通过把Snake的数据向前移动来表示蛇的行进(因为蛇身总是跟着蛇头移动的)。
如果玩家控制了蛇头的移动方向,就把表示蛇头的Snake[0]所在的坐标变更,这样就可以了。

不知道我说的够不够明白呢?

---------------------
PS:本人已死,现在跑出来复活一下……
您需要登录后才可以回帖 登录 | 加入易码

本版积分规则

Archiver|手机版|小黑屋|EMAX Studio

GMT+8, 2024-4-27 07:48 , Processed in 0.012026 second(s), 19 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表