1. package com.myproj.snake;
  2.  
  3. public class Node {
  4. private int i,j;
  5. public Node(){}
  6. public Node(int i, int j) {
  7. super();
  8. this.i = i;
  9. this.j = j;
  10. }
  11.  
  12. public int getI() {
  13. return i;
  14. }
  15.  
  16. public void setI(int i) {
  17. this.i = i;
  18. }
  19.  
  20. public int getJ() {
  21. return j;
  22. }
  23.  
  24. public void setJ(int j) {
  25. this.j = j;
  26. }
  27. @Override
  28. public int hashCode() {
  29. final int prime = 31;
  30. int result = 1;
  31. result = prime * result + i;
  32. result = prime * result + j;
  33. return result;
  34. }
  35. @Override
  36. public boolean equals(Object obj) {
  37. if (this == obj)
  38. return true;
  39. if (obj == null)
  40. return false;
  41. if (getClass() != obj.getClass())
  42. return false;
  43. Node other = (Node) obj;
  44. if (i != other.i)
  45. return false;
  46. if (j != other.j)
  47. return false;
  48. return true;
  49. }
  50.  
  51. }

Node.java

  1. package com.myproj.snake;
  2.  
  3. import java.util.LinkedList;
  4.  
  5. public class Snake {
  6. private LinkedList<Node> nodes=new LinkedList<Node>();
  7. public static final int UP=-5;
  8. public static final int DOWN=5;
  9. public static final int LEFT=-1;
  10. public static final int RIGHT=1;
  11. private int dir;//当前方向;
  12. public Snake(){
  13. nodes.add(new Node(3,9));
  14. nodes.add(new Node(4,9));
  15. nodes.add(new Node(5,9));
  16. nodes.add(new Node(5,10));
  17. nodes.add(new Node(5,11));
  18. nodes.add(new Node(6,11));
  19. nodes.add(new Node(7,11));
  20. this.dir=RIGHT;
  21. }
  22. public boolean contains(int i,int j){
  23. return nodes.contains(new Node(i,j));
  24. }
  25. public void move(){
  26. nodes.removeLast();
  27. Node head=nodes.getFirst();
  28. int i=head.getI()+dir/5;
  29. int j=head.getJ()+dir%5;
  30. nodes.addFirst(new Node(i,j));
  31. }
  32. public void move(int dir){
  33. if(this.dir+dir==0){
  34. System.out.println("不能逆向行驶!");
  35. System.out.println("游戏终止!");
  36. System.exit(0);
  37. }
  38. this.dir=dir;
  39. move();
  40. }
  41. }

Snake.java

  1. package com.myproj.snake;
  2.  
  3. public class SnakePan {
  4. private Snake snake=new Snake();
  5. public Snake getSnake() {
  6. return snake;
  7. }
  8. public void setSnake(Snake snake) {
  9. this.snake = snake;
  10. }
  11. public void paint(){
  12. for(int i=0;i<=15;i++){
  13. for(int j=0;j<=40;j++){
  14. if(i==0||i==15){
  15. System.out.print("-");
  16. }else if(j==0||j==40){
  17. System.out.print("|");
  18. }else if(snake.contains(i,j)){
  19. System.out.print("■");
  20. }else{
  21. System.out.print(" ");
  22. }
  23. }
  24. System.out.println();
  25. }
  26. }
  27. }

SnakePan

  1. package com.myproj.snake;
  2.  
  3. import java.util.Scanner;
  4.  
  5. public class SnakeTest {
  6. public static void main(String[] args){
  7. SnakePan snakePan=new SnakePan();
  8. Snake snake=snakePan.getSnake();
  9. snakePan.paint();
  10. /*for(int i=0;i<10;i++){
  11. snakePan.paint();
  12. snake.move();
  13. try {
  14. Thread.sleep(1000);
  15. } catch (InterruptedException e) {
  16. // TODO Auto-generated catch block
  17. e.printStackTrace();
  18. }
  19. }*/
  20.  
  21. Scanner scanner=new Scanner(System.in);
  22. System.out.println("请输入方向【上(U)、下(D)、左(L)、右(R)】:");
  23. while(true){
  24. String dir=scanner.nextLine();
  25. if(dir.equalsIgnoreCase("U")){
  26. snake.move(snake.UP);
  27. }else if(dir.equalsIgnoreCase("D")){
  28. snake.move(snake.DOWN);
  29. }else if(dir.equalsIgnoreCase("L")){
  30. snake.move(snake.LEFT);
  31. }else if(dir.equalsIgnoreCase("R")){
  32. snake.move(snake.RIGHT);
  33. }else{
  34. System.exit(0);
  35. }
  36. snakePan.paint();
  37. }
  38. }
  39. }

SnakeTest.java

