C++进行推箱子游戏设计

C++进行推箱子游戏设计

#头文件Map.h

#include<iostream>
#include<cstdlib>//用库函数exit()
#include<conio.h>//用库函数getch()
#include<windows.h>
using namespace std;
class Map
{
public:
	void Move(char a[][20],char z,int& x,int& y,int& k);//移动函数
	void Pos(int x,int y);//设置光标位置
	void Welcometogame();//开始界面
	void Sum(int y,int r,int c);//步数计数函数
};

void Map::Pos(int x,int y)
{
 COORD pos={x,y};
 HANDLE hOutput=GetStdHandle(STD_OUTPUT_HANDLE);
 SetConsoleCursorPosition(hOutput,pos);
}
void Map::Welcometogame()
{
 Pos(40,12);
 system("title 李清宝的推箱子");
 cout<<"欢迎来到推箱子游戏!";
 Pos(44,13);
 cout<<"共有五关。";
 Pos(44,25);
 system("pause");
 system("cls");
 Pos(40,11);
 cout<<"用w、s、a、d分别控制人的移动\n";
 Pos(40,12);
 cout<<"按r为重来当前关卡\n";
 Pos(40,13);
 cout<<"按c可以撤销一步,但是只能撤销一步哦\n";
 Pos(40,14);
 cout<<"游戏要求:用人H将箱子0推到*处\n";
 Pos(40,15);
 cout<<"游戏中按q可以返回主界面";
 Pos(40,18);
 system("pause");
 system("cls");
 Pos(40,15);
 cout<<"请输入数字选择关卡(回车键确认):\n";
 Pos(25,16);
 cout<<"1:关卡1,2:关卡2,3:关卡3,4:关卡4,5:关卡5,6:退出游戏\n";
}
void Map::Sum(int y,int r,int c)
{
	Pos(40,18);cout<<"移动步数:"<<y;
	Pos(40,19);cout<<"撤退步数:"<<r;
	Pos(40,20);cout<<"重来次数:"<<c;
}
void Map::Move(char a[][20],char z,int& x,int& y,int& k)
{
	if(z=='w')
        {
			k=1;
            if(a[x-1][y]!='#')
            {
                if(a[x][y]!='P'&&a[x-2][y]==' '&&a[x-1][y]=='O')
                {
                    a[x][y]=' ';
                    x--;
                    a[x][y]='H';
                    a[x-1][y]='O';
                }
				else if(a[x][y]!='P'&&a[x-2][y]=='*'&&a[x-1][y]=='O')
                {
                    a[x][y]=' ';
                    x--;
                    a[x][y]='H';
                    a[x-1][y]='@';
                }
                else if(a[x][y]!='P'&&a[x-2][y]=='*'&&a[x-1][y]=='@')
                {
                    a[x][y]=' ';
                    x--;
                    a[x][y]='P';
                    a[x-1][y]='@';
                }
                else if(a[x][y]!='P'&&a[x-2][y]==' '&&a[x-1][y]=='@')
                {
                    a[x][y]=' ';
                    x--;
                    a[x][y]='P';
                    a[x-1][y]='O';
                }
                else if(a[x][y]!='P'&&a[x-1][y]==' ')
                {
                    a[x][y]=' ';
                    x--;
                    a[x][y]='H';
                }
				else if(a[x][y]!='P'&&a[x-1][y]=='*')
				{
					a[x][y]=' ';
					x--;
					a[x][y]='P';
				}
				else if(a[x][y]=='P'&&a[x-2][y]==' '&&a[x-1][y]=='O')
                {
                    a[x][y]='*';
                    x--;
                    a[x][y]='H';
                    a[x-1][y]='O';
                }
				else if(a[x][y]=='P'&&a[x-2][y]=='*'&&a[x-1][y]=='O')
                {
                    a[x][y]='*';
                    x--;
                    a[x][y]='H';
                    a[x-1][y]='@';
                }
                else if(a[x][y]=='P'&&a[x-2][y]=='*'&&a[x-1][y]=='@')
                {
                    a[x][y]='*';
                    x--;
                    a[x][y]='P';
                    a[x-1][y]='@';
                }
                else if(a[x][y]=='P'&&a[x-2][y]==' '&&a[x-1][y]=='@')
                {
                    a[x][y]='*';
                    x--;
                    a[x][y]='P';
                    a[x-1][y]='O';
                }
                else if(a[x][y]=='P'&&a[x-1][y]==' ')
                {
                    a[x][y]='*';
                    x--;
                    a[x][y]='H';
                }
				else if(a[x][y]=='P'&&a[x-1][y]=='*')
				{
					a[x][y]='*';
					x--;
					a[x][y]='P';
				}
            }
        }
        if(z=='a')
        {
			k=3;
            if(a[x][y-1]!='#')
            {
                if(a[x][y]!='P'&&a[x][y-2]==' '&&a[x][y-1]=='O')
                {
                    a[x][y]=' ';
                    y--;
                    a[x][y]='H';
                    a[x][y-1]='O';
                }
				else if(a[x][y]!='P'&&a[x][y-2]=='*'&&a[x][y-1]=='O')
                {
                    a[x][y]=' ';
                    y--;
                    a[x][y]='H';
                    a[x][y-1]='@';
                }
                else if(a[x][y]!='P'&&a[x][y-2]=='*'&&a[x][y-1]=='@')
                {
                    a[x][y]=' ';
                    y--;
                    a[x][y]='P';
                    a[x][y-1]='@';
                }
                else if(a[x][y]!='P'&&a[x][y-2]==' '&&a[x][y-1]=='@')
                {
                    a[x][y]=' ';
                    y--;
                    a[x][y]='P';
                    a[x][y-1]='O';
                }
                else if(a[x][y]!='P'&&a[x][y-1]==' ')
                {
                    a[x][y]=' ';
                    y--;
                    a[x][y]='H';
                }
				else if(a[x][y]!='P'&&a[x][y-1]=='*')
				{
					a[x][y]=' ';
					y--;
					a[x][y]='P';
				}
				else if(a[x][y]=='P'&&a[x][y-2]==' '&&a[x][y-1]=='O')
                {
                    a[x][y]='*';
                    y--;
                    a[x][y]='H';
                    a[x][y-1]='O';
                }
				else if(a[x][y]=='P'&&a[x][y-2]=='*'&&a[x][y-1]=='O')
                {
                    a[x][y]='*';
                    y--;
                    a[x][y]='H';
                    a[x][y-1]='@';
                }
                else if(a[x][y]=='P'&&a[x][y-2]=='*'&&a[x][y-1]=='@')
                {
                    a[x][y]='*';
                    y--;
                    a[x][y]='P';
                    a[x][y-1]='@';
                }
                else if(a[x][y]=='P'&&a[x][y-2]==' '&&a[x][y-1]=='@')
                {
                    a[x][y]='*';
                    y--;
                    a[x][y]='P';
                    a[x][y-1]='O';
                }
                else if(a[x][y]=='P'&&a[x][y-1]==' ')
                {
                    a[x][y]='*';
                    y--;
                    a[x][y]='H';
                }
				else if(a[x][y]=='P'&&a[x][y-1]=='*')
				{
					a[x][y]='*';
					y--;
					a[x][y]='P';
				}
            }
        }
        if(z=='d')
        {
			k=4;
            if(a[x][y+1]!='#')
            {
                if(a[x][y]!='P'&&a[x][y+2]==' '&&a[x][y+1]=='O')
                {
                    a[x][y]=' ';
                    y++;
                    a[x][y]='H';
                    a[x][y+1]='O';
                }
				else if(a[x][y]!='P'&&a[x][y+2]=='*'&&a[x][y+1]=='O')
                {
                    a[x][y]=' ';
                    y++;
                    a[x][y]='H';
                    a[x][y+1]='@';
                }
                else if(a[x][y]!='P'&&a[x][y+2]=='*'&&a[x][y+1]=='@')
                {
                    a[x][y]=' ';
                    y++;
                    a[x][y]='P';
                    a[x][y+1]='@';
                }
                else if(a[x][y]!='P'&&a[x][y+2]==' '&&a[x][y+1]=='@')
                {
                    a[x][y]=' ';
                    y++;
                    a[x][y]='P';
                    a[x][y+1]='O';
                }
                else if(a[x][y]!='P'&&a[x][y+1]==' ')
                {
                    a[x][y]=' ';
                    y++;
                    a[x][y]='H';
                }
				else if(a[x][y]!='P'&&a[x][y+1]=='*')
				{
					a[x][y]=' ';
					y++;
					a[x][y]='P';
				}
				else if(a[x][y]=='P'&&a[x][y+2]==' '&&a[x][y+1]=='O')
                {
                    a[x][y]='*';
                    y++;
                    a[x][y]='H';
                    a[x][y+1]='O';
                }
				else if(a[x][y]=='P'&&a[x][y+2]=='*'&&a[x][y+1]=='O')
                {
                    a[x][y]='*';
                    y++;
                    a[x][y]='H';
                    a[x][y+1]='@';
                }
                else if(a[x][y]=='P'&&a[x][y+2]=='*'&&a[x][y+1]=='@')
                {
                    a[x][y]='*';
                    y++;
                    a[x][y]='P';
                    a[x][y+1]='@';
                }
                else if(a[x][y]=='P'&&a[x][y+2]==' '&&a[x][y+1]=='@')
                {
                    a[x][y]='*';
                    y++;
                    a[x][y]='H';
                    a[x][y+1]='O';
                }
                else if(a[x][y]=='P'&&a[x][y+1]==' ')
                {
                    a[x][y]='*';
                    y++;
                    a[x][y]='H';
                }
				else if(a[x][y]=='P'&&a[x][y+1]=='*')
				{
					a[x][y]='*';
					y++;
					a[x][y]='P';
				}
            }
        }
        if(z=='s')
        {
			k=2;
            if(a[x+1][y]!='#')
            {
                if(a[x][y]!='P'&&a[x+2][y]==' '&&a[x+1][y]=='O')
                {
                    a[x][y]=' ';
                    x++;
                    a[x][y]='H';
                    a[x+1][y]='O';
                }
				else if(a[x][y]!='P'&&a[x+2][y]=='*'&&a[x+1][y]=='O')
                {
                    a[x][y]=' ';
                    x++;
                    a[x][y]='H';
                    a[x+1][y]='@';
                }
                else if(a[x][y]!='P'&&a[x+2][y]=='*'&&a[x+1][y]=='@')
                {
                    a[x][y]=' ';
                    x++;
                    a[x][y]='P';
                    a[x+1][y]='@';
                }
                else if(a[x][y]!='P'&&a[x+2][y]==' '&&a[x+1][y]=='@')
                {
                    a[x][y]=' ';
                    x++;
                    a[x][y]='P';
                    a[x][y+1]='O';
                }
                else if(a[x][y]!='P'&&a[x+1][y]==' ')
                {
                    a[x][y]=' ';
                    x++;
                    a[x][y]='H';
                }
				else if(a[x][y]!='P'&&a[x+1][y]=='*')
				{
					a[x][y]=' ';
					x++;
					a[x][y]='P';
				}
				else if(a[x][y]=='P'&&a[x+2][y]==' '&&a[x+1][y]=='O')
                {
                    a[x][y]='*';
                    x++;
                    a[x][y]='H';
                    a[x+1][y]='O';
                }
				else if(a[x][y]=='P'&&a[x+2][y]=='*'&&a[x+1][y]=='O')
                {
                    a[x][y]='*';
                    x++;
                    a[x][y]='H';
                    a[x+1][y]='@';
                }
                else if(a[x][y]=='P'&&a[x+2][y]=='*'&&a[x+1][y]=='@')
                {
                    a[x][y]='*';
                    x++;
                    a[x][y]='P';
                    a[x+1][y]='@';
                }
                else if(a[x][y]=='P'&&a[x+2][y]==' '&&a[x+1][y]=='@')
                {
                    a[x][y]='*';
                    x++;
                    a[x][y]='P';
                    a[x+1][y]='O';
                }
                else if(a[x][y]=='P'&&a[x+1][y]==' ')
                {
                    a[x][y]='*';
                    x++;
                    a[x][y]='H';
                }
				else if(a[x][y]=='P'&&a[x+1][y]=='*')
				{
					a[x][y]='*';
					x++;
					a[x][y]='P';
				}
            }
        }

}

