【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的同学练习!! 废话不多说 ...
随机推荐
- 三种读取HashMap的方式
package com.biubiu.entity; import java.util.Collection; import java.util.HashMap; import java.util.I ...
- JSON Web Tokens(JWT)
现在API越来越流行,如何安全保护这些API? JSON Web Tokens(JWT)能提供基于JSON格式的安全认证.它有以下特点: JWT是跨不同语言的,JWT可以在 .NET, Python, ...
- Android TextView属性大全
android:ems 设置TextView的宽度为N个字符的宽度. android:maxems 设置TextView的宽度为最长为N个字符的宽度.与ems同时使用时覆盖ems选项.android: ...
- set 利用lower_bound实现key索引
set中数据类型为结构体T,T中有两个成员key和val定义如下: struct T{ int key,val; T(int k,int v):key(k),val(v){} bool operato ...
- 高并发场景 LVS 安装及高可用实现
1.1 负载均衡介绍 1.1.1 负载均衡的妙用 负载均衡(Load Balance)集群提供了一种廉价.有效.透明的方法,来扩展网络设备和服务器的负载.带宽.增加吞吐量.加强网络数据处理能力.提高网 ...
- c# winform 窗体之间的传参
说起winform程序中窗体之间的参数互传,大家找度娘会找到很多方法: 1.在窗体类中创建全局变量,类型为公开.静态的: 2.在窗体类中定义狗仔函数: 3.通过实践来船体参数: 这三种思路完全来自于霖 ...
- 机器学习算法 - 支持向量机SVM
在上两节中,我们讲解了机器学习的决策树和k-近邻算法,本节我们讲解另外一种分类算法:支持向量机SVM. SVM是迄今为止最好使用的分类器之一,它可以不加修改即可直接使用,从而得到低错误率的结果. [案 ...
- Java基础(二)-static关键字分析
static关键字是我们在编程中经常会使用到的,但有些可能只知其然而不知其所以然.下面介绍static关键字的作用再通过例子结合说明. static关键字共有五种作用(先说明static所修饰的不会改 ...
- P1092 虫食算
题目传送:https://www.luogu.org/problem/show?pid=1092 #include <iostream> #include <cstring> ...
- 算法训练 K好数
算法训练 K好数 时间限制:1.0s 内存限制:256.0MB 问题描述 如果一个自然数N的K进制表示中任意的相邻的两位都不是相邻的数字,那么我们就说这个数是K好数.求L位K进制数中K好数 ...