C\C++开发的经典魔塔小游戏--(4)楼层控制,背景音乐,个人元素

楼层切换是游戏中必不可少的一个元素,总不能一直待在某一层,这样就无法享受通关的快感,在原本的设想中,我打算画十层地图,并且每层地图都添加一些新的素材进去,后来发现,太过繁琐,于是这个游戏就成了一个半成品。 但是主要的逻辑已经实现完毕,剩下的主要是画地图。如果哪位有精力的朋友,可以试试画他几百张地图我暂时只介绍逻辑实现。

一旦碰触的切换楼层的元素,就需要刷新页面,将另一张图片打印出来,因为之前的二维数组设计界面,所以切换界面并不需要花费多少步骤。
int map2[13][13] =
{
	0,0,0,0,0,0,0,0,0,0,0,0,0,
	0,15,0,1,10,5,0,0,6,0,8,1,0,
	0,1,0,1,0,0,0,0,11,0,0,18,0,
	0,6,1,1,1,1,0,0,1,1,1,1,0,
	0,0,0,0,1,0,0,0,1,0,0,10,0,
	0,1,1,1,1,0,1,2,1,3,6,1,0,
	0,1,0,0,1,0,6,11,10,0,0,9,0,
	0,1,1,0,1,0,0,0,1,0,18,5,0,
	0,1,1,11,1,1,1,1,1,0,7,14,0,
	0,1,0,0,0,0,1,0,10,0,0,11,0,
	0,1,0,5,1,3,1,0,1,2,10,1,0,
	0,1,18,6,5,0,1,0,6,0,0,16,0,
	0,0,0,0,0,0,0,0,0,0,0,0,0,
};
首先 画出第二张地图来。
static int Floor = 2;  定义全局变量控制层数


每层显示不一样的地图,如果到了最后一层,则不必要再填充切换楼层的
元素,直接放出信号,跳出程序,凭个人喜好还可以添加一些画面或者音乐
if (floor == 2)
			{
				for (int q = 0; q < 13; q++)
				{
					for (int k = 0; k < 13; k++)
					{
						map[q][k] = map2[q][k];
					}
				}
			}
if (floor == 3)
			{
				for (int q = 0; q < 13; q++)
				{
					for (int k = 0; k < 13; k++)
					{
						map[q][k] = map3[q][k];
					}
				}

			}
			Floor++;
为游戏添加一些背景音乐: 提前下载好MP3格式的音乐,播放只需要三行 相应的,我们可以为某一层,或者打斗场面添加不同的音乐,让游戏更加的丰富。
#pragma comment(lib,"Winmm.lib")
mciSendString(_T("open 1.mp3 alias mymusic"), NULL, 0, NULL);
	mciSendString(_T("play mymusic"), NULL, 0, NULL);
相应的,我们也需要更多的元素去增加游戏的趣味性,没有人会想在游戏里体会比生活更大的压力。玩家玩游戏是为了放松。一些轻松诙谐的元素可以让玩家有更好的体验,从而充钱。
void beijing1()
{
	initgraph(55 * 13, 55 * 13);
	IMAGE PIAN;
	loadimage(&PIAN, "191.jpg", 55 * 14, 55 * 13);
	putimage(0, 0, &PIAN);
}
void beijing2()
{
	initgraph(55 * 13, 55 * 13);
	IMAGE PIAN;
	loadimage(&PIAN, "192.jpg", 55 * 14, 55 * 13);
	putimage(0, 0, &PIAN);
}
void beijing3()
{
	initgraph(55 * 13, 55 * 13);
	IMAGE PIAN;
	loadimage(&PIAN, "193.jpg", 55 * 14, 55 * 13);
	putimage(0, 0, &PIAN);
}
这三个函数是为了模拟一个选择的场景,分别是开始游戏,存档开始和退出游戏。 存档游戏并没有实现,但是已经有了逻辑思路,可以给各位读者讲解一下。 我们只要保存当时的位图显示界面的二维数组就可以了,使用文件输入:

在这里插入图片描述

