当前位置:首页 > 趣味小程序 > 正文内容

【C++图形化编程】飞机大战1—基础资源导入与基本框架

亿万年的星光4年前 (2021-11-13)趣味小程序2271

0.前言

前面几篇文章中,我们实现了flappy的小游戏,这篇文章中,我们尝试制作飞机大战的游戏。

首先,效果图如下:


  1. 基础资源导入

下载图片及音乐资源:https://box356.lanzoui.com/ilIEfwg5lcb

下载解压后的图片及音乐资源如下:


2.游戏基础框架

#include <graphics.h>
#include <conio.h>
#include <math.h>
#include <stdio.h>
// 引用 Windows Multimedia API
#pragma comment(lib,"Winmm.lib")

#define High 800  // 游戏画面尺寸
#define Width 590

IMAGE img_bk; // 背景图片
float position_x,position_y; // 飞机位置
float bullet_x,bullet_y; // 子弹位置
float enemy_x,enemy_y; // 敌机位置
IMAGE img_planeNormal1,img_planeNormal2; // 正常飞机图片
IMAGE img_planeExplode1,img_planeExplode2; // 爆炸飞机图片
IMAGE img_bullet1,img_bullet2; // 子弹图片
IMAGE img_enemyPlane1,img_enemyPlane2; // 敌机图片
int isExpolde = 0; // 飞机是否爆炸
int score = 0; // 得分

void startup() {

}

void show() {

}

void updateWithoutInput() {

}

void updateWithInput() {

}

void gameover() {
	EndBatchDraw();
	getch();
	closegraph();
}

int main() {
	startup();  // 数据初始化
	while (1) { //  游戏循环执行
		show();  // 显示画面
		updateWithoutInput();  // 与用户输入无关的更新
		updateWithInput();     // 与用户输入有关的更新
	}
	gameover();     // 游戏结束、后续处理
	return 0;
}

3.现实静态资源现实

效果图:

参考代码:

#include <graphics.h>
#include <conio.h>
#include <math.h>
#include <stdio.h>

// 引用 Windows Multimedia API
#pragma comment(lib,"Winmm.lib")

#define High 800  // 游戏画面尺寸
#define Width 590

IMAGE img_bk; // 背景图片
float position_x,position_y; // 飞机位置
float bullet_x,bullet_y; // 子弹位置
float enemy_x,enemy_y; // 敌机位置
IMAGE img_planeNormal1,img_planeNormal2; // 正常飞机图片
IMAGE img_planeExplode1,img_planeExplode2; // 爆炸飞机图片
IMAGE img_bullet1,img_bullet2; // 子弹图片
IMAGE img_enemyPlane1,img_enemyPlane2; // 敌机图片
int isExpolde = 0; // 飞机是否爆炸
int score = 0; // 得分

void startup()
{
	mciSendString("open game_music.mp3 alias bkmusic", NULL, 0, NULL);//打开背景音乐
	mciSendString("play bkmusic repeat", NULL, 0, NULL);  // 循环播放
	initgraph(Width,High);
	loadimage(&img_bk, "background.jpg");
	loadimage(&img_planeNormal1, "planeNormal_1.jpg");
	loadimage(&img_planeNormal2, "planeNormal_2.jpg");
	loadimage(&img_bullet1, "bullet1.jpg");
	loadimage(&img_bullet2, "bullet2.jpg");
	loadimage(&img_enemyPlane1, "enemyPlane1.jpg");
	loadimage(&img_enemyPlane2, "enemyPlane2.jpg");
	loadimage(&img_planeExplode1, "planeExplode_1.jpg");
	loadimage(&img_planeExplode2, "planeExplode_2.jpg");
	position_x = Width*0.5;
	position_y = High*0.7;
	bullet_x = position_x;
	bullet_y = -85;
	enemy_x = Width*0.5;
	enemy_y = 10;	
	BeginBatchDraw();	
}

void show()
{
	putimage(0, 0, &img_bk);	// 显示背景	
	if (isExpolde==0)
	{
		putimage(position_x-50, position_y-60, &img_planeNormal1,NOTSRCERASE); // 显示正常飞机	
		putimage(position_x-50, position_y-60, &img_planeNormal2,SRCINVERT);

		putimage(bullet_x-7, bullet_y, &img_bullet1,NOTSRCERASE); // 显示子弹	
		putimage(bullet_x-7, bullet_y, &img_bullet2,SRCINVERT);
		putimage(enemy_x, enemy_y, &img_enemyPlane1,NOTSRCERASE); // 显示敌机	
		putimage(enemy_x, enemy_y, &img_enemyPlane2,SRCINVERT);
	}
	else
	{
		putimage(position_x-50, position_y-60, &img_planeExplode1,NOTSRCERASE); // 显示爆炸飞机	
		putimage(position_x-50, position_y-60, &img_planeExplode2,SRCINVERT);
	}
	outtextxy(Width*0.48, High*0.95, "得分:");
	char s[5];
	sprintf(s, "%d", score);
	outtextxy(Width*0.55, High*0.95, s);
	FlushBatchDraw();
	Sleep(2);
}

void updateWithoutInput()
{

}

void updateWithInput()
{

}

void gameover()
{
	EndBatchDraw();
	getch();
	closegraph();
}

int main()
{
	startup();  // 数据初始化	
	while (1)  //  游戏循环执行
	{
		show();  // 显示画面
		updateWithoutInput();  // 与用户输入无关的更新
		updateWithInput();     // 与用户输入有关的更新
	}
	gameover();     // 游戏结束、后续处理
	return 0;
}


扫描二维码推送至手机访问。

版权声明:本文由青少年编程知识记录发布,如需转载请注明出处。

分享给朋友:

相关文章

C++小游戏—反弹球实现打砖块

C++小游戏—反弹球实现打砖块

0.前言在上一篇中,我们用C++代码实现了弹球小游戏,上一篇链接可以点击这里查看。这一篇中,我们继续优化代码,使用上一篇的弹球小游戏进行扩展,实现打砖块效果。1.思路底部挡板跟随键盘移动在顶部生成目标...

【算法】前缀和与差分(1)一维数组前缀和

【算法】前缀和与差分(1)一维数组前缀和

一、定义前缀和:是指某序列的前n项和。可以理解成数学上上的数列的前n项和。差分:是前缀和的逆运算。二、前缀和的分类可以分成一维数组的前缀和和二维 数组的前缀和一维数组前缀和  &n...

【二分与分治】中间值、边界值、循环条件、模块写法(1)

【二分与分治】中间值、边界值、循环条件、模块写法(1)

0.前言二分法并不简单,或者说“思路简单,细节爆炸”,举例来说,你可能已经看过很多题解,那么可能会看到下面几种写法mid=(left+right)/2 mid=(left+right)>&...

C++自动关机小程序

/*  C++ 自动关机程序  实现原理:调用计算机内部的shutdown 命令       ...

【C++图形化编程】C++图形库的引入

【C++图形化编程】C++图形库的引入

0.前言前面的文章用C++的控制台完成了小游戏,但是我们平常玩的游戏都是有图形化界面,我们从这篇文章开始就引入一个C++图形库—EasyX。C++的图形库有很多,EasyX是最适合上手的图形库。1.简...

【C++图形化编程】EasyX的基本概念

一、颜色        EasyX 使用 24bit 真彩色,不支持调色板模式。     ...