#主文件main.cpp

#include "Map.h"
int main()
{
	int p,q;
	Map mAp;
	system("color 0b");
a0:
	mAp.Welcometogame();
char a[20][20]=	{"             ",
                 "             ",
				 "     ###     ",
				 "     #*#     ",
				 "     # #     ",
				 "  ####O######",
				 "  #*O  H O *#",
				 "  #####O#####",
				 "      # #    ",
                 "      #*#    ",
                 "      ###    "};
 char b[20][20]={"            ",
                 "            ",
                 "  #####     ",
                 "  #H  #     ",
				 "  # OO# ### ",
                 "  # O # #*# ",
                 "  ### ###*# ",
				 "   ##    *# ",
                 "   #   #  # ",
                 "   #   #### ",
                 "   #####    ",};
 char c[20][20]={"             ",
                 "             ",
                 "   #######   ",
                 "   #     ### ",
                 "  ##O###   # ",
                 "  # H O  O # ",
                 "  # **# O ## ",
                 "  ##**#   #  ",
                 "   ########  ",
                 "             ",
                 "             ",};
 char d[20][20]={"             ",
                 "             ",
                 "   ####      ",
                 "  ##  #      ",
                 "  #HO #      ",
                 "  ##O ##     ",
                 "  ## O #     ",
                 "  #*O  #     ",
                 "  #**@*#     ",
                 "  ######     ",
                 "             ",};
  char e[20][20]={"             ",
                  "             ",
				  "   #####     ",
				  "   #H ###    ",
				  "   # O  #    ",
				  "  ### # ##   ",
				  "  #*# #  #   ",
				  "  #*O  # #   ",
				  "  #*   O #   ",
				  "  ########   ",
				  "             ",};
 int m,n,t,o,yi,che,chong;
 char temp[20][20];
 char at[20][20],bt[20][20],ct[20][20],dt[20][20],et[20][20];
 for(m=0;m<11;m++)
	 for(n=0;n<=14;n++)
		 at[m][n]=a[m][n],bt[m][n]=b[m][n],ct[m][n]=c[m][n],dt[m][n]=d[m][n],et[m][n]=e[m][n];
 mAp.Pos(40,17);
 cin>>o;
 switch(o)
 {
	 case 1:goto a1;break;
	 case 2:goto a2;break;
	 case 3:goto a3;break;
	 case 4:goto a4;break;
	 case 5:goto a5;break;
	 case 6:mAp.Pos(40,18);exit(0);break;
	 default:break;
 }
a1:
	t=0,yi=0,che=0,chong=0;
	for(m=0;m<11;m++)
	for(n=0;n<=14;n++)
		a[m][n]=at[m][n];
	system("cls");
    for(int i=0;i<11;i++){puts(a[i]);}
	mAp.Pos(40,5);
	cout<<"按c可撤销一步,按r可重置此关卡,按q可返回主菜单";
	mAp.Pos(40,6);
	cout<<"按w、s、a、d进行上下左右移动操作";
	mAp.Pos(40,7);
	cout<<"H为人,0为箱子,*为归宿,#为墙壁";
	p=6,q=7;
	while(1)
    {
		char z;
		z=getch();
		if(z=='q'){system("cls");goto a0;}
		else if(z=='c'&&t!=0)
			{
				che++;
				for(m=0;m<11;m++)
				for(n=0;n<=14;n++)
				a[m][n]=temp[m][n];
			system("cls");
			for(int i=0;i<11;i++){puts(a[i]);}
			mAp.Pos(40,5);
			cout<<"按c可撤销一步,按r可重置此关卡,按q可返回主菜单";
			mAp.Pos(40,6);
			cout<<"按w、s、a、d进行上下左右移动操作";
			mAp.Pos(40,7);
			cout<<"H为人,0为箱子,*为归宿,#为墙壁";
			if(t==1)p++;else if(t==2)p--;else if(t==3)q++;else q--;
			continue;}
		else if(z=='r')
		{chong++;goto a1;}
		else {yi++;
			for(m=0;m<11;m++)
			for(n=0;n<=14;n++)
				temp[m][n]=a[m][n];
		mAp.Move(a,z,p,q,t);}
		system("cls");
        for(int i=0;i<11;i++)puts(a[i]);
		mAp.Pos(40,5);
		cout<<"按c可撤销一步,按r可重置此关卡,按q可返回主菜单";
		mAp.Pos(40,6);
		cout<<"按w、s、a、d进行上下左右移动操作";
		mAp.Pos(40,7);
		cout<<"H为人,0为箱子,*为归宿,#为墙壁";
		if(a[6][3]=='@'&&a[6][11]=='@'&&a[9][7]=='@'&&a[3][6]=='@')
            {Sleep(1500);break;}
    }
    system("cls");
	mAp.Pos(40,16);
    cout<<"这只是第1关,将进入第2关!";
	mAp.Sum(yi,che,chong);
	Sleep(4000);
a2:
	t=0,yi=0,che=0,chong=0;
	for(m=0;m<11;m++)
	for(n=0;n<=14;n++)
		 b[m][n]=bt[m][n];
    system("cls");
    for(int i=0;i<11;i++){puts(b[i]);}
	mAp.Pos(40,5);
	cout<<"按c可撤销一步,按r可重置此关卡,按q可返回主菜单";
	mAp.Pos(40,6);
	cout<<"按w、s、a、d进行上下左右移动操作";
	mAp.Pos(40,7);
	cout<<"H为人,0为箱子,*为归宿,#为墙壁";
    p=3,q=3;
	while(1)
    {
        char z;
		z=getch();
		if(z=='q'){system("cls");goto a0;}
		else if(z=='c'&&t!=0)
			{
				che++;
				for(m=0;m<11;m++)
				for(n=0;n<=14;n++)
				b[m][n]=temp[m][n];
			system("cls");
			for(int i=0;i<11;i++){puts(b[i]);}
			mAp.Pos(40,5);
			cout<<"按c可撤销一步,按r可重置此关卡,按q可返回主菜单";
			mAp.Pos(40,6);
			cout<<"按w、s、a、d进行上下左右移动操作";
			mAp.Pos(40,7);
			cout<<"H为人,0为箱子,*为归宿,#为墙壁";
			if(t==1)p++;else if(t==2)p--;else if(t==3)q++;else q--;
			continue;}
		else if(z=='r')
		{chong++;goto a2;}
		else {yi++;
			for(m=0;m<11;m++)
			for(n=0;n<=14;n++)
				temp[m][n]=b[m][n];
		mAp.Move(b,z,p,q,t);}
		system("cls");
        for(int i=0;i<11;i++)puts(b[i]);
		mAp.Pos(40,5);
		cout<<"按c可撤销一步,按r可重置此关卡,按q可返回主菜单";
		mAp.Pos(40,6);
		cout<<"按w、s、a、d进行上下左右移动操作";
		mAp.Pos(40,7);
		cout<<"H为人,0为箱子,*为归宿,#为墙壁";
		if(b[5][9]=='@'&&b[6][9]=='@'&&b[7][9]=='@')
            {Sleep(1500);break;}
    }
    system("cls");
	mAp.Pos(40,16);
    cout<<"这只是第2关,将进入第3关!";
	mAp.Sum(yi,che,chong);
	Sleep(4000);
a3:
	t=0,yi=0,che=0,chong=0;
	for(m=0;m<11;m++)
	for(n=0;n<=14;n++)
		 c[m][n]=ct[m][n];
	system("cls");
    for(int i=0;i<11;i++){puts(c[i]);}
	mAp.Pos(40,5);
	cout<<"按c可撤销一步,按r可重置此关卡,按q可返回主菜单";
	mAp.Pos(40,6);
	cout<<"按w、s、a、d进行上下左右移动操作";
	mAp.Pos(40,7);
	cout<<"H为人,0为箱子,*为归宿,#为墙壁";
    p=5,q=4;
	while(1)
    {
        char z;
		z=getch();
		if(z=='q'){system("cls");goto a0;}
		else if(z=='c'&&t!=0)
			{
				che++;
				for(m=0;m<11;m++)
				for(n=0;n<=14;n++)
				c[m][n]=temp[m][n];
			system("cls");
			for(int i=0;i<11;i++){puts(c[i]);}
			mAp.Pos(40,5);
			cout<<"按c可撤销一步,按r可重置此关卡,按q可返回主菜单";
			mAp.Pos(40,6);
			cout<<"按w、s、a、d进行上下左右移动操作";
			mAp.Pos(40,7);
			cout<<"H为人,0为箱子,*为归宿,#为墙壁";
			if(t==1)p++;else if(t==2)p--;else if(t==3)q++;else q--;
			continue;}
		else if(z=='r')
		{chong++;goto a3;}
		else {yi++;
			for(m=0;m<11;m++)
			for(n=0;n<=14;n++)
				temp[m][n]=c[m][n];
		mAp.Move(c,z,p,q,t);}		
		system("cls");
        for(int i=0;i<11;i++)puts(c[i]);		
		mAp.Pos(40,5);
		cout<<"按c可撤销一步,按r可重置此关卡,按q可返回主菜单";
		mAp.Pos(40,6);
		cout<<"按w、s、a、d进行上下左右移动操作";
		mAp.Pos(40,7);
		cout<<"H为人,0为箱子,*为归宿,#为墙壁";
		if(c[6][4]=='@'&&c[6][5]=='@'&&c[7][4]=='@'&&c[7][5]=='@')
            {Sleep(1500);break;}
    }
    system("cls");
	mAp.Pos(40,16);
    cout<<"这只是第3关,将进入第4关!";
	mAp.Sum(yi,che,chong);
	Sleep(4000);
a4:
	t=0,yi=0,che=0,chong=0;
	for(m=0;m<11;m++)
	for(n=0;n<=14;n++)
		 d[m][n]=dt[m][n];
	system("cls");
    for(int i=0;i<11;i++){puts(d[i]);}
	mAp.Pos(40,5);
	cout<<"按c可撤销一步,按r可重置此关卡,按q可返回主菜单";
	mAp.Pos(40,6);
	cout<<"按w、s、a、d进行上下左右移动操作";
	mAp.Pos(40,7);
	cout<<"H为人,0为箱子,*为归宿,#为墙壁";
    p=4,q=3;
	while(1)
    {
        char z;
		z=getch();
		if(z=='q'){system("cls");goto a0;}
		else if(z=='c'&&t!=0)
			{
				che++;
				for(m=0;m<11;m++)
				for(n=0;n<=14;n++)
				d[m][n]=temp[m][n];
			system("cls");
			for(int i=0;i<11;i++){puts(d[i]);}
			mAp.Pos(40,5);
			cout<<"按c可撤销一步,按r可重置此关卡,按q可返回主菜单";
			mAp.Pos(40,6);
			cout<<"按w、s、a、d进行上下左右移动操作";
			mAp.Pos(40,7);
			cout<<"H为人,0为箱子,*为归宿,#为墙壁";
			if(t==1)p++;else if(t==2)p--;else if(t==3)q++;else q--;
			continue;}
		else if(z=='r')
		{chong++;goto a4;}
		else {yi++;
			for(m=0;m<11;m++)
			for(n=0;n<=14;n++)
				temp[m][n]=d[m][n];
		mAp.Move(d,z,p,q,t);}
		system("cls");
        for(int i=0;i<11;i++)puts(d[i]);	
		mAp.Pos(40,5);
		cout<<"按c可撤销一步,按r可重置此关卡,按q可返回主菜单";
		mAp.Pos(40,6);
		cout<<"按w、s、a、d进行上下左右移动操作";
		mAp.Pos(40,7);
		cout<<"H为人,0为箱子,*为归宿,#为墙壁";
		if(d[7][3]=='@'&&d[8][3]=='@'&&d[8][4]=='@'&&d[8][5]=='@'&&d[8][6]=='@')
            {Sleep(1500);break;}
    }
    system("cls");
	mAp.Pos(40,16);
    cout<<"\n\n          这是第4关!";
	mAp.Sum(yi,che,chong);
	Sleep(4000);
a5:
	t=0,yi=0,che=0,chong=0;
	for(m=0;m<11;m++)
	for(n=0;n<=14;n++)
		 e[m][n]=et[m][n];
	system("cls");
    for(int i=0;i<11;i++){puts(e[i]);}
	mAp.Pos(40,5);
	cout<<"按c可撤销一步,按r可重置此关卡,按q可返回主菜单";
	mAp.Pos(40,6);
	cout<<"按w、s、a、d进行上下左右移动操作";
	mAp.Pos(40,7);
	cout<<"H为人,0为箱子,*为归宿,#为墙壁";
    p=3,q=4;
	while(1)
    {
        char z;
		z=getch();
		if(z=='q'){system("cls");goto a0;}
		else if(z=='c'&&t!=0)
			{
				che++;
				for(m=0;m<11;m++)
				for(n=0;n<=14;n++)
				e[m][n]=temp[m][n];
			system("cls");
			for(int i=0;i<11;i++){puts(e[i]);}
			mAp.Pos(40,5);
			cout<<"按c可撤销一步,按r可重置此关卡,按q可返回主菜单";
			mAp.Pos(40,6);
			cout<<"按w、s、a、d进行上下左右移动操作";
			mAp.Pos(40,7);
			cout<<"H为人,0为箱子,*为归宿,#为墙壁";
			if(t==1)p++;else if(t==2)p--;else if(t==3)q++;else q--;
			continue;}
		else if(z=='r')
		{chong++;goto a5;}
		else {yi++;
			for(m=0;m<11;m++)
			for(n=0;n<=14;n++)
				temp[m][n]=e[m][n];
		mAp.Move(e,z,p,q,t);}	
		system("cls");
        for(int i=0;i<11;i++)puts(e[i]);	
		mAp.Pos(40,5);
		cout<<"按c可撤销一步,按r可重置此关卡,按q可返回主菜单";
		mAp.Pos(40,6);
		cout<<"按w、s、a、d进行上下左右移动操作";
		mAp.Pos(40,7);
		cout<<"H为人,0为箱子,*为归宿,#为墙壁";
		if(e[6][3]=='@'&&e[7][3]=='@'&&e[8][3]=='@')
            {Sleep(1500);break;}
    }
    system("cls");
	mAp.Pos(40,16);
    cout<<"这是最后一关卡!";
	mAp.Pos(40,17);
	cout<<"恭喜你闯关成功!";
	mAp.Sum(yi,che,chong);
	Sleep(4000);
	system("cls");
	int h;
	mAp.Pos(40,16);
	cout<<"";
	mAp.Pos(40,17);
	cout<<"1:返回主界面,2:退出游戏";
	mAp.Pos(40,18);
	cin>>h;
	if(h==1){system("cls");goto a0;}
	else if(h==2){mAp.Pos(40,19);exit(0);}
}
  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