【java】控制台实现贪吃蛇小游戏-LinkedList、Scanner的更多相关文章

  1. Java GUI学习,贪吃蛇小游戏

    JAVA GUI练习 贪吃蛇小游戏 前几天虽然生病了,但还是跟着狂神学习了GUI的方面,跟着练习了贪吃蛇的小项目,这里有狂神写的源码点我下载,还有我跟着敲的点我下载,嘿嘿,也就注释了下重要的地方,这方 ...

  2. C++ 简单的控制台贪吃蛇小游戏

    由于比较懒,所以不怎么写,觉得这样不应该.我应该对自己学的做出整理,不管是高端低端,写出来是自己的. // 贪吃蛇.cpp : 定义控制台应用程序的入口点. // #include "std ...

  3. 用GUI实现java版贪吃蛇小游戏

    项目结构 新建一个JFrame窗口,作为程序入口 public class GameStart{ public static void main(String[] args) { JFrame jFr ...

  4. 贪吃蛇小游戏-----C语言实现

    1.分析 众所周知,贪吃蛇游戏是一款经典的益智游戏,有PC和手机等多平台版本,既简单又耐玩.该游戏通过控制蛇头方向吃食物,从而使得蛇变得越来越长,蛇不能撞墙,也不能装到自己,否则游戏结束.玩过贪吃蛇的 ...

  5. JS高级---案例:贪吃蛇小游戏

    案例:贪吃蛇小游戏 可以玩的小游戏,略复杂,过了2遍,先pass吧 先创建构造函数,再给原型添加方法.分别创建食物,小蛇和游戏对象. 食物,小蛇的横纵坐标,设置最大最小值,运动起来的函数,按上下左右键 ...

  6. Java 用java GUI写一个贪吃蛇小游戏

    目录 主要用到 swing 包下的一些类 上代码 游戏启动类 游戏数据类 游戏面板类 代码地址 主要用到 swing 包下的一些类 JFrame 窗口类 JPanel 面板类 KeyListener ...

  7. Java贪吃蛇小游戏

    贪吃蛇 思路 首先构思游戏布局,计算合理的坐标系. 绘制静态数据(广告.初始小蛇.提示信息.棋盘) 添加键盘监听事件,改变游戏状态以及小蛇运动方向 添加定时器,让小蛇在一段时间内移动一定的距离 随机产 ...

  8. 一个控制台贪吃蛇小游戏(wsad控制移动)

    /******************************************** * 程序名称:MR.DUAN 的贪吃蛇游戏(链表法) * 作 者:WindAutumn <flutti ...

  9. html5面向对象做一个贪吃蛇小游戏

    canvas加面向对象方式的贪吃蛇 2016-08-25 这个小游戏可以增加对面向对象的理解,可以加强js逻辑能力,总之认真自己敲一两遍收获还是不少啊!!适合刚学canvas的同学练习!! 废话不多说 ...

随机推荐

  1. 4)C语言指针(C自考学习)

    指针和指针变量 指针就是地址,地址是一种数据类型.指针变量也是变量,但只能存放地址类型的数据,可以称为"地址型"变量. 1)内存单元和地址 一个程序运行时,程序本身和程序中用到的数 ...

  2. Java数据结构和算法(六)——前缀、中缀、后缀表达式

    前面我们介绍了三种数据结构,第一种数组主要用作数据存储,但是后面的两种栈和队列我们说主要作为程序功能实现的辅助工具,其中在介绍栈时我们知道栈可以用来做单词逆序,匹配关键字符等等,那它还有别的什么功能吗 ...

  3. Javascript-数值运算 保留小数点位数,并对最后一位小数各种取整方法

    今天遇到Javascript数值运算的坑,说到底,还是用得少啊.得多用多敲代码多遇坑. 先介绍以下三个Javascript number取整运算方法. Math.floor() 对一个数退一取整 例: ...

  4. 记一下flex弹性布局

    flex弹性布局也越来越广泛的在我们代码中出现了,更加方便我们的布局.自己用了查,查了用,有些还是记不住,俗话说好脑子不如烂笔头,原来都是写在本子上的,很不幸的一次次的想翻的时候总是找不到,还是写博客 ...

  5. RGBA 和 opacity的区别

    两者都可以设置透明度 区别 RGBA 只影响当前元素 opacity 后代会继承该css 值,暂时还没有办法清除该css 在线演示

  6. Tp3.2 和 Tp5.0之间的区别

    5.0版本和之前版本的差异较大,本篇对熟悉3.2版本的用户给出了一些5.0的主要区别. URL和路由 5.0的URL访问不再支持普通URL模式,路由也不支持正则路由定义,而是全部改为规则路由配合变量规 ...

  7. UWP 五星好评

    var pfn = Package.Current.Id.FamilyName; await Launcher.LaunchUriAsync(new Uri("ms-windows-stor ...

  8. oracle 数据库中的序列

    序列是什么,通俗点说,序列就是按照一定顺序进行排列,序列会自动给你递增,生成唯一的序列号: oracle数据库不同于sqlServer数据库,oracle数据库中是没有自增长列,使用的是sequenc ...

  9. 数据结构与算法(C/C++版)【串】

    第四章<串.数组> (一)串   数据结构中提到的串,即字符串,由 n 个字符组成的一个整体( n >= 0 ).这 n 个字符可以由字母.数字或者其他字符组成.例如,S = &qu ...

  10. Android 7.1 WindowManagerService 屏幕旋转流程分析 (二)

    一.概述 从上篇[Android 7.1 屏幕旋转流程分析]知道实际的旋转由WindowManagerService来完成,这里接着上面具体详细展开. 调了三个函数完成了三件事,即首先调用update ...