一、实现效果

1.空格暂停,
2.上下左右控制方向
3.长度会随着食物的吃下而增加
4.定时刷新
5.累计长度和分数等等。

具体视频演示效果和教程点击跳转

二、实现思路:

1.定义所一个功能的数据

2.绘制这个功能的需要的图形

3.添加监听这个功能需要的事件(帧率事件)

键盘,鼠标,

三、实现代码

1.Data 初始化需要的图片

2.StartGame 主要实现窗口的加载,和添加GamePanel面板到窗口。

3.GamePanel 最重要的实现部分,包括:

3.1 定义需要的数据
3.2 绘制图像
3.3 实现事件监听

Data.java (加载图片使用)

package GUI.Swing.贪吃蛇;import javax.swing.*;//数据中心,图片
public class Data {//此处用来初始话图片public static String headerUrl = "D:/Program Files/JetBrains/test1/Lab/static/贪吃蛇/header.png";public static String bodyUrl = "D:/Program Files/JetBrains/test1/Lab/static/贪吃蛇/body.png";public static String downUrl = "D:/Program Files/JetBrains/test1/Lab/static/贪吃蛇/down.png";public static String foodUrl = "D:/Program Files/JetBrains/test1/Lab/static/贪吃蛇/food.png";public static String leftUrl = "D:/Program Files/JetBrains/test1/Lab/static/贪吃蛇/left.png";public static String rightUrl = "D:/Program Files/JetBrains/test1/Lab/static/贪吃蛇/right.png";public static String upUrl = "D:/Program Files/JetBrains/test1/Lab/static/贪吃蛇/up.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 ImageIcon header = new ImageIcon(headerUrl);public static ImageIcon body = new ImageIcon(bodyUrl);public static ImageIcon food = new ImageIcon(foodUrl);}

StartGame.java (加载窗口和添加游戏面板)

package GUI.Swing.贪吃蛇;import javax.swing.*;/*** 游戏的主要启动类:*/
public class StartGame {public StartGame() {//simple FrameJFrame frame = new JFrame("开始界面");frame.setBounds(100, 100, 900, 720);frame.setResizable(false);//窗口大小不能改变,不然游戏变形frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);frame.setVisible(true);//一般的游戏都会放到面板上,frame.add(new GamePanel());}public static void main(String[] args) {new StartGame();}
}

GamePanel.java (主要的实现类,数据,画图,事件帧)

package GUI.Swing.贪吃蛇;import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.util.Random;/*** 游戏的面板* //绘制面板,游戏中所有的东西都可用这个东西来画*/
public class GamePanel extends JPanel implements ActionListener {/*** 一、定义数据:*/int length;int[] snakeX = new int[600];//定义snake的x坐标int[] snakeY = new int[600];//定义蛇的Y坐标String direction;//方向boolean isStart;//暂停效果//定时器 100msTimer timmer = new Timer(100, this);//食物的坐标int foodX;int foodY;/*问题:有2个 ,random 使用 util 包下的Random*/Random random = new Random();boolean isFail = false; //判断死亡int score;//累计分数/*** 构造方法.* 三、事件监听和键盘监听* 的键盘监听.*/public GamePanel() {init();//构造器里面调用init()方法。//给Panel添加键盘监听=====================问题,添加失败,试试 设置是否获取焦点this.setFocusable(true);this.addKeyListener(new KeyAdapter() {@Overridepublic void keyPressed(KeyEvent e) {System.out.println(e.getKeyChar());if (e.getKeyCode() == KeyEvent.VK_SPACE) {isStart = !isStart;//暂停效果,取反if (isFail) {isFail = false;}repaint();//刷新}//小蛇头的图片的转化if (e.getKeyCode() == KeyEvent.VK_UP) {direction = "up";} else if (e.getKeyCode() == KeyEvent.VK_DOWN) {direction = "down";} else if (e.getKeyCode() == KeyEvent.VK_LEFT) {direction = "left";} else if (e.getKeyCode() == KeyEvent.VK_RIGHT) {direction = "right";}}});//给panel 添加定时器,/*新建一个线程,然后让他在while里循环,通过Thread.sleep(100)的方法来休眠线程。*/timmer.start();//游戏一开始定时器就启动}//初始化数据public void init() {length = 3;snakeX[0] = 100;snakeY[0] = 100;//第一个头header的坐标snakeX[1] = 75;snakeY[1] = 100;//第2 body的坐标snakeX[2] = 50;snakeY[2] = 100;//第3 body的坐标direction = "right";isStart = false;foodX = 25 + random.nextInt(34) * 25;foodY = 75 + random.nextInt(24) * 25;}/*** 二、绘制图形** @param g*/@Overridepublic void paint(Graphics g) {Data.header.paintIcon(this, g, 25, 11);//广告栏g.fillRect(25, 75, 850, 600);//矩形面板。this.setVisible(true);this.setBackground(new Color(139, 168, 20));//小蛇的头图片转化if (direction == "right") {Data.right.paintIcon(this, g, snakeX[0], snakeY[0]);} else if (direction == "left") {Data.left.paintIcon(this, g, snakeX[0], snakeY[0]);} else if (direction == "up") {Data.up.paintIcon(this, g, snakeX[0], snakeY[0]);} else if (direction == "down") {Data.down.paintIcon(this, g, snakeX[0], snakeY[0]);}//把小蛇body画上去,使用的组件,画笔,x,y 位置。for (int i = 1; i < length; i++) {Data.body.paintIcon(this, g, snakeX[i], snakeY[i]);}if (isStart == false) {g.setColor(new Color(255, 255, 255));g.setFont(new Font("微软雅黑", Font.BOLD, 40));g.drawString("按下空格开始游戏", 300, 300);}//把食物画上去Data.food.paintIcon(this, g, foodX, foodY);//把 isFail的面板画上去,并得出分数if (isFail) {g.setColor(new Color(195, 68, 106));g.setFont(new Font("微软雅黑", Font.BOLD, 80));g.drawString("GAME OVER ", 200, 180);g.setFont(new Font("微软雅黑", Font.BOLD, 40));g.drawString("YOUR SCORE IS: " + score, 260, 400);}//把积分画上去g.setColor(new Color(255, 255, 255));g.setFont(new Font("微软雅黑", Font.CENTER_BASELINE, 18));g.drawString("SCORE:" + score, 750, 35);g.drawString("LENGTH:" + length, 750, 50);}/*** 三、添加事件监听或者键盘监听:** @param e*/@Overridepublic void actionPerformed(ActionEvent e) {if (isStart) {//小蛇body移动到靠头的一个body//小蛇右移动--2,3重叠为什么?
//            for (int i = 1; i <= length; i++) {//                middle = snakeX[i - 1];
//                snakeX[i] = middle;
//            }//身体跟进for (int i = length - 1; i > 0; i--) {snakeX[i] = snakeX[i - 1];snakeY[i] = snakeY[i - 1];}//头的移动if (direction == "right") {snakeX[0] += 25;snakeY[0] += 0;if (snakeX[0] > 850) {snakeX[0] = 25;}} else if (direction == "left") {snakeX[0] -= 25;snakeY[0] += 0;if (snakeX[0] <= 25) {snakeX[0] = 850;}} else if (direction == "up") {snakeX[0] += 0;snakeY[0] -= 25;if (snakeY[0] <= 50) {snakeY[0] = 650;}} else if (direction == "down") {snakeX[0] += 0;snakeY[0] += 25;if (snakeY[0] >= 650) {snakeY[0] = 50;}}//吃食物if (snakeX[0] == foodX && snakeY[0] == foodY) {length++;//长度+1score = length * 10 - 30;//分数改变//初始化 食物坐标foodX = 25 + random.nextInt(34) * 25;foodY = 75 + random.nextInt(24) * 25;}//判断是否isFail死亡for (int i = 1; i < length; i++) {if (snakeX[i] == snakeX[0] && snakeY[i] == snakeY[0]) {isFail = true;isStart = false;}}repaint();//repaint()}//定时器开始timmer.start();}
}

四、图片素材:自行复制

1.食物 – food.png

2.右 right.png

3.下 – down.png

4.左–left.png

5.身体-- budy.png

6.上 – up.png

7.广告头-- header.png

Java GUI 贪吃蛇项目教程,详细教程,思路解析,+图片素材。相关推荐

