推箱子小游戏开发
先赞后看,是好习惯
适合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;
}