C++编写简单的游戏(迷宫游戏)

一、准备工作

1.下载一个C++编译器,对于新手,建议使用dev-c++,老手可自选编译器;

2.我们需要一个WPS,它的表格功能可以帮助我们规划游戏中的地图;

3.此次设计的是控制台程序,需要使用头文件<iostream>来实现输入和输出;

4.设计游戏地图时,需要使用一个二维数组,用以模拟地图;

5.我们需要通过弹窗来告诉玩家一些信息,因此需要用到<windows.h>这个头文件

二、开始设计

1.初始化二维数组

二维数组的作用是模拟地图,需要提前设定好不同数字代表什么,下面是我的设置:

0表示路,1表示墙,2表示玩家位置,3表示终点位置

写成代码如下:

#include <iostream>
#include <windows.h>
#include <cstdlib>
using namespace std;
int map[8][8],move,a1 = 0,b1 = 0,a2 = 0,b2 = 0;
//第一轮初始化函数
void initDef()
{
	//0表示路,1表示墙,2表示玩家位置,3表示终点位置
	map[0][0] = 2;
	for (int i = 1;i <= 7;i++)
	{
		map[i][0] = 1;
		map[0][i] = 1;
		map[7][i] = 1;
		map[i][7] = 1;
	}
	map[1][0] = 0;
	map[6][6] = 3;
	map[2][2] = 1;
	map[2][3] = 1;
	map[3][2] = 1;
	map[3][3] = 1;
	map[3][4] = 1;
	map[3][5] = 1;
	map[4][5] = 1;
	map[5][2] = 1;
	map[5][3] = 1;
	map[5][6] = 1;
	map[5][5] = 1;
}

地图的样子如下:

你墙墙墙墙墙墙墙
              墙
墙  墙墙      墙
墙  墙墙墙墙  墙
墙        墙  墙
墙  墙墙  墙墙墙
墙          终墙
墙墙墙墙墙墙墙墙

2.设计撞墙检测

同样是一个函数,代码如下

//墙壁碰撞检测函数
bool meetDef(int a,int b)
{
	if (map[a][b] == 0 || map[a][b] == 3)
	{
		return true;
	}
	else if (map[a][b] == 1)
	{
		return false;
	}
}

3.画面更新的设计

基本思路是清除原来的文字,再输出新的文字,代码如下:

//画面更新函数 
void aginDef()
{
	system("cls");
	for (int i = 0;i < 8;i++)
	{
		for (int j = 0;j < 8;j++)
		{
			if (map[i][j] == 0)
			{
				cout << "  ";
			}
			else if (map[i][j] == 1)
			{
				cout << "墙";
			}
			else if (map[i][j] == 2)
			{
				cout << "你";
			}
			else if (map[i][j] == 3)
			{
				cout << "终"; 
			}
		}
		cout << endl; 
	}
}

4.胜负判断函数

我们制定的胜利规则是到达终点胜利,只要玩家所在的横、竖下标和终点相等,就赢了,代码如下:

//胜利判断函数 
bool winDef()
{
	if (map[6][6] == 2)
	{
		return true;
	}
	return false;
}

5.程序的主函数

由于我们提前写好了很多功能函数,因此,主函数不长,代码如下:

//程序主函数 
int WINAPI WinMain(HINSTANCE hlnstance,HINSTANCE hPrevlnstance,PSTR szCmdLine,int nCmdShow)
{
	initDef();
	aginDef();
	MessageBox(NULL,TEXT("欢迎来玩迷宫游戏"),TEXT("迷宫游戏"),0);
	while (true)
	{
		aginDef();
		cout << endl;
		cout << "请输入一个数字,控制你在迷宫里的位置" << endl;
		cout << "1表示向上,2表示向下,3表示向左,4表示向右" << endl;
		cin >> move;
		if (move == 1)
		{
			a2 = a2 - 1;
		}
		else if (move == 2)
		{
			a2 = a2 + 1;
		}
		else if (move == 3)
		{
			b2 = b2 - 1;
		}
		else if (move == 4)
		{
			b2 = b2 + 1;
		}
		else
		{
			MessageBox(NULL,TEXT("操作无效!"),TEXT("迷宫游戏"),0);
		}
		if (meetDef(a2,b2))
		{
			map[a1][b1] = 0;
			a1 = a2;b1 = b2;
			map[a2][b2] = 2;
		}
		if (winDef())
		{
			MessageBox(NULL,TEXT("恭喜你,你已成功走到终点"),TEXT("迷宫游戏"),0);
			break;
		}
	}
	MessageBox(NULL,TEXT("即将退出游戏"),TEXT("迷宫游戏"),0);
	return 0;
}

三、编译和运行

写好了游戏,可以编译了,游戏顺利运行,下面是所有代码:

