利用java实现一个简单的贪吃蛇小游戏
GUI编程实现贪吃蛇小游戏
(推荐教程:java课程)
1、编写主方法实现启动类
2、准备好素材图片,编写数据类
3、代码主体部分:在panel面板上实现游戏初始化,键盘和事件的监听等功能
4、代码运行效果图
5、GitHub源码链接
1、编写主方法实现启动类
import javax.swing.*; //主启动类 public class StartGame { public static void main(String[] args) { JFrame jFrame = new JFrame("贪吃蛇小游戏"); jFrame.setBounds(10,10,900,720); jFrame.setResizable(false); //设置窗口大小不可变 jFrame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); //面板 jFrame.add(new GamePanel()); jFrame.setVisible(true); } }
2、准备好素材图片,编写数据类
import javax.swing.*; import java.net.URL; public class Data { //头部图片 public static URL headerURL = Data.class.getResource("statics/header.png"); public static ImageIcon header = new ImageIcon(headerURL); //头部上下左右 public static URL upURL = Data.class.getResource("statics/up.png"); public static URL downURL = Data.class.getResource("statics/down.png"); public static URL leftURL = Data.class.getResource("statics/left.png"); public static URL rightURL = Data.class.getResource("statics/right.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 URL bodyURL = Data.class.getResource("statics/body.png"); public static ImageIcon body = new ImageIcon(bodyURL); //食物 public static URL foodURL = Data.class.getResource("statics/food.png"); public static ImageIcon food = new ImageIcon(foodURL); }
3、代码主体部分:在panel面板上实现游戏初始化,键盘和事件的监听等功能
package com.abc.snake; 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; import java.util.Random; //游戏的面板 public class GamePanel extends JPanel implements KeyListener, ActionListener { //定义蛇的数据结构 int length; //蛇的长度 int[] snakeX = new int[600]; //蛇的x坐标 25*25 int[] snakeY = new int[500]; //蛇的y坐标 25*25 String fx; //食物 int foodx; int foody; Random random = new Random(); int score; //游戏分数 //游戏当前的状态 boolean isStart = false; boolean isFail = false; //定时器 Timer timer = new Timer(100,this);//100毫秒刷新一次 //构造方法 public GamePanel() { init();//初始化 this.setFocusable(true); //获得焦点事件 this.addKeyListener(this); //获得键盘监听事件 timer.start(); //游戏一开始 定时器就启动 } //初始化方法 public void init(){ length = 3; //初始化开始的蛇,给蛇定位 snakeX[0] = 100;snakeY[0] = 100; snakeX[1] = 75;snakeY[1] = 100; snakeX[2] = 50;snakeY[2] = 100; fx = "R"; //初始方向向右 //初始化食物数据 foodx = 25 + 25*random.nextInt(34); foody = 75 + 25*random.nextInt(24); //初始化游戏分数 score = 0; } //绘制面板 @Override protected void paintComponent(Graphics g) { super.paintComponent(g);//清屏 this.setBackground(Color.white);//设置面板背景色 Data.header.paintIcon(this,g,25,11);//头部 g.fillRect(25,75,850,600);//默认的黑色游戏区域 //绘制小蛇 if (fx.equals("R")){ Data.right.paintIcon(this,g,snakeX[0],snakeY[0]); //蛇头初始化向右 }else if (fx.equals("L")){ Data.left.paintIcon(this,g,snakeX[0],snakeY[0]); //蛇头初始化向左 }else if (fx.equals("U")){ Data.up.paintIcon(this,g,snakeX[0],snakeY[0]); //蛇头初始化向上 }else if (fx.equals("D")){ Data.down.paintIcon(this,g,snakeX[0],snakeY[0]); //蛇头初始化向下 } for (int i = 1; i < length; i++) { Data.body.paintIcon(this,g,snakeX[i],snakeY[i]); } //食物 Data.food.paintIcon(this,g,foodx,foody); //积分 g.setColor(Color.white); g.setFont(new Font("微软雅黑",Font.BOLD,18)); g.drawString("长度 "+length,750,35); g.drawString("分数 "+score,750,50); //游戏状态 if (isStart == false){ g.setColor(Color.white); g.setFont(new Font("微软雅黑",Font.BOLD,40));//设置字体 g.drawString("按下空格开始游戏",300,300); } //失败判断 if (isFail){ g.setColor(Color.red); g.setFont(new Font("微软雅黑",Font.BOLD,40));//设置字体 g.drawString("游戏失败,按下空格重新开始",300,300); } } //键盘监听事件 @Override public void keyPressed(KeyEvent e) { int keyCode = e.getKeyCode(); //获取按键 if (keyCode == KeyEvent.VK_SPACE){ if (isFail){ //重新开始 isFail=false; init(); }else { isStart =! isStart; } repaint(); } //键盘控制小蛇移动 if (keyCode==KeyEvent.VK_UP){ fx="U"; }else if (keyCode==KeyEvent.VK_DOWN){ fx="D"; }else if (keyCode==KeyEvent.VK_LEFT){ fx="L"; }else if (keyCode==KeyEvent.VK_RIGHT){ fx="R"; } } //事件监听 @Override public void actionPerformed(ActionEvent e) { if (isStart && isFail ==false){//如果游戏是开始状态,就让小蛇动起来 //移动 for (int i = length-1; i > 0 ; i--) { snakeX[i] = snakeX[i-1]; snakeY[i] = snakeY[i-1]; } //走向 if (fx.equals("R")){ snakeX[0] = snakeX[0]+25; //边界判断 if (snakeX[0]>850){ snakeX[0]=25; } }else if (fx.equals("L")){ snakeX[0] = snakeX[0]-25; if (snakeX[0]<25){ snakeX[0]=850; } }else if (fx.equals("U")){ snakeY[0] = snakeY[0]-25; if (snakeY[0]<75){ snakeY[0]=650; } }else if (fx.equals("D")){ snakeY[0] = snakeY[0]+25; if (snakeY[0]>650){ snakeY[0]=75; } } //吃食物 if (snakeX[0] == foodx && snakeY[0] == foody){ length++; score = score + 10; //再次随机食物 foodx = 25 + 25*random.nextInt(34); foody = 75 + 25*random.nextInt(24); } //失败判定,撞到自己 for (int i = 1; i < length; i++) { if (snakeX[0]==snakeX[i] && snakeY[0]==snakeY[i]){ isFail=true; } } repaint(); } timer.start(); } @Override public void keyTyped(KeyEvent e) { } @Override public void keyReleased(KeyEvent e) { } }
4、代码运行效果图
初始化界面:
游戏中界面:
游戏结束界面:
相关推荐:java入门
以上是利用java实现一个简单的贪吃蛇小游戏的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

Java 8引入了Stream API,提供了一种强大且表达力丰富的处理数据集合的方式。然而,使用Stream时,一个常见问题是:如何从forEach操作中中断或返回? 传统循环允许提前中断或返回,但Stream的forEach方法并不直接支持这种方式。本文将解释原因,并探讨在Stream处理系统中实现提前终止的替代方法。 延伸阅读: Java Stream API改进 理解Stream forEach forEach方法是一个终端操作,它对Stream中的每个元素执行一个操作。它的设计意图是处

胶囊是一种三维几何图形,由一个圆柱体和两端各一个半球体组成。胶囊的体积可以通过将圆柱体的体积和两端半球体的体积相加来计算。本教程将讨论如何使用不同的方法在Java中计算给定胶囊的体积。 胶囊体积公式 胶囊体积的公式如下: 胶囊体积 = 圆柱体体积 两个半球体体积 其中, r: 半球体的半径。 h: 圆柱体的高度(不包括半球体)。 例子 1 输入 半径 = 5 单位 高度 = 10 单位 输出 体积 = 1570.8 立方单位 解释 使用公式计算体积: 体积 = π × r2 × h (4

Spring Boot简化了可靠,可扩展和生产就绪的Java应用的创建,从而彻底改变了Java开发。 它的“惯例惯例”方法(春季生态系统固有的惯例),最小化手动设置
