看到同学说贪吃蛇 心想自己能不能做个
后面就弄成这个样了 简化版 没学GUI 只能弄个控制台版的
蛇在在程序中就是由一系列的节点组成的,每个节点都记录了对应的坐标
public class Node{
private int i;//坐标点
private int j;//坐标点
public Node(int i,int j){
this.i=i;
this.j=j;
}
坐标的getter和setter属性省略
重写hashCode 和Equals方法
}
蛇类
public class Worm{
private LinkedList<Node> nodes=new LinkedList<>();//蛇在程序中的原型由n个节点组成
private int dir;//蛇要行走的方向
public static final int UP=-10;//上方向
public static final int DOWN =10;//下方向
public static final int LEFT=-1;//左方向
public static final int RIGHT=1;//右方向
public Worm(){
nodes.add(new Node(3,9));
nodes.add(new Node(4,9));
nodes.add(new Node(5,9));
nodes.add(new Node(5,10));
nodes.add(new Node(5,11));
nodes.add(new Node(6,11));
nodes.add(new Node(7,11));
dir=RIGHT;//设置默认行走方向
}
//走一步
public void step(){
Node head=nodes.getFirst();//获取头节点
int i=head.getI()+dir/10;
int j=head.getJ()+dir%10;
head=new Node(i,j);
nodes.addFirst(head);
nodes.removeLast();
}
//指定方向后走一步
public void step(int dir){
if(this.dir+dir==0){
throw new RuntimeException("不能掉头行驶");
}
this.dir=dir;
step();
}
//判断指定的坐标点是否是蛇身的一部分
public boolean contains(int i,int j){
return nodes.contains(new Node(i,j));
}
}
蛇面板(它具有打印到控制台功能,并且指定了面板的大小)
public class WormPane {
private Worm worm=null;//蛇类
public WormPane(){
worm=new Worm();//初始化蛇
}
public WormPane(Worm worm){
this.worm=worm;
}
public Worm getWorm() {
return worm;
}
public void setWorm(Worm worm) {
this.worm = worm;
}
private int rows=10;//行数
private int cols=32;//列数
//打印方法
public void print(){
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
if(i==0 && j<cols){//当是第一行是打印-
System.out.print("-");
}else if(j==0 || j==cols-1){//每一行的行首和行尾打印|
System.out.print("|");
}else if(worm.contains(i, j)){//如果当前坐标是蛇身的一部分就打印#
System.out.print("#");
}
else if(i==rows-1 && j<cols){//如果是最后一行就打印-
System.out.print("-");
}else{
System.out.print(" ");//什么情况都不是的时候打印空格
}
}
System.out.println();//打印一行换一行
}
}
}
在主函数里让程序执行
public static void main(String[] args) {
final WormPane pane=new WormPane();//创建一个面板对象
final Worm worm=pane.getWorm();//从面板对象中获取到蛇对象
Scanner sc=new Scanner(System.in);
while(true){
pane.print();//调用面板对象的方法把图案打印出来
//System.out.println(worm);
String dir=sc.nextLine();//让用户控制蛇行走方向
if(dir.equalsIgnoreCase("u")){
worm.step(Worm.UP);//当用户输入u时让蛇往上走
}else if(dir.equalsIgnoreCase("d")){
worm.step(Worm.DOWN);//当用户输入d时让蛇往下走
}else if(dir.equalsIgnoreCase("l")){
worm.step(Worm.LEFT);//当用户输入L时让蛇往左走
}else if(dir.equalsIgnoreCase("r")){
worm.step(Worm.RIGHT);//当用户输入r时让蛇往右走
}else if(dir.equalsIgnoreCase("q")){
System.out.println("Byte");//当用户输入q时推出程序
break;
}else{
worm.step();//如果用户什么也不输入就回车就让蛇按默认方向行走
}
}
}
|