ArrayList的各种方法addAll(),add(),remove(),clear(),与数组的区别
退出:System.exit(0);
JPanel的paintComponent(Graphics g)方法,有GUI系统调用,或者调用JPanel.repaint()重绘
KeyListener监听按键事件,非数字去方向键为VK_DOWN..数字区方向键为VK_PK_...
Timer time=new Timer(delay,listenr)
time.start()
time.stop()
开启后listener持续监听相应事件,每隔delay段时间刷新
感觉像是写的面向方法的程序,只有一个类和内部类,其余全是方法^^

Snake.java

import java.awt.Color.*;
import javax.swing.*;
import java.awt.*;
import java.util.ArrayList;
import javax.swing.Timer.*;
import java.awt.event.*;
import javax.swing.JComponent.*;
public class Snake{JFrame frame;MyPanel panel;ArrayList<Item> snake;//蛇体Item food;//食物int dir;//行进方向static int UP=-1;static int DOWN=1;static int LEFT=-10;static int RIGHT=10;static int l=10;//长度boolean lose=false;//是否输了int width=300;//待定int height=300;int score=0;//分数int randX=0;//任意选中的x坐标int randY=0;//任意选中的y坐标boolean has;//是否被占用,true则为占用public static void main(String[] args){Snake test=new Snake();test.init();
}//界面初始化public void init(){if(food!=null)food=null;
//protected     snake.removeRange(0,snake.size());snake=new ArrayList<Item>();if(!snake.isEmpty()){dir=0;snake.clear();}if(frame==null)frame=new JFrame();if(panel==null)panel=new MyPanel();if(time.isRunning())time.stop();
//      panel.repaint();
//      snake=new ArrayList<Item>();
//              addFood();food=new Item(13,5);addSnake();panel.addKeyListener(key);panel.setFocusable(true);
//              addFood();
//                panel.repaint();frame.getContentPane().add(panel);
//      frame.addActionListener(listen);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setSize(width,height);frame.setVisible(true);panel.repaint();
}
//获取随机位置public void random(){//  boolean canUse=false;//  int randX;//  int randY;while(true){randX=(int)(Math.random()*28);randY=(int)(Math.random()*29);if(!include(randX,randY)){//  canUse=true;break;}}
}
//位置是否已经被占用,true为被占用public boolean include(int loaX,int loaY){  boolean contain=false;for(Item it:snake){if(it.equals(loaX,loaY)){contain=true;break;}
}if(food.equals(loaX,loaY))contain=true;return contain;}
//吃food,如果has为true表示已经吃到了食物public void eat(Item pos){int x=pos.getX();int y=pos.getY();has=false;if(food.equals(x,y)){has=true;//      food=null;addFood();}
}
//增加snakepublic void addSnake(){random();Item one=new Item(randX,randY); snake.add(0,one);
}
//增加foodpublic void addFood(){score++;random();food=new Item(randX,randY);}
//前进public void forward(int d){Item head=snake.get(0);int x=head.getX()+dir/10;int y=head.getY()+dir%10;System.out.println("forward");head=new Item(x,y);snake.add(0,head);//添加头部eat(head);//判断是否吃到了食物if(!has){//如果没有吃到食物,去掉最后一个itemsnake.remove(snake.size()-1);
}       lose();if(lose==true){System.out.println("start()");lose=false;start();}
}
//JFrame的ActionListenerActionListener listen=new ActionListener(){public void actionPerformed(ActionEvent e){System.out.println("调用ActionPerformed");forward(dir);panel.repaint();//重绘
}
};//刷新频率Timer time=new Timer(230,listen);//KeyListenerKeyListener key=new KeyListener(){public void keyPressed(KeyEvent k){//  System.out.println("引用keyPress");if(k.getKeyCode()==KeyEvent.VK_UP){if(dir!=Snake.DOWN)dir=Snake.UP;
}if(k.getKeyCode()==KeyEvent.VK_DOWN){if(dir!=Snake.UP)dir=Snake.DOWN;
//  }       }if(k.getKeyCode()==KeyEvent.VK_LEFT){if(dir!=Snake.RIGHT)dir=Snake.LEFT;}if(k.getKeyCode()==KeyEvent.VK_RIGHT){if(dir!=Snake.LEFT)dir=Snake.RIGHT;}//  System.out.println("调用forward(dir)");//  System.out.println(dir);//  forward(dir);time.start();//  panel.repaint();
}public void keyReleased(KeyEvent k){}public void keyTyped(KeyEvent k){}};
//重绘class MyPanel extends JPanel{public void paintComponent(Graphics g){//刷新背景 heiseSystem.out.println("调用paintComponent");g.setColor(Color.white);g.fillRect(0,0,this.getWidth(),this.getHeight());       System.out.println(this.getWidth()+"    "+this.getHeight());    //蛇身红色g.setColor(Color.yellow);g.fillRect(290,0,l,this.getHeight());int red=(int)(Math.random()*255);int green=(int)(Math.random()*255);int blue=(int)(Math.random()*255);g.setColor(new Color(red,green,blue));  for(Item items:snake){int posX=items.getX();int posY=items.getY();if(posX>=29){System.out.println("posX大于29,lose=true");lose=true;}if(posX<=0)items.setX(28);if(posY>=29)items.setY(0);if(posY<=0)items.setY(29);//      System.out.println(i+"    "+posY);//待会在设置位置,大小g.fillOval(items.getX()*l,items.getY()*l,l,l);
}//食物为绿色g.setColor(Color.green);int foodX=food.getX();int foodY=food.getY();//同上g.fillOval(foodX*l,foodY*l,l,l);}
}
//判断是否输了  返回true则输了public void lose(){int oneX=snake.get(0).getX();int oneY=snake.get(0).getY();for(int i=1;i<snake.size();i++){if(snake.get(i).equals(oneX,oneY)){System.out.println("你输了!");lose=true;break;
}}System.out.println("lose()"+lose);
}public void start(){int isRestart = JOptionPane.showConfirmDialog(frame,"分数:"+score+" 是否重新开始?", "重新开始", JOptionPane.YES_NO_OPTION);               score=0;if (isRestart == JOptionPane.YES_OPTION) {init();}else{System.exit(0);
}}
//Item类class Item{int xPos;//item的x坐标int yPos;//y坐标public Item(int x,int y){this.xPos=x;this.yPos=y;
}public int getX(){return xPos;
}public int getY(){return yPos;
}public void setX(int x){xPos=x;
}public void setY(int y){yPos=y;
}
//判断两个坐标是否相等,true为相等public boolean equals(int aX,int aY){if((aX==xPos)&&(aY==yPos)){return true;
}else{return false;
}}
}
}

