一个月没有写博客,中间其实学了不少东西,因为是自学,所以进度很慢,同时在看Java核心技术还有李刚的疯狂Java,这两本书讲的很详细,另外也学着看一点源代码。特别是IO流的部分,类太多让人比较晕,一连学了快一个星期,看了一点源代码,最后才缕清了思路。
之前学到list,发现这个ArrayList真是一个好东西,不用像数组一样预先要声明空间大小,可以动态的增长和缩减,可以保存任意类型的引用数据类型,当然基本数据类型可以自动拆装箱,所以也很方便。那一天学着学着突然福至心灵(没错就是这样),随手写了一个贪吃蛇,因为那一天在看内部类,匿名内部类这些知识。
最开始的版本,就是一个控制台程序,思路是创建一个贪吃蛇类,贪吃蛇类里面有一个节点内部类,模拟贪吃蛇是有很多节点组成的,然后有一个食物类,只要保存食物的坐标系就好了。游戏流程是:贪吃蛇在一个范围内游走寻找食物,“吃”到食物后就将自身增加一个节点,当贪吃蛇吃满屏幕或者撞到障碍物(蛇自己和墙壁)游戏结束。
首先要实现蛇的运动,其实就是改变蛇的每一个节点的坐标,蛇头往某一个方向前进一步(上下左右),蛇头后面一个节点的坐标更新为原来蛇头的坐标,第三节坐标更新成第二节的,第n节坐标更新为n-1节的坐标,这样蛇就移动啦,当然你也可以改进这个思路,比如蛇前进就在蛇的头节点前面增加一个节点,尾巴减少一个节点,减少一点运算量,当初没有想到,就用了最野蛮的一种方法,看官老爷见谅。
那么蛇怎么吃东西呢?也很简单,分为三部分:1.检测到食物 2.蛇吃食物 3.刷新食物坐标 具体的实验细节,检测食物其实就是当蛇头部坐标和食物坐标重合的时候,我们认为找到了食物; 而吃到食物就是蛇这个类内部增加一个节点类对象,具体来说就是ArrayList 里面添加一个 节点对象; 刷新食物坐标只要用到random类就好了,但是注意的点是食物不能刷新到蛇身上去。
最后检测蛇有没有撞到自己那就要遍历蛇身每一个坐标了,检测蛇头坐标有没有和蛇身重合,如果有那就是游戏结束,如果
没有游戏继续。以上主要分析给第一次写贪吃蛇的看官老爷听,实现的代码如下:
1.蛇简化版本:
package com.ycs.LinkList;
import java.util.ArrayList;
import java.util.Scanner;
public class Snake {
/**
* 成员变量
* x:当前头部 x 坐标
* y:当前头部 y 坐标
* length:蛇的长度
* len:蛇能活动的区域长度
* width:蛇能够活动的区域宽度
* pace:蛇每