推箱子(C语言小游戏代码)

  • 格式:doc
  • 大小:65.50 KB
  • 文档页数:14

#include<stdio.h>#include<stdlib.h>#include<windows.h>#include<conio.h>//打印地图void DrawMap();//设置颜色void SetColor(int nColor);//获取玩家坐标POINT GetGamerPosition();//上void Up();//下void Down();//左void Left();//右void Right();//获取空箱子个数int GetSpareBox();//地图//0:空地;3箱子的目的地 4 箱子// 6 人7 箱子与目的地的集合//1:墙壁;9人在箱子的目的地int g_map[2][10][12]={{{0,0,0,0,1,1,1,0,0,0,0,0 },{0,0,0,0,1,3,1,0,0,0,0,0 },{0,0,0,0,1,0,1,1,1,1,1,1 },{1,1,1,1,1,4,0,4,0,0,3,1 },{1,3,0,0,0,4,6,1,1,1,1,1 },{1,1,1,1,1,1,4,1,0,0,0,0 },{0,0,0,0,0,1,0,1,0,0,0,0 },{0,0,0,0,0,1,0,1,0,0,0,0 },{0,0,0,0,0,1,3,1,0,0,0,0 },{0,0,0,0,0,1,1,1,0,0,0,0 },},{{1,1,1,1,1,0,0,0,0,0,0,0 },{1,0,0,0,1,0,1,1,1,0,0,0 },{1,0,4,0,1,0,1,1,1,1,1,1 },{1,0,4,6,1,0,1,0,0,0,3,1 },{1,1,1,4,1,1,1,0,0,0,3,1 },{1,1,1,0,0,0,0,0,0,0,3,1 },{0,1,0,0,0,1,0,0,0,0,0,1 },{0,1,0,0,0,1,0,0,0,0,0,1 },{0,1,0,0,0,1,1,1,1,1,1,1 },{1,1,1,1,1,1,0,0,0,0,0,0 },}};int g_nCurrentLevel = 0;//当前管卡int main(){//设置窗口大小system("mode con cols=26 lines=11");//设置标题//SetConsoLeTitle("推箱子");char nInput = 0;//输入字符while (1){//如果箱子推完了过关if (0==GetSpareBox())g_nCurrentLevel++;//清屏system("cls");//如果没有关卡,那就恭喜你成功通关。

