Java GUI 贪吃蛇项目教程,详细教程,思路解析,+图片素材。
一、实现效果
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 贪吃蛇项目教程,详细教程,思路解析,+图片素材。相关推荐
- 【C++】经典项目控制台贪吃蛇小游戏详细教程
[小游戏]贪吃蛇GreedySnake 本文将讲解如何使用c++面向对象方法编写控制台版贪吃蛇小游戏 项目github地址:游戏源码链接 游戏下载:GreedySnake 本人属初学者,水平所限,难免 ...
- C++控制台贪吃蛇小游戏详细教程
游戏截图 开始动画: 游戏过程: 游戏架构设计 该游戏的玩法简单,玩家通过键盘方向键控制蛇上下左右移动,吃到食物得分并增长,碰到墙或者自己的身体则死亡,游戏结束. 整个游戏其实就是一 ...
- Java GUI 贪吃蛇小游戏项目实战含图片资源
项目实战 - 贪吃蛇 图片资源提取地址 百度网盘 链接:https://pan.baidu.com/s/19gEhIuZrut12l5a8jcknFA?pwd=1111 提取码:1111 界面绘制 这 ...
- Java实现贪吃蛇大作战小游戏(完整教程+源码)额外实现积分和变速功能
大家好,我是黄小黄同学!今天给大家带来的是小项目是 基于Java+Swing+IO流实现 的贪吃蛇大作战小游戏.实现了界面可视化.基本的吃食物功能.死亡功能.移动功能.积分功能,并额外实现了主动加速和 ...
- 贪吃蛇项目Java实现
目录 贪吃蛇项目Java开发 一.项目概述 二.项目初步设计 1.项目总体框架 2.模块划分图 3.程序流程图 4.类的划分 5.初步设计 三.实验准备 1.学习随机数类random 2.学习Java ...
- Java连接数据库实现图书馆管理系统(详细教程)
该功能用到的软件为 IDEA .Navicat .云服务器(非必须) 一.建立数据库 在自己的服务器或者电脑本机安装数据库系统,本次系统演示的数据库版本为5.6. 1.创建图书管理数据库library ...
- 简易贪吃蛇小游戏java版_用GUI实现java版贪吃蛇小游戏
本文实例为大家分享了java版贪吃蛇小游戏的具体代码,供大家参考,具体内容如下 项目结构 新建一个JFrame窗口,作为程序入口 public class GameStart{ public stat ...
- iis服务器部署项目,IIS环境下部署项目的详细教程
分享IIS环境下部署项目的详细教程 1.环境部署 1.1安装IIS7 进入控制面板,选择"程序和功能",进入如下页面后 找到World Wide Web Services,确保选中 ...
- asp项目如何部署到服务器,IIS环境下部署项目的详细教程
分享IIS环境下部署项目的详细教程 1.环境部署 1.1安装IIS7 进入控制面板,选择"程序和功能",进入如下页面后,点击"Turn Windows features ...
最新文章
- 华为通过债券转换收购Bakrie Telecom公司16.83%股份
- 影响计算机算法世界的十位大师(上)
- binlog日志的三种模式
- Spring Boot 2.x基础教程:实现文件上传
- 求连通块个数(使用并查集)
- python多行语句用反斜杠_抗联部队规定新战士每年必须学会多少个生字
- FreeType, FFmpeg, SDL, 图像处理软件, Mac OS X, Objective-C
- 品牌保量技术在阿里妈妈外投场景的应用
- 分支结构程序案例c语言,C语言学习之三——分支结构程序
- 电脑最忌的18个小动作
- div垂直,水平居中
- Visual Studio 2008安装Boost _1_45_0
- Java集合——题目
- TeamTalk 服务器代码分析
- 外贸人必备GoogleChrome浏览器插件推荐(一)
- 什么是域名,域名的购买流程是什么
- 三星r381android+wear,三星Gear 2 成功连接非三星手机详细教程
- 编程初学者入门训练-KiKi和酸奶
- 公开课分享《如何快速有效地编写一份商业计划书》
- Idea无法自动补全代码,ctrl+Alt+v无法使用解决方法