【java】控制台实现贪吃蛇小游戏-LinkedList、Scanner
package com.myproj.snake;
public class Node {
private int i,j;
public Node(){}
public Node(int i, int j) {
super();
this.i = i;
this.j = j;
}
public int getI() {
return i;
}
public void setI(int i) {
this.i = i;
}
public int getJ() {
return j;
}
public void setJ(int j) {
this.j = j;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + i;
result = prime * result + j;
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Node other = (Node) obj;
if (i != other.i)
return false;
if (j != other.j)
return false;
return true;
}
}
Node.java
package com.myproj.snake;
import java.util.LinkedList;
public class Snake {
private LinkedList<Node> nodes=new LinkedList<Node>();
public static final int UP=-5;
public static final int DOWN=5;
public static final int LEFT=-1;
public static final int RIGHT=1;
private int dir;//当前方向;
public Snake(){
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));
this.dir=RIGHT;
}
public boolean contains(int i,int j){
return nodes.contains(new Node(i,j));
}
public void move(){
nodes.removeLast();
Node head=nodes.getFirst();
int i=head.getI()+dir/5;
int j=head.getJ()+dir%5;
nodes.addFirst(new Node(i,j));
}
public void move(int dir){
if(this.dir+dir==0){
System.out.println("不能逆向行驶!");
System.out.println("游戏终止!");
System.exit(0);
}
this.dir=dir;
move();
}
}
Snake.java
package com.myproj.snake;
public class SnakePan {
private Snake snake=new Snake();
public Snake getSnake() {
return snake;
}
public void setSnake(Snake snake) {
this.snake = snake;
}
public void paint(){
for(int i=0;i<=15;i++){
for(int j=0;j<=40;j++){
if(i==0||i==15){
System.out.print("-");
}else if(j==0||j==40){
System.out.print("|");
}else if(snake.contains(i,j)){
System.out.print("■");
}else{
System.out.print(" ");
}
}
System.out.println();
}
}
}
SnakePan
package com.myproj.snake;
import java.util.Scanner;
public class SnakeTest {
public static void main(String[] args){
SnakePan snakePan=new SnakePan();
Snake snake=snakePan.getSnake();
snakePan.paint();
/*for(int i=0;i<10;i++){
snakePan.paint();
snake.move();
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}*/
Scanner scanner=new Scanner(System.in);
System.out.println("请输入方向【上(U)、下(D)、左(L)、右(R)】:");
while(true){
String dir=scanner.nextLine();
if(dir.equalsIgnoreCase("U")){
snake.move(snake.UP);
}else if(dir.equalsIgnoreCase("D")){
snake.move(snake.DOWN);
}else if(dir.equalsIgnoreCase("L")){
snake.move(snake.LEFT);
}else if(dir.equalsIgnoreCase("R")){
snake.move(snake.RIGHT);
}else{
System.exit(0);
}
snakePan.paint();
}
}
}
SnakeTest.java
【java】控制台实现贪吃蛇小游戏-LinkedList、Scanner的更多相关文章
- Java GUI学习,贪吃蛇小游戏
JAVA GUI练习 贪吃蛇小游戏 前几天虽然生病了,但还是跟着狂神学习了GUI的方面,跟着练习了贪吃蛇的小项目,这里有狂神写的源码点我下载,还有我跟着敲的点我下载,嘿嘿,也就注释了下重要的地方,这方 ...
- C++ 简单的控制台贪吃蛇小游戏
由于比较懒,所以不怎么写,觉得这样不应该.我应该对自己学的做出整理,不管是高端低端,写出来是自己的. // 贪吃蛇.cpp : 定义控制台应用程序的入口点. // #include "std ...
- 用GUI实现java版贪吃蛇小游戏
项目结构 新建一个JFrame窗口,作为程序入口 public class GameStart{ public static void main(String[] args) { JFrame jFr ...
- 贪吃蛇小游戏-----C语言实现
1.分析 众所周知,贪吃蛇游戏是一款经典的益智游戏,有PC和手机等多平台版本,既简单又耐玩.该游戏通过控制蛇头方向吃食物,从而使得蛇变得越来越长,蛇不能撞墙,也不能装到自己,否则游戏结束.玩过贪吃蛇的 ...
- JS高级---案例:贪吃蛇小游戏
案例:贪吃蛇小游戏 可以玩的小游戏,略复杂,过了2遍,先pass吧 先创建构造函数,再给原型添加方法.分别创建食物,小蛇和游戏对象. 食物,小蛇的横纵坐标,设置最大最小值,运动起来的函数,按上下左右键 ...
- Java 用java GUI写一个贪吃蛇小游戏
目录 主要用到 swing 包下的一些类 上代码 游戏启动类 游戏数据类 游戏面板类 代码地址 主要用到 swing 包下的一些类 JFrame 窗口类 JPanel 面板类 KeyListener ...
- Java贪吃蛇小游戏
贪吃蛇 思路 首先构思游戏布局,计算合理的坐标系. 绘制静态数据(广告.初始小蛇.提示信息.棋盘) 添加键盘监听事件,改变游戏状态以及小蛇运动方向 添加定时器,让小蛇在一段时间内移动一定的距离 随机产 ...
- 一个控制台贪吃蛇小游戏(wsad控制移动)
/******************************************** * 程序名称:MR.DUAN 的贪吃蛇游戏(链表法) * 作 者:WindAutumn <flutti ...
- html5面向对象做一个贪吃蛇小游戏
canvas加面向对象方式的贪吃蛇 2016-08-25 这个小游戏可以增加对面向对象的理解,可以加强js逻辑能力,总之认真自己敲一两遍收获还是不少啊!!适合刚学canvas的同学练习!! 废话不多说 ...
随机推荐
- python PIL图像处理
新建图像 # 三个参数分别代表图像的模式:常用的为RGB(3通道) .RGBA(4通道为透明通道,0为完全透明, 256为不透明) # 第二个参数为图像的长宽参数 # 第三个为默认的填充颜色,RGB时 ...
- php 的开发工具
通过上篇我们已经配置好了php的开发环境,我们就可以在这个模拟的环境下运行我们编写的php代码了. 在编写代码前,先安装一个自己喜欢的代码编辑器. 1.sublime text Sublime Tex ...
- JS的数据类型及转换(还是基础的东西)
朋友说我这是再自娱自乐,我只想说,你说的对
- Elasticsearch java api 基本搜索部分详解
文档是结合几个博客整理出来的,内容大部分为转载内容.在使用过程中,对一些疑问点进行了整理与解析. Elasticsearch java api 基本搜索部分详解 ElasticSearch 常用的查询 ...
- Ztree改版 - 将图标字体化 - fontAwesome
引言 ps:小白可以一看,大神勿打~ 用过 ztree 的盆友们都知道,ztree 功能强大,就功能上来说,追求着“无处不按钮”的体验,但好用不好看.可能有朋友说:“我这棵树只有我自己看,够用就行” ...
- 当使用javac编译源文件时,如何查找import导入的类
当编写一个java源代码文件时,此文件通常被称为编译单元(有时也被称为转移单元).每个编译单元都必须有一个后缀名.java,而在编译单元内则可以有一个public类,该类的名称必须与文件名称一致.每个 ...
- Python函数篇(3)-内置函数、文件处理
1.内置函数 上一篇文章中,我重点写了reduce.map.filter3个内置函数,在本篇章节中,会补充其他的一些常规内置函数,并重点写max,min函数,其他没有说明的函数,会在后面写到类和面向对 ...
- hdu 3829 Cat VS Dog 二分匹配 最大独立点集
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3829 题目大意: 给定N个猫,M个狗,P个小朋友,每个小朋友都有喜欢或者不喜欢的某猫或者某狗 管理员从 ...
- HDU3792---Twin Prime Conjecture(树状数组)
Twin Prime Conjecture Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Ot ...
- Chrome浏览器读写系统剪切板
IE浏览器支持直接读写剪切板内容: window.clipboardData.clearData(); window.clipboardData.setData('Text', 'abcd'); 但是 ...