一、实现效果

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. 华为通过债券转换收购Bakrie Telecom公司16.83%股份
  2. 影响计算机算法世界的十位大师(上)
  3. binlog日志的三种模式
  4. Spring Boot 2.x基础教程:实现文件上传
  5. 求连通块个数(使用并查集)
  6. python多行语句用反斜杠_抗联部队规定新战士每年必须学会多少个生字
  7. FreeType, FFmpeg, SDL, 图像处理软件, Mac OS X, Objective-C
  8. 品牌保量技术在阿里妈妈外投场景的应用
  9. 分支结构程序案例c语言,C语言学习之三——分支结构程序
  10. 电脑最忌的18个小动作
  11. div垂直,水平居中
  12. Visual Studio 2008安装Boost _1_45_0
  13. Java集合——题目
  14. TeamTalk 服务器代码分析
  15. 外贸人必备GoogleChrome浏览器插件推荐(一)
  16. 什么是域名,域名的购买流程是什么
  17. 三星r381android+wear,三星Gear 2 成功连接非三星手机详细教程
  18. 编程初学者入门训练-KiKi和酸奶
  19. 公开课分享《如何快速有效地编写一份商业计划书》
  20. Idea无法自动补全代码,ctrl+Alt+v无法使用解决方法

热门文章

  1. 分享自己三年的Java开发经验,你现在还在迷茫吗?
  2. android 仿微信demo————微信顶部操作栏界面实现
  3. 记一次长虹IHO3000拆机学习
  4. Kubectl基础命令的使用
  5. 【正点原子Linux连载】第二十二章 AP3216C 摘自【正点原子】I.MX6U嵌入式Qt开发指南V1.0.2
  6. 使用hercules模拟IBM os390
  7. 西门子PLC的MODBUS RTU和modbusTCP通讯
  8. 使用Blender创造一个Low Polygon 插画
  9. 百度云智峰会 开放分享 百度云构建全方位技术云生态
  10. python责任链模式