  1. 【C++】经典项目控制台贪吃蛇小游戏详细教程

    [小游戏]贪吃蛇GreedySnake 本文将讲解如何使用c++面向对象方法编写控制台版贪吃蛇小游戏 项目github地址:游戏源码链接 游戏下载:GreedySnake 本人属初学者,水平所限,难免 ...

  2. C++控制台贪吃蛇小游戏详细教程

    游戏截图     开始动画:    游戏过程:  游戏架构设计 该游戏的玩法简单,玩家通过键盘方向键控制蛇上下左右移动,吃到食物得分并增长,碰到墙或者自己的身体则死亡,游戏结束.  整个游戏其实就是一 ...

  3. Java GUI 贪吃蛇小游戏项目实战含图片资源

    项目实战 - 贪吃蛇 图片资源提取地址 百度网盘 链接:https://pan.baidu.com/s/19gEhIuZrut12l5a8jcknFA?pwd=1111 提取码:1111 界面绘制 这 ...

  4. Java实现贪吃蛇大作战小游戏(完整教程+源码)额外实现积分和变速功能

    大家好,我是黄小黄同学!今天给大家带来的是小项目是 基于Java+Swing+IO流实现 的贪吃蛇大作战小游戏.实现了界面可视化.基本的吃食物功能.死亡功能.移动功能.积分功能,并额外实现了主动加速和 ...

