当前位置:编程学习 > JAVA >>

Java 编写 贪吃蛇游戏的 大体思路是什么?

答案:楼主没有看到蛇移动的本质,蛇虽然是分成很多块,但他们还是一个整体,每一块的移动都和上一块有关,所以不需要对每一块都进行判断。
原理:
把蛇身体的每一块看成一个对象(对象存储该块的坐标和相关信息),作为节点存储在线性链表中,再设置一个变量标志蛇的方向(通过按键可以改变)。一般人都是让每一个节点等于他指向的下一个节点,并让头节点改变位置来实现转弯和移动,这个算法复杂度太高(O(n)),实际上只要做两步操作,插入一个头节点,删除一个尾节点就可以了,新插入的头节点位置根据蛇当前的方向决定 用一个数组将蛇头的行径记录下来,然后第二段的下一个方格设置为蛇头走过的方格,这样子蛇走过的路径都是前一段走过的,最后将跟着蛇头走了,比如
蛇身的路径
for(int i=snakeLength-1;i>0;i--){
rows[i]=rows[i-1];//依次将蛇前面一段走过行的路段赋值给蛇的下一段
cols[i]=cols[i-1];//依次将蛇前面一段走过列的路段赋值给蛇的下一段
}
for(int i=1;i<snakeLength;i++){
gamePanel[rows[i]][cols[i]].setBackground(Color.red);//将整个面板上蛇身走过的行和列设置为不同的颜色,当然可以用图片来设置
}
蛇头走过的行和列(rows[0],cols[i])要根据不同的方向加减1来将面板设置成不同的颜色
如gamePanel[rows[i]-1][cols[i]+1].setBackground(Color.red)
要代码和jar包我这有,思路我就大概讲一下:首先是要在画布上画上一个块,这就是蛇头,但是蛇是会变长的,所以需要用一个东西来存蛇,那就可以用数组、ArrayList、LinkedList、等等(我比较喜欢用LinkedList),这里虽然说的是蛇,其实是一个块的x、y坐标,蛇是画好了,但蛇是会动的,这就要用一个线程和一个move()方法了,让它不停的动,蛇是动了,但是没有方向,这时需要一个方法让它有方向,但要注意的是相反的方向不能改变方向(也就是按了上,按下就不能用了),蛇有方向又能动,但到边上了就不行了,这时就要让它出界结束游戏,接下来就是要出现食物了,食物这个好办,用一个随机数搞定它,注意食物不能在界外,食物有了,蛇就要去吃它了,这时就要用一个方法去吃食物了,吃到了让蛇长一个块,食物重新出现,蛇是长大了,但是它可以碰到自己的身体,那么你就要做了方法让它碰到后结束游戏,就这样最初步的思路搞定了。接下来的就是一些细节了,这就不说了。

上一个:请问java如何实现多个标题栏的下拉菜单?
下一个:急求Java计算器源程序(带详细备注的)

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,