推箱子

admin 2022-05-15 08:29:41

#include <cstdio>
#include <windows.h>
#include <conio.h>


//加代码
char a[20][20]={
"",
"",
"",
"",
"",
"",
"" 
};
int alength =  ;//地图行数量 
int xa=  ,yb=  ;//初始小人的位置 
int num =  ;//箱子位置数量 





//代码结束
 

void Prepare(){
// 设置颜色 // f0-f7 7个颜色 
system("color f0");
// 隐藏光标 // 句柄 
HANDLE hOut;
//光标信息的结构体类型 
CONSOLE_CURSOR_INFO curInfo;
//获得标准输出的句柄。
hOut=GetStdHandle(STD_OUTPUT_HANDLE); 
//由光标填充的字符单元格的百分比。 
curInfo.dwSize=1;
//游标的可见性。 如果游标可见,则此成员为true。
curInfo.bVisible=0;
SetConsoleCursorInfo(hOut,&curInfo);
// 设置标题 // 
SetConsoleTitle("推箱子");
}

void Welcome(){
printf("\n\n           推 箱 子");
printf("\n\n        请按任意键开始");
getch();
//清屏 
system("cls");
}

void Set(){
HANDLE hOut;
//表示一个字符在控制台屏幕上的坐标 
COORD pos={0,0};
hOut=GetStdHandle(STD_OUTPUT_HANDLE);
//将光标设置到pos位置 
SetConsoleCursorPosition(hOut,pos);
}

int main(){
Prepare();
Welcome();
char ch;
int x = xa-1;
int y = yb-1;
int cnt=0;//计数,统计消掉的数量 
//将二维数组输出到屏幕中,
for(int i=0;i<=alength;i++)
puts(a[i]);
while(1){
ch=getch();
if(ch==-32){
ch=getch();//按下任意一个按键 
if(ch==80){//按下向下键 
if(a[x+1][y]==' ') {//下方是空格 
a[x][y]=' ';
x++;
a[x][y]='S';
}
else if(a[x+1][y]=='O'){//下方是箱子 
if(a[x+2][y]==' '){//下下个格子是空格 
a[x][y]=' ';
x++;
a[x][y]='S';//小人向下移动 
a[x+1][y]='O';//箱子向下移动 
}
else if(a[x+2][y]=='*') {//下下个格子是位置 
a[x][y]=' ';
x++;
a[x][y]='S';//小人向下移动 
a[x+1][y]=' ';//箱子覆盖了,变成空格 
cnt++;//消掉的数量+1 
}
}
}else if(ch==72){ //按下上键 
if(a[x-1][y]==' '){//上方是空格 
a[x][y]=' ';
x--;
a[x][y]='S';
}
else if(a[x-1][y]=='O'){//上方是箱子 
if(a[x-2][y]==' '){//上上方是空格 
a[x][y]=' ';
x--;
a[x][y]='S';
a[x-1][y]='O';
}
else if(a[x-2][y]=='*'){//上上方是箱子位置 
a[x][y]=' ';
x--;
a[x][y]='S';
a[x-1][y]=' ';
cnt++;
}
}
}
else if(ch==75){//按下左键 
if(a[x][y-1]==' '){//左边是空格 
a[x][y]=' ';
y--;
a[x][y]='S';
}
else if(a[x][y-1]=='O'){
if(a[x][y-2]==' '){
a[x][y]=' ';
y--;
a[x][y]='S';
a[x][y-1]='O';
}
else if(a[x][y-2]=='*'){
a[x][y]=' ';
y--;
a[x][y]='S';
a[x][y-1]=' ';
cnt++;
}
}
}
else if(ch==77) {//按下右键 
if(a[x][y+1]==' '){
a[x][y]=' ';
y++;
a[x][y]='S';
}
else if(a[x][y+1]=='O'){
if(a[x][y+2]==' '){
a[x][y]=' ';
y++;
a[x][y]='S';
a[x][y+1]='O';
}
else if(a[x][y+2]=='*'){
a[x][y]=' ';
y++;
a[x][y]='S';
a[x][y+1]=' ';
cnt++;
}
}
}
}
Set();//将光标设置回到第一个位置,重新打印图形 
for(int i=0;i<=alength;i++)
puts(a[i]);
if(cnt==num)
break;
}
printf("你赢了!");
Sleep(10000);
return 0;
}