  5. 贪吃蛇项目Java实现

    目录 贪吃蛇项目Java开发 一.项目概述 二.项目初步设计 1.项目总体框架 2.模块划分图 3.程序流程图 4.类的划分 5.初步设计 三.实验准备 1.学习随机数类random 2.学习Java ...

  6. Java连接数据库实现图书馆管理系统(详细教程)

    该功能用到的软件为 IDEA .Navicat .云服务器(非必须) 一.建立数据库 在自己的服务器或者电脑本机安装数据库系统,本次系统演示的数据库版本为5.6. 1.创建图书管理数据库library ...

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

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

  8. iis服务器部署项目,IIS环境下部署项目的详细教程

    分享IIS环境下部署项目的详细教程 1.环境部署 1.1安装IIS7 进入控制面板,选择"程序和功能",进入如下页面后 找到World Wide Web Services,确保选中 ...

  9. asp项目如何部署到服务器,IIS环境下部署项目的详细教程

    分享IIS环境下部署项目的详细教程 1.环境部署 1.1安装IIS7 进入控制面板,选择"程序和功能",进入如下页面后,点击"Turn Windows features ...

最新文章

  1. 《ArcGIS Runtime SDK for Android开发笔记》——(2)、Android Studio基本配置与使用
  2. ARP监控工具ARPalert
  3. Sublime Text3注册激活和部分配置
  4. C++ GUI Qt4编程(12)-6.1FindFileDialog
  5. Educational Codeforces Round 107 (Rated for Div. 2)
  6. day6 break continue for
  7. android系统功耗问题:systrace
  8. MySQL几种常见的数据类型
  9. python将word文档转换为txt
  10. 求解一元二次方程c语言程序,一元二次方程求解程序完整代码
  11. Chrome忽略网站证书错误
  12. 高效能人士的七个习惯总结
  13. 脚本小子_Lua安装教程
  14. 「真香系列」新物种首发亮相 聚划算爆款孵化玩法升级
  15. 2021年流动式起重机司机考试题及流动式起重机司机证考试
  16. 牛客网小白月赛5 H-最大公约数(lcm)
  17. Objective-c中的占位符,打印BOOL类型数据
  18. 人工智能 2. 图像识别
  19. 用 vue-cli 手脚架 建立一个 webpack 模板 vue 项目
  20. 使用Gmsh画非均匀网格

热门文章

  1. VSFTPD移植及使用
  2. uniapp引入秋云ucharts 亲测有效
  3. 63、灭火器配置要求
  4. 现在工作所具备的计算机操作,信息科科长职位竞争上岗讲演稿(网友投稿)
  5. Linux Ubuntu 16.04 安装 yaml-cpp ROS 下参数服务器及yaml-cpp实现参数读写
  6. Unity 2D《打地鼠》游戏自学总结
  7. 深度学习笔记-计算机视觉、机器视觉以及数字图像处理之间的区别
  8. 高性能Mysql运维应用实战-高俊峰-专题视频课程
  9. 信息安全保障人员CISAW--- 开班啦
  10. WPF+WCF一步一步打造音频聊天室(一):概述