java_ EngorgeSnake

/*

学习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();

}

}

}

时间: 2024-10-27 02:48:11

java_ EngorgeSnake的相关文章

java_时间戳与Date_相互转化

1.时间戳的定义 时间戳是指文件属性里的创建.修改.访问时间. 数字时间戳技术是数字签名技术一种变种的应用.在电子商务交易文件中,时间是十分重要的信息.在书面合同中,文件签署的日期和签名一样均是十分重要的防止文件被伪造和篡改的关键性内容.数字时间戳服务(DTS:digital time stamp service)是网上电子商务安全服务项目之一,能提供电子文件的日期和时间信息的安全保护. 编辑本段组成部分 时间戳(time-stamp)是一个经加密后形成的凭证文档,它包括三个部分:  (1)需加

java_在JFrame上使用自定義圖片

package drawImage;import java.awt.Graphics;import java.awt.Graphics2D;import java.awt.Image;import java.io.File;import java.io.IOException;import javax.imageio.ImageIO;import javax.swing.JFrame;import javax.swing.JPanel;public class DrawImage extends

java_ 集合

集合类说明及区别Collection├List│├LinkedList│├ArrayList│└Vector│ └Stack└SetMap├Hashtable├HashMap└WeakHashMap Collection接口 Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素(Elements).一些Collection允许相同的元素而另一些不行.一些能排序而另一些不行.Java SDK不提供直接继承自Collection的类,Ja

java_自定義一個List(類似ArrayList)

TestMain.java package listTest;public class TestMain {    public static void main(String[] args){        MyList<String> myList = new MyList<>();        myList.add("1");        myList.add("2");        myList.add("3"

[JAVA_开课吧资源]第一周 Java语言概述、Java语言基础

主题一 Java语言概述 » JDK介绍及其基本组件 Sun公司利用Java开发工具箱(Java Development Toolkit ,JDK)发布Java的各个版本.JDK由开发和测试Java程序的独立程序集组成,它们都从命令行调用. [请点击查看更多内容 转自51CTO.com] » 使用CMD开发运行Java程序 代码文件的拓展名必须为.java,并且文件名应该与类的类名完全相同.编译一个程序是指使用编译器将源代码翻译成java字节码.下面的命令用来编译源代码文件welcome.jav

【Java_项目篇&lt;1&gt;】--JAVA实现坦克大战游戏--赋予敌人行动和攻击(五)

前期相关文章 [Java_项目篇<1>]–JAVA实现坦克大战游戏–画出坦克(一) [Java_项目篇<1>]–JAVA实现坦克大战游戏–坦克移动+添加敌方坦克(二) [Java_项目篇<1>]–JAVA实现坦克大战游戏–坦克发射子弹(三) [Java_项目篇<1>]–JAVA实现坦克大战游戏–子弹连发+爆炸效果(四) 一.任务需求 赋予敌人行动和攻击. 二.思路 - 敌人行动 1.需要把EnemyTank做成线程类实现Runnable接口. run方法中,

Java_观察者模式(Observable和Observer) -转

原文地址: Java_观察者模式(Observable和Observer) 一.观察者模式介绍    在Java中通过Observable类和Observer接口实现了观察者模式.一个Observer对象监视着一个Observable对象的变化,当Observable对象发生变化时,Observer得到通知,就可以进行相应的工作    如果画面A是显示数据库里面的数据,而画面B修改了数据库里面的数据,那么这时候画面A就要重新Load.这时候就可以用到观察者模二.观察者模式实现方法    java

[JAVA_开课吧资源]第五周 I/O操作、多线程、网络编程技术

主题一 I/O操作 » 流的概念 在面向对象语言中, 数据的输入和输出都是通过数据流来实现的.数据流是一组有顺序.有起点和终点的字符集合.就好比是两个不同的池子,一个池子中存满了水,而另一个池子中则没有任何的东西,在这两个水池中安放一个管子,水就可以从一个池子流向另一个池子了.在从一个池子向另一个池子输送水的过程中,水扮演的角色就是数据流. [请点击查看更多内容 转自文章] » Stream stream代表的是任何有能力产出数据的数据源,或是任何有能力接收数据的接收源.在Java的IO中,所有

java_查找符合的文件。

package IOtest;import java.io.File;public class TestFile {    //in linux    private File foder = new File("/home/eblly");        TestFile(){        find(foder);        System.out.println("============END!============");    }    public