字符基础——简易版飞机大战

本文介绍了如何使用C/C++开发一款字符基础的飞机大战游戏,包括玩家飞机、敌机的移动、开火、碰撞检测和得分机制。游戏采用Dev-C++ 5作为开发环境,使用特定字符表示游戏元素,并通过控制台光标移动实现清屏和隐藏光标,以减少闪烁。文章详细讲解了游戏逻辑和实现方法,包括敌机的生成、移动和碰撞后的状态改变。
摘要由CSDN通过智能技术生成

使用C/C++开发一个字符版的飞机大战,玩家可以上下左右移动,空格键开火,子弹为激光,敌机可以自我移动,玩家发射的激光如果击中敌机,绘画简易版爆炸效果。

开发环境:Dev-C++ 5

介绍:使用表示主角飞机,使用表示敌机,使用表示敌机被击中的形态,使用表示正在开火的主角飞机,"|"表示激光。当敌机被击中后,分数score++并且在一个随机的位置生成新的敌机,这里限制了敌机只能在第0行到第4行以及第0列到第width-3列交错的区域内移动,通过多次循环移动一次敌机,确保了玩家飞机的机动性更强。

制作过程:

使用x、y变量记录主角飞机的左上角顶点位于第x行第y列;

使用target_x、target_y变量记录敌机的左上角顶点位于第target_x行第target_y列;

使用target_x_v、target_y_v变量记录敌机垂直方向和水平方向的速度;

使用isFire记录玩家是否按下了开火键,如果玩家按空格键开火,将1赋值给isFire变量,当发射完激光后,将0重新赋值回isFire;

使用score记录分数,击中敌机,分数+1;

使用input记录玩家按下的按键,使用getch()可以不按下回车就触发按键事件;

使用width和height记录游戏区域共有width列height行;

使用count记录第几次循环了,每到第五次循环,敌机进行一次移动。

	int i,j;
	int x = 15;
	int y = 10;
	int score = 0;
	int isFire = 0; 
	int target_x = 1;//敌机点坐标 
	int target_y = 1;
	int target_x_v = 1;//敌机纵向速度,值为正数向下移动,值为负数向上移动 
	int target_y_v = 1;	//敌机横向速度,值为正数向右移动,值为负数向左移动 
	int width = 40;
	int height = 22;
	int count = 0;//每循环五次,敌机移动一次 
	char input;

由于使用传统的system("cls")清屏会有严重的闪烁效果,这里使用windows.h下的SetConsoleCursorPosition(Handle handle,COORD pos)来将光标进行移动pos点处,每次循环前先执行下该方法,从而实现清屏效果。

//将光标移动到(x,y)处,实现清屏效果 
void goToXY(int x,int y){
	HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
	COORD pos;
	pos.X = x;
	pos.Y = y;
	SetConsoleCursorPosition(handle,pos);
}

除此之外,光标的闪烁效果也是比较严重的,这里可以使用HideCursor()函数对光标进行隐藏。

//隐藏光标 
void HideCursor(){
	CONSOLE_CURSOR_INFO cursor_info = {1,0};
	SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),&cursor_info);
}

重点说下打印玩家飞机和敌机以及碰撞检测:

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值