java 贪吃蛇 源码+图片

article/2025/10/15 7:06:05

本人也是个初学者,有什么不对的地方,请大佬指点!!!
一、涉及到的知识点如下:

  1. 循环,分支
  2. 方法的抽取
  3. 数组的使用
  4. 面向对象
  5. 继承,子类方法的重写
  6. 接口,接口的实现

二、游戏图形化界面编程----》GUI图形化界面编程
注意:GUI 已经被很少使用 主要是理解监听思维 帮助刚学java的同学提升兴趣。

GUI的组件:

  1. 窗口
  2. 弹窗
  3. 面板
  4. 文本框
  5. 列表框
  6. 按钮
  7. 交互的时间:监听事件(鼠标事件,键盘事件)

里面的代码 随着学习 随着使用 不必再去细扣每个代码是什么意思。

准备工作

在这里插入图片描述
新建俩个文件夹

  1. com.msb.game 我用来存放代码
  2. images 用来存放图片
    图片我会放在最后,有需要的小伙伴自行下载,下载不下来开启网页审查元素下载。

新建java文件
在这里插入图片描述

代码如下:

package com.msb.game;import javax.swing.*;
import java.awt.*;
public class StartGame {public static void main(String[] args) {//创建一个窗体:JFrame jf = new JFrame();//给窗体设置一个标题:jf.setTitle("贪吃蛇 v0.1版本  by:十一");//获取屏幕宽高int height = Toolkit.getDefaultToolkit().getScreenSize().height;int wight = Toolkit.getDefaultToolkit().getScreenSize().width;//设置窗体弹出的坐标,对应的窗体的宽高:jf.setBounds(((wight-800)/2),((height-800)/2),800,800);//设置窗体不可调jf.setResizable(false);//关闭窗口的同时 程序必须随之关闭jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);//创建面板:GamePanel gp= new GamePanel();//将面板放入窗体jf.add(gp);//默认的窗体是隐藏效果,必须将它显现jf.setVisible(true);}
}

注意下面代码
(“/images/body.png”); 必须为你存放图片的地址

package com.msb.game;import javax.swing.*;
import java.net.URL;//专门获取游戏中所涉及的图片/**必须将图片封装成一个对象,才能操作对象 来使用图片* */
public class Images {//将图片的路径封装成一个对象public static URL bodyURL = Images.class.getResource("/images/body.png");//将图片封装成为程序中的一个对象:public static ImageIcon bodyImg = new ImageIcon(bodyURL);public static URL downURL = Images.class.getResource("/images/down.png");public static ImageIcon downImg = new ImageIcon(downURL);public static URL foodURL = Images.class.getResource("/images/food.png");public static ImageIcon foodImg = new ImageIcon(foodURL);public static URL leftURL = Images.class.getResource("/images/left.png");public static ImageIcon leftImg = new ImageIcon(leftURL);public static URL rightURL = Images.class.getResource("/images/right.png");public static ImageIcon rightImg = new ImageIcon(rightURL);public static URL upURL = Images.class.getResource("/images/up.png");public static ImageIcon upImg = new ImageIcon(upURL);public static URL headerURL = Images.class.getResource("/images/header.png");public static ImageIcon headerImg = new ImageIcon(headerURL);}
package com.msb.game;import com.sun.org.apache.bcel.internal.generic.IF_ACMPEQ;
import javafx.scene.input.KeyCode;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;/** 继承JPanel 才具备面板功能* */
public class GamePanel extends JPanel {//定义俩个数组 一个专门存蛇的X轴坐标,一个专门存y轴坐标//蛇的长度:int length;//x轴int[] snakeX = new int[200];//yint[] snakeY = new int[200];//游戏状态  开始,暂停boolean isStart = false;//默认暂停//加入定时器Timer timer;//定义食物的坐标int foodX;int foodY;//积分int score;//判断小蛇是否死亡boolean isDie = false;//默认活着//定义蛇行走的方向:String direction;public void init() {//初始化蛇的长度:length = 3;//图片大小为25x25//初始化蛇头轴坐标:snakeX[0] = 175;snakeY[0] = 175;//初始化第一节身子坐标:snakeX[1] = 150;snakeY[1] = 175;//初始化第二节身子坐标:snakeX[2] = 125;snakeY[2] = 175;//初始化蛇头的方向:direction = "R";//食物初始的坐标foodX = 300;foodY = 200;//积分score = 0;}public GamePanel() {init();//将焦点定位在当前操作面板上this.setFocusable(true);//加入监听this.addKeyListener(new KeyAdapter() {@Overridepublic void keyPressed(KeyEvent e) {//监听键盘按键的按下操作super.keyPressed(e);int keyCode = e.getKeyCode();//System.out.println(keyCode);  32if (keyCode == KeyEvent.VK_SPACE) {//监听空格if (isDie) {init();isDie = false;} else {isStart = !isStart;}repaint();//重绘游戏} else if (keyCode == KeyEvent.VK_UP) {//上direction = "U";} else if (keyCode == KeyEvent.VK_DOWN) {//下direction = "D";} else if (keyCode == KeyEvent.VK_LEFT) {//左direction = "L";} else if (keyCode == KeyEvent.VK_RIGHT) {//右direction = "R";}}});//对定时器进行初始化操作timer = new Timer(100, new ActionListener() {/*ActionListener 是事件监听相当于每100ms监听一下你是否发生了一个动作将具体的动作放入actionPerformed*/@Overridepublic void actionPerformed(ActionEvent e) {//后一节走向前一节if (isStart && isDie == false) {////身子for (int i = length - 1; i > 0; i--) {snakeX[i] = snakeX[i - 1];snakeY[i] = snakeY[i - 1];}if ("R".equals(direction)) {snakeX[0] += 25;} else if ("U".equals(direction)) {snakeY[0] -= 25;} else if ("D".equals(direction)) {snakeY[0] += 25;} else if ("L".equals(direction)) {snakeX[0] -= 25;}//防止蛇超出边界:if (snakeX[0] > 750) {snakeX[0] = 25;} else if (snakeY[0] < 100) {snakeY[0] = 725;} else if (snakeX[0] < 25) {snakeX[0] = 750;} else if (snakeY[0] > 725) {snakeY[0] = 100;}//检测碰撞的动作:if (snakeX[0] == foodX && snakeY[0] == foodY) {//长度加+length++;//随机生存坐标foodX = ((int) (Math.random() * 30) + 1) * 25;//[25,750]foodY = (new Random().nextInt(26) + 4) * 25;//[100,750]score += 10;}//死亡判断for (int i = 1; i < length; i++) {if (snakeX[i] == snakeX[0] && snakeY[i] == snakeY[0]) {isDie = true;}}repaint();}}});//定时器必须要启动timer.start();}/** paintComponent这个方法比较特殊,这个方法属于图形版的main方法* 自动调用** */@Overrideprotected void paintComponent(Graphics g) {super.paintComponent(g);//自动填充背景颜色this.setBackground(new Color(200, 246, 243));//画头部图片//paintIcon 四个参数:this 指的是当前面板 g:知道是画笔 x,y 指的是对应坐标
//        Images.headerImg.paintIcon(this, g, 1, 2);//调画笔颜色g.setColor(new Color(0xE3FFF6));//画一个矩形g.fillRect(10, 70, 760, 685);//画蛇头if ("R".equals(direction)) {Images.rightImg.paintIcon(this, g, snakeX[0], snakeY[0]);} else if ("L".equals(direction)) {Images.leftImg.paintIcon(this, g, snakeX[0], snakeY[0]);} else if ("U".equals(direction)) {Images.upImg.paintIcon(this, g, snakeX[0], snakeY[0]);} else if ("D".equals(direction)) {Images.downImg.paintIcon(this, g, snakeX[0], snakeY[0]);}
//          Images.rightImg.paintIcon(this, g, snakeX[0], snakeY[0]);
//        //第一节身子
//        Images.bodyImg.paintIcon(this, g, snakeX[1], snakeY[1]);
//        //第二节身子
//        Images.bodyImg.paintIcon(this, g, snakeX[2], snakeY[2]);//身子for (int i = 1; i < length; i++) {Images.bodyImg.paintIcon(this, g, snakeX[i], snakeY[i]);}//游戏提示语if (isStart == false) {//画一个文字g.setColor(new Color(0xFF7373));//字体 字号 大小g.setFont(new Font("微软雅黑", Font.BOLD, 40));//文字内容 出现的位置g.drawString("点击空格开始/暂停游戏", 200, 330);}Images.foodImg.paintIcon(this, g, foodX, foodY);g.setColor(new Color(255, 76, 76));g.setFont(new Font("微软雅黑", Font.BOLD, 40));g.drawString("积分" + ":" + score, 600, 40);if (isDie) {g.setColor(new Color(255, 76, 76));g.setFont(new Font("微软雅黑", Font.BOLD, 40));g.drawString("小蛇死亡,按空格重新开始", 200, 330);}}
}

所需要的图片如下:
up
body
down
left
right
food
下载不下来开启网页审查元素下载。


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

相关文章

JAVA贪吃蛇代码(带注释)

贪吃蛇 这是游戏效果图片是代码里面的素材游戏数据类 package com.tang.retor_snaker;import javax.swing.*; import java.net.URL;public class Data {private static URL bodyURL Data.class.getResource("/com/tang/retor_snaker/statics/body.png");private st…

JAVA贪吃蛇小游戏源代码系列

欢迎关注公众号&#xff1a; 获取贪吃蛇小游戏的源代码。 贪吃蛇小游戏运行结果如下&#xff1a; 启动界面&#xff1a; 运行界面&#xff1a; 重启界面&#xff1a; 源代码框架如下&#xff1a; 注&#xff1a;在运行程序的时候&#xff0c;得重新设计窗体的大小&#x…

JAVA 实现《贪吃蛇大作战》游戏|CSDN创作打卡

前言 贪吃蛇&#xff08;也叫做贪食蛇&#xff09;游戏是一款休闲益智类游戏&#xff0c;有PC和手机等多平台版本。既简单又耐玩。该游戏通过控制蛇头方向吃东西&#xff0c;从而使得蛇变得越来越长。 本程序是通过java的swing来实现《贪吃蛇大作战》这款游戏。 主要需求 1…

java贪吃蛇源码

欢迎访问我的个人博客 https://jialaner.cn/​​​​​​​ java是一种面向对象的语言&#xff0c;有着其中不用质疑的优点。学习java将近三个月了&#xff0c;一直在琢磨着“万物皆对象”的意义&#xff0c;却总是只知其表不知其意&#xff0c;做完这个java贪吃蛇后才有了那么…

贪吃蛇 java实现超简单的贪吃蛇(附源代码)

贪吃蛇游戏 贪吃蛇是个非常经典的游戏&#xff0c;希望对初学Java的小伙伴有一定帮助。希望大家喜欢&#xff0c;因为写得简单&#xff0c;希望大家都能看得懂。 游戏界面&#xff08;游戏背景素材不喜欢的话可以自己换&#xff0c;就别在乎我选的素材&#xff08;&#x1f9…

java实现贪吃蛇小游戏(源码+注释)

一.工程文件 二.Main.java package com.company;import javax.swing.*;public class Main {public static void main(String[] args) {//创建窗体对象JFrame frame new JFrame();//创建窗体参数&#xff08;&#xff09;frame.setBounds(10,10,900,720);//设置不允许更改大小…

使用Java实现一个简单的贪吃蛇小游戏

基于java实现贪吃蛇小游戏&#xff0c;主要通过绘制不同的图片并以一定速度一帧一帧地在窗体上进行展示。 开发工具&#xff1a;eclipse java工具包&#xff1a;jdk1.8 一、创建新项目 创建一个新的项目&#xff0c;并命名。创建一个名为images的文件夹用来存放游戏相关图片…

Java贪吃蛇全代码

用Java编写精典小游戏——贪吃蛇&#xff01; 前言 我想贪吃蛇应该是不少90后和00后的童年&#xff08;我本人是01年的&#xff09;&#xff0c;回想起从前偷偷拿着我爹的诺基亚在被窝里玩贪吃蛇&#xff0c;不禁感慨万分&#xff0c;时间飞逝&#xff0c;没想到10年后的我也可…

JAVA小项目(四)—— 贪吃蛇【轻松入门,附源码】

目录 &#xff08;一&#xff09;效果图 &#xff08;二&#xff09;代码实现 &#xff08;1&#xff09;将图片加载到程序中 &#xff08;2&#xff09;创建窗体 &#xff08;3&#xff09;创建面板 &#xff08;4&#xff09;绘制静态的小蛇 &#xff08;5&#xff09; 加入监…

Java贪吃蛇大作战

作为Java新手小白&#xff0c;渴望学习一些好玩有趣的java程序 废话不多说&#xff0c;接下来我会一步一步实现java小程序&#xff1a;贪吃蛇大作战哦&#xff01; 实现 Java贪吃蛇一共分四个步骤&#xff1a; 1、画出窗体对象 2、绘制静态ui 3、使用鼠标监听器事件和定时器事…

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、蓝牙协议介绍…