说明:这个游戏没有很好的体现出面向对象的编程思想,代码比较凌乱,不是很规范,一个面板类就解决了所有问题。图片做的比较粗糙,但不影响使用。
面板类有各种属性,其中最核心的是由贪吃蛇数组。面板类实现Runnable接口,可以实现重绘,重绘过程中,身体的移动看上去是从前往后的,因此后一个身体的坐标会变成前一个身体的坐标。

//这个逻辑很关键
for(int i=len;i>0;i--){snakex[i]=snakex[i-1];snakey[i]=snakey[i-1];}//当i=1时//snakex[1]=snakex[0]就体现出身体跟着头走的,牵一发动全身。

初始化有一个头,两个身体,身体的移动最终都是尾随着头部的,头部当然会根据当前方向,在画板刷新时移动一个单位。根据以下坐标的变换可以体会出来。

0 0
50 100
75 100头

50 100
75 100
100 100头

75 100
100 100
125 100头

100 100
125 100
150 100头

125 100
150 100
175 100头

150 100
175 100
200 100头

package com.xing.snake;import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Random;import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JPanel;public class Snake {/*** @param args*/public static void main(String[] args) {// TODO Auto-generated method stubJFrame frame=new JFrame();frame.setBounds(400, 200, 900, 720);frame.setResizable(false);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);SnakePanel snakePanel=new SnakePanel();frame.add(snakePanel);frame.setVisible(true);}}class SnakePanel extends JPanel implements KeyListener,Runnable{ImageIcon up =new ImageIcon("images/up.png");ImageIcon down = new ImageIcon("images/down.png");ImageIcon left = new ImageIcon("images/left.png");ImageIcon right = new ImageIcon("images/right.png");ImageIcon title = new ImageIcon("images/title.png");ImageIcon food = new ImageIcon("images/food.png");ImageIcon body = new ImageIcon("images/body.png");int [] snakex=new int[750];int [] snakey=new int[750];Random r=new Random();int foodx=r.nextInt(34)*25+25;int foody=r.nextInt(24)*25+75;int len=3;char direction='R';boolean isStart=false;boolean isGameOver =false;public SnakePanel(){this.setFocusable(true);initSnake();this.addKeyListener(this);Thread t=new Thread(this);t.start();}public void initSnake(){isStart=false;isGameOver=false;len=3;direction='R';snakex[0]=100;snakey[0]=100;snakex[1]=75;snakey[1]=100;snakex[2]=50;snakey[2]=100;}public void paint(Graphics g){this.setBackground(Color.BLACK);g.fillRect(25, 75, 850, 600);title.paintIcon(this, g, 25, 11);if(direction=='U'){up.paintIcon(this, g, snakex[0], snakey[0]);}else if(direction=='D'){down.paintIcon(this, g, snakex[0], snakey[0]);}else if(direction=='L'){left.paintIcon(this, g, snakex[0], snakey[0]);}else if(direction=='R'){right.paintIcon(this, g, snakex[0], snakey[0]);}for(int i=1;i<len;i++){body.paintIcon(this, g, snakex[i], snakey[i]);}if(!isStart){g.setColor(Color.WHITE);g.setFont(new Font("华文仿宋",Font.BOLD,30));g.drawString("请按空格开始游戏", 300, 300);}if(isGameOver){g.setColor(Color.ORANGE);g.setFont(new Font("华文仿宋",Font.BOLD,30));g.drawString("游戏结束", 300, 300);}food.paintIcon(this, g, foodx, foody);}public void keyPressed(KeyEvent e) {// TODO Auto-generated method stub}public void keyReleased(KeyEvent e) {// TODO Auto-generated method stubint keyCode = e.getKeyCode();if(keyCode == KeyEvent.VK_SPACE){if(isGameOver){initSnake();}else{isStart=!isStart;}//repaint(); }else if(keyCode == KeyEvent.VK_UP && direction!='D'){direction = 'U';}else if(keyCode == KeyEvent.VK_DOWN && direction!='U'){direction = 'D';}else if(keyCode == KeyEvent.VK_LEFT && direction!='R'){direction = 'L';}else if(keyCode == KeyEvent.VK_RIGHT && direction!='L'){direction = 'R';}}public void keyTyped(KeyEvent e) {// TODO Auto-generated method stub}public void run(){while(true){if(isStart && !isGameOver){//身体的移动for(int i=len;i>0;i--){snakex[i]=snakex[i-1];snakey[i]=snakey[i-1];}if(direction=='U'){snakey[0]-=25;if(snakey[0]<75){snakey[0]=650;}}else if(direction=='D'){snakey[0]+=25;if(snakey[0]>650){snakey[0]=75;}}else if(direction=='L'){snakex[0]-=25;if(snakex[0]<25){snakex[0]=850;}}else if(direction=='R'){snakex[0]+=25;if(snakex[0]>850){snakex[0]=25;}}}try {Thread.sleep(100);} catch (Exception e) {// TODO: handle exceptione.printStackTrace();}if(snakex[0]==foodx && snakey[0]==foody){len++;foodx=r.nextInt(34)*25+25;foody=r.nextInt(24)*25+75;}for(int i=1;i<len;i++){if(snakex[0]==snakex[i] && snakey[0]==snakey[i]){isGameOver=true;}}repaint();}}}

JAVA贪吃蛇游戏1.0版本相关推荐

  1. Java 贪吃蛇游戏引言

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

  2. 贪吃蛇大作战代码java,贪吃蛇游戏,贪吃蛇java游戏代码讲解

    贪吃蛇游戏,贪吃蛇java游戏代码讲解 来源:互联网 作者:佚名 时间:2020-06-06 贪吃蛇源代码.txt这世界上除了我谁都没资格陪在你身边. 听着,我允许你喜欢我.除了白头偕老,我们... ...

  3. java贪吃蛇游戏代码下载_java实现贪吃蛇游戏代码(附完整源码)

    免费资源网,https://freexyz.cn/ 先给大家分享源码,喜欢的朋友点此处下载. 游戏界面 GUI界面 java实现贪吃蛇游戏需要创建一个桌面窗口出来,此时就需要使用java中的swing ...

  4. 纯C语言实现贪吃蛇游戏(VC6.0)

    转自C语言网 今天笔者为大家展示C语言写的贪吃蛇游戏,让大家玩一玩自己写的游戏~ 是纯C语言哦~VC6.0开发 无问题 首先,开始界面: 游戏界面如下: 代码如下: 笔者VC6.0下编写,测试无问题, ...

  5. 代码生成(Java贪吃蛇游戏如何写)

    贪吃蛇游戏是一个经典的游戏,使用 Java 进行开发是非常合适的.如果您想生成代码,可以按照以下步骤操作: 创建窗口:使用 Java 的 GUI 库,例如 Swing,创建一个窗口. 创建游戏面板:在 ...

  6. Java贪吃蛇游戏(简单粗暴版)

    Java编程贪吃蛇小游戏(简单粗暴版) 2021/7/5 15:15:40 这是自己大一时通过老师讲的Java课程编写的第一个小游戏,从构思到游戏的实现耗时一天,虽然时间不长,但确实从里面学到很多东西 ...

  7. Java 贪吃蛇游戏

    package 贪吃蛇; import java.awt.Color; import java.awt.Font; import java.awt.GradientPaint; import java ...

  8. c语言写贪吃蛇什么水平_C语言实现贪吃蛇游戏(VC6.0)

    #include#include#include#include #define U 1#define D 2#define L 3#define R 4//蛇的状态,U:上 :D:下:L:左 R:右 ...

  9. java贪吃蛇游戏设计,成长路线图

    一.先来解读:23种设计模式要点 1.单例模式(Singleton Pattern) 2.工厂模式 3.抽象工厂模式(Abstract Factory Pattern) 4.模板方法模式(Templa ...

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

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

最新文章

  1. mysql中groupby会用到索引吗_mysql order by 与索引的使用
  2. JavaScript中的nodeName nodeType nodeValue区别
  3. CPU+GPU异构计算完全解析
  4. 如何为libs目录下的jar包关联源代码
  5. 【渝粤题库】广东开放大学 英语语法与基础写作 形成性考核 (2)
  6. Entity Framework Logging and Intercepting Database Operations (EF6 Onwards)
  7. 艾默生变频器ev1000故障代码_国产变频器型号大全,梳理国产变频的前世今生!...
  8. threejs 物体根据相机位置显示_认识Threejs
  9. VALSE学习(十四):自主学习
  10. “ji32k7au4a83”被用作密码的次数不太正常
  11. destoon 支付异步接口文件 notify.php 调试方式
  12. Xilinx FPGA PTP IEEE1588使用
  13. 2015美团校招面试总结
  14. 手机上面正常显示网页大小
  15. C语言程序设计(第三版)何钦铭著 习题5-3
  16. table中填写数据并批量增加
  17. 张一鸣打造“抖音”等现象级产品的秘密:技术深度融合业务,引爆产品创新!
  18. 华硕eeepc 1201N 开启AHCI
  19. python文件写入utf-8_关于utf 8:用Python写入UTF-8文件
  20. 【Designing ML Systems】第 11 章 :机器学习的人性方面

热门文章

  1. FreeRTOS的HOOK,以及(23)FreeRTOS 空闲任务分析
  2. 【Webcam设计】MJPG编码和AVI封装
  3. 解释为什么用梯度下降而不是直接求导数为0的解?
  4. 22 模块:宏伟蓝图
  5. glob-parent Regular expression denial ofservice
  6. C++--第6课 - 专题一经典问题解析
  7. 在 React Native 中使用 Hooks
  8. 更细日期2015年8月18日- Citrix vGPU解决方案注意事项
  9. bootstrapt使用
  10. TCP之keepalive