c++编写坦克大战(同年回忆)全网最全的讲解

c++编写坦克大战

项目前言

需要熟练的掌握c语言,c++。熟练掌握各种数据类型和数据结构。拥有优秀的文档阅读能力(设计EasyX图形库的使用),拥有一个漂亮温柔的女朋友。

 环境准备

我这里使用的是VS2022,还需要安装EasX图形库。安装教程icon-default.png?t=N6B9https://blog.csdn.net/m0_72703340/article/details/125968925

游戏窗口的初始化

 第一步当然是游戏的初始化。

我们先使用easyX图形库提供的接口初始话一个绘图窗口。定义宏 表示窗口的大小 以便于后续的二次开发

#define WIN_HEIGHT 650
#define WIN_WIDTH 650
initgraph(WIN_WIDTH, WIN_HEIGHT);

然后我们定义一个初始化函数。

 导入图片素材

在easyX中 ,用IMAGE表示图片变量。

我们定义两个变量 一个是logo 一个是操作提示。

	IMAGE imgLogo;
	IMAGE imgiLlustrate;

然后对图片进行导入 使用loadimage函数 (需要先把项目素材放到res文件夹下,不然会导入失败)

	loadimage(&imgLogo, "./res/logo.bmp");
	loadimage(&imgiLlustrate, "./res/illustrate.jpg");	

 然后绘制提示按钮(这些函数的用法和定义我都放到了最后)


	setlinecolor(WHITE);
	setfillcolor(BLACK);

	fillrectangle(230, 200, 310, 240);
	settextstyle(25, 0, "宋体");
	outtextxy(240, 210, "说 明");
	
	fillrectangle(350, 200, 430, 240);
	outtextxy(360, 210, "开始");

然后贴logo


	putimage(110, 20, &imgLogo);

实现鼠标消息的监听与判断

bool finished = true;
	while (finished) {
		mouseMsg = GetMouseMsg();
		switch (mouseMsg.uMsg)
		{
		case WM_MOUSEMOVE://鼠标移动
			if ((mouseMsg.x > 230 && mouseMsg.x < 310) &&( mouseMsg.y>200 && mouseMsg.y < 240)) 
			{
				putimage(150, 250, &imgiLlustrate);
			}
			else {
				solidrectangle(150, 250, 459, 550);
			}
			break;
		case WM_LBUTTONDOWN://左键down
			if ((mouseMsg.x > 350 && mouseMsg.x < 430) && (mouseMsg.y>200 && mouseMsg.y < 240)) {
				//to do
				cleardevice();	
				finished = true;
				break;
			}
		}
	}




太累了 就先写道这里了

游戏分里外两个部分组成,里部分(用户不可见) 通过里部分执行判断,地图数组更改,和各种值的改变。更改完里部分再根据相应变化更改表部分。(用户可视部分)表部分的打印通过gotoxy去到相应坐标再printf打印出字符,通过文本函数改变文字字体颜色与文字背景颜色与字符组合实现图形界面。 程序通过 计数器+循环判断 的思想,类似单核cpu的多线程实现(单线程在不同程序/函数间来回执行)省去了多线程。(具体过程在功能设计与描述有详细描述) 另AI实现与加强依赖于rand随机函数的运用,进一步强化AI,增加游戏乐趣 功能方面,游戏参考于80年代任天堂红白机(FC/FamilyComputer)上的游戏坦克大战(Battle City),包括地图,游戏模式等等(当时的游戏直接烧在电路板上)。所以游戏平衡方面已经有了很好的参考,无需再花大量时间测试平衡性。 但诸如地图中的树林元素,随机道具等没有实现。但较之原版,该游戏由C/C++编写PC运行,由字符界面实现游戏画面。原版一辆坦克的子弹未消失之前不能发射第二颗。导致子弹打击远处CD长,近处CD短。该游戏每个子弹都有相同CD,子弹未消失只要CD达到即可发射第二颗,第三颗…增加了真实性,相较于原版是个改进。且考虑到PC性能不一内置了游戏速度调整。玩家可根据PC性能调整至合适的速度。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

luciferau

你的鼓励是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值