高级天翼
#include<iostream>
#include<cstdio>
#include<string>
#include<algorithm>
#include<conio.h>
#include<windows.h>
#include<iomanip>
using namespace std;
#define R 10
#define C 10
void Game_Menu();//游戏菜单
void Game_description();//操作介绍
int DRAW_MAP();//绘制地图
void MOVE();//移动
int FINISH();//跳转地图
void SET_MAP(int n);
void COLOR(int m);
bool flag=true;
/*
1.墙
3.目的地
4.箱子
5.人
0.空地
*/
int map [R][C]={0};
int map1[10][10] = {
{ 0,1,1,1,1,1,1,0 },
{ 0,1,0,3,4,0,1,0 },
{ 0,1,0,0,0,0,1,1 },
{ 1,1,4,0,4,4,3,1 },
{ 1,3,0,0,0,1,1,1 },
{ 1,1,1,5,0,1,0,0 },
{ 0,0,0,1,3,1,0,0 },
{ 0,0,0,1,1,1,0,0 }
};
//地图 2(关卡2)
int map2[10][10]={
{1,1,1,1,1,0,0,0,0,0},
{1,5,0,0,1,0,0,0,0,0},
{1,0,4,0,1,0,1,1,1,0},
{1,0,4,0,1,0,1,0,1,0},
{1,1,1,0,1,1,1,0,1,0},
{0,1,3,0,0,0,0,0,1,0},
{0,1,0,4,0,3,0,0,1,0},
{0,1,3,0,0,1,1,1,1,0},
{0,1,1,1,1,1,0,0,0,0}
};
//地图 3(关卡3)
int map3[10][10]={
{ 0,0,0,1,1,1,1,1,1,1 },
{ 0,0,1,1,0,0,1,0,5,1 },
{ 0,0,1,0,0,0,1,0,0,1 },
{ 1,1,1,0,0,4,0,4,0,1 },
{ 1,0,0,0,4,0,4,0,0,1 },
{ 1,0,0,0,4,0,0,0,1,1 },
{ 1,3,3,3,3,3,0,0,1,0 },
{ 1,1,1,1,1,1,1,1,1,0 },
};
int pass=1;
int main()
{
char c;
Game_Menu();
Game_description();
c=getch();
SET_MAP(pass);
switch(c){
case 'Q':
case 'q':
return 0;
case 'S':
case 's':
while(flag){
system("cls");
DRAW_MAP();
MOVE();
if(FINISH()){
system("cls");
DRAW_MAP();
printf("游戏胜利!\n");
system("pause");
pass++;
SET_MAP(pass);
}
}
}
return 0;
}
void Game_Menu(){
system("cls");
cout<<"***********************\n";
cout<<"* *\n";
cout<<"* 经典游戏 *\n";
cout<<"* 十年经典 *\n";
cout<<"* 推箱子 *\n";
cout<<"* 按S或s开始 *\n";
cout<<"* 退出: Q q *\n";
cout<<"* *\n";
cout<<"***********************\n";
}
void Game_description(){
cout<<"***********************\n";
cout<<"* 操作提示 *\n";
cout<<"* 上移: W w *\n";
cout<<"* 下移: S s *\n";
cout<<"* 左移: A a *\n";
cout<<"* 右移: D d *\n";
cout<<"* 按S或s开始 *\n";
cout<<"* 退出: Q q *\n";
cout<<"***********************\n";
_getch();
}
void MOVE(){
int r,c; //保存人物位置
for(int i=0;i<R;i++){//i为行值
for(int j=0;j<C;j++){//j为列值
if(map[i][j]==5||map[i][j]==8){
r=i;
c=j;
}
}
}
cout<<"您当前的坐标为:("<<r<<","<<c<<")"<<endl;
int ch;//保存键盘输入的ASCII值
ch=_getch();//接受一个任意键的输入,不用按回车就返回。该函数的返回值是所输入字符的ASCII码,且该函数的输入不会自动显示在屏幕上
switch(ch){
case 'W':/*上移*/
case 'w':
case 72:
if(map[r-1][c]==0||map[r-1][c]==3){//人物上方是空地(0)或者目的地 (3),对应情况5和情况6
map[r-1][c]+=5;//人物坐标上一个坐标值为5(人物)
map[r][c]-=5;//人物原坐标值为0(空地)
}
else if(map[r-1][c]==4||map[r-1][c]==7){//人物上方是箱子,箱子在空格上或者箱子在目的地处,对应情况1,2,3,4
if(map[r-2][c]==0||map[r-2][c]==3){//箱子上方是空格或者前面是目的地,细化为情况1,2或情况3,4
map[r-2][c]+=4;//箱子向上移动,上一个0(空地)就变为 4(箱子)
map[r-1][c]+=1;//4(原箱子)+1变为 5(人物)
map[r][c]-=5;//5(原人物)-5变为0(空地)
}
}
break;
case 'S':/*下移*/
case 's':
case 80:
if(map[r+1][c]==0||map[r+1][c]==3){//人下方是空地或目的地
map[r+1][c]+=5;
map[r][c]-=5;
}
else if(map[r+1][c]==4||map[r+1][c]==7){//人下方是箱子 ,箱子在空地或者目的地上
if(map[r+2][c]==0||map[r+2][c]==3){//箱子下方是空地和目的地
map[r+2][c]+=4;//箱子向下移动,下一个0(空地)就变为 4(箱子)
map[r+1][c]+=1;//4(原箱子)+1变为 5(人物)
map[r][c]-=5;//5(原人物)-5变为0(空地)
}
}
break;
case 'A':
case 'a':
case 75:
if(map[r][c-1]==0||map[r][c-1]==3){//人左方是空地或目的地
map[r][c-1]+=5;
map[r][c]-=5;
}
else if(map[r][c-1]==4||map[r][c-1]==7){//人左方是箱子 ,箱子在空地或者目的地上
if(map[r][c-2]==0||map[r][c-2]==3){//箱子左方是空地和目的地
map[r][c-2]+=4;//箱子向下移动,下一个0(空地)就变为 4(箱子)
map[r][c-1]+=1;//4(原箱子)+1变为 5(人物)
map[r][c]-=5;//5(原人物)-5变为0(空地)
}
}
break;
case 'D':
case 'd':
case 77:
if(map[r][c+1]==0||map[r][c+1]==3){//人右方是空地或目的地
map[r][c+1]+=5;
map[r][c]-=5;
}
else if(map[r][c+1]==4||map[r][c+1]==7){//人右方是箱子 ,箱子在空地或者目的地上
if(map[r][c+2]==0||map[r][c+2]==3){//箱子右方是空地和目的地
map[r][c+2]+=4;//箱子向下移动,下一个0(空地)就变为 4(箱子)
map[r][c+1]+=1;//4(原箱子)+1变为 5(人物)
map[r][c]-=5;//5(原人物)-5变为0(空地)
}
}
break;
case 'Q':
case 'q':
flag=false;
default:
break;
}
return ;
}
int DRAW_MAP(){
cout<<"关卡:"<<pass<<endl;
for(int i=0;i<R;i++){
for(int j=0;j<C;j++){
switch(map[i][j]){
case 0:
COLOR(0xF);
cout << " "; //空地
break;
case 1:
COLOR(8);
cout << "■";//墙体
break;
case 3:
COLOR(0xE);
cout << "☆";//目的地
break;
case 4:
COLOR(4);
cout << "□";//箱子
break;
case 5:
COLOR(3);
cout << "♀"; //人
break;
case 7: //4+3 箱子到达目的地
COLOR(6);
cout << "★";
break;
case 8: //5+3 人与目的地重合
COLOR(3);
cout << "♀";
break;
default:
break;
}
}
cout<<endl;
}
}
int FINISH(){
for(int i=0;i<R;i++){
for(int j=0;j<C;j++){
if(map[i][j]==4){
return 0;
}
}
}
return 1;
}
void SET_MAP(int n){
if(n==1){
memcpy(map,map1,sizeof(map1));
}
if(n==2){
memcpy(map,map2,sizeof(map2));
}
if(n==3){
memcpy(map,map3,sizeof(map3));
}
return ;
}
void COLOR(int m){
HANDLE consolehend;
consolehend = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(consolehend,m);
return ;
}
熊智晖在2021-06-05 19:21:01追加了内容
在不?很好玩的游戏