iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Java实现升级版布谷鸟闯关游戏的示例代码
  • 828
分享到

Java实现升级版布谷鸟闯关游戏的示例代码

2024-04-02 19:04:59 828人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

目录前言主要设计功能截图代码实现游戏启动类核心类线程类用于重复绘图总结前言 《布谷鸟闯关-升级版》是一个基于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<rank_information> rfs;
	Graphics g=this.getGraphics();
	GameplayingFrame(user_inf user,List<rank_information> 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.topHeight;
    	            if(y1 || y2){
    	                System.out.println("hit inside");
    	            }
    	            return y1 || y2;
    	        }
    	        //已通过管道
    	        if(bird_x >= 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<rank_information> 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<rank_information> 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的相关知识有了进一步的了解,对java这门语言也有了比以前更深刻的认识。

java的一些基本语法,比如数据类型、运算符、程序流程控制和数组等,理解更加透彻。java最核心的核心就是面向对象思想,对于这一个概念,终于悟到了一些。

以上就是Java实现升级版布谷鸟闯关游戏的示例代码的详细内容,更多关于Java布谷鸟闯关游戏的资料请关注编程网其它相关文章!

--结束END--

本文标题: Java实现升级版布谷鸟闯关游戏的示例代码

本文链接: https://www.lsjlt.com/news/140690.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java实现升级版布谷鸟闯关游戏的示例代码
    目录前言主要设计功能截图代码实现游戏启动类核心类线程类用于重复绘图总结前言 《布谷鸟闯关-升级版》是一个基于java的布谷鸟闯关游戏,鼠标左键点击控制鸟的位置穿过管道间的缝隙,需要做...
    99+
    2024-04-02
  • Java怎么实现升级版布谷鸟闯关游戏
    这篇文章主要介绍“Java怎么实现升级版布谷鸟闯关游戏”,在日常操作中,相信很多人在Java怎么实现升级版布谷鸟闯关游戏问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java怎么实现升级版布谷鸟闯关游戏”的疑...
    99+
    2023-06-29
  • Java实现经典游戏俄罗斯方块(升级版)的示例代码
    目录前言主要需求主要设计功能截图代码实现总结前言 俄罗斯方块是一款风靡全球,从一开始到现在都一直经久不衰的电脑、手机、掌上游戏机产品,是一款游戏规则简单,但又不缺乏乐趣的简单经典小游...
    99+
    2024-04-02
  • Java实现warcraft java版游戏的示例代码
    目录前言主要需求功能截图代码实现启动入口ModelAttacker类ModelUnit类总结前言 致敬经典的warcraft,《warcraft java版》是一款即时战略题材单机游...
    99+
    2024-04-02
  • Java实现经典拳皇误闯冒险岛游戏的示例代码
    目录前言主要设计功能截图代码实现游戏主界面英雄总结前言 《拳皇误闯冒险岛》是拳皇和冒险岛素材的基于JavaSwing的动作类游戏,独创改编。 主要需求 拳皇迷迷糊糊醒来,发现自己在一...
    99+
    2024-04-02
  • Java实现经典游戏超级玛丽的示例代码
    目录前言主要设计功能截图代码实现游戏主界面马里奥小怪总结前言 在你的童年记忆里,是否有一个蹦跳、顶蘑菇的小人? 如果你回忆起了它,你定然会觉得现在它幼稚、无聊,画面不漂亮,游戏不精彩...
    99+
    2024-04-02
  • Java实现泡泡堂对战版游戏的示例代码
    目录前言主要设计功能截图代码实现游戏启动类核心监听类核心线程类总结前言 《泡泡堂II》是一个基于java的自制游戏,使用了MVC模式,分离了模型、视图和控制器,使得项目结构清晰易于扩...
    99+
    2024-04-02
  • Java实现单机版五子棋游戏的示例代码
    目录前言主要需求主要设计功能截图代码实现总结前言 五子棋是世界智力运动会竞技项目之一,是一种两人对弈的纯策略型棋类游戏,是世界智力运动会竞技项目之一,通常双方分别使用黑白两色的棋子,...
    99+
    2024-04-02
  • Matlab实现简易纪念碑谷游戏的示例代码
    按上下左右键(↑↓←→)移动物块 按AD键转动视角 游戏效果:如图所示原本无法通过的路径经过视角调整即可通过 完整代码 function...
    99+
    2024-04-02
  • Python实现生命游戏的示例代码(tkinter版)
    目录生命游戏(Game of Life)游戏概述生存定律图形结构代码实现运行界面使用简介后续改进生命游戏(Game of Life) 由剑桥大学约翰·何顿·...
    99+
    2024-04-02
  • Java实现经典游戏打砖块游戏的示例代码
    目录前言主要设计功能截图代码实现游戏核心类小球类砖块类总结前言 《JAVA打砖块》游戏是自制的游戏。玩家操作一根萤幕上水平的“棒子”,让一颗不断弹来弹去的&l...
    99+
    2024-04-02
  • Java实现贪吃蛇游戏的示例代码
    目录项目演示项目实战1. 游戏的主启动类2. 游戏的面板3. 数据中心4. 绘制静态面板5. 绘制静态小蛇6. 绘制动态小蛇7. 设置游戏状态8. 让蛇动起来9. 绘制食物布局10....
    99+
    2024-04-02
  • Java实现经典游戏2048的示例代码
    目录前言主要设计功能截图代码实现界面布局类业务逻辑类总结前言 2014年Gabriele Cirulli利用周末的时间写2048这个游戏的程序,仅仅只是好玩而已。他想用一种不同的视觉...
    99+
    2024-04-02
  • Java实现经典游戏FlappyBird的示例代码
    目录前言主要设计功能截图代码实现游戏启动类核心类工具类总结前言 《布谷鸟闯关-简单版》是一个基于java的布谷鸟闯关游戏,摁上键控制鸟的位置穿过管道间的缝隙,需要做碰撞检测,监听键盘...
    99+
    2024-04-02
  • Java实现扑克牌游戏的示例代码
    目录一、三人扑克二、具体实现Card类生成52张牌打乱顺序发牌三、完整代码一、三人扑克 想不想带上好朋友来上一局三人扑克呢。 二、具体实现 Card类 定义一个花色color变量和...
    99+
    2024-04-02
  • 基于Unity实现3D版2048游戏的示例代码
    分享三个无聊的时候用Unity写的小游戏 包含 2048 2D版本和3D版本 Voodoo的小游戏 Sticky block 开源仓库: https://gitee.com/wel...
    99+
    2023-02-02
    Unity实现2048游戏 Unity 2048游戏 Unity 2048 Unity 游戏
  • 非html5实现js版弹球游戏示例代码
    开始前的html页面  开始后的html游戏界面  html页面布局,即index.html文件源码如下: 复制代码 代码如下: <!DOCTYPE HTM...
    99+
    2022-11-15
    html5 js 弹球游戏
  • Java实现接月饼小游戏的示例代码
    目录前言主要设计功能截图代码实现游戏启动类核心类画面绘制总结前言 《接月饼小游戏》是一个基于java的自制游戏,不要被月亮砸到,尽可能地多接月饼。 此小项目可用来巩固JAVA基础语法...
    99+
    2024-04-02
  • Java+Swing实现五子棋游戏的示例代码
    目录一、系统介绍1.开发环境2.技术选型3.系统功能二、系统展示三、部分代码AI.javaChess.javaGobang.javaGobangListener.java一、系统介绍...
    99+
    2024-04-02
  • Java实现萝卜勇者游戏的示例代码
    目录前言主要设计功能截图代码实现启动类键盘监听核心算法总结前言 《萝卜勇者》是由国内玩家自制的一款独立游戏,玩家扮演萝卜勇士闯关,打败各种邪恶的敌人,获得最后的胜利。 《萝卜勇者》游...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作