package com.losen.greedysnake.domain;
import java.applet.AudioClip;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.Random;
import javax.swing.JApplet;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.Timer;
/**
* @author losen
* @version 1.0
* @DateTime 2023/6/24 11:32
*
* SnakeGame类来设计贪吃蛇小游戏的运行界面,运行界面是贪吃蛇游戏的主体部分, 界面主要包括两个方面的内容,
* 一方面是运行界面的内容,贪吃蛇长度显示,游戏说明,速度控制,游戏开始,暂停退出等按钮。
* 另一方面,主要包括贪吃蛇的形状和移动,贪吃蛇移动区域,随机点的定义
* 运行界面的过程是这样的:在开始姐爱你点击进入游戏按钮以后,程序运行到运行界面,开始播放背景音乐。
* 点击游戏说明按钮,弹出一个对话框,说明游戏运行的操作过程。点击开始按钮以后,
* 贪吃蛇开始向上移动,鼠标在向上区域点击,贪吃蛇向上,向左区域点击,贪吃蛇向左,依次赖推。
* 当贪吃蛇碰到草莓时,吃掉它,蛇身变长,并有背景音乐显示,长度显示加一,
* 点击暂停按钮游戏暂停,点击退出按钮后,退出游戏。
* 当贪吃蛇撞到自己或者墙体的时候,贪吃蛇会死亡,然后弹出一个界面,重启界面,用来决定游戏继续进行或者退出游戏。
* 贪吃蛇的形状和移动通过数组的形式实现,在界面中,定义一个x轴和y轴定义的坐标系,定义一个数组,数组的移动就是贪吃蛇的移动,
* 移动方式是贪吃蛇坐标的改变,可以通过鼠标控制或键盘控制来实现贪吃蛇的移动,
* 随机点产生是在坐标系中产生随机数来实现,
*/
public class SnakeGame extends JPanel implements ActionListener {
private final int length = 33;//定义活动范围,食物以及蛇可活动纵向范围,要比边界范围-1
private final int width = 55;//定义活动范围,食物以及蛇可活动横向范围,要比边界范围-1
private final int unit = 25;//定义单位长度
private final int GameLOCX=40;
private final int GameLOCY=40;
private final int GameWidth=width*unit;
private final int GameLength=length*unit;
//随机点坐标
int newY1 =0 ;
int newX1 = 0 ;
int mousex=1;
int mousey=1;
//播放背景音乐
AudioClip christmas = loadSound("src/Music/backgroundMusic.wav");
int direction = 1;//定义一个按下按钮后要去的方向
private ArrayList<SnakeNode> snake = new ArrayList<SnakeNode>();//定义蛇身的数组集合
private int Direction;//定义蛇头的方向
private int Length ;//定义蛇身的长度
private SnakeNode newNode = new SnakeNode(1,1,Color.BLACK);//定义随机点
boolean startFlag =false;
//定义按钮,速度控制,开始暂停退出按钮等
RButton SspeedButton , TspeedButton,FspeedButton,THspeedButton ,ShowButton;
RButton startButton , stopButton , quitButton ,reStartButton,closeButton;
//定义标签,长度显示,方向显示,按钮提示等
JLabel snakeScore, label1, label3,label4;
//初始速度控制
private static int Difficult_Degree=1;
//蛇的移动控制,利用线程来实现用鼠标控制,利用计时器来实现用键盘控制。
Thread tr= new Thread(new ThingsListener());
Timer time = new Timer(1000, new ThingsListener1());//定义一个定时器对象,这里我们还要创建一个ThingsListener事件
public SnakeGame() {//初始化区域
//循环播放背景音乐
christmas.loop ();
// time.start();
tr.start();
//定义按键
//在容器中添加按钮标签等的时候,需要说明布局管理为空,不然的话,加进去的按钮会按照一定的布局来实现,
this.setLayout (null);
//定义按钮
startButton = new RButton("开始游戏");
stopButton =new RButton("暂停游戏");
quitButton =new RButton("退出游戏");
FspeedButton =new RButton("速度一");
SspeedButton =new RButton("速度二");
TspeedButton=new RButton("速度三");
THspeedButton=new RButton("速度四");
ShowButton =new RButton("游戏指南");
//定义标签
snakeScore =new JLabel("3");
label1 =new JLabel("当前长度");
label3 =new JLabel("速度设置");
label4 =new JLabel( );
//设置字体
startButton.setFont(new Font("宋体", Font.BOLD, 35));
stopButton.setFont(new Font("宋体", Font.BOLD, 35));
quitButton.setFont(new Font("宋体", Font.BOLD, 35));
FspeedButton.setFont(new Font("宋体", Font.BOLD, 15));
TspeedButton.setFont(new Font("宋体", Font.BOLD, 15));
SspeedButton.setFont(new Font("宋体", Font.BOLD, 15));
THspeedButton.setFont(new Font("宋体", Font.BOLD, 15));
ShowButton.setFont(new Font("宋体", Font.BOLD, 30));
label1.setFont(new Font("宋体", Font.BOLD, 35));
snakeScore.setFont(new Font("宋体", Font.BOLD, 50));
label3.setFont(new Font("宋体", Font.BOLD, 30));
label4.setFont(new Font("宋体", Font.BOLD, 35));
//定义按钮标签位置
startButton.setBounds (1390, 500 , 190, 90);
stopButton.setBounds (1390, 600 , 190, 90);
quitButton.setBounds (1390, 700 , 190, 90);
snakeScore.setBounds(1450, 70, 150, 90);
label1.setBounds(1390, 10, 190, 90);
ShowButton.setBounds(1390, 170, 190, 90);
label3.setBounds(1390, 270, 190, 90);
label4.setBounds(0, 0, 190, 90);
FspeedButton.setBounds (1390, 350 , 85, 60);
SspeedButton.setBounds (1500,350 , 85, 60);
TspeedButton.setBounds (1390, 420 , 85, 60);
THspeedButton.setBounds (1500, 420 , 85, 60);
THspeedButton.setBackground(Color.green);
SspeedButton.setBackground(Color.blue);
TspeedButton.setBackground(Color.red);
FspeedButton.setBackground(Color.red);
// 添加 按钮和标签,用this关键字指向当前容器
this.add(startButton);
this.add(stopButton);
this.add(quitButton);
this.add(FspeedButton);
this.add(SspeedButton);
this.add(TspeedButton);
this.add(THspeedButton);
this.add(label1);
this.add(snakeScore);
this.add( ShowButton);
this.add(label3);
this.add(label4);
// 添加三个按键的监听事件
startButton.addActionListener(this);
stopButton.addActionListener(this);
quitButton.addActionListener(this);
THspeedButton.addActionListener(this);
SspeedButton.addActionListener(this);
TspeedButton.addActionListener(this);
FspeedButton.addActionListener(this);
ShowButton.addActionListener(this);
snake.add(new SnakeNode(width/2,length/2 ,Color.red));
snake.add(new SnakeNode(width/2,length/2+1 ,Color.blue));
snake.add(new SnakeNode(width/2,length/2+2 ,Color.green));
Direction = 1;//定义初始方向为向上
Length = 3;//蛇身长度为3
CreateNode1();//产生随机点
// CreateNode2();
/*//采用键盘控制的控制模式,利用
没有合适的资源?快使用搜索试试~ 我知道了~
GreedySnake.zip
共88个文件
xml:47个
class:17个
java:7个
需积分: 0 2 下载量 27 浏览量
2023-06-24
14:43:36
上传
评论
收藏 2.35MB ZIP 举报
温馨提示
Java swing java贪吃蛇小游戏: 1.可自定义蛇头部和尾部,身体是随机颜色的球状;自定义食物图片,自定义背景 2.显示当前分数(长度) 3.可自定义蛇移动速度(四种速度) 4.可进行游戏暂停 5.菜单:游戏指南、速度设置(速度一、速度二、速度三、速度四)、开始游戏、暂停游戏、退出游戏。 ———————————————— 版权声明:本文为CSDN博主「哆le」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/qq_51001054/article/details/131361729
资源推荐
资源详情
资源评论
收起资源包目录
GreedySnake.zip (88个子文件)
GreedySnake
HELP.md 1KB
mvnw.cmd 7KB
pom.xml 2KB
src
image
startbackground.png 984KB
gameover.png 67KB
food.png 8KB
background.png 70KB
游戏截图.png 169KB
开始页面截图.png 981KB
body.png 386B
main
resources
application.properties 1B
templates
static
java
com
losen
greedysnake
GreedySnakeApplication.java 336B
domain
RButton.java 4KB
SnakeNode.java 1KB
Restart.java 4KB
applauseMusic.java 3KB
Start.java 4KB
SnakeGame.java 23KB
.mvn
wrapper
maven-wrapper.properties 233B
maven-wrapper.jar 61KB
GreedySnake.iml 5KB
.idea
jarRepositories.xml 864B
uiDesigner.xml 9KB
libraries
Maven__org_springframework_boot_spring_boot_2_2_5_RELEASE.xml 636B
Maven__org_springframework_spring_web_5_2_4_RELEASE.xml 609B
Maven__org_apache_tomcat_embed_tomcat_embed_websocket_9_0_31.xml 660B
Maven__org_springframework_spring_jcl_5_2_4_RELEASE.xml 609B
Maven__org_springframework_boot_spring_boot_devtools_2_2_5_RELEASE.xml 699B
Maven__ch_qos_logback_logback_core_1_2_3.xml 547B
Maven__org_springframework_boot_spring_boot_starter_web_2_2_5_RELEASE.xml 720B
Maven__org_slf4j_jul_to_slf4j_1_7_30.xml 534B
Maven__org_projectlombok_lombok_1_18_12.xml 531B
Maven__org_springframework_boot_spring_boot_starter_json_2_2_5_RELEASE.xml 727B
Maven__jakarta_validation_jakarta_validation_api_2_0_2.xml 633B
Maven__org_slf4j_slf4j_api_1_7_30.xml 513B
Maven__org_springframework_spring_beans_5_2_4_RELEASE.xml 623B
Maven__org_springframework_boot_spring_boot_starter_tomcat_2_2_5_RELEASE.xml 741B
Maven__com_fasterxml_classmate_1_5_1.xml 522B
Maven__com_fasterxml_jackson_core_jackson_annotations_2_10_2.xml 651B
Maven__org_springframework_spring_expression_5_2_4_RELEASE.xml 658B
Maven__org_apache_tomcat_embed_tomcat_embed_el_9_0_31.xml 611B
Maven__org_springframework_boot_spring_boot_starter_2_2_5_RELEASE.xml 692B
Maven__org_jboss_logging_jboss_logging_3_4_1_Final.xml 608B
Maven__org_springframework_boot_spring_boot_starter_logging_2_2_5_RELEASE.xml 748B
Maven__ch_qos_logback_logback_classic_1_2_3.xml 568B
Maven__com_fasterxml_jackson_module_jackson_module_parameter_names_2_10_2.xml 736B
Maven__com_fasterxml_jackson_datatype_jackson_datatype_jsr310_2_10_2.xml 695B
Maven__jakarta_annotation_jakarta_annotation_api_1_3_5.xml 633B
Maven__org_hibernate_validator_hibernate_validator_6_0_18_Final.xml 681B
Maven__com_fasterxml_jackson_core_jackson_databind_2_10_2.xml 630B
Maven__org_springframework_spring_aop_5_2_4_RELEASE.xml 609B
Maven__org_apache_logging_log4j_log4j_api_2_12_1.xml 573B
Maven__org_springframework_boot_spring_boot_starter_validation_2_2_5_RELEASE.xml 769B
Maven__org_apache_logging_log4j_log4j_to_slf4j_2_12_1.xml 608B
Maven__org_springframework_spring_core_5_2_4_RELEASE.xml 616B
Maven__org_apache_tomcat_embed_tomcat_embed_core_9_0_31.xml 625B
Maven__org_springframework_spring_webmvc_5_2_4_RELEASE.xml 630B
Maven__org_springframework_boot_spring_boot_autoconfigure_2_2_5_RELEASE.xml 734B
Maven__com_fasterxml_jackson_core_jackson_core_2_10_2.xml 602B
Maven__org_yaml_snakeyaml_1_25.xml 495B
Maven__org_springframework_spring_context_5_2_4_RELEASE.xml 637B
Maven__com_fasterxml_jackson_datatype_jackson_datatype_jdk8_2_10_2.xml 681B
workspace.xml 4KB
misc.xml 258B
compiler.xml 886B
modules.xml 269B
.gitignore 184B
encodings.xml 191B
target
classes
application.properties 1B
com
losen
greedysnake
GreedySnakeApplication.class 764B
domain
SnakeGame.class 12KB
applauseMusic.class 1KB
SnakeGame$1.class 2KB
RButton$1.class 1KB
RButton.class 4KB
SnakeNode.class 1KB
SnakeGame$ThingsListener1.class 866B
pushButtonMusic.class 1KB
Start.class 3KB
Restart.class 3KB
DeadMusic.class 1KB
Start$Frame2.class 1KB
speedButtonMusic.class 1KB
eatFoodMusic.class 1KB
SnakeGame$ThingsListener.class 1KB
Restart$Frame3.class 989B
generated-sources
annotations
mvnw 11KB
.gitignore 395B
共 88 条
- 1
资源评论
哆le
- 粉丝: 1064
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 计算机毕业设计:python+爬虫+cnki网站爬
- nyakumi-lewd-snack-3-4k_720p.7z.002
- 现在微信小程序能用的mqtt.min.js
- 基于MPC的非线性摆锤系统轨迹跟踪控制matlab仿真,包括程序中文注释,仿真操作步骤
- shell脚本入门-变量、字符串, Shell脚本中变量与字符串的基础操作教程
- 基于MATLAB的ITS信道模型数值模拟仿真,包括程序中文注释,仿真操作步骤
- 基于Java、JavaScript、CSS的电子产品商城设计与实现源码
- 基于Vue 2的zjc项目设计源码,适用于赶项目需求
- 基于跨语言统一的C++头文件设计源码开发方案
- 基于MindSpore 1.3的T-GCNTemporal Graph Convolutional Network设计源码
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功