c++实现推箱子

推箱子小游戏开发

在这里插入图片描述
先赞后看,是好习惯

适合c / C++ 初学者

话不多说,Go it !

#include<bits/stdc++.h>
//#include <bios.h>
#include<conio.h>
#include<windows.h>
#include <mmsystem.h> 
#pragma comment(lib,"winmm.lib")

using namespace std;
int map1[10][12]={ 
	{1,1,1,1,1,1,1,1,1,1,1,1}, 
	{1,0,0,0,0,0,0,1,0,0,0,1}, 
	{1,0,0,4,0,4,0,0,0,0,0,1}, 
	{1,1,1,1,1,1,1,1,1,6,1,1}, 
	{1,0,1,0,0,0,0,0,0,0,0,1}, 
	{1,0,0,0,0,0,0,0,0,0,0,1}, 
	{1,1,1,1,0,1,1,1,1,1,1,1}, 
	{1,0,0,0,0,0,0,1,0,0,0,1}, 
	{1,0,1,0,0,0,0,0,0,0,0,1}, 
	{1,1,1,1,1,1,1,1,7,3,3,1} 
} ; 


//人坐标结构体 
struct Pos{
	int x; 
	int y; 
}; 

//获取玩家坐标
Pos GetGamerPosition(){
	Pos gamer={-1,-1}; 
	for(int i=0;i<10;i++)  //从50开始 
	{
		for(int j=0;j<12;j++){
			if( map1[i][j]==6||map1[i][j]==9 ){
				gamer.x=i;
				gamer.y=j; 
				return gamer;
			} 
		} 
    }
    return gamer;
    
    
	
}

void Up() 
{ 
	Pos gamer=GetGamerPosition();
//1 人的前面是空地
	if(map1[gamer.x-1][gamer.y]==0){
		//空地改成人 
		map1[gamer.x-1][gamer.y]=6;
		//原来的位置还原 
		if(map1[gamer.x][gamer.y]==9) map1[gamer.x][gamer.y]=3;
		else map1[gamer.x][gamer.y]=0; 
	} 
	
	 //2 人的前面是目的地
	if(map1[gamer.x-1][gamer.y]==3){
		//目的地改成人站在上面 
		map1[gamer.x-1][gamer.y]=9;
		//原来的位置还原 
		if(map1[gamer.x][gamer.y]==9) map1[gamer.x][gamer.y]=3;
		else map1[gamer.x][gamer.y]=0; 
	} 
	
	 //3 人的前面是箱子
	if(map1[gamer.x-1][gamer.y]==4){
		//3.1箱子的前面是空地
		if(map1[gamer.x-2][gamer.y]==0){
			//空地改成箱子 
			map1[gamer.x-2][gamer.y]=4;
			//箱子改成人 
			map1[gamer.x-1][gamer.y]=6;
		} 
		//原来的位置还原 
		if(map1[gamer.x][gamer.y]==9) map1[gamer.x][gamer.y]=3;
		else map1[gamer.x][gamer.y]=0; 
		
		//3.2箱子的前面是目的地
		if(map1[gamer.x-2][gamer.y]==3){
		//目的地改成箱子与目的地重合
			map1[gamer.x-2][gamer.y]=7;
			//箱子改成人 
			map1[gamer.x-1][gamer.y]=6;
		} 
		//原来的位置还原 
		if(map1[gamer.x][gamer.y]==9) map1[gamer.x][gamer.y]=3;
		else map1[gamer.x][gamer.y]=0; 
	} 
	
	 //4 人的前面是箱子和目的地重合
	if(map1[gamer.x-1][gamer.y]==7){
	
		//4.1箱子的前面是空地
		if(map1[gamer.x-2][gamer.y]==0){
			//空地改成箱子 
			map1[gamer.x-2][gamer.y]=4;
			//箱子改成人 
			map1[gamer.x-1][gamer.y]=9;
		} 
		//原来的位置还原 
		if(map1[gamer.x][gamer.y]==9) map1[gamer.x][gamer.y]=3;
		else map1[gamer.x][gamer.y]=0; 
		
		//4.2箱子的前面是目的地
		if(map1[gamer.x-2][gamer.y]==3){
		//目的地改成箱子与目的地的重合
			map1[gamer.x-2][gamer.y]=7;
			//箱子和目的地的重合改成人与目的地的重合
			map1[gamer.x-1][gamer.y]=9;
		} 
		
		//原来的位置还原 
		if(map1[gamer.x][gamer.y]==9) map1[gamer.x][gamer.y]=3;
		else map1[gamer.x][gamer.y]=0; 
			
	} 
} 



