Java贪吃蛇大作战

article/2025/10/15 12:14:39

作为Java新手小白,渴望学习一些好玩有趣的java程序

废话不多说,接下来我会一步一步实现java小程序:贪吃蛇大作战哦! 

实现 Java贪吃蛇一共分四个步骤:

1、画出窗体对象
2、绘制静态ui
3、使用鼠标监听器事件和定时器事件让小蛇动起来
4、实现吃食物的功能

关于代码中的数值,因为小蛇的素材图片像素为25*25 ,游戏区域灰色方格为850*600

 1、绘制窗体对象

        使用JFrame这个类,分别设置界面标题、宽度、高度、位置、退出界面以及位置固定,最后将界面显示出来:

public class Main {public static void main(String[] args) {// write your code hereJFrame frame = new JFrame("贪吃蛇大作战");//界面标题frame.setSize(900, 720);//设置宽高frame.setLocationRelativeTo(null);//布局正中间frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//退出frame.setResizable(false);//大小固定,不能变化frame.setVisible(true);//显示}
}

界面如下:

 2、绘制静态Ui

         新建Panel.java文件,添加如下绘制标题代码,并在Main.java中调用显示:

public class Panel extends JPanel {           //由Panel继承JPanel,创建一个画布类@Overrideprotected void paintComponent(Graphics g) {         //方法:绘制,Graphics g是画笔对象super.paintComponent(g);//绘制顶部标题//paintIcon()函数可将图片放到对应的容器中去:对象、画笔工具、位置坐标new ImageIcon("img/title.png").paintIcon(this,g,20,11);}
}调用部分
frame.add(new Panel());   //显示顶部标题

绘制游戏区域,在Panel.java文件中protected void paintComponent(Graphics g)函数中继续添加绘制游戏区域代码:

//绘制游戏区域
g.fillRect(20,75,850,600);//参数为绘制矩形窗口的顶点x,y坐标,矩形的宽、高

 运行结果如下:

3、鼠标监听时间与定时器

设置键盘监听事件以及定时器的启动,实现键盘与游戏界面的交互,定时器的作用是保证每隔一段时间刷新物体的坐标位置,以便实时更新游戏界面。具体代码在Panel.java文件中编辑如下:

游戏初始界面: 

