Java怎么实现升级版布谷鸟闯关游戏
发表于:2024-11-23 作者:千家信息网编辑
千家信息网最后更新 2024年11月23日,这篇文章主要介绍"Java怎么实现升级版布谷鸟闯关游戏",在日常操作中,相信很多人在Java怎么实现升级版布谷鸟闯关游戏问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"J
千家信息网最后更新 2024年11月23日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; Listrfs; 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; Listrfs; 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安全错误
数据库的锁怎样保障安全
计算机网络技术专业未来职业
防火墙在网络安全的作用
服务器国企
中小学教育网络安全
服务器pcie芯片价格
点播服务器如何搭建
全国高校学生网络安全知识竞赛
笔记本电脑服务器连接不上
软件开发与测试计划
网络安全保护怎么做
linux服务器进程查看
中科院 数据库新技术 试卷
德惠有名的网络安全创新服务
如何入侵网站服务器数据库
南通研华工控机服务器
数据库及处理
网络安全宣传周手抄报图片
著名删数据库事件
获取服务器文件路径
服务器数据库账号怎么连接
屏幕共享软件开发新报价图片
软件工程软件开发适合考研吗
odbc连接多个数据库
订票软件开发
游戏服务器配置方案
厦门网宁软件开发
服务器组件的功能
工控系统网络安全培训心得
机房服务器怎么连接
尘埃拉力2连接服务器