void Down()
{ 
	Pos gamer=GetGamerPosition();
//1 人的前面是空地
	if(map1[gamer.x+1][gamer.y]==0){
		//空地改成人 
		map1[gamer.x+1][gamer.y]=6;
		//原来的位置还原 
		if(map1[gamer.x][gamer.y]==9) map1[gamer.x][gamer.y]=3;
		else map1[gamer.x][gamer.y]=0; 
	} 
	
	 //2 人的前面是目的地
	if(map1[gamer.x+1][gamer.y]==3){
		//目的地改成人站在上面 
		map1[gamer.x+1][gamer.y]=9;
		//原来的位置还原 
		if(map1[gamer.x][gamer.y]==9) map1[gamer.x][gamer.y]=3;
		else map1[gamer.x][gamer.y]=0; 
	} 
	
	 //3 人的前面是箱子
	if(map1[gamer.x+1][gamer.y]==4){
		//3.1箱子的前面是空地
		if(map1[gamer.x+2][gamer.y]==0){
			//空地改成箱子 
			map1[gamer.x+2][gamer.y]=4;
			//箱子改成人 
			map1[gamer.x+1][gamer.y]=6;
		} 
		//原来的位置还原 
		if(map1[gamer.x][gamer.y]==9) map1[gamer.x][gamer.y]=3;
		else map1[gamer.x][gamer.y]=0; 
		
		//3.2箱子的前面是目的地
		if(map1[gamer.x+2][gamer.y]==3){
		//目的地改成箱子与目的地重合
			map1[gamer.x+2][gamer.y]=7;
			//箱子改成人 
			map1[gamer.x+1][gamer.y]=6;
		} 
		//原来的位置还原 
		if(map1[gamer.x][gamer.y]==9) map1[gamer.x][gamer.y]=3;
		else map1[gamer.x][gamer.y]=0; 
	} 
	
	 //4 人的前面是箱子和目的地重合
	if(map1[gamer.x+1][gamer.y]==7){
	
		//4.1箱子的前面是空地
		if(map1[gamer.x+2][gamer.y]==0){
			//空地改成箱子 
			map1[gamer.x+2][gamer.y]=4;
			//箱子改成人 
			map1[gamer.x+1][gamer.y]=9;
		} 
		//原来的位置还原 
		if(map1[gamer.x][gamer.y]==9) map1[gamer.x][gamer.y]=3;
		else map1[gamer.x][gamer.y]=0; 
		
		//4.2箱子的前面是目的地
		if(map1[gamer.x+2][gamer.y]==3){
		//目的地改成箱子与目的地的重合
			map1[gamer.x+2][gamer.y]=7;
			//箱子和目的地的重合改成人与目的地的重合
			map1[gamer.x+1][gamer.y]=9;
		} 
		
		//原来的位置还原 
		if(map1[gamer.x][gamer.y]==9) map1[gamer.x][gamer.y]=3;
		else map1[gamer.x][gamer.y]=0; 
			
	} 
} 