java贪吃蛇(障碍物*咬尾巴)相关推荐

  1. Java 贪吃蛇游戏引言

    欢迎关注公众号: 贪吃蛇小游戏是一款十分经典的小游戏,适合用于新手的练习,花了近两个月的时间,终于可以运行出比较完善的贪吃蛇了,相比于CSDN中的大神,花个几天的时间就可以做出Java版本的贪吃蛇小游 ...

  2. java贪吃蛇课程设计报告_java贪吃蛇课程设计报告().doc

    java贪吃蛇课程设计报告() <Java应用开发> 课程设计报告 题 目: JAVA小游戏 - 贪吃蛇 指导老师: 姓 名: 专 业: 班 级: 日 期: 目 录 一.系统总体设计1 ( ...

  3. 手把手教你做一个Java贪吃蛇小游戏

    大家好,我是孙不坚1208,这篇博客给大家分享一下:如何做一个贪吃蛇小游戏(Java版)的exe应用程序,希望能给需要帮助的朋友带来方便. 手把手教你做一个Java贪吃蛇小游戏的exe应用程序 一.J ...

  4. java贪吃蛇系统架构_java贪吃蛇游戏框架搭建

    java贪吃蛇游戏框根据面向对象的思想建立蛇类.食物类.周围石头类.面板类.控制中心类.监听器类.组建类. Food.java public class Food { //蛇是否吃到了食物方法 pub ...

  5. Java 贪吃蛇 最简易地实现方法 超简短代码实现 (附源码 详解)

      分享一个我刚刚写的贪吃蛇小游戏,非常简短的代码实现方法.这可能是全网最简单实现方法,效果图如下: ps 最新贪吃蛇源码+教学视频+论文下载 java贪吃蛇  有多简短呢 ? 上代码!!   一共四 ...

  6. java贪吃蛇不能回头,儿时回忆!泪流满面,Java 实现贪吃蛇游戏的示例(附代码)...

    image.png image.png java实现贪吃蛇游戏需要创建一个桌面窗口出来,此时就需要使用java中的swing控件 创建一个新窗口 JFrame frame = new JFrame(& ...

  7. java 贪吃蛇 控制台_控制台游戏贪吃蛇Java版

    无心间看到的一个贪吃蛇的控制台小游戏,起初只是想copy下来玩玩,没想里面有不少小问题,就顺手解决,固然仍是不完美,可是也勉强能玩了.java import java.util.LinkedList; ...

  8. Day19-22 2021/10/13-16 JAVA贪吃蛇 全注释版

    Day19-22 2021/10/13-16 贪吃蛇 帧:如果时间足够小 就是动画 键盘监听 定时器 Timer package snale; import javax.swing.*; /*** @ ...

  9. java贪吃蛇博客带图片_java课程设计--贪吃蛇小队博客

    一.团队名称.团队成员介绍.任务分配,团队成员课程设计博客链接(以表格形式呈现) 学号 班级 姓名 任务 201721123103 网络1714 凌俊霄(组长) 蛇体.排行榜(数据库).排错.整体代码 ...

  10. Java贪吃蛇暂停怎么做_Java实现贪吃蛇游戏(1小时学会)

    今天就来拿贪吃蛇小游戏来练练手吧! 贪吃蛇游戏规则: 1.按下空格键(游戏未结束)则游戏暂停或开始: 2.按下空格键(游戏结束后)则游戏重新开始: 3.当贪吃蛇的头部撞到身体时则贪吃蛇死亡(游戏结束) ...

最新文章

  1. 数据库连接类 DB.class.php
  2. python电脑配置要求-1.安装python3.5及电脑环境变量的配置
  3. 第五章--加载内核Kernel.bin
  4. 以太坊(Ethereum ETH)是如何计算难度的
  5. 摇杆控制方向原理_医用无油空压机的送料作用及工作原理
  6. springboot报错---@RunWith(SpringRunner.class)
  7. 信息竞赛进阶指南--最小表示法
  8. Java(enum)枚举用法详解
  9. python3捕获异常_python中异常捕获方法详解
  10. 解决:springcloud eureka 注册的服务config-client 状态Status:UNKNOWN (1)
  11. c++二分答案 之 跳石头
  12. SQL Server 数据文件的页面分部情况
  13. Python入门--文件的读写
  14. 手指滑动控制系统全局音量的程序(上)
  15. 3.21世纪计算机技术展望
  16. java计算机毕业设计ssm拼团旅游系统element 前后端分离
  17. Kmeans算法提升
  18. 2021国考申论三个月学习计划
  19. jqGrid双击事件,并获取双击行的各个属性值
  20. Android 腾讯地图 选点定位,仿微信发送位置

热门文章

  1. 电视机当计算机屏幕,电视机能当显示器吗?电视机是更大更便宜 但真的做不了显示器...
  2. 微信公众平台、微信公众平台.小程序、微信.开放平台三者关系及unionid
  3. 商汤科技招聘全职研究员和实习生
  4. vba九九乘法表代码_用五种方法利用EXCEL制作九九乘法表
  5. 保护信息安全,实名认证该怎么选?
  6. 如何修改PDF文件内容,PDF怎么编辑页眉页脚
  7. Unity3d自学之路(一)
  8. 支付宝调起支付时显示的商家别名如何修改?
  9. java计算机毕业设计网上宠物商店系统源码+系统+数据库+lw文档+mybatis+运行部署
  10. 两点告诉您品牌控价(管控低价乱价)的重要性