 当按下空格键开始游戏后,小蛇开始运动,我们可以通过键盘上的上下左右键对小蛇的运动方向进行控制!(注:实现图是动态的这里就不展示,你们可以自行试试,如果有问题可以重复检查一下代码是否敲错)

具体实现代码在Panel.java文件中编辑如下:

package com.company;import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;public class Panel extends JPanel implements KeyListener, ActionListener {           //由Panel继承JPanel,创建一个画布类,加入键盘监听int length;//小蛇长度int[] snakeX = new int[500];int[] snakeY = new int[500];String fx; //小蛇朝向boolean isStart = false;  //游戏开始或者暂停//定时器(保证每隔一段时间就调用paintComponent()方法,保证游戏时小蛇移动页面的刷新)Timer timer = new Timer(100,this);//定时器时间100ms,监听对象是public Panel(){init();//添加监听事件this.setFocusable(true);//使得一直聚焦在游戏区域this.addKeyListener(this);}//初始化方法public void init(){length = 3;fx = "r";//初始化小蛇位置snakeX[0] = 100; snakeY[0] = 100;snakeX[1] = 75; snakeY[1] = 100;snakeX[2] = 50; snakeY[2] = 100;timer.start();}@Overrideprotected void paintComponent(Graphics g) {         //方法:绘制,Graphics g是画笔对象super.paintComponent(g);//绘制顶部标题//paintIcon()函数可将图片放到对应的容器中去:对象、画笔工具、位置坐标new ImageIcon("img/title.png").paintIcon(this,g,20,11);//绘制游戏区域g.fillRect(20,75,850,600);//参数为绘制矩形窗口的顶点x,y坐标,矩形的宽、高//绘制小蛇//蛇头if(fx.equals("r")){new ImageIcon("img/right.png").paintIcon(this,g,snakeX[0],snakeY[0]);}else if(fx.equals("l")){new ImageIcon("img/left.png").paintIcon(this,g,snakeX[0],snakeY[0]);}else if(fx.equals("u")){new ImageIcon("img/up.png").paintIcon(this,g,snakeX[0],snakeY[0]);}else if(fx.equals("d")) {new ImageIcon("img/down.png").paintIcon(this, g, snakeX[0], snakeY[0]);}//蛇身for(int i = 1; i < length; i++){new ImageIcon("img/body.png").paintIcon(this, g, snakeX[i], snakeY[i]);}//游戏的提示语if(isStart == false){g.setColor(Color.white);g.setFont(new Font("微软雅黑",Font.BOLD,40));g.drawString("按下空格键开始游戏",300,300);}}@Overridepublic void keyTyped(KeyEvent e) {    //点击}@Overridepublic void keyPressed(KeyEvent e) {   //按压int KeyCode = e.getKeyCode();if(KeyCode == KeyEvent.VK_SPACE){   //监听空格键isStart = !isStart;}if(isStart){if(KeyCode == KeyEvent.VK_LEFT){fx = "l";}else if(KeyCode == KeyEvent.VK_RIGHT){fx = "r";}else if(KeyCode == KeyEvent.VK_UP){fx = "u";}else if(KeyCode == KeyEvent.VK_DOWN){fx = "d";}}repaint();}@Overridepublic void keyReleased(KeyEvent e) {    //释放}@Overridepublic void actionPerformed(ActionEvent e) {//改变蛇的位置坐标if(isStart){     //头部位置遍历for(int i = length-1;i > 0; i--){snakeX[i] = snakeX[i-1];snakeY[i] = snakeY[i-1];}if(fx.equals("l")){snakeX[0] = snakeX[0] - 25;}else if(fx.equals("r")){snakeX[0] = snakeX[0] + 25;}else if(fx.equals("u")){snakeY[0] = snakeY[0] - 25;}else if(fx.equals("d")){snakeY[0] = snakeY[0] + 25;}repaint();}timer.start();//启动定时器}
}

处理小蛇触及边界问题(小蛇在左边边界出去则从右边边界出来,上下同理),以小蛇的头部位置为基准判断小蛇的运动方向,在相应运行方向的判断函数中加入边界判断:

左边
//边界判断
if(snakeX[0] < 25){snakeX[0] = 850;
}右边
//边界判断
if(snakeX[0] > 850){snakeX[0] = 25;
}上面
//边界判断
if(snakeY[0] < 75){snakeY[0] = 658;
}下面//边界判断
if(snakeY[0] > 650){snakeY[0] = 75;
}

初始化食物位置,在小蛇吃掉当前食物后小蛇身体长度+1,并再随机产生食物

在public class Panel extends JPanel implements KeyListener, ActionListener中定义食物变量
int foodx;
int foody;
Random random = new Random(); //生成随机位置在public void init()初始化函数中加入
//初始化食物位置foodx = 25 + 25*random.nextInt(34);foody = 25 + 25*random.nextInt(75);在画笔函数protected void paintComponent(Graphics g)中画出食物//画出食物的位置new ImageIcon("img/food.png").paintIcon(this, g, foodx, foody);在小蛇运动actionPerformed(ActionEvent e) 函数中
//判断是否小蛇吃了食物(重合)
if(snakeX[0] == foodx && snakeY[0] == foody){length++;foodx = 25 + 25*random.nextInt(34);//食物被吃后重新产生随机食物foody = 75 + 25*random.nextInt(24);}

最后实现功能如下:

1、简单的贪吃蛇小游戏;

2、按下空格键开始游戏,小蛇开始运动,键盘的上下左右键控制小蛇的运动方向;

3、小蛇吃掉一个食物后随机产生下一个食物,同时小蛇的身体长度加1

4、再按下空格键游戏停止。

项目资源:Java实现贪吃蛇小游戏-Java文档类资源-CSDN下载


http://chatgpt.dhexx.cn/article/Di6myKyv.shtml

相关文章

Java简易小游戏贪吃蛇(Java实战)

这个版本的贪吃蛇我是跟着“黑马程序员”写的。小伙伴们可以跟着视频试着做一下&#xff0c;同时视频也会更详细。 B站学习链接&#xff1a;【黑马】两个小时带你用Java语言写一个贪吃蛇游戏【配套源码笔记】_哔哩哔哩_bilibili 相对于新手而言&#xff0c;贪吃蛇应该算是一个…

JAVA实现贪吃蛇游戏

本文实现的功能有: 1.绘制静态窗口 2.绘制游戏面板 3.绘制静态小蛇 4.通过键盘控制小蛇移动 5.吃食物 6.积分系统和失败判定 最近在学GUI&#xff0c;然后又有读者希望我写一下相关的实战。刚好博主在b站漫无目的的寻找着题材的时候看到了一个写贪吃蛇游戏的视频&#xff0c;于…

Java实现贪吃蛇大作战小游戏(完整版)

大家好&#xff0c;今天尝试用swing技术写一个贪吃蛇大作战小游戏&#xff0c;供大家参考。 效果展示 目录 效果展示 一、游戏界面 二、得分情况 项目介绍 项目背景 总体需求 实现过程 代码展示 主类 &#xff1a;Demo类 MyPanel类 ①构造方法 ②初始化方法 ③绘制方法…

用java写一个贪吃蛇小游戏(源码在最后)

一、引入 涉及技能&#xff1a; 循环、分支方法的抽取数组的使用面向对象继承&#xff0c;子类方法的重写接口&#xff0c;接口的实现GUI&#xff08;图像化界面编程&#xff09; GUI中的组件&#xff1a; 7.1 窗口 7.2 弹窗 7.3 面板 7.4 文本框 7.5 列表框 7.6 按钮 7.7 图…

安卓蓝牙开发总结(一)—蓝牙开启与关闭

蓝牙开启与关闭 1、引言2、布局文件3、蓝牙打开与关闭  3.1 通过对按钮监听方法  3.2 通过设置点击事件 4、结果展示及总结5、参考链接 1、引言 最近在学习如何在安卓手机上对蓝牙进行操控&#xff0c;作为初学者发现大多数博客对安卓开发的初学者极为不友好&#xff0c;特…

【Bluetooth|蓝牙开发】二、蓝牙开发入门

个人主页&#xff1a;董哥聊技术 我是董哥&#xff0c;嵌入式领域新星创作者 创作理念&#xff1a;专注分享高质量嵌入式文章&#xff0c;让大家读有所得&#xff01; 【所有文章汇总】 1、蓝牙基础概念 蓝牙&#xff0c;是一种利用低功率无线电&#xff0c;支持设备短距离…

nimble 蓝牙开发一:BLE 蓝牙 Host 规范概述

目录 nimble 蓝牙开发一&#xff1a;概述一、BLE 简介二、BLE 基础知识蓝牙设备地址BLE 广播类型标准广播数据 三、BLE 工作概述BLE 常见的操作有&#xff1a;BLE 常见的工作流程&#xff1a; 四、BLE 使用的协议规范GAP1. GAP 工作角色2. GAP 工作模式3. GAP 工作流程4. GAP 工…

ESP32 蓝牙开发

1. 低功耗蓝牙&#xff08;BLE&#xff09;协议栈 低功耗蓝牙协议是蓝牙通信协议的一种&#xff0c;BLE协议栈就是实现低功耗蓝牙协议的代码 1.1 层次协议 蓝牙协议规定了两个层次的协议&#xff0c;分别为蓝牙核心协议&#xff08;Bluetooth Core&#xff09;和蓝牙应用层协…

Android蓝牙开发 — 经典蓝牙BLE蓝牙

一&#xff0c;前期基础知识储备 1&#xff09;蓝牙是一种支持设备之间短距离通信的无线电技术&#xff08;其他还包括红外&#xff0c;WIFI&#xff09;&#xff1b; 支持移动电话、笔记本电脑、无线耳机等设备之间进行信息的交换&#xff1b; Android支持的蓝牙协议栈&…

Android 蓝牙开发——概述(一)

一、蓝牙简介 蓝牙技术是一种无线数据和语音通信开放的全球规范,它是基于低成本的近距离无线连接,为固定和移动设备建立通信环境的一种特殊的近距离无线技术连接。 其中将1.x~3.0之间的版本称之为经典蓝牙,4.x开始的蓝牙称之为低功耗蓝牙,也就是蓝牙BLE。 1、蓝牙协议介绍…

低功耗蓝牙开发入门概念科普

一、概述 1、缘起 低功耗蓝牙起源于Bluetooth4.0版本&#xff0c;至今已发展到5.3 4.0 bluetooth low enerngy 这个阶段低功耗蓝牙的基础框架已经稳定成型&#xff0c;后面版本主要退出新特性和扩展特性&#xff0c;同时保证和4.0的原生兼容性 4.1 multi role&#xff08;主从…

ESP32开发三_蓝牙开发

蓝牙开发 交流QQ: 1048272975 QQ交流群: 636564526 蓝牙是一种不断创新发展的无线通信技术标准&#xff0c;采用了2.4G ISM频段&#xff0c;在音频传输、数据传输、位置服务、设备组网这些场景有着广泛的应用。 1. 蓝牙概述 蓝牙技术分经典蓝牙(Classic BT)和低…

iOS 蓝牙开发实现文件传输

这是一篇旧文&#xff0c;三年前就写过了&#xff0c;一直没有时间分享出来&#xff0c;最近简单整理了下&#xff0c;希望能帮到有需要的人。   由于我这里没有相关的蓝牙设备&#xff0c;主要用了两个手机&#xff0c;一个作为主设备&#xff0c;一个做为从设备。另外进行蓝…

Android经典蓝牙开发全流程

一、基本介绍 所谓蓝牙(Bluetooth)技术&#xff0c;实际上是一种短距离无线电技术&#xff0c;最初是由爱立信公司公司发明的。技术始于爱立信公司 1994 方案&#xff0c;它是研究在移动电话和其他配件间进行低功耗、低成本无线通信连接的方法。发明者希望为设备间的通讯创造一…

Android - 蓝牙开发

文章目录 科普SIG类型制式选择逻辑链路控制适配协议 (L2CAP)L2CAP的功能 蓝牙框架和 RFCOMM 协议蓝牙安全白名单机制 编程蓝牙权限Classic BluetoothBluetooth Low Energy术语角色 & 职能查找 BLE 设备连接设备上的 GATT 服务器绑定服务蓝牙设置连接到设备连接到 GATT 服务…

Android 蓝牙开发 uuid,Android蓝牙开发之 UUID

UUID&#xff1a;全球唯一标识符 在蓝牙中&#xff0c;每个Service和Characteristic都唯一地由"全球唯一标识符" (UUID)来校验&#xff0c;主要是保证他们的唯一性。 UUID可分为&#xff1a;16位、32位、128 位UUID Bluetooth_Base_UUID&#xff1a;蓝牙UUID基数 UUI…

Android 低功耗蓝牙开发简述

低功耗蓝牙简述 一、什么是低功耗蓝牙&#xff1f;二、怎么做低功耗蓝牙应用&#xff1f;① 之前有没有接触Android蓝牙开发&#xff1f;② 蓝牙设备固件是公司自己的吗&#xff1f;③ 有没有蓝牙固件和蓝牙应用的文档和Demo&#xff1f;④ 具体的业务功能需求明确吗&#xff1…

Android蓝牙开发

题引&#xff1a; 最近项目上涉及与硬件相关的功能&#xff0c;需要通过蓝牙进行消息收发。项目已完成&#xff0c;这里做下记录。 通信步骤&#xff1a; 1.初始化BluetoothAdapter.getDefaultAdapter()获取BluetoothAdapter对象 2.判断蓝牙是否开启bluetoothAdapter.isEnab…

【Android】蓝牙开发——BLE(低功耗蓝牙)(附完整Demo)

目录 目录 前言 一、相关概念介绍 二、实战开发 三、项目演示 四、Demo案例源码地址 五、更新记录 1、2020/12/29 &#xff1a;修改 setupService()中错误 2、2021/05/14 &#xff1a;更新连接方法&#xff08;解决部分蓝牙设备连接失败的问题&#xff09; 3、2022/1…

【Bluetooth开发】蓝牙开发入门

BLE 蓝牙设备在生活中无处不在&#xff0c;但是我们也只是将其作为蓝牙模块进行使用&#xff0c;发送简单的AT命令实现数据收发。 那么&#xff0c;像对于一些复杂的使用场合&#xff1a;“车载蓝牙”、"智能手表"、“蓝牙音箱”等&#xff0c;我们不得不去了解底层…