分享一个我刚刚写的贪吃蛇小游戏,非常简短的代码实现方法。这可能是全网最简单实现方法,效果图如下:

ps 最新贪吃蛇源码+教学视频+论文下载 java贪吃蛇

 有多简短呢 ? 上代码!!

  一共四个类!

Food类

package com.snake;import java.awt.Color;
import java.awt.Graphics;
import java.awt.Point;public class Food {//食物也是一个长宽各为20的小格子public Point point=null;    public final int width=20;public final int height=20;public Food(Point p) {this.point=p;}public void drawFood(Graphics g) {g.setColor(Color.RED);g.fillRect(this.point.x, this.point.y, this.width, this.height);}}

Snake类

package com.snake;import java.awt.Color;
import java.awt.Graphics;
import java.awt.Point;public class Snake {public Point point=null; //一直蛇其实就是一个小格子public  final int width=20;public  final int height=20;public Snake(Point p) {this.point=p;}public void drawSnake(Graphics g) {g.setColor(Color.black);g.fillRect(this.point.x,this.point.y, this.width,this.height);}}

面板

【面板就四个方法,下面会附完整代码,这里缩进代码看的更直观!】

主类是一个窗口

package com.snake;import java.awt.Graphics;import javax.swing.JFrame;public class Game_Frame extends JFrame {public final static int  width=400;public  final static int  height=400;  Game_Panel myPanel=null;public static void main(String[] args) {new    Game_Frame();}public Game_Frame() {this.setTitle("贪吃蛇---作者:See---qq:3492625357");this.setSize(width, height);this.setVisible(true);this.setLocationRelativeTo(null);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);Game_Panel myPanel=new Game_Panel();this.add(myPanel);new Thread(myPanel).start();}
}

什么 !? 没了?  

对,没了。 

解释一下代码实现,Snake 和 Food  其实就是一个长宽各为20像素的小正方形。窗口大小为400*400,相当于400个小正方形。

面板里用上下左右控制小蛇的移动(黑色格子),移动效果(加头,去尾)当小蛇和Food(红色格子)相撞时,则增加一个长度。(前面加,后面不去尾)。当蛇头与身子相撞(最前面的黑色小格子与其他黑色小格子相撞)则宣布游戏结束。

再听我这么一解释,是不是觉得So TMD easy!  

写程序就是要想到什么就写什么,写错了大不了删除再来嘛,只要你敢写,就没有实现不了的方法。

下面附面板完整代码

package com.snake;import java.awt.Graphics;
import java.awt.Point;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.LinkedList;
import java.util.Random;
import javax.swing.JOptionPane;
import javax.swing.JPanel;public class Game_Panel extends JPanel implements Runnable,KeyListener{public int DRIECTION=38;//刚开始的时候 让小蛇向上移动public boolean alive=true;//判断小蛇是否死亡的Random ran=new Random();//用来产生Food 的随机坐标 LinkedList<Snake> snake=new LinkedList<Snake>();Food food=new Food(new Point(ran.nextInt(Game_Frame.width/20)*20,ran.nextInt(Game_Frame.height/20)*20));public Game_Panel() {snake.add(new Snake(new Point(180,180)));//初始化一个蛇头this.addKeyListener(this);this.setFocusable(true);}public void  paint(Graphics g) {for(int i=0;i<this.snake.size();i++) {this.snake.get(i).drawSnake(g);}this.food.drawFood(g);validate();}public void Snake_Move() { //控制蛇的移动if(alive)  { //当小蛇活着的时候 移动  死了就不动了switch(this.DRIECTION) {case 37:  snake.add(new Snake(new Point(snake.getLast().point.x-20,snake.getLast().point.y)));if(snake.getLast().point.x<0) //当小蛇超过窗口范围则从另一边出来,下面同理snake.getLast().point.x=Game_Frame.width-snake.getLast().width;break;case 39:  snake.add(new Snake(new Point(snake.getLast().point.x+20,snake.getLast().point.y)));if(snake.getLast().point.x==Game_Frame.width) snake.getLast().point.x=0;break;case 38:snake.add(new Snake(new Point(snake.getLast().point.x,snake.getLast().point.y-20)));if(snake.getLast().point.y<0)snake.getLast().point.y=Game_Frame.height-snake.getLast().height;break;case 40:snake.add(new Snake(new Point(snake.getLast().point.x,snake.getLast().point.y+20)));if(snake.getLast().point.y==Game_Frame.height)snake.getLast().point.y=0;break;default: ;  }if(changeSize()) snake.removeFirst();    //如果遇到食物,则不删除第一个结点}}public boolean changeSize() {//当蛇的格子和食物相撞时 ,为falseif(snake.getLast().point.equals(food.point)){food.point.x=ran.nextInt(Game_Frame.width/20)*20;food.point.y=ran.nextInt(Game_Frame.height/20)*20;return false;}else return true;}public void dead() { //小蛇死亡的条件   当头与身相撞的时候宣布死亡for(int i=0;i<this.snake.size()-1;i++) {if(this.snake.getLast().point.equals(this.snake.get(i).point)) {alive=false;//终止线程//如果小蛇死了,则弹出对话框    JOptionPane.showMessageDialog(this, "oh,I'm sorry,you dead!!", "GAME--OVER", JOptionPane.WARNING_MESSAGE);//Thread.currentThread().stop();//当小蛇死了线程终止  //stop(),不用这个方法}
}
}public void run() {//调用这些方法while(alive) {//如果小蛇活着则循环,否则终止循环即结束线程// dead();//changeSize();Snake_Move();//changeSize();dead();repaint();try {Thread.sleep(500);} catch (InterruptedException e) {e.printStackTrace();}}}public void keyPressed(KeyEvent e) {//键盘控制上下左右移动//System.out.println(e.getKeyCode());   //经过测试 37 38 39 40  65 87 68 83分别为键盘的左上右下 awdsswitch (e.getKeyCode()) {case 37:this.DRIECTION=37; //左break;case 38:this.DRIECTION=38;//上break;case 39:this.DRIECTION=39;//右break;case 40:this.DRIECTION=40;   //下break;/*  case 65://本来准备用wsad和上下左右一起控制小蛇的移动的,但是徒增麻烦没有必要this.DRIECTION=37; //左break;case 87:this.DRIECTION=38;//上break;case 68:this.DRIECTION=39;//右break;case 83:this.DRIECTION=40;   //下break;*/default: ;   }}@Overridepublic void keyReleased(KeyEvent arg0) {// TODO Auto-generated method stub}public void keyTyped(KeyEvent arg0) {// TODO Auto-generated method stub}}

【因为代码简短所以视觉上感觉一般,你可以再此基础上加一些元素,比如 蛇的图片,音乐,颜色效果等等。总之核心部分就是这么简单!  If you feel nice,call me!】q:3492625357

Java 贪吃蛇 最简易地实现方法 超简短代码实现 (附源码 详解)相关推荐

  1. java游戏下载象棋暗棋_JS小游戏之象棋暗棋源码详解

    本文实例讲述了JS小游戏的象棋暗棋源码,分享给大家供大家参考.具体如下: 游戏运行后如下图所示: Javascript 部分: /** chinese chess * Author: fdipzone ...

  2. (十三)Java工具类StringUtils中strip、stripStart、stripEnd剥离方法源码详解

    1. strip方法源码解析 public static String strip(String str){return strip(str, null);} 源码解析:调用strip方法,参数是字符 ...

  3. java的数组与Arrays类源码详解

    java的数组与Arrays类源码详解 java.util.Arrays 类是 JDK 提供的一个工具类,用来处理数组的各种方法,而且每个方法基本上都是静态方法,能直接通过类名Arrays调用. 类的 ...

  4. Java源码详解之NameValuePair

    Java源码详解之NameValuePair NameValuePair仅仅是一个接口. 1. 类释义 /*** A name / value pair parameter used as an el ...

  5. java的String类源码详解

    java的String类源码详解 类的定义 public final class Stringimplements java.io.Serializable, Comparable<String ...

  6. 【java】LinkedList1.8源码详解

    目录 前言 概要 属性 构造方法 核心方法 get(int index) set(int index, E element) add(int index, E element) addAll(Coll ...

  7. 【JAVA秘籍心法篇-Spring】Spring XML解析源码详解

    [JAVA秘籍心法篇-Spring]Spring XML解析源码详解 所谓天下武功,无坚不摧,唯快不破.但有又太极拳法以快制慢,以柔克刚.武功外式有拳打脚踢,刀剑棍棒,又有内功易筋经九阳神功.所有外功 ...

  8. java源码详解——String类

    java源码详解--String类目录: Java String 类 下面开始介绍主要方法: Java charAt() 方法 Java compareTo() 方法 int compareTo(St ...

  9. java计算机毕业设计ssm基于Vue的二手商品交易网站z40n1(附源码、数据库)

    java计算机毕业设计ssm基于Vue的二手商品交易网站z40n1(附源码.数据库) 项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webstor ...

最新文章

  1. TypeError: Total() missing 1 required positional argument: ‘self‘
  2. 举例讲解EFS的加密技巧
  3. java数组长度怎么求,含答案解析
  4. android listview 不显示_Android使用ExpandableListview实现时间轴
  5. 我的小程序入门笔记(一)目录结构
  6. 大数据之实时数据分析之Apache Doris数据库
  7. think-cell中类别或系列标签在多个图表中未对齐
  8. 保护心灵窗口——防蓝光软件f.lux
  9. delphi pi怎么得到?
  10. 服务器打包文件命令,nuxt构建项目打包部署服务器二(打包部署)
  11. java中math中的指数是,java指数运算math
  12. UnicodeDecodeError: 'rawunicodeescape' codec can't decode bytes in position 80-81: truncated \UXXX
  13. 你知道低代码BPM平台吗?
  14. C语言:L1-054 福到了 (15 分)
  15. tomcat下webapps目录里ROOT文件删除掉一招恢复
  16. 夜深人静写算法(三十一)- 欧拉函数
  17. MathJax笔记-精简打印版
  18. Python 虚拟环境
  19. 华为管理学案例分析_以华为为案例分析KPI管理系统
  20. java 虚拟打印机_纯java虚拟打印机

热门文章

  1. dispose 模式 java_C#使用Dispose模式实现手动对资源的释放
  2. 微信开发学习日记(七):开源微商城wemall
  3. 黄聪:wordpress后台加载ajax.googleapis.com导致打开速度很慢的解决方案
  4. 关于ansys及其套件(可集成)的安装避坑指南
  5. http://blog.csdn.net/sidely/article/details/49818911
  6. 4个永久关闭电脑弹窗的方法,99%的人都不知道!
  7. tms tck_通过TCK许可条款对WebSocket JSR提出的担忧
  8. file.delete无法删除文件解决
  9. Darknet自带的tracker跟踪功能
  10. 【腾讯Bugly干货分享】React Native项目实战总结