怎么用Java写贪吃蛇小游戏
发表于:2025-02-01 作者:千家信息网编辑
千家信息网最后更新 2025年02月01日,小编给大家分享一下怎么用Java写贪吃蛇小游戏,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!设计思路:由GameStart
千家信息网最后更新 2025年02月01日怎么用Java写贪吃蛇小游戏
小编给大家分享一下怎么用Java写贪吃蛇小游戏,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!
设计思路:
由GameStart的启动方法 main方法,Date存储外部数据,GamePanel进行画出贪吃蛇并监听输入
GamePanel:
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 lenth; int[] snakeX = new int [600]; // 蛇的坐标X int[] snakeY = new int [600];// 蛇的坐标Y String fx; // 操控上下左右 boolean isStart = false; Timer timer = new Timer(100,this); // 定义一个食物 int foodx; int foody; Random random = new Random(); // 添加一个死亡判断 boolean isFail = false; boolean isPass = false; //游戏是否通关 // 积分系统 int score; // 构造器 public GamePanel(){ init(); // 获取键盘监听事件 this.setFocusable(true); this.addKeyListener(this); timer.start(); // 让时间动起来 } // 初始化游戏 public void init(){ lenth = 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; } // 画板 画出界面和蛇 // Graphics : 画笔 @Override protected void paintComponent(Graphics g) { super.paintComponent(g);//清屏 this.setBackground(Color.BLUE);//设置背景的颜色 //绘制头部的广告栏 Date.header.paintIcon(this, g, 25, 11); //绘制游戏区域 g.fillRect(25, 75, 850, 600); // 画一条静态的小蛇 if (fx.equals("R")){ Date.right.paintIcon(this,g,snakeX[0],snakeY[0]); }else if (fx.equals("L")){ Date.left.paintIcon(this,g,snakeX[0],snakeY[0]); }else if (fx.equals("U")){ Date.up.paintIcon(this,g,snakeX[0],snakeY[0]); }else if (fx.equals("D")){ Date.down.paintIcon(this,g,snakeX[0],snakeY[0]); } for (int i = 1; i < lenth; i++) { Date.body.paintIcon(this,g,snakeX[i],snakeY[i]); // 蛇的身体长度通过了lenth控制 } // 画食物 Date.food.paintIcon(this,g,foodx,foody); // 画积分 g.setColor(Color.WHITE); g.setFont(new Font("微软雅黑",Font.BOLD,18)); // 设置字体 g.drawString("您的积分是:" + score,700,50); g.drawString("您的长度是:" + lenth,700,35); // 游戏提示:是否开始 if (isStart == false){ // 画一个文字String 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("摁下空格开始游戏", 200, 300); } if (isPass) { g.setColor(Color.YELLOW); g.setFont(new Font("微软雅黑", Font.BOLD, 40));//设置字体 g.drawString("游戏通关!", 350, 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_LEFT){ fx = "L"; }else if (keyCode == KeyEvent.VK_UP){ fx = "U"; }else if (keyCode == KeyEvent.VK_DOWN){ fx = "D"; }else if (keyCode == KeyEvent.VK_RIGHT){ fx = "R"; } } // 定时器 :监听时间流动 执行定时操作 @Override public void actionPerformed(ActionEvent e) { //随着分数增加,蛇的运动速度加快,难度增大,并判断是否已通关 int delay = 100 - score / 5; timer.setDelay(delay); if (delay <= 20) { isPass = true; repaint(); } // 如果游戏开始状态 并且游戏没有结束 if (isStart&&isFail==false){ // 右移 for (int i = lenth - 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){ isFail = true; } } else if (fx.equals("L")) { snakeX[0] = snakeX[0] - 25; if (snakeX[0] < 25) { isFail = true;} } else if (fx.equals("U")) { snakeY[0] = snakeY[0] - 25; if (snakeY[0] < 75) { isFail = true; } }else if (fx.equals("D")) { snakeY[0] = snakeY[0] + 25; if (snakeY[0] > 650) { isFail = true; } } // 如果小蛇的头于食物坐标重合 if (snakeX[0]==foodx && snakeY[0]==foody){ // 长度加一 lenth++; snakeX[lenth - 1] = foodx - 1; snakeY[lenth - 1] = foody - 1; score = score + 10; // 重新生成食物 foodx = 25 + 25 * random.nextInt(34); foody = 75 + 25 * random.nextInt(24); } // 结束判断 for (int i = 1; i < lenth; i++) { if (snakeX[0]==snakeX[i]&&snakeY[0]==snakeY[i]){ isFail = true; break; } } // 刷新界面 repaint(); } timer.start(); //让时间动起来 } //------------------------------------------------------以下不用: @Override public void keyTyped(KeyEvent e) { // 键盘摁下 弹起 } @Override public void keyReleased(KeyEvent e) { // 释放某个键 }}
以上是"怎么用Java写贪吃蛇小游戏"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!
坐标
键盘
食物
微软
监听
头部
字体
时间
积分
空格
篇文章
身体
长度
控制
输入
小游戏
内容
方法
画笔
界面
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
使用数据库应用系统教学设计
神华宁煤 工业网络安全
证券公司服务器坏了
数据库允许自动增长的指令
刘洋 江西省网络安全研究院
微观企业数据库
昆山阿拉丁网络技术有限公司
蛋白质药物数据库
哈尔滨国内软件开发公司排行
邮箱服务器测试
网络安全保障中心是干什么
408 数据库
创建一个网吧计费的数据库
网络安全审查办法最新修订
游侠饥荒如何开服务器
分布式能源网络技术
软件开发的法律
网络安全 政府什么职能
传播网络安全教育
党统系统数据库
临安 软件开发
招银科技国内金融互联网地位
对于网络安全的见解
讯天空网络技术有限公司
腾讯云服务器选完配置怎么付款
世界各国网络安全报告
深圳mes软件开发
现代通信网络技术有哪些
地域数据库
找邵阳市学软件开发的学校