怎么用Java写贪吃蛇小游戏
发表于:2024-10-16 作者:千家信息网编辑
千家信息网最后更新 2024年10月16日,小编给大家分享一下怎么用Java写贪吃蛇小游戏,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!设计思路:由GameStart
千家信息网最后更新 2024年10月16日怎么用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安全错误
数据库的锁怎样保障安全
软件开发学习课程有哪些
连不上远程orcl数据库
数据库缓存到内存
龙华网络技术
软件开发大学专业介绍
神将三国弹剑作歌服务器
大华产品网络安全等级
vc 定时读取串口数据库
软件开发的时间可行性分析
虹口区新能源软件开发服务
数据库lname和fname
吾爱分享网络安全
网络安全特征的含义
美国中央情报局的后台数据库
怎么看数据库
网络安全能力提升ppt
海南电信dns备用服务器云主机
嘉福盛互联网科技有限公司
软件开发职业待遇薪水
企业服务器怎么有效防攻击
wow人数最多服务器
新时达一体机服务器封楼层
浪潮服务器有管理界面吗
邯郸华诚网络技术有限公司
数据安全网关与数据库审计
数据库原理及应用阶段性测试
网络安全和编程的关系
考生志愿填报数据库是什么
网络安全手抄报初一A3纸
计算机网络技术终端