一、绘制静态窗口

这是一个简陋的窗口

package Snake;import javax.swing.*;public class StartGames {public static void main(String[] args) {//绘制静态窗口JFrame jFrame = new JFrame("初试 Java ");//设置界面大小jFrame.setBounds(10, 10, 1200, 700);jFrame.setResizable(false);jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);jFrame.setVisible(true);}
}

二、绘制游戏面板

main 里面只有画板类,新功能往被显示的类里面加

找到图片资源(路径);将资源显示出来(paintIcon)。

源码放到最后展示

三、画小蛇

3.1 静态的蛇

蛇头的方向;蛇的长度。

3.2 让小蛇动起来

定时器、键盘监听

蛇身体从后往前依次覆盖;加个蛇头随着键盘的输入改变方向。

四、吃东西

吃了后刷新下、判断下头撞身体

代码

1. StartGames

package Snake;import javax.swing.*;public class StartGames {public static void main(String[] args) {System.out.println(System.getProperty("java.class.path"));//绘制静态窗口JFrame jFrame = new JFrame("初试 Java 之贪吃蛇");//设置界面大小jFrame.setBounds(10, 10, 900, 700);jFrame.setResizable(false);jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//将画板加入到JFrame//之后的操作放到画笔类里实现jFrame.add(new GamePanel());jFrame.setVisible(true);}
}

2. GamePanel

package Snake;import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Random;public class GamePanel extends JPanel implements KeyListener, ActionListener { //implements 一个类实现一个接口int N = 1000;int length;boolean isStart = false;int[] snake_X = new int[N], snake_Y = new int[N];String fx;//RLUDTimer timer = new Timer(100, this);int foodx, foody;Random random = new Random();boolean isFile = false;void init(){length = 3;fx = "R";snake_X[0] = snake_Y[0] = 200;snake_X[1] = 175; snake_Y[1] = 200;snake_X[2] = 150; snake_Y[2] = 200;timer.start();foodx = 50 + 25 * random.nextInt(32);foody = 100 + 25 * random.nextInt(22);}GamePanel(){init(); //创建的时候就调用init()this.setFocusable(true); //键盘焦点this.addKeyListener(this); //添加监听}//画板@Override //@Override 注解 这里的意思是重写protected void paintComponent(Graphics g) {super.paintComponent(g); //清屏this.setBackground(Color.white);Data.header.paintIcon(this, g, 20, 20); //画布 笔 x y  画广告栏g.fillRect(50, 100, 800, 550); //游戏区域if(fx == "R") Data.right.paintIcon(this,g,snake_X[0],snake_Y[0]);else if(fx == "L") Data.left.paintIcon(this,g,snake_X[0],snake_Y[0]);else if(fx == "U") Data.up.paintIcon(this,g,snake_X[0],snake_Y[0]);else Data.down.paintIcon(this,g,snake_X[0],snake_Y[0]);for(int i = 1; i < length; ++ i)Data.body.paintIcon(this,g,snake_X[i],snake_Y[i]);Data.food.paintIcon(this,g,foodx,foody);g.setColor(Color.white);g.setFont(new Font("微软雅黑",Font.BOLD,20)); //字体g.drawString("" + length,800,150);//画完静态小蛇后提示用户开始游戏if(isStart == false){//画Stringg.setColor(Color.red);g.setFont(new Font("微软雅黑",Font.BOLD,40)); //字体g.drawString("按下空格开始游戏或暂停游戏",200,300);g.drawString("WSAD为方向",250,400);}if(isFile == true){g.setColor(Color.red);g.setFont(new Font("微软雅黑",Font.BOLD,40)); //字体g.drawString("Game Over",200,300);g.drawString("分数为" + length,250,400);g.drawString("按下空格重新开始",300,500);}}//监听键盘@Overridepublic void keyPressed(KeyEvent e) { //按下 未释放//获取按下的键盘是啥int keyCode = e.getKeyCode();if(keyCode == KeyEvent.VK_SPACE) {if(isFile){isFile = false;init();}else{isStart = !isStart;}repaint();//刷新}else if(keyCode == KeyEvent.VK_W){fx = "U";}else if(keyCode == KeyEvent.VK_S){fx = "D";}else if(keyCode == KeyEvent.VK_A){fx = "L";}else if(keyCode == KeyEvent.VK_D){fx = "R";}}// 定时器@Overridepublic void actionPerformed(ActionEvent e) {if(isStart&& isFile == false){for(int i = length - 1; i > 0; -- i){snake_X[i] = snake_X[i - 1];snake_Y[i] = snake_Y[i - 1];}//UDLRif(fx == "U") snake_Y[0] -=25;else if(fx == "D") snake_Y[0] += 25;else if(fx == "L") snake_X[0] -= 25;else snake_X[0] += 25;if(snake_X[0] > 825) snake_X[0] = 50;if(snake_X[0] < 50) snake_X[0] = 825;if(snake_Y[0] > 625) snake_Y[0] = 100;if(snake_Y[0] < 100) snake_Y[0] = 625;//eat foodif(snake_X[0] == foodx && snake_Y[0] == foody){length ++;//重新生成食物foodx = 50 + 25 * random.nextInt(32);foody = 100 + 25 * random.nextInt(22);}//撞for(int i = 1; i < length; ++ i)if(snake_X[0] == snake_X[i] && snake_Y[0] == snake_Y[i])isFile = true;repaint();}//timer.start();}@Overridepublic void keyTyped(KeyEvent e) { //键盘按下、弹起}@Overridepublic void keyReleased(KeyEvent e) { //释放}
}

3. Data

//用于存放外部数据
package Snake;import javax.swing.*;
import java.net.URL;//用URL获取图片的资源
//public static URL  = Data.class.getResource("/Static/.png");
//public static ImageIcon  = new ImageIcon();
public class Data {//广告栏public static URL headerURL = Data.class.getResource("/Static/header.png"); //通过地址找资源public static ImageIcon header = new ImageIcon(headerURL); //把headerURL放进来//头部public static URL upURL = Data.class.getResource("/Static/up.png");public static URL downURL = Data.class.getResource("/Static/down.png");public static URL leftURL = Data.class.getResource("/Static/left.png");public static URL rightURL = Data.class.getResource("/Static/right.png");public static ImageIcon up = new ImageIcon(upURL);public static ImageIcon down = new ImageIcon(downURL);public static ImageIcon left = new ImageIcon(leftURL);public static ImageIcon right = new ImageIcon(rightURL);//身体public static URL bodyURL = Data.class.getResource("/Static/body.png");public static ImageIcon body = new ImageIcon(bodyURL);//食物public static URL foodURL = Data.class.getResource("/Static/food.png");public static ImageIcon food = new ImageIcon(foodURL);
}

初识Java之贪吃蛇小游戏相关推荐

  1. 简易贪吃蛇小游戏java版_用GUI实现java版贪吃蛇小游戏

    本文实例为大家分享了java版贪吃蛇小游戏的具体代码,供大家参考,具体内容如下 项目结构 新建一个JFrame窗口,作为程序入口 public class GameStart{ public stat ...

  2. Java开发贪吃蛇小游戏

    Java开发贪吃蛇小游戏 文章目录 Java开发贪吃蛇小游戏 一.开发思路 二.具体开发过程 1.绘制静态游戏窗口 2.导入素材图标 3.绘制游戏面板 4.绘制一条静态的小蛇 5.让小蛇动起来 ①监听 ...

  3. 用 Java 实现贪吃蛇小游戏

    程序说明 这是一个用 Java Awt 实现的贪吃蛇小游戏的完整代码 算法分析 (一)启动一个独立线程根据 direction 重绘面板实现蛇身移动效果,运行过程: 记录上次头部的坐标到 tempBo ...

  4. Java实现贪吃蛇小游戏(附完整源码)

    今天我就从零开始来完成这个小游戏,完成的方式也是一步一步的添加功能这样的方式来实现. 第一步完成的功能:写一个界面 大家见到的贪吃蛇小游戏,界面肯定是少不了的.因此,第一步就是写一个小界面. 实现代码 ...

  5. JAVA版贪吃蛇小游戏

    这是一篇关于JAVA的贪吃蛇游戏,源代码的部分在下面正文中介绍,图片和音频的部分都放在百度云盘,需要的自行下载. 文章目录 开发环境 一.下载方法 二.运行效果展示 三.项目结构以及主程序入口 1.项 ...

  6. Java Swing 贪吃蛇小游戏

    静态资源参考: 注:实际上没有用到header.png. 工程目录: 源码: package snake;import javax.swing.*; import java.net.URL;/*** ...

  7. java 实现贪吃蛇小游戏

    在贪吃蛇游戏中,贪吃蛇的移动可以看作是一个先进先出的队列(从蛇尾的角度看),因此我们在C语言实现贪吃蛇小游戏一文中使用了循环链接表作为队来存储蛇身节点,在 python实现贪吃蛇小游戏一文中,使用列表 ...

  8. Java实现贪吃蛇小游戏

    运行效果如下: 新建Yard类 import java.awt.Color; import java.awt.Font; import java.awt.Frame; import java.awt. ...

  9. 【Java】Java实现贪吃蛇小游戏(带详细注释)

    源码 源码来源:Java swing 写的贪吃蛇代码200行 前段时间在博客上看到了这段源码,由于自己没有用Java做过小游戏,于是就copy了一下,然后在自己电脑上运行,顺便加上了注释. 代码 gr ...

最新文章

  1. 为什么要选择html5,5分钟告诉你,为什么要学HTML5大前端
  2. Linux基础命令---sysctl修改内核参数
  3. QListWidget读取本地文件夹中文件并显示名字,双击读取xml数据
  4. python:将32位的16进制数据以二进制/hex/binary的形式写入到文件
  5. PhpStorm 对 AngularJS 的支持
  6. 递归删除文件夹下面所有子文件夹中的.pyc后缀文件
  7. Jakarta EE的拟议命名空间
  8. Linux Kernel File IO Syscall Kernel-Source-Code Analysis(undone)
  9. win7中jar包不能安装的问题
  10. P4171 [JSOI2010]满汉全席
  11. 怎样在Linux中用Vim对文件进行密码保护
  12. 如何改善字幕组同学「为爱发电」的工作环境?
  13. 01-信贷路由项目架构和 rose 框架的搭建
  14. 将vue,H5项目打包成app,apk安装包
  15. Python爬虫下载网易云音乐歌曲
  16. YUV与RGB格式转换
  17. 立创 EDA #学习笔记10# | 常用连接器元器件识别 和 蜂鸣器驱动电路
  18. MySQL中使用SQL统计App的日活,周活,月活,年活
  19. 计算机网络笔记(王道考研) 第三章:数据链路层
  20. 静态页面和动态页面中的静态和动态到底指的是什么

热门文章

  1. Pydicom读取dcm格式视频
  2. 模式识别(Pattern Recognition)学习笔记(三十五)-- K-L变换与PCA
  3. 爬虫学习2.2 使用xpath提取丁香园论坛的回复内容
  4. 台达服务器XML文件,台达BA OPC XML DA使用方法 - 副本.docx
  5. s14.一键安装haproxy脚本
  6. STM32理论 —— 看门狗
  7. 英特尔酷睿11代CPU(TigerLake)在Nvme m.2 ssd下安装系统无法识别硬盘的解决方法
  8. Dell电脑安装系统时看不到固态硬盘的解决方案
  9. cakephp视图用php文件,cakephp
  10. 经纬度计算---已知一点经纬度和距离,计算其他任意点经纬度