/*
学习javaSE一个月的时间,通过自己学习的知识制作了一个贪吃蛇的小游戏。体验一下学习的过程
控制台贪吃蛇
--------------------------------
| |
| @ |
| # |
| # |
| ### |
| # |
| # |
| |
--------------------------------
至少吃掉一个@,并产生新的@
*/
package EX_0729_容器;
import java.util.ArrayList;
import java.util.EmptyStackException;
import java.util.Random;
class Sneak {
int x;
int y;
//重写构造方法
public Sneak(int x, int y) {
super();
this.x = x;
this.y = y;
}
//重写hashCode equals
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + x;
result = prime * result + y;
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Sneak other = (Sneak) obj;
if (x != other.x)
return false;
if (y != other.y)
return false;
return true;
}
}
public class EngorgeSnake {
public static void main(String[] args) throws InterruptedException {
// TODO Auto-generated method stub
//学习容器的时候要记住一些常用的类和方法,这边用到的容器是用来画出蛇
//开始位置。
ArrayList<Sneak> array = new ArrayList<Sneak>();
array.add(new Sneak(3, 4)); //定义刚开始蛇的位置
array.add(new Sneak(4, 4));
array.add(new Sneak(5, 4));
array.add(new Sneak(5, 5));
array.add(new Sneak(5, 6));
array.add(new Sneak(5, 7));
array.add(new Sneak(6, 7));
array.add(new Sneak(7, 7));
Sneak p = new Sneak(3, 20);
Random random = new Random();
//这边的用到线程和异常处理,培训中老师还没有交到,自己自学过程中有点了解。
for (int i = 0; i < 100; i++) {
//异常处理
try {
Thread.sleep(500);//延迟500毫秒
} catch (EmptyStackException e) {
// TODO: handle exception
e.getCause();
}
//判断蛇移动有规律,后面一个都是以前面一个相等,
//所以只要删除第最后一个,,更改第一个就可以。后面都是相等的,
array.remove(array.size() - 1);
array.add(0, new Sneak(array.get(0).x, array.get(0).y + 1));
print(array, p);
if (p.equals(array.get(array.size() - 1))) {
array.add(p);
p = new Sneak(random.nextInt(10) + 1, random.nextInt(37) + 1);
}
}
}
//定义方法,通过不断的在控制台上不断是输出,从而引起的贪吃蛇的移动。
private static void print(ArrayList<Sneak> array, Sneak p) {
for (int i = 0; i < 12; i++) {
for (int j = 0; j < 40; j++) {
if (i == 0 || i == 11) {
System.out.print("-");
} else if (j == 0 | j == 39) {
System.out.print("|");
} else {
Sneak pr = new Sneak(i, j);
if (array.contains(pr)) {
System.out.print("#");
} else if (pr.equals(p)) {
System.out.print("@");
} else {
System.out.print(" ");
}
}
}
System.out.println();
}
}
}