#include <iostream>
#include <windows.h>
#include <cstdlib>
using namespace std;
int map[8][8],move,a1 = 0,b1 = 0,a2 = 0,b2 = 0;
//第一轮初始化函数
void initDef()
{
	//0表示路,1表示墙,2表示玩家位置,3表示终点位置
	map[0][0] = 2;
	for (int i = 1;i <= 7;i++)
	{
		map[i][0] = 1;
		map[0][i] = 1;
		map[7][i] = 1;
		map[i][7] = 1;
	}
	map[1][0] = 0;
	map[6][6] = 3;
	map[2][2] = 1;
	map[2][3] = 1;
	map[3][2] = 1;
	map[3][3] = 1;
	map[3][4] = 1;
	map[3][5] = 1;
	map[4][5] = 1;
	map[5][2] = 1;
	map[5][3] = 1;
	map[5][6] = 1;
	map[5][5] = 1;
}
//墙壁碰撞检测函数
bool meetDef(int a,int b)
{
	if (map[a][b] == 0 || map[a][b] == 3)
	{
		return true;
	}
	else if (map[a][b] == 1)
	{
		return false;
	}
}
//画面更新函数 
void aginDef()
{
	system("cls");
	for (int i = 0;i < 8;i++)
	{
		for (int j = 0;j < 8;j++)
		{
			if (map[i][j] == 0)
			{
				cout << "  ";
			}
			else if (map[i][j] == 1)
			{
				cout << "墙";
			}
			else if (map[i][j] == 2)
			{
				cout << "你";
			}
			else if (map[i][j] == 3)
			{
				cout << "终"; 
			}
		}
		cout << endl; 
	}
}
//胜利判断函数 
bool winDef()
{
	if (map[6][6] == 2)
	{
		return true;
	}
	return false;
}

//程序主函数 
int WINAPI WinMain(HINSTANCE hlnstance,HINSTANCE hPrevlnstance,PSTR szCmdLine,int nCmdShow)
{
	initDef();
	aginDef();
	MessageBox(NULL,TEXT("欢迎来玩迷宫游戏"),TEXT("迷宫游戏"),0);
	while (true)
	{
		aginDef();
		cout << endl;
		cout << "请输入一个数字,控制你在迷宫里的位置" << endl;
		cout << "1表示向上,2表示向下,3表示向左,4表示向右" << endl;
		cin >> move;
		if (move == 1)
		{
			a2 = a2 - 1;
		}
		else if (move == 2)
		{
			a2 = a2 + 1;
		}
		else if (move == 3)
		{
			b2 = b2 - 1;
		}
		else if (move == 4)
		{
			b2 = b2 + 1;
		}
		else
		{
			MessageBox(NULL,TEXT("操作无效!"),TEXT("迷宫游戏"),0);
		}
		if (meetDef(a2,b2))
		{
			map[a1][b1] = 0;
			a1 = a2;b1 = b2;
			map[a2][b2] = 2;
		}
		if (winDef())
		{
			MessageBox(NULL,TEXT("恭喜你,你已成功走到终点"),TEXT("迷宫游戏"),0);
			break;
		}
	}
	MessageBox(NULL,TEXT("即将退出游戏"),TEXT("迷宫游戏"),0);
	return 0;
}

那么这期的文章就到这里了,记得点赞关注哦~

  • 9
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,下面是一个简单C++ 编写迷宫游戏示例,供参考: ```c++ #include <iostream> #include <string> using namespace std; const int ROW = 5; // 迷宫行数 const int COL = 5; // 迷宫列数 // 迷宫地图 char map[ROW][COL] = { {'#', '#', '#', '#', '#'}, {'#', ' ', ' ', ' ', '#'}, {'#', '#', '#', ' ', '#'}, {'#', ' ', ' ', ' ', '#'}, {'#', '#', '#', '#', '#'} }; // 当前位置 int cur_row = 1; int cur_col = 1; // 打印迷宫地图 void print_map() { for (int i = 0; i < ROW; i++) { for (int j = 0; j < COL; j++) { cout << map[i][j] << " "; } cout << endl; } } // 移动 bool move(int row, int col) { if (map[row][col] == ' ') { // 如果可以移动 map[cur_row][cur_col] = ' '; // 重置原位置 cur_row = row; cur_col = col; map[cur_row][cur_col] = 'o'; // 设置新位置 return true; } return false; } int main() { map[cur_row][cur_col] = 'o'; // 设置起点 print_map(); while (true) { string input; cout << "请输入方向:"; cin >> input; if (input == "w") { // 上 if (move(cur_row - 1, cur_col)) { print_map(); } } else if (input == "s") { // 下 if (move(cur_row + 1, cur_col)) { print_map(); } } else if (input == "a") { // 左 if (move(cur_row, cur_col - 1)) { print_map(); } } else if (input == "d") { // 右 if (move(cur_row, cur_col + 1)) { print_map(); } } else { // 输入错误 cout << "请输入正确的方向!" << endl; } if (cur_row == ROW - 2 && cur_col == COL - 2) { // 到达终点 cout << "恭喜您,成功到达终点!" << endl; break; } } return 0; } ``` 这个迷宫游戏是一个基于控制台的简单实现,玩家通过输入 w/s/a/d 来控制人物移动,最终到达终点。其中 # 表示障碍物,o 表示人物。你可以根据自己的需求对代码进行修改和扩展。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值