if(g_nCurrentLevel>=sizeof(g_map)/sizeof(g_map[0])) {printf("恭喜你已经通关!");break;}//打印地图DrawMap();nInput = _getch();switch (nInput){//往上case 'w':case 72:Up();break;case 's':case 80:Down();break;case 'a':case 75:Left();break;case 'd':case 77:Right();break;}}system("pause");return 0;}//打印地图void DrawMap(){for (int i = 0; i < 10; i++){for (int j = 0; j < 12; j++){switch (g_map[g_nCurrentLevel][i][j]){case 0://道路,空地printf(" ");break;case 1:SetColor(FOREGROUND_RED | FOREGROUND_INTENSITY);printf("■");break;case 3:SetColor(FOREGROUND_GREEN | FOREGROUND_INTENSITY);printf("☆");break;case 4:SetColor(FOREGROUND_RED | FOREGROUND_BLUE | FOREGROUND_INTENSITY);printf("□");break;case 6:SetColor(FOREGROUND_GREEN | FOREGROUND_INTENSITY);printf("♂");break;case 7:SetColor(FOREGROUND_RED | FOREGROUND_BLUE | FOREGROUND_INTENSITY);printf("★");break;case 9:SetColor(FOREGROUND_GREEN | FOREGROUND_INTENSITY);printf("♂");break;}}printf("\n");}}//设置颜色void SetColor(int nColor){HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);//MSDSetConsoleTextAttribute(hConsole, nColor);}//获取玩家的坐标POINT GetGamerPosition(){POINT pos = { -1,-1 };for (int i = 0; i < 10; i++){for (int j = 0; j < 12; j++){if (g_map[g_nCurrentLevel][i][j] == 6 || g_map[g_nCurrentLevel][i][j] == 9){pos.x = i;pos.y = j;return pos;}}}return pos;}//上void Up(){//获取玩家坐标POINT pos = GetGamerPosition();//1.人的前面是空地if (g_map[g_nCurrentLevel][pos.x - 1][pos.y] == 0){g_map[g_nCurrentLevel][pos.x - 1][pos.y] = 6;//空地改为人//如果人原来站在目的地上面if (g_map[g_nCurrentLevel][pos.x][pos.y] == 9)g_map[g_nCurrentLevel][pos.x][pos.y] = 3;//改成目的地elseg_map[g_nCurrentLevel][pos.x][pos.y] = 0;//改成空地}//2,人前是目的地if (g_map[g_nCurrentLevel][pos.x][pos.y] == 3){g_map[g_nCurrentLevel][pos.x - 1][pos.y] = 9;//人在目的地//如果人原来站在目的地上面if (g_map[g_nCurrentLevel][pos.x][pos.y] == 9)g_map[g_nCurrentLevel][pos.x][pos.y] = 3;//改成目的地elseg_map[g_nCurrentLevel][pos.x][pos.y] = 0;//改成空地}//3.人前是箱子if (g_map[g_nCurrentLevel][pos.x - 1][pos.y] == 4){//a.箱子前面是空地if (g_map[g_nCurrentLevel][pos.x - 2][pos.y] == 0){g_map[g_nCurrentLevel][pos.x - 2][pos.y] = 4;//空地变箱子g_map[g_nCurrentLevel][pos.x - 1][pos.y] = 6;//箱子变人//如果人原来站在目的地上面if (g_map[g_nCurrentLevel][pos.x][pos.y] == 9)g_map[g_nCurrentLevel][pos.x][pos.y] = 3;//改成目的地elseg_map[g_nCurrentLevel][pos.x][pos.y] = 0;//改成空地}//b.箱子前面是目的地if (g_map[g_nCurrentLevel][pos.x - 2][pos.y] == 3){g_map[g_nCurrentLevel][pos.x - 2][pos.y] = 7;//箱子到达目的地重合g_map[g_nCurrentLevel][pos.x - 1][pos.y] = 6;//箱子位子变成人//如果人原来站在目的地上面if (g_map[g_nCurrentLevel][pos.x][pos.y] == 9)g_map[g_nCurrentLevel][pos.x][pos.y] = 3;//改成目的地elseg_map[g_nCurrentLevel][pos.x][pos.y] = 0;//改成空地}}//4.人的前面是箱子和目的地的重合if (g_map[g_nCurrentLevel][pos.x - 1][pos.y] == 7){//a.箱子前面是空地if (g_map[g_nCurrentLevel][pos.x - 2][pos.y] == 0){g_map[g_nCurrentLevel][pos.x - 2][pos.y] = 4;g_map[g_nCurrentLevel][pos.x - 1][pos.y] = 6;//如果人原来站在目的地上面if (g_map[g_nCurrentLevel][pos.x][pos.y] == 9)g_map[g_nCurrentLevel][pos.x][pos.y] = 3;elseg_map[g_nCurrentLevel][pos.x][pos.y] = 0;}//b.箱子前面是目的地if (g_map[g_nCurrentLevel][pos.x - 2][pos.y] == 3){g_map[g_nCurrentLevel][pos.x - 2][pos.y] = 7;//箱子到达目的地g_map[g_nCurrentLevel][pos.x - 1][pos.y] = 9;//箱子变成人//如果人原来站在目的地上面if (g_map[g_nCurrentLevel][pos.x][pos.y] == 9)g_map[g_nCurrentLevel][pos.x][pos.y] = 3;//改成目的地elseg_map[g_nCurrentLevel][pos.x][pos.y] = 0;//改成空地}}}//下void Down(){//获取玩家坐标POINT pos = GetGamerPosition();//1.人的前面是空地if (g_map[g_nCurrentLevel][pos.x + 1][pos.y] == 0){g_map[g_nCurrentLevel][pos.x + 1][pos.y] = 6;//空地改为人//如果人原来站在目的地上面if (g_map[g_nCurrentLevel][pos.x][pos.y] == 9)g_map[g_nCurrentLevel][pos.x][pos.y] = 3;//改成目的地g_map[g_nCurrentLevel][pos.x][pos.y] = 0;//改成空地}//2,人前是目的地if (g_map[g_nCurrentLevel][pos.x+1][pos.y] == 3){g_map[g_nCurrentLevel][pos.x + 1][pos.y] = 9;//人在目的地//如果人原来站在目的地上面if (g_map[g_nCurrentLevel][pos.x][pos.y] == 9)g_map[g_nCurrentLevel][pos.x][pos.y] = 3;//改成目的地elseg_map[g_nCurrentLevel][pos.x][pos.y] = 0;//改成空地}//3.人前是箱子if (g_map[g_nCurrentLevel][pos.x + 1][pos.y] == 4){//a.箱子前面是空地if (g_map[g_nCurrentLevel][pos.x + 2][pos.y] == 0){g_map[g_nCurrentLevel][pos.x + 2][pos.y] = 4;//空地变箱子g_map[g_nCurrentLevel][pos.x + 1][pos.y] = 6;//箱子变人//如果人原来站在目的地上面if (g_map[g_nCurrentLevel][pos.x][pos.y] == 9)g_map[g_nCurrentLevel][pos.x][pos.y] = 3;//改成目的地elseg_map[g_nCurrentLevel][pos.x][pos.y] = 0;//改成空地}//b.箱子前面是目的地if (g_map[g_nCurrentLevel][pos.x + 2][pos.y] == 3){g_map[g_nCurrentLevel][pos.x + 2][pos.y] = 7;//箱子到达目的地重合g_map[g_nCurrentLevel][pos.x + 1][pos.y] = 6;//箱子位子变成人//如果人原来站在目的地上面if (g_map[g_nCurrentLevel][pos.x][pos.y] == 9)g_map[g_nCurrentLevel][pos.x][pos.y] = 3;//改成目的地elseg_map[g_nCurrentLevel][pos.x][pos.y] = 0;//改成空地}//4.人的前面是箱子和目的地的重合if (g_map[g_nCurrentLevel][pos.x + 1][pos.y] == 7){//a.箱子前面是空地if (g_map[g_nCurrentLevel][pos.x + 2][pos.y] == 0){g_map[g_nCurrentLevel][pos.x + 2][pos.y] = 4;g_map[g_nCurrentLevel][pos.x - 1][pos.y] = 6;//如果人原来站在目的地上面if (g_map[g_nCurrentLevel][pos.x][pos.y] == 9)g_map[g_nCurrentLevel][pos.x][pos.y] = 3;elseg_map[g_nCurrentLevel][pos.x][pos.y] = 0;}//b.箱子前面是目的地if (g_map[g_nCurrentLevel][pos.x + 2][pos.y] == 3){g_map[g_nCurrentLevel][pos.x + 2][pos.y] = 7;//箱子到达目的地g_map[g_nCurrentLevel][pos.x + 1][pos.y] = 9;//箱子变成人//如果人原来站在目的地上面if (g_map[g_nCurrentLevel][pos.x][pos.y] == 9)g_map[g_nCurrentLevel][pos.x][pos.y] = 3;//改成目的地elseg_map[g_nCurrentLevel][pos.x][pos.y] = 0;//改成空地}}}void Left(){//获取玩家坐标POINT pos = GetGamerPosition();//1.人的前面是空地if (g_map[g_nCurrentLevel][pos.x][pos.y-1] == 0){g_map[g_nCurrentLevel][pos.x][pos.y-1] = 6;//空地改为人//如果人原来站在目的地上面if (g_map[g_nCurrentLevel][pos.x][pos.y] == 9)g_map[g_nCurrentLevel][pos.x][pos.y] = 3;//改成目的地elseg_map[g_nCurrentLevel][pos.x][pos.y] = 0;//改成空地}//2,人前是目的地if (g_map[g_nCurrentLevel][pos.x][pos.y-1] == 3){g_map[g_nCurrentLevel][pos.x][pos.y-1] = 9;//人站在目的地//如果人原来站在目的地上面if (g_map[g_nCurrentLevel][pos.x][pos.y] == 9)g_map[g_nCurrentLevel][pos.x][pos.y] = 3;//改成目的地elseg_map[g_nCurrentLevel][pos.x][pos.y] = 0;//改成空地}//3.人前是箱子if (g_map[g_nCurrentLevel][pos.x ][pos.y-1] == 4){//a.箱子前面是空地if (g_map[g_nCurrentLevel][pos.x ][pos.y-2] == 0){g_map[g_nCurrentLevel][pos.x ][pos.y-2] = 4;//空地变箱子g_map[g_nCurrentLevel][pos.x ][pos.y-1] = 6;//箱子变人//如果人原来站在目的地上面if (g_map[g_nCurrentLevel][pos.x][pos.y] == 9)g_map[g_nCurrentLevel][pos.x][pos.y] = 3;//改成目的地elseg_map[g_nCurrentLevel][pos.x][pos.y] = 0;//改成空地}//b.箱子前面是目的地if (g_map[g_nCurrentLevel][pos.x ][pos.y-2] == 3){g_map[g_nCurrentLevel][pos.x][pos.y-2] = 7;//箱子到达目的地重合g_map[g_nCurrentLevel][pos.x ][pos.y-1] = 6;//箱子位子变成人//如果人原来站在目的地上面if (g_map[g_nCurrentLevel][pos.x][pos.y] == 9)g_map[g_nCurrentLevel][pos.x][pos.y] = 3;//改成目的地elseg_map[g_nCurrentLevel][pos.x][pos.y] = 0;//改成空地}}//4.人的前面是箱子和目的地的重合if (g_map[g_nCurrentLevel][pos.x ][pos.y-1] == 7){//a.箱子前面是空地if (g_map[g_nCurrentLevel][pos.x ][pos.y-2] == 0){g_map[g_nCurrentLevel][pos.x ][pos.y-2] = 4;g_map[g_nCurrentLevel][pos.x ][pos.y-1] = 6;//如果人原来站在目的地上面if (g_map[g_nCurrentLevel][pos.x][pos.y] == 9)g_map[g_nCurrentLevel][pos.x][pos.y] = 3;elseg_map[g_nCurrentLevel][pos.x][pos.y] = 0;}//b.箱子前面是目的地if (g_map[g_nCurrentLevel][pos.x ][pos.y-2] == 3){g_map[g_nCurrentLevel][pos.x ][pos.y-2] = 7;//箱子到达目的地g_map[g_nCurrentLevel][pos.x ][pos.y-1] = 9;//箱子变成人//如果人原来站在目的地上面if (g_map[g_nCurrentLevel][pos.x][pos.y] == 9)g_map[g_nCurrentLevel][pos.x][pos.y] = 3;//改成目的地elseg_map[g_nCurrentLevel][pos.x][pos.y] = 0;//改成空地}}}//右{//获取玩家坐标POINT pos = GetGamerPosition();//1.人的前面是空地if (g_map[g_nCurrentLevel][pos.x][pos.y + 1] == 0){g_map[g_nCurrentLevel][pos.x][pos.y + 1] = 6;//空地改为人//如果人原来站在目的地上面if (g_map[g_nCurrentLevel][pos.x][pos.y] == 9)g_map[g_nCurrentLevel][pos.x][pos.y] = 3;//改成目的地elseg_map[g_nCurrentLevel][pos.x][pos.y] = 0;//改成空地}//2,人前是目的地if (g_map[g_nCurrentLevel][pos.x][pos.y + 1] == 3){g_map[g_nCurrentLevel][pos.x][pos.y + 1] = 9;//人站在目的地//如果人原来站在目的地上面if (g_map[g_nCurrentLevel][pos.x][pos.y] == 9)g_map[g_nCurrentLevel][pos.x][pos.y] = 3;//改成目的地elseg_map[g_nCurrentLevel][pos.x][pos.y] = 0;//改成空地}//3.人前是箱子if (g_map[g_nCurrentLevel][pos.x][pos.y + 1] == 4){//a.箱子前面是空地if (g_map[g_nCurrentLevel][pos.x][pos.y + 2] == 0){g_map[g_nCurrentLevel][pos.x][pos.y+2] = 4;//空地变箱子g_map[g_nCurrentLevel][pos.x][pos.y+1] = 6;//箱子变人//如果人原来站在目的地上面if (g_map[g_nCurrentLevel][pos.x][pos.y] == 9)g_map[g_nCurrentLevel][pos.x][pos.y] = 3;//改成目的地elseg_map[g_nCurrentLevel][pos.x][pos.y] = 0;//改成空地//b.箱子前面是目的地if (g_map[g_nCurrentLevel][pos.x][pos.y + 2] == 3){g_map[g_nCurrentLevel][pos.x][pos.y + 2] = 7;//箱子到达目的地重合g_map[g_nCurrentLevel][pos.x][pos.y + 1] = 6;//箱子位子变成人//如果人原来站在目的地上面if (g_map[g_nCurrentLevel][pos.x][pos.y] == 9)g_map[g_nCurrentLevel][pos.x][pos.y] = 3;//改成目的地elseg_map[g_nCurrentLevel][pos.x][pos.y] = 0;//改成空地}}//4.人的前面是箱子和目的地的重合if (g_map[g_nCurrentLevel][pos.x][pos.y + 1] == 7){//a.箱子前面是空地if (g_map[g_nCurrentLevel][pos.x][pos.y + 2] == 0){g_map[g_nCurrentLevel][pos.x][pos.y + 2] = 4;g_map[g_nCurrentLevel][pos.x][pos.y + 1] = 6;//如果人原来站在目的地上面if (g_map[g_nCurrentLevel][pos.x][pos.y] == 9)g_map[g_nCurrentLevel][pos.x][pos.y] = 3;elseg_map[g_nCurrentLevel][pos.x][pos.y] = 0;}//b.箱子前面是目的地if (g_map[g_nCurrentLevel][pos.x][pos.y + 2] == 3){g_map[g_nCurrentLevel][pos.x][pos.y + 2] = 7;//箱子到达目的地g_map[g_nCurrentLevel][pos.x][pos.y + 1] = 9;//箱子变成人//如果人原来站在目的地上面if (g_map[g_nCurrentLevel][pos.x][pos.y] == 9)g_map[g_nCurrentLevel][pos.x][pos.y] = 3;//改成目的地elseg_map[g_nCurrentLevel][pos.x][pos.y] = 0;//改成空地}}}int GetSpareBox(){int nCount=0;for(int i=0;i<10;i++){for(int j=0;j<12;j++){if(g_map[g_nCurrentLevel][i][j]==4)nCount++;}}return nCount;}。