C++实现经典坦克大战(一)

本文介绍了使用C++和easyX库来实现经典坦克大战游戏的初步过程,包括库的下载安装、游戏的总体思路、初始化菜单的实现(logo、说明、开始部分)以及游戏地图和坦克初始化的步骤。通过加载地图图片和处理鼠标事件,创建了游戏的基本界面。
摘要由CSDN通过智能技术生成

简介

本项目是基于easyX库来实现的一个C++版本的经典坦克大战的游戏界面。

easyX库的下载及安装使用

easyX的全称为EasyX Graphics Library,是针对与Visual C++的免费绘图库,支持 VC6.0 ~ VC2019,简单易用,学习成本极低,应用领域广泛。
easyX的下载链接附上:
https://easyx.cn/download/EasyX_20210224.exe

  1. 双击打开可执行文件
    EasyX
  2. 按照提示进行
    在这里插入图片描述
    在这里插入图片描述
    选择需要安装的编译器,一般都会自动检测到。安装完毕之后可再编译器中检测一下,输入以下代码,若不出现报错,则安装成功
    #include<graphics.h>
    int main()
    {
         
    	initgraph(650, 650);//创建一个650 ×650 的画布
    	system("pause");
    }
    

总体思路

首先,在我们创建任何游戏之前必然会有一个总体思路,即实现游戏的过程。在实现本次坦克大战的过程中,作者我主要是一下思路:

  1. 首先,我们需要创建一个画布,来构造我们游戏所需要的基本界面。
  2. 齐次,在已构造的画布中布局相关菜单和地图,从而进行游戏界面初始化。
  3. 最后,进行游戏相关功能的实现。
  4. 所以,作者所写的代码中主要包括三个函数,分别是开始场景,初始化地图,以及游戏开始这三个函数。
#include<graphics.h>
int main()
{
   
	initgraph(650, 650);//创建一个650 ×650 的画布
	menu() //初始化菜单
	init_map(&map[0][0], 26, 26);//初始化地图
	play();//游戏开始
	system("pause");
}

实现初始化菜单

先上效果图
在这里插入图片描述
为实现这个效果图,我将他分为三个部分:

  1. logo部分
  2. 说明 部分
  3. 开始 部分

实现logo部分

在网络上查找logo的效果图,
logo
将图片加载到画布上:

//显示logo
IMAGE logo_img; //定义一个IMAGE对象 logo_img
loadimage(&logo_img, _T("logo.bmp"), 433, 147);//将图片加载到logo_img里面去
putimage(110, 20, &logo_img); //显示图片

实现说明部分

说明部分包括外部的方框,以及其中的说明二字,可以直接使用easyX中自带的fillrectangle 函数以及outtextxy函数,直接上代码:

setlinecolor(WHITE);//设置方框边框线的颜色
setfillcolor(BLACK);//设置方框填充的颜色
fillrectangle(220, 200, 300, 240);
settextstyle(25, 0, _T("宋体"));//设置字体类型
outtextxy(230, 210, _T("说明"));//显示字体

实现开始部分

话不多说,直接上代码:

fillrectangle(350, 200, 430, 240);
outtextxy(360, 210, _T("开始"));

初始化界面的一些简单操作

如果你前面的代码内容都操作无误的话,现在运行之后应该已经得到这样的结果了:
在这里插入图片描述
但是我们正常游戏界面并不希望是这样的,我们希望的是这样的效果:
在这里插入图片描述
所以还进行鼠标信息的处理,来实现鼠标一到达说明所在的位置,即可出现说明菜单的内容。同时,我们还希望在点击开始按键的时候,可以直接打开一个新的界面,进行游戏操作。好了,话不多说,直接上代码:

MOUSEMSG mouse; //定义一个MOUSEMSG对象的mouse,用来获取鼠标信息
IMAGE illustrate_img;//定义一个IMAGE类
loadimage(&illustrate_img, _T("illustrate.jpg"), 300, 300);//加载图片
while (1) {
   
	mouse = GetMouseMsg();
	switch (mouse.uMsg) {
   
	case WM_MOUSEMOVE:
		if (mouse.x > 220 && mouse.x < 300 && mouse.y > 200 && mouse.y < 240) {
   
			putimage(150, 250, &illustrate_img);
		}
		else {
   
			solidrectangle(150, 250, 450, 550);
		}
		break;
	case WM_LBUTTONDOWN:
		if ((mouse.x > 350 && mouse.x < 430) && (mouse.y > 200 && mouse.y < 240)) {
   
			cleardevice();//清空
		}
		else
		{
   
			break;
		}
		return;
	}
}

//注释: while循环中的内容主要为获取并分析鼠标的操作,因为鼠标经常性移动,多以创建的MOUSEMSG 类别的变量mouse必须时刻更新鼠标状态。switch语句用来分析鼠标状态:

  1. WM_MOUSEMOVE语句用来判断鼠标移动位置
  2. WM_LBUTTONDOWN语句用来判断鼠标点击情况

至此,我们就可以实现一个基本的坦克大战初始化界面了。

实现游戏界面

实现游戏地图

玩过坦克大战游戏的都知道,我们进入游戏之后首先进入我们目光的就是游戏地图,而不同关卡的一个很大区别也是地图的不同。
所以如何实现地图显得至关重要。
如果想实现花里胡哨的游戏界面,那么图片必然是不可或缺的,所以卑微作者我的思路也就是通过加载地图图片来实现游戏的地图,话不多说,先上代码为敬:

void init_map2(int* map, int rows, 
  • 9
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

学编程的小w

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值