Java怎么实现升级版布谷鸟闯关游戏
发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,这篇文章主要介绍"Java怎么实现升级版布谷鸟闯关游戏",在日常操作中,相信很多人在Java怎么实现升级版布谷鸟闯关游戏问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"J
千家信息网最后更新 2026年11月01日Java怎么实现升级版布谷鸟闯关游戏
这篇文章主要介绍"Java怎么实现升级版布谷鸟闯关游戏",在日常操作中,相信很多人在Java怎么实现升级版布谷鸟闯关游戏问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"Java怎么实现升级版布谷鸟闯关游戏"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
前言
《布谷鸟闯关-升级版》是一个基于java的布谷鸟闯关游戏,鼠标左键点击控制鸟的位置穿过管道间的缝隙,需要做碰撞检测,监听键盘事件,背景图片的切换,障碍物管道产生时y轴上需要随机位置。
主要设计
1.设计游戏界面,用swing实现
2.设计背景
3.设计移动墙
4.设计布谷鸟
5.设计障碍物
6.设计背景音乐和音效
7.新增用户账号注册登录功能
8.引用mysql数据库,管理用户账号密码和储存排行榜等信息
需要提前创建好数据库"game",字符集选"utf8mb4"
然后执行mysql表结构和初始化数据脚本
修改代码里的DBUtils的参数值
9.新增游戏商城模块
10.新增排行榜模块
功能截图
用户注册:

