一、准备工作
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;
}
那么这期的文章就到这里了,记得点赞关注哦~