IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C++飞机大战 easyX -> 正文阅读

[C++知识库]C++飞机大战 easyX

在这里插入图片描述

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

#pragma comment(lib,"Winmm.lib")

class preGraph {
public:
	preGraph(int w, int h)
	{
		initgraph(w, h);
		BeginBatchDraw();
	}
	~preGraph()
	{
		EndBatchDraw();
		closegraph();
	}
};
IMAGE img_bk;//背景
IMAGE img_plane_mask;
IMAGE img_plane;//飞机
IMAGE img_bullet;//子弹
IMAGE img_bullet_mask;
IMAGE img_enemyplane;//敌机
IMAGE img_enemyplane_mask;
int width;//窗口大小
int height;
int score;
int planeX, planeY;//飞机的坐标
int planeWidth, planeHeight;//飞机宽高
int bulletX, bulletY;//子弹坐标
int enemy_x, enemy_y;//敌机位置
int enemyWidth, enemyHeight;//敌机宽高
int speed;
bool isExplode;
bool bulletExit;

void start()
{
	
	mciSendString("open .\\飞机大战图片音乐素材\\game_music.mp3 alias bkmusic", NULL, 0, NULL);
	mciSendString("play bkmusic repeat", NULL, 0, NULL);

	loadimage(&img_bk, ".\\飞机大战图片音乐素材\\background.jpg");
	width = img_bk.getwidth();
	height = img_bk.getheight();
	
	loadimage(&img_plane_mask, ".\\飞机大战图片音乐素材\\planeNormal_1.jpg");
	loadimage(&img_plane, ".\\飞机大战图片音乐素材\\planeNormal_2.jpg");
	planeHeight = img_plane.getheight();
	planeWidth = img_plane.getwidth();

	loadimage(&img_bullet_mask, ".\\飞机大战图片音乐素材\\bullet1.jpg");
	loadimage(&img_bullet, ".\\飞机大战图片音乐素材\\bullet2.jpg");

	loadimage(&img_enemyplane, ".\\飞机大战图片音乐素材\\enemyPlane2.jpg");
	loadimage(&img_enemyplane_mask, ".\\飞机大战图片音乐素材\\enemyPlane1.jpg");
	enemyHeight = img_enemyplane.getheight();
	enemyWidth = img_enemyplane.getwidth();

	planeX = width * 0.5 + 10;
	planeY = height * 0.5 + 10;

	enemy_x = width * 0.5;
	enemy_y = 0;

	bulletY = planeY;
	bulletX = planeX;

	isExplode = false;
	bulletExit = false;

	score = -1;
}
void show()
{
	putimage(0, 0, &img_bk, SRCCOPY);
	putimage(planeX, planeY, &img_plane_mask, NOTSRCERASE);
	putimage(planeX, planeY, &img_plane, SRCINVERT);
	
	putimage(enemy_x, enemy_y, &img_enemyplane_mask, NOTSRCERASE);
	putimage(enemy_x, enemy_y, &img_enemyplane, SRCINVERT);

	putimage(bulletX, bulletY, &img_bullet_mask, NOTSRCERASE);
	putimage(bulletX, bulletY, &img_bullet, SRCINVERT);
	
	settextcolor(BLUE);
	TCHAR s[] = _T("当前积分:");
	outtextxy(10, height - 200, s);
	TCHAR s_12[5];
	_stprintf_s(s_12, _T("%d"), score);
	outtextxy(90, height - 200, s_12);
	FlushBatchDraw();
	Sleep(10);
}
void updateWithoutInput()
{
	bulletY -= 3;//子弹向上飞
	if (bulletY <= 0) {
		bulletExit = false;
	}
	if (enemy_y < height ) {//敌机向下飞
		enemy_y += 2;
	}
	else {
		enemy_y = 0;//上下为一个周期,与flappy里的柱子左右一个周期同理
	}
	if (bulletX >= enemy_x && bulletX <= enemy_x + enemyWidth && 
		bulletY >= enemy_y && bulletY <= enemy_y + enemyHeight) {//判定子弹和敌机是否碰撞
		enemy_x = rand() % width;
		enemy_y = -40;
		bulletY = -85;
		score++;

		bulletExit = false;
	}
	if (abs(planeX - enemy_x) < planeWidth/2 + enemyWidth/2 - 10 && 
		abs(planeY - enemy_y) < planeHeight/2 + enemyHeight/2 - 10) {//判定飞机和敌机是否发生碰撞
		isExplode = true;
	}


}
void updateWithInput()
{
	char input;
	if (_kbhit())
	{
		input = _getch();//键盘控制
		switch (input)
		{
		//需要注释掉鼠标控制才可使用键盘控制飞机移动
		/*case 'a':planeX -= speed; break;
		case 's':planeY += speed; break;
		case 'd':planeX += speed; break;
		case 'w':planeY -= speed; break;*/
		case ' ':
			if (bulletExit == false) {
				bulletExit = true;
				bulletX = planeX + img_plane.getwidth() / 2 - 17;
				bulletY = planeY - img_bullet.getheight() + 5;
			}
		}
	}
	ExMessage m;//新版写法
	while (peekmessage(&m, EM_MOUSE, PM_NOREMOVE))
	{
		m = getmessage();
		if (m.message == WM_MOUSEMOVE)//飞机跟随鼠标
		{
			planeX = m.x - (planeWidth / 2 - 5);
			planeY = m.y - (planeHeight / 2 + 30);
		}
		if (m.message == WM_LBUTTONDOWN && bulletExit == false)//左键发射子弹
		{
			bulletExit = true;
			bulletX = planeX + img_plane.getwidth() / 2 - 17;
			bulletY = planeY - img_bullet.getheight() + 5;
		}
	}


}

void lose() {
	EndBatchDraw();
	cleardevice();
	char str[] = "Game over!";
	outtextxy(width / 2 - 10, height / 2, str);
	_getch();
	closegraph();
}

int main()
{
	start();
	preGraph initgp(width, height);
	while (1)
	{
		show();
		updateWithoutInput();
		updateWithInput();
		if (isExplode == true) {
			lose();
		}
	}
	_getch();
	return 0;
}
  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-10-25 12:21:44  更:2021-10-25 12:24:06 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 5:46:17-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码