游戏欢迎界面:
游戏开始界面:
鼠标左键点击控制鸟的位置穿过管道间的缝隙
代码实现
游戏启动类
//开始界面public class frame extends JFrame { private JPanel pane; public static frame frame; public frame(){ this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setSize(240,150); ImageIcon backGround = new ImageIcon("images/frame.png"); JLabel bkgImage = new JLabel(backGround); bkgImage.setSize(240,150); bkgImage.setLocation(0,0); JPanel bkgPanel = (JPanel) this.getContentPane(); bkgPanel.setOpaque(false); //注册按钮 JButton button_regist =new JButton("注册"); button_regist.setBounds(30,40, 60,30); bkgPanel.add(button_regist); button_regist.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ new frame_regist().setVisible(true); } }); //登录按钮 JButton button_log=new JButton("登录"); button_log.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ new frame_log(frame).setVisible(true); } }); button_log.setBounds(130,40, 60, 30); bkgPanel.add(button_log); this.getContentPane().add(bkgImage); } //弹出显示传入String的提示框 public static void frame_warning(String warning) { JFrame frame=new JFrame(); JPanel pane=new JPanel(); frame.setBounds(540, 360, 300, 150); frame.setContentPane(pane); pane.setBorder(new EmptyBorder(5, 5, 5, 5)); pane.setLayout(null); JLabel label_warning=new JLabel(warning); label_warning.setBounds(50,20,150,50); pane.add(label_warning); JButton button_yes = new JButton("确定"); button_yes.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { frame.setVisible(false); } }); button_yes.setBounds(80, 80, 93, 23); pane.add(button_yes); frame.setVisible(true); } public static void main(String[] args){ frame =new frame(); frame.setLocationRelativeTo(null); frame.setVisible(true); } /** * */}核心类
import static java.lang.Thread.sleep; public class GameplayingFrame extends JFrame{ private static final long serialVersionUID = 1L; user_inf user; MainFrame mainframe; List rfs; Graphics g=this.getGraphics(); GameplayingFrame(user_inf user,List rfs,MainFrame mainframe) { this.mainframe=mainframe; this.rfs=rfs; this.user=user; this.setTitle("Fly Bird"); this.setSize(Constant.Frame_Width,Constant.Frame_Height); this.setResizable(false); this.setLocationRelativeTo(null); this.setVisible(true); Scene stage = new Scene(user); Graphics g = this.getGraphics(); ImageIcon backGround = new ImageIcon("images/bg_day.png"); JLabel bkgImage = new JLabel(backGround); bkgImage.setSize(288,512); bkgImage.setLocation(0,0); JPanel bkgPanel = (JPanel) this.getContentPane(); bkgPanel.setOpaque(false); this.getContentPane().add(bkgImage); //为界面加入鼠标的响应事件 this.addMouseListener(new MouseListener(){ @Override public void mouseReleased(MouseEvent e) {} @Override public void mousePressed(MouseEvent e) { } @Override public void mouseExited(MouseEvent e) { } @Override public void mouseEntered(MouseEvent e) { } @Override public void mouseClicked(MouseEvent e) { stage.speed_y=-175; } }); JLabel scoreText = new JLabel(); Font font = new Font(Font.SERIF, Font.ITALIC, 30); scoreText.setFont(font); scoreText.setText(String.valueOf(0)); this.setLayout(null); scoreText.setBounds(129,0,30,30); this.add(scoreText); //添加一个线程对象,用于重复绘图,来节约主线程的资源,使游戏运行更加流畅 new Thread(new playingThread(stage,g,this,user,rfs,mainframe)).start(); } } /* * 场景类,包含了游戏界面的物品以及游戏实现的算法 */class Scene{ //后缀_x/_y表示横/纵坐标,窗口左上角为原点 public final int bird_x = 88; //重力加速度 public final int G = 300; public double bird_y; public double birdRadius; //速度--正值为向下,负值为向上 public int speed_x; public int speed_y; private Ground land= new Ground(GameUtil.toBufferedImage(GameUtil.getImage("ioo/land.png"))); BufferedImage back= GameUtil.toBufferedImage(GameUtil.getImage("ioo/bg_day.png")) ; Barrier barrier; Barrier barrier1; Ground ground; FlyingBird bird=null; Scene(user_inf user){ bird_y = 200; bird=new FlyingBird(bird_x,bird_y,user); birdRadius = 22; speed_x = 3; speed_y = 0; ground = new Ground(GameUtil.toBufferedImage(GameUtil.getImage("ioo/land.png"))); barrier= new Barrier(GameUtil.toBufferedImage(GameUtil.getImage("ioo/pipe_down1.png"))); barrier1= new Barrier(GameUtil.toBufferedImage(GameUtil.getImage("ioo/pipe_down.png"))); } //返回true是游戏已经结束,返回false表示游戏继续进行 boolean ifGameOver(){ //碰到地面 if(bird_y + birdRadius > 512 - ground.getHeight()){ System.out.println("hit ground"); return true; } //碰到顶 if(bird_y - birdRadius < 0){ System.out.println("hit sky"); return true; } //未过左边界时 if(bird_x + birdRadius <= barrier.location_x){ return false; } //接近左边界时 if(bird_x + birdRadius > barrier.location_x && bird_x < barrier.location_x){ if(bird_y < barrier.topHeight || bird_y + birdRadius*0.7 > 512 - barrier.bottomHeight){ System.out.println("hit left edge"); return true; } return false; } //通过管道时 if(bird_x >= barrier.location_x && bird_x < barrier.location_x + barrier.width){ boolean y1 = bird_y + birdRadius > 512 - barrier.bottomHeight; boolean y2 = bird_y = barrier.location_x + barrier.width){ return false; } return false; } //ifGameOver=false时才执行 boolean ifGetScore(){ return bird_x + birdRadius > barrier.location_x; } //第二次之后的绘图 public void drawItems(Graphics g){ //鸟 bird.draw(g); //下障碍物 g.drawImage(barrier.img, barrier.location_x, 512 - barrier.bottomHeight,33,barrier.bottomHeight, null); //上障碍物 g.drawImage(barrier1.img,barrier.location_x, 0,33,barrier.topHeight, null); //地面 g.drawImage(ground.getBufferedImage(),0,512-30, null); ground.checkGround(); barrier.checkBarrier(); } //更新各个物体的位置(每秒30次) public void itemMove() { //计算鸟的速度 speed_y += G*0.033; //鸟最大的向下速度为220 if(speed_y > 220){ speed_y = 220; } //计算鸟的纵坐标 bird_y += speed_y*0.033; bird.y=bird_y; //计算障碍物和地面的横坐标 barrier.location_x -= speed_x; ground.setX(ground.getX()-speed_x); } //变速方法,根据分数调整速度 public void shift(int score){ if(score < 1) { speed_x = 3; } else if (score < 100){ speed_x = 4; } else if (score < 200){ speed_x = 5; } else if (score < 300){ speed_x = 6; } else if (score < 400){ speed_x = 7; } else if (score < 500){ speed_x = 8; } else speed_x = 9; } } 线程类用于重复绘图
public class playingThread implements Runnable { Scene stage; private Image iBuffer; private Graphics gBuffer; List rfs; user_inf user; MainFrame mainframe; Graphics g ; GameplayingFrame playingframe ; public static boolean flag = true;//控制计分板的变量 public int score = 0;//分数 playingThread(Scene stage,Graphics g,GameplayingFrame playingframe ,user_inf user,List rfs,MainFrame mainframe) { this.mainframe=mainframe; this.rfs=rfs; this.user=user; this.stage=stage; this.g=g; this.playingframe=playingframe; } @Override public void run() { while (!stage.ifGameOver()){ stage.drawItems(g);//绘画 stage.itemMove();//物体移动 //33ms刷新一次 try { sleep(33); } catch (InterruptedException e) { e.printStackTrace(); } if(stage.ifGetScore()){ score++; } stage.shift(score); //playingframe.update(g); //清除上一次绘画结果 //双缓冲方法清除上一次绘画结果 if (iBuffer == null){ iBuffer = playingframe.createImage(playingframe.getSize().width,playingframe.getSize().height); gBuffer = iBuffer.getGraphics(); } playingframe.paint(gBuffer); g.drawImage(iBuffer,0,0,null); // stage.drawItems(g);//再绘画 } user.setCoin(user.getCoin()+score); new user_dao().update(user); playingframe.setVisible(false); rank_information rf=new rank_information(); rf.setScore(score); rf.setName(user.getUser_name()); rfs.add(rf); new rank_dao().update_rank(rfs); new resultFrame(score,user,rfs,mainframe); System.out.println("game over"); }} 到此,关于"Java怎么实现升级版布谷鸟闯关游戏"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!
布谷
布谷鸟
设计
界面
升级版
升级
障碍
障碍物
位置
管道
绘画
速度
学习
地面
数据
方法
用户
线程
背景
鼠标
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
苏州找大状互联网科技有限公司
科技赋能下的互联网金融
互联网属科技
互联网科技会
智能科技公司是互联网公司吗
互联网与科技金融数据
迪茉互联网科技
西安互联网科技公司
成都仁贤领冠互联网科技有限公司
互联网公司会议桌创意科技软装饰
华中科技有哪些互联网大佬
卫星互联网科技股票
深圳市运趣互联网科技有限公司
玖二柒互联网科技公司待遇
互联网教育科技公司vipkid
中国的互联网科技企业的崛起
宁夏科技产业互联网案例
燊美集互联网科技有限公司
迪庆互联网科技招生
互联网高科技行业有哪些企业
疫情对互联网科技公司影响
华宇互联网科技
宜安科技 互联网金融
互联网金融科技平台
居家互联网科技有限公司
中正互联网科技招聘
天速互联网络科技有限公司
美国互联网科技实力
互联网科技博主张洲
青岛互联网科技园