狗头大战,飞机大战改编版本c++

源码来自罗德岛公共休息室的《C语言/C++经典游戏项目教程—飞机大战,非常适合小白入门练习》。

将敌机的飞机模型改成了狗头表情包,因为某人经常给我发狗头,我就想要做一个打爆狗头的小程序,哼!!

游戏开始界面:

狗头大战,飞机大战改编版本c++_第1张图片

 飞机发射子弹

狗头大战,飞机大战改编版本c++_第2张图片

 狗头被击打后

狗头大战,飞机大战改编版本c++_第3张图片

 

 本代码编程使用的软件为Vistual Studio,感觉没有pycharm好用,不过用习惯了也还好吧。

完整代码如下:

#include 
#include 
#include 
#include 
using namespace std;
#define bu_num 15 //子弹数量
#define enemy_num 1


void createbu();
//加载玩家
IMAGE img_gamer[2];
IMAGE img_bk;
IMAGE img_bu[2];
IMAGE img_en[5];


void loadsource() {
	//加载图片
	loadimage(&img_bk, "resource/image/background.png");
	loadimage(img_gamer+0, "resource/image/me2.png");
	loadimage(img_gamer+1, "resource/image/me1.png");
	loadimage(img_bu+0, "resource/image/bullet2.png");
	loadimage(img_bu + 1, "resource/image/bullet1.png");
	loadimage(img_en + 0, "resource/image/shimo12.png");
	loadimage(img_en + 1, "resource/image/shimo13.png");
	loadimage(img_en + 2, "resource/image/shimo14.png");
	loadimage(img_en + 3, "resource/image/shimo15.png");
	loadimage(img_en + 4, "resource/image/shimo16.png");

}

//自定义定时器
bool Timer(int ms, int id) {
	static int start[5];
	int end = clock();
	if (end - start[id] >= ms) {

		start[id] = end;
		return true;
	}
	return false;
}

struct Plane {
	int x;
	int y;
	bool isDie;
	int frame;
}gamer;

Plane enemy[enemy_num];
//初始化函数
void plane_init(Plane* pthis,int x,int y) {
	pthis->x = x;
	pthis->y = y;
	pthis->isDie = false;
	pthis->frame = 0;
}

void plane_draw(Plane* pthis) {

	putimage(pthis->x, pthis->y, img_gamer + pthis->frame);
	pthis->frame = (pthis->frame + 1) % 2;
	
}

//移动飞机
void plane_move(Plane* pthis) {

	int speed = 3;

	if(GetAsyncKeyState(VK_UP))
	{
		pthis->y-=speed;
	}
	if (GetAsyncKeyState(VK_DOWN)){pthis->y+=speed;}
	if (GetAsyncKeyState(VK_LEFT))
	{
		pthis->x-=speed;
	}
	if (GetAsyncKeyState(VK_RIGHT))
	{
		pthis->x+=speed;
	}
	if (GetAsyncKeyState(VK_SPACE)&&Timer(100,0) ){

		createbu();
	}
}
//子弹结构
struct Bu {
	int x;
	int y;
	bool isDie;

}bullet[bu_num] = { 0 };



//创建子弹
void createbu() {
	for (int i = 0;i < bu_num;i++)
	{
		if (bullet[i].isDie)
		{
			bullet[i].x = gamer.x + 51;
			bullet[i].y = gamer.y ;
			bullet[i].isDie = false;
			break;
			
		}
	}

}

//子弹移动
void moveBu() {
	for (int i = 0;i < bu_num;i++)
	{
		if (!bullet[i].isDie) {
			bullet[i].y -= 4;
		}

		//如果子弹跑出窗口,让他消失
		if (bullet[i].y < 0) {
			bullet[i].isDie = true;
		}
		
	}

}

//狗头爆炸

void boom() {

	for (int i = 0;i < enemy_num;i++)
	{
		if (!enemy[i].isDie)
			putimage(enemy[i].x, enemy[i].y, img_en + 0);
			putimage(enemy[i].x, enemy[i].y, img_en + 1);
			putimage(enemy[i].x, enemy[i].y, img_en + 2);
			putimage(enemy[i].x, enemy[i].y, img_en + 3);
			putimage(enemy[i].x, enemy[i].y, img_en + 4);
			enemy[i].isDie = true;
	}
}

//创建狗头
void createenemy() {
	for (int i = 0;i < enemy_num;i++)
	{
		if (enemy[i].isDie)
		{

			enemy[i].x = rand()%getwidth();
			enemy[i].y = 82;
			enemy[i].isDie = false;
			break;

		}
	}
}
void zhuangji() {
	for (int i = 0;i < bu_num;i++) {
		for (int k = 0;k < enemy_num;k++) {
			if (bullet[i].y > enemy[k].y && bullet[i].x < enemy[k].x+ 40 && bullet[i].x > enemy[k].x && bullet[i].y < enemy[k].y + 40)
			{
				bullet[i].isDie = true;
				boom();

			}
		}
	}
}
void moveenemy() {

	for (int i = 0;i < enemy_num;i++)
	{
		if (!enemy[i].isDie)
		{

			enemy[i].y += 2; 
			if (enemy[i].y > getheight())
			{
				enemy[i].isDie = true;
			}

		}
	}

}

//初始化玩家
void init() {
	srand(GetTickCount());
	loadsource();
	plane_init(&gamer,(getwidth() - 102)/2, getheight()-126);
	//初始化子弹
	for (int i = 0;i < bu_num;i++)
	{
		bullet[i].isDie = true;
	}
	//初始化狗头
	for (int i = 0;i < enemy_num;i++)
	{
		enemy[i].isDie = true;
	}
}

//绘制界面
void draw() {
	
	//输出图片
	putimage(0, 0, &img_bk);
	plane_draw(&gamer);
	//绘制子弹
	for (int i = 0;i < bu_num;i++)
	{
		if(!bullet[i].isDie)
		putimage(bullet[i].x, bullet[i].y, img_bu+1);
	}
	for (int i = 0;i < enemy_num;i++)
	{
		if (!enemy[i].isDie)
			putimage(enemy[i].x, enemy[i].y, img_en + 0);
	}

}
int main() {

	//创建窗口
	initgraph(480,560);
	init();
	while (1) {
		int starttime = clock();//获取程序执行到调用函数所经过的毫秒数

		draw();
		plane_move(&gamer);
		moveBu();
		if (Timer(800, 0)) {
			createenemy();
		}
		
		moveenemy();
		zhuangji();

		int frametime = clock() - starttime;
		if (1000 / 60 - frametime > 0) {
			Sleep(1000 / 60 - frametime);
		}

	}
	
	getchar();
	return 0;

}

主要思路是

1、制作飞机,子弹,敌机。

2、定义飞机坐标,子弹坐标,敌机坐标。

3、键盘上下左右空格对应飞机移动和发射子弹。

4、敌机出现位置随机,位置会随时间变化向下移动。

5、子弹位置随时间变化向上移动。

6、当子弹位置与敌机位置重合时,子弹消失,敌机状态发生改变。

你可能感兴趣的:(c++,c++,开发语言)