【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的同学练习!! 废话不多说 ...
随机推荐
- 4)C语言指针(C自考学习)
指针和指针变量 指针就是地址,地址是一种数据类型.指针变量也是变量,但只能存放地址类型的数据,可以称为"地址型"变量. 1)内存单元和地址 一个程序运行时,程序本身和程序中用到的数 ...
- Java数据结构和算法(六)——前缀、中缀、后缀表达式
前面我们介绍了三种数据结构,第一种数组主要用作数据存储,但是后面的两种栈和队列我们说主要作为程序功能实现的辅助工具,其中在介绍栈时我们知道栈可以用来做单词逆序,匹配关键字符等等,那它还有别的什么功能吗 ...
- Javascript-数值运算 保留小数点位数,并对最后一位小数各种取整方法
今天遇到Javascript数值运算的坑,说到底,还是用得少啊.得多用多敲代码多遇坑. 先介绍以下三个Javascript number取整运算方法. Math.floor() 对一个数退一取整 例: ...
- 记一下flex弹性布局
flex弹性布局也越来越广泛的在我们代码中出现了,更加方便我们的布局.自己用了查,查了用,有些还是记不住,俗话说好脑子不如烂笔头,原来都是写在本子上的,很不幸的一次次的想翻的时候总是找不到,还是写博客 ...
- RGBA 和 opacity的区别
两者都可以设置透明度 区别 RGBA 只影响当前元素 opacity 后代会继承该css 值,暂时还没有办法清除该css 在线演示
- Tp3.2 和 Tp5.0之间的区别
5.0版本和之前版本的差异较大,本篇对熟悉3.2版本的用户给出了一些5.0的主要区别. URL和路由 5.0的URL访问不再支持普通URL模式,路由也不支持正则路由定义,而是全部改为规则路由配合变量规 ...
- UWP 五星好评
var pfn = Package.Current.Id.FamilyName; await Launcher.LaunchUriAsync(new Uri("ms-windows-stor ...
- oracle 数据库中的序列
序列是什么,通俗点说,序列就是按照一定顺序进行排列,序列会自动给你递增,生成唯一的序列号: oracle数据库不同于sqlServer数据库,oracle数据库中是没有自增长列,使用的是sequenc ...
- 数据结构与算法(C/C++版)【串】
第四章<串.数组> (一)串 数据结构中提到的串,即字符串,由 n 个字符组成的一个整体( n >= 0 ).这 n 个字符可以由字母.数字或者其他字符组成.例如,S = &qu ...
- Android 7.1 WindowManagerService 屏幕旋转流程分析 (二)
一.概述 从上篇[Android 7.1 屏幕旋转流程分析]知道实际的旋转由WindowManagerService来完成,这里接着上面具体详细展开. 调了三个函数完成了三件事,即首先调用update ...