然后使用文件输出来读取上次保存的二维数组,直接接替了游戏运行

在这里插入图片描述

至此 ,存档开始游戏就可以实现了

控制滑窗界面其实是一种模拟,当接收键盘输入后,刷新界面,切换图片,就可以实现切换显示的场景


int  choose(int y)
{

	char userKey;
	userKey = _getch();
	switch (userKey)
	{
	case'w':
	case'W':
	case 72:
		if (y == 191)
		{
			beijing1();
			return 191;
		}
		if (y == 192)
		{
			beijing1();	return 191;

		}
		if (y == 193)
		{
			beijing2();		return 192;
		}
		break;
	case 's':
	case 'S':
	case 80:
		if (y == 191)
		{
			beijing2();
			return 192;
		}
		if (y == 192)
		{
			beijing3();	return 193;
		}
		if (y == 193)
		{
			beijing3();
			return 193;
		}
		break;
	case 13:
		return 200; break;
	default: break;
	}
}
添加一些个人元素来丰富游戏可玩性
void qiang(int x)
{
	if (x == 1)
		cout << "what color is this?";
	if (x == 2)
		cout << " 什么垃圾游戏?";
	if (x == 3)
		cout << "what fuck?";
	if (x == 4)
		cout << "ni ma lgbd";
	if (x == 5)
		cout << "马化腾女儿今天过生日";
	if (x == 6)
		cout << "转发此消息5000条";
	if (x == 7)
		cout << "你就能得到傻逼证明书";
	if (x == 8)
		cout << "什么鬼?";
	if (x == 9)
		cout << "hey man!";
}
void wen()
{

	int ID = MessageBox(hwnd, "是否花费五元创建一个角色 ", "欢迎来到魔塔单机 ", MB_YESNO);
	if (ID == IDYES)
	{
		system("cls");
		HANDLE  hConsole;
		hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
		SetConsoleTextAttribute(hConsole, 5);
		gotoxy(10, 30);
		cout << "是否花费十元给角色起个名字:";
		cin.get(role.RoleName, 20);
	}
	else {
		system("cls");
		HANDLE  hConsole;
		hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
		SetConsoleTextAttribute(hConsole, 5);
		gotoxy(10, 30);
		cout << "阁下牛批,告辞!";
		Sleep(1500);
		exit(0);
	}
	ID = MessageBox(hwnd, "您打算给这游戏充钱吗? ", "欢迎来到魔塔单机 ", MB_YESNO);
	if (ID == IDYES)
	{
		HANDLE  hConsole;
		hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
		gotoxy(10, 30);
		SetConsoleTextAttribute(hConsole, 5);
		cout << "充钱你会变得更强,我欣赏你,年轻人!";
		Sleep(1500);


	}
	else
	{
		system("cls");
		HANDLE  hConsole;
		hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
		gotoxy(10, 30);
		SetConsoleTextAttribute(hConsole, 5);
		cout << "不充钱就别玩了,告辞!";
		Sleep(1500);
		exit(0);

	}

}
void init()
{
	int y = 191;
	HANDLE  hConsole;
	hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
	for (int j = 1; j > 0; j--)
	{
		for (int i = 255; i >= 0; i--)
		{
			int count = rand() % 9 + 1;
			SetConsoleTextAttribute(hConsole, i);
			qiang(count);
			Sleep(18);
		}
	}
	wen();//窗口询问
	beijing1();
	while (1)
	{
		y = choose(y);
		if (y == 200)
			break;
	}
	inputRoleName();
}
void donghua()
{
	IMAGE PIAN;
	loadimage(&PIAN, "300.jpg");
	for (int i = 0; i < 55 * 13; i++)
	{
		putimage(0, 0, 55 * 14, i, &PIAN, 0, 0);
		Sleep(5);
	}
}

至此,这个简单的魔塔小游戏就开发结束了,因为并没有什么复杂的逻辑处理,所以我将所有代码写在了一个.cpp文件里,下一篇将会展示一些运行场景以及源代码。

发布了17 篇原创文章 · 获赞 8 · 访问量 2200
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览