void Right()//Left()
{ 
	Pos gamer=GetGamerPosition();
//1 人的前面是空地
	if(map1[gamer.x][gamer.y+1]==0){
		//空地改成人 
		map1[gamer.x][gamer.y+1]=6;
		//原来的位置还原 
		if(map1[gamer.x][gamer.y]==9) map1[gamer.x][gamer.y]=3;
		else map1[gamer.x][gamer.y]=0; 
	} 
	
	 //2 人的前面是目的地
	if(map1[gamer.x][gamer.y+1]==3){
		//目的地改成人站在上面 
		map1[gamer.x][gamer.y+1]=9;
		//原来的位置还原 
		if(map1[gamer.x][gamer.y]==9) map1[gamer.x][gamer.y]=3;
		else map1[gamer.x][gamer.y]=0; 
	} 
	
	 //3 人的前面是箱子
	if(map1[gamer.x][gamer.y+1]==4){
		//3.1箱子的前面是空地
		if(map1[gamer.x][gamer.y+2]==0){
			//空地改成箱子 
			map1[gamer.x][gamer.y+2]=4;
			//箱子改成人 
			map1[gamer.x][gamer.y+1]=6;
		} 
		//原来的位置还原 
		if(map1[gamer.x][gamer.y]==9) map1[gamer.x][gamer.y]=3;
		else map1[gamer.x][gamer.y]=0; 
		
		//3.2箱子的前面是目的地
		if(map1[gamer.x][gamer.y+2]==3){
		//目的地改成箱子与目的地重合
			map1[gamer.x][gamer.y+2]=7;
			//箱子改成人 
			map1[gamer.x][gamer.y+1]=6;
		} 
		//原来的位置还原 
		if(map1[gamer.x][gamer.y]==9) map1[gamer.x][gamer.y]=3;
		else map1[gamer.x][gamer.y]=0; 
	} 
	
	 //4 人的前面是箱子和目的地重合
	if(map1[gamer.x][gamer.y+1]==7){
	
		//4.1箱子的前面是空地
		if(map1[gamer.x][gamer.y+2]==0){
			//空地改成箱子 
			map1[gamer.x][gamer.y+2]=4;
			//箱子改成人 
			map1[gamer.x][gamer.y+1]=9;
		} 
		//原来的位置还原 
		if(map1[gamer.x][gamer.y]==9) map1[gamer.x][gamer.y]=3;
		else map1[gamer.x][gamer.y]=0; 
		
		//4.2箱子的前面是目的地
		if(map1[gamer.x][gamer.y+2]==3){
		//目的地改成箱子与目的地的重合
			map1[gamer.x][gamer.y+2]=7;
			//箱子和目的地的重合改成人与目的地的重合
			map1[gamer.x][gamer.y+1]=9;
		} 
		
		//原来的位置还原 
		if(map1[gamer.x][gamer.y]==9) map1[gamer.x][gamer.y]=3;
		else map1[gamer.x][gamer.y]=0; 
			
	} 
} 

void Left()
{ 
	Pos gamer=GetGamerPosition();
//1 人的前面是空地
	if(map1[gamer.x][gamer.y-1]==0){
		//空地改成人 
		map1[gamer.x][gamer.y-1]=6;
		//原来的位置还原 
		if(map1[gamer.x][gamer.y]==9) map1[gamer.x][gamer.y]=3;
		else map1[gamer.x][gamer.y]=0; 
	} 
	
	 //2 人的前面是目的地
	if(map1[gamer.x][gamer.y-1]==3){
		//目的地改成人站在上面 
		map1[gamer.x][gamer.y-1]=9;
		//原来的位置还原 
		if(map1[gamer.x][gamer.y]==9) map1[gamer.x][gamer.y]=3;
		else map1[gamer.x][gamer.y]=0; 
	} 
	
	 //3 人的前面是箱子
	if(map1[gamer.x][gamer.y-1]==4){
		//3.1箱子的前面是空地
		if(map1[gamer.x][gamer.y-2]==0){
			//空地改成箱子 
			map1[gamer.x][gamer.y-2]=4;
			//箱子改成人 
			map1[gamer.x][gamer.y-1]=6;
		} 
		//原来的位置还原 
		if(map1[gamer.x][gamer.y]==9) map1[gamer.x][gamer.y]=3;
		else map1[gamer.x][gamer.y]=0; 
		
		//3.2箱子的前面是目的地
		if(map1[gamer.x][gamer.y-2]==3){
		//目的地改成箱子与目的地重合
			map1[gamer.x][gamer.y-2]=7;
			//箱子改成人 
			map1[gamer.x][gamer.y-1]=6;
		} 
		//原来的位置还原 
		if(map1[gamer.x][gamer.y]==9) map1[gamer.x][gamer.y]=3;
		else map1[gamer.x][gamer.y]=0; 
	} 
	
	 //4 人的前面是箱子和目的地重合
	if(map1[gamer.x][gamer.y-1]==7){
	
		//4.1箱子的前面是空地
		if(map1[gamer.x][gamer.y-2]==0){
			//空地改成箱子 
			map1[gamer.x][gamer.y-2]=4;
			//箱子改成人 
			map1[gamer.x][gamer.y-1]=9;
		} 
		//原来的位置还原 
		if(map1[gamer.x][gamer.y]==9) map1[gamer.x][gamer.y]=3;
		else map1[gamer.x][gamer.y]=0; 
		
		//4.2箱子的前面是目的地
		if(map1[gamer.x][gamer.y-2]==3){
		//目的地改成箱子与目的地的重合
			map1[gamer.x][gamer.y-2]=7;
			//箱子和目的地的重合改成人与目的地的重合
			map1[gamer.x][gamer.y-1]=9;
		} 
		
		//原来的位置还原 
		if(map1[gamer.x][gamer.y]==9) map1[gamer.x][gamer.y]=3;
		else map1[gamer.x][gamer.y]=0; 
			
	} 
} 