简易推箱子 #include "Map.h" #include <conio.h> int XDest = 4; int YDest = 4; void CMap::Init() { int i,j; CPoint cPoint; CSprite *pSphte; CPlayer cPlay; CBox cBox; CDest cDest; int XPlayer = 4; int YPlayer = 6; int XBox = 4; int YBox = 5; for (i = 0; i < 10; i++) { for (j =0; j < 10; j++) { if (i == 0 || j == 0 || i == 9 || j == 9) { cPoint.SetPoint(i, j); pSphte = new CWall(cPoint); m_nMap[i][j] = pSphte; } else if (i == XPlayer && j == YPlayer) { cPoint.SetPoint(i,j); pSphte = new CPlayer(cPoint); m_nMap[i][j] = pSphte; } else if (i == XBox && j == YBox) { cPoint.SetPoint(i,j); pSphte = new CBox(cPoint); m_nMap[i][j] = pSphte; } else if (i == XDest && j == YDest) { cPoint.SetPoint(i,j); pSphte = new CDest(cPoint); m_nMap[i][j] = pSphte; } else { cPoint.SetPoint(i, j); pSphte = new CSpace(cPoint); m_nMap[i][j] = pSphte; } } cout<<endl; } } void CMap::Draw() { int i,j; for (i=0; i<10; i++) { for (j=0; j<10; j++) { cout<<m_nMap[i][j]->GetSprite(); } cout<<endl; } } void CMap::Logic() { int n = getch(); //获取输入的数字 char ch = char(n);//将获取到的数字进行强制类型转换 CPlayer *pPlayer = GetPlayer(); int XPlayer = pPlayer->GetX(); int YPlayer = pPlayer->GetY(); CBox *pBox = GetBox(); int XBox = pBox->GetX(); int YBox = pBox->GetY(); CDest *pDest = GetDest(); switch(ch) { case 'a': { int yPlayer = pPlayer->GetY(); YPlayer--; if ("※" == m_nMap[XPlayer][YPlayer]->GetSprite()) { YPlayer++; } else if (m_nMap[XPlayer][YPlayer]->GetSprite() == "■" || m_nMap[XPlayer][YPlayer]->GetSprite() == "●") { int yBox = pBox->GetY(); YBox--; if (m_nMap[XBox][YBox]->GetSprite() == "※") { YPlayer++; YBox++; } CSprite *pB = m_nMap[pBox->GetX()][yBox]; m_nMap[pBox->GetX()][yBox] = m_nMap[XBox][YBox]; m_nMap[XBox][YBox] = pB; pBox->SetY(YBox); m_nMap[pBox->GetX()][yBox]->SetY(yBox); } CSprite *pP = m_nMap[pPlayer->GetX()][yPlayer]; m_nMap[pPlayer->GetX()][yPlayer] = m_nMap[XPlayer][YPlayer]; m_nMap[XPlayer][YPlayer] = pP; pPlayer->SetY(YPlayer); m_nMap[pPlayer->GetX()][yPlayer]->SetY(yPlayer); } break; case 'd': { int yPlayer = pPlayer->GetY(); YPlayer++; if ("※" == m_nMap[XPlayer][YPlayer]->GetSprite()) { YPlayer--; } else if (m_nMap[XPlayer][YPlayer]->GetSprite() == "■" || m_nMap[XPlayer][YPlayer]->GetSprite() == "●") { int yBox = pBox->GetY(); YBox++; if (m_nMap[XBox][YBox]->GetSprite() == "※") { YPlayer--; YBox--; } CSprite *pB = m_nMap[pBox->GetX()][yBox]; m_nMap[pBox->GetX()][yBox] = m_nMap[XBox][YBox]; m_nMap[XBox][YBox] = pB; pBox->SetY(YBox); m_nMap[pBox->GetX()][yBox]->SetY(yBox); } CSprite *pP = m_nMap[pPlayer->GetX()][yPlayer]; m_nMap[pPlayer->GetX()][yPlayer] = m_nMap[XPlayer][YPlayer]; m_nMap[XPlayer][YPlayer] = pP; pPlayer->SetY(YPlayer); m_nMap[pPlayer->GetX()][yPlayer]->SetY(yPlayer); } break; case 'w': { int xPlayer = pPlayer->GetX(); XPlayer--; if ("※" == m_nMap[XPlayer][YPlayer]->GetSprite()) { XPlayer++; } else if (m_nMap[XPlayer][YPlayer]->GetSprite() == "■" || m_nMap[XPlayer][YPlayer]->GetSprite() == "●") { int xBox = pBox->GetX(); XBox--; if (m_nMap[XBox][YBox]->GetSprite() == "※") { XPlayer++; XBox++; } CSprite *pB = m_nMap[xBox][pBox->GetY()]; m_nMap[xBox][pBox->GetY()] = m_nMap[XBox][YBox]; m_nMap[XBox][YBox] = pB; pBox->SetX(XBox); m_nMap[xBox][pBox->GetY()]->SetX(xBox); } CSprite *pP = m_nMap[xPlayer][pPlayer->GetY()]; m_nMap[xPlayer][pPlayer->GetY()] = m_nMap[XPlayer][YPlayer]; m_nMap[XPlayer][YPlayer] = pP; pPlayer->SetX(XPlayer); m_nMap[xPlayer][pPlayer->GetY()]->SetX(xPlayer); } break; case 's': { int xPlayer = pPlayer->GetX(); XPlayer++; if ("※" == m_nMap[XPlayer][YPlayer]->GetSprite()) { XPlayer--; } else if (m_nMap[XPlayer][YPlayer]->GetSprite() == "■" || m_nMap[XPlayer][YPlayer]->GetSprite() == "●") { int xBox = pBox->GetX(); XBox++; if (m_nMap[XBox][YBox]->GetSprite() == "※") { XPlayer--; XBox--; } CSprite *pB = m_nMap[xBox][pBox->GetY()]; m_nMap[xBox][pBox->GetY()] = m_nMap[XBox][YBox]; m_nMap[XBox][YBox] = pB; pBox->SetX(XBox); m_nMap[xBox][pBox->GetY()]->SetX(xBox); } CSprite *pP = m_nMap[xPlayer][pPlayer->GetY()]; m_nMap[xPlayer][pPlayer->GetY()] = m_nMap[XPlayer][YPlayer]; m_nMap[XPlayer][YPlayer] = pP; pPlayer->SetX(XPlayer); m_nMap[xPlayer][pPlayer->GetY()]->SetX(xPlayer); } break; default: break; } if ((pPlayer->GetX() == XDest && pPlayer->GetY() == YDest) || (pBox->GetX() == XDest && pBox->GetY() == YDest)) { int i,j; for (i = 0; i < 10; i++) { for (j =0; j < 10; j++) { if (m_nMap[i][j]->GetSprite() == "◎") { m_nMap[i][j]->SetSprite(" "); } } } } else if (m_nMap[XDest][YDest]->GetSprite() == " ") { m_nMap[XDest][YDest]->SetSprite("◎"); } if (m_nMap[XDest][YDest]->GetSprite() == "■") { m_nMap[XDest][YDest]->SetSprite("●"); // cout<<"游戏结束"<<endl; } if (pBox->GetX() != XDest || pBox->GetY() != YDest) { pBox->SetSprite("■"); } } CPlayer *CMap::GetPlayer(void) { int i, j; for (i = 0; i < 10; i++) { for (j =0; j < 10; j++) { if (m_nMap[i][j]->GetSprite() == "♀") { return (CPlayer *)m_nMap[i][j]; } } } } CBox *CMap::GetBox(void) { int i, j; for (i = 0; i < 10; i++) { for (j =0; j < 10; j++) { if (m_nMap[i][j]->GetSprite() == "■" || m_nMap[i][j]->GetSprite() == "●") { return (CBox *)m_nMap[i][j]; } } } } CDest *CMap::GetDest(void) { int i, j; for (i = 0; i < 10; i++) { for (j =0; j < 10; j++) { if (m_nMap[i][j]->GetSprite() == "◎") { return (CDest *)m_nMap[i][j]; } } } }
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值