飞机大战小游戏

飞机大战小游戏

1.功能描述

(1)游戏界面绘制:设置游戏的名称为“飞机大战小游戏”,游戏窗口的大小为512*768像素,在屏幕中居中显示;添加游戏背景,当重新开始一局游戏时,从上传的四个背景中随机显示一张,作为战斗场景。
(2)鼠标移动读取与判别:创建鼠标监听器,创建鼠标适配器,监听鼠标的移动的坐标,将鼠标的坐标赋值给英雄机,从而实现鼠标操作英雄机在画面中进行移动。
(3)子弹是否击中敌机判别:通过子弹的位置和敌机的位置来判断子弹击中了敌机,从而对敌机的血量进行减少,判断是否能够击杀敌机。
(4)英雄机是否碰撞敌机判别:与子弹和敌机的判别方式相同,通过两者的位置关系来判断是否碰撞,碰撞后英雄机生命值减一,子弹数初始为1,敌机消失。
(5)战斗机和导弹绘制:添加战斗机和导弹素材,随机的生成敌机和导弹,对于像素较大的大型敌机,使其移动速度减缓,对像素较小的敌机,使其移动速度增加,且可以变换方向,导弹速度慢且垂直下落,但不可击杀。
(6)得分显示:左上角绘制得分,每击杀一个敌机,增加10分,但是击杀三种敌机的难度不同,小型敌机移动速度快,不容易瞄准,大型敌机血量厚,不容易击杀,当击杀大型敌机后获得得分翻倍。
(7)生命值显示:右上角显示英雄机的生命值,以英雄机的图标数量来表示,当英雄机碰撞到敌机时生命值减一,碰撞到导弹时生命值减一,若无生命值后游戏结束,跳转到游戏结束界面。

2.系统流程图和部分代码

主系统流程图
操纵英雄机

public GamePanel(){
		
		bg = App.getImg("/img/bg4.png");
		
		//使用鼠标监听器    
		// 1.创建鼠标适配器
		MouseAdapter adapter = new MouseAdapter() {
			//2.确定需要监听的鼠标的事件
			// 鼠标的事件  
			//    (1)mouseMoved()    监听鼠标移动
			//    (2)mouseCliked()   监听鼠标单击事件
			//    (3)mousePressed()  监听鼠标按下去事件
			//    (4)mouseEntered()  监听鼠标移入游戏界面事件
			//    (5)mouseExited()   监听鼠标移出游戏界面事件
			//     MouseEvent 鼠标的事件,记录鼠标做的事情
			
			@Override
			public void mouseClicked(MouseEvent e) {
				if(gameover){
					hero = new Hero();
					action();
					gameover=false;
					score=0;
					//清空敌机集合
					eps.clear();
					//清空子弹集合
					fs.clear();
					Random rd = new Random();
					int index = (rd.nextInt(4)+1);
					bg = App.getImg("/img/bg"+index+".png");
					repaint();
				}
			}
			
			@Override
			public void mouseMoved(MouseEvent e) {
				//让英雄机的横纵坐标等于鼠标的横纵坐标
				int mx = e.getX();
				int my = e.getY();
				if(!gameover){
					hero.moveToMouse(mx, my);
				}
				//刷新界面重写绘制
				repaint();
			}
		};
		//3.将适配器加入到监听器中
		addMouseListener(adapter);
		addMouseMotionListener(adapter);
	}

击杀敌机

//检测子弹是否击中敌机
	protected void shootEp() {
		for(int i=0;i<fs.size();i++){
			Fire f = fs.get(i);
			//每拿一颗子弹,判断子弹是否击中敌机
			bang(f);
		}
	}
	//判断子弹是否击中敌机
	private void bang(Fire f) {
		for(int i=0;i<eps.size();i++){
			Ep e = eps.get(i);
			if(e.shootBy(f)){
				e.hp--;
				if(e.hp<=0){
					if(e.type==4){
						power++;
						if(power>3){
							score+=10;
							power=3;
						}
					}
					eps.remove(e);
					score+=10;
				}
				fs.remove(f);
			}
		}
	}
	//子弹移动
	protected void fireMove() {
		for(int i=0;i<fs.size();i++){
			Fire f = fs.get(i);
			f.move();
		}
	}
	//发射子弹的方法
	int findex = 0;
	protected void shoot() {
		findex++;
		if(findex>=30){
			if(power==1){
				Fire fire2 = new Fire(hero.x+45,hero.y-20,1);
				fs.add(fire2);
			}else if(power==2){
				Fire fire1 = new Fire(hero.x+10,hero.y,1);
				fs.add(fire1);
				Fire fire3 = new Fire(hero.x+80,hero.y,1);
				fs.add(fire3);
			}else{
				Fire fire1 = new Fire(hero.x+10,hero.y,0);
				fs.add(fire1);
				Fire fire2 = new Fire(hero.x+45,hero.y-20,1);
				fs.add(fire2);
				Fire fire3 = new Fire(hero.x+80,hero.y,2);
				fs.add(fire3);
			}
			findex=0;
		}
	}

得分计算

3.数据字典

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.碰撞机制

public boolean shootBy(Fire f) {
		boolean hit =   x<=f.x+f.w
				      &&x>=f.x-w
				      &&y<=f.y+f.h
				      &&y>=f.y-h;
		return hit;
	}

在这里插入图片描述

5.运行截图

在这里插入图片描述
在这里插入图片描述
注:背景图片可自己设计。第一次做的java小游戏作业。。。请各位大神指点。
对游戏未来的改进和完善:(1)继续优化碰撞机制,做到更加精准;(2)当子弹接触到敌机时产生爆炸效果;(3)可以增加Boss敌机,显示Boss敌机的血量;(4)对于一部分敌机增加敌机发射子弹功能,增加道具敌机,击杀后爆取道具(5)增加游戏的背景音乐和击杀敌机音乐等等。

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
C语言飞机大战游戏是一个基于控制台的游戏,源代码中引用了plane.h头文件来定义游戏所需的函数和常量。main函数调用了game函数开始游戏,并在游戏结束后使用system("pause")来暂停程序。 在plane.h中,定义了Showmap函数用于打印地图,game函数用于调用开始游戏,Move函数用于控制飞机的移动,Buttle函数用于生成子弹,FadeButtle函数用于消除子弹,Plan函数用于生成敌机,FeoButtle函数用于生成敌机的子弹,Judge函数用于判断游戏的胜负。 在Plan函数中,使用了随机数种子srand((unsigned)time(NULL))来生成随机数,然后根据随机数来确定敌机的坐标。敌机的坐标不能与墙壁重合,也不能与我方飞机碰撞。当找到合适的坐标后,将地方飞机的数据设置为4,并打破循环。 通过调用这些函数和利用随机数生成敌机的坐标,可以实现一个简单的C语言飞机大战游戏。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [C语言编写飞机大战游戏项目](https://blog.csdn.net/B85951005/article/details/126037896)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值