int GetSpaceBox( ){
	int count=0; 
	for(int i=0;i<10;i++){
		for(int j=0;j<12;j++){
			if( map1[i][j]==4 ){
				count++; 
			} 
		} 
    }
    return count; 
} 

void Menu(){
	

	system("mode con cols=19 lines=20") ;
	cout<<"┏               ┓\n";
	cout<<"      推箱子     \n";
	cout<<"    先按shift    \n";
	cout<<"     按下空格    \n";
	cout<<"     即将开始    \n";
	cout<<"┗               ┛\n";
 	while(true){
 		//getch()可以检测按键 
		if(getch()==' '){
			for(int i=3;i>=1;i--){ 
	 			cout<<"   "<<i<<"S "<<i<<"S "<<i<<"S "<<i<<"S \n"; 
				Sleep(1000);//暂停1000毫秒 
 			} 
 			cout<<"      Go it! \n";
			break; 
		} 
	}
} 

void Write_map(){

	for(int a=0;a<10;a++)  //从50开始 
	{
		for(int b=0;b<12;b++)
        {
        	switch(map1[a][b]){
        		case 0:cout<<"  "; break; 
				case 1:cout<<"■"; break;//墙 
				case 3:cout<<"☆"; break;//目的地 
				case 4:cout<<"◎"; break;//箱子 
				case 6:cout<<"♂"; break;//人 
				case 7:cout<<"★"; break;//箱子与目的地重合
				case 9:cout<<"♂"; break;//人与目的地重合 
			} 
        }
		cout<<endl; 
    }
} 
int main() {

    //map 
	system("color 74"); 
	Menu();
	system("mode con cols=25 lines=20") ;
	while(1){ 
		if(GetSpaceBox()==0) { 
		system("cls"); 

		system("mode con cols=24 lines=22") ;
		cout<<"┏                    ┓\n";
		cout<<"    !!!成功过关!!!\n";
		cout<<"┗                    ┛\n\n";
		cout<<"┏                    ┓\n";
		cout<<"    !!!成功过关!!!\n";
		cout<<"┗                    ┛\n\n";
		cout<<"┏                    ┓\n";
		cout<<"    !!!成功过关!!!\n";
		cout<<"┗                    ┛\n\n";
		cout<<"┏                     ┓\n";
		cout<<"  祝你有一个开挂的人生 \n";
		cout<<"┗                     ┛\n";
		Sleep(11000);
		break; 
		} 
		system("cls"); 
		Write_map();
		cout<<"\n 注: w:↑s:↓a:←d:→"; 
		char ch=getch();
		switch(ch){
        	case 'w':Up(); break;     //往上 
			case 's':Down(); break;   //往下 
			case 'a':Left(); break;   //往左 
			case 'd':Right(); break;  //往右 
		} 
	} 
	return 0;
}


在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/taiji_ijiat/article/details/107005742
今日推荐