c++實現推箱子游戲


代碼實現


 

  1 #include<stdio.h>
  2 #include<windows.h>
  3 #include<conio.h>
  4 char* playerPosition, *boxPosition[2];
  5 /*初始化地圖
  6     map:地圖數組
  7     n:    地圖的行數
  8     m:    地圖的列數*/
  9 void csh(char map[15][15], int n, int m)
 10 {
 11 
 12     for (int i = 0;i < n;i++)
 13         for (int j = 0;j < m;j++)
 14             map[i][j] = ' ';
 15 
 16 }
 17 /*控制角色向上移動
 18     map:地圖數組*/
 19 void move(int moveX, int moveY)
 20 {
 21     int i = 0;
 22 
 23     moveY = moveY * 15;
 24     if (*(playerPosition + (moveX + moveY)) != '@')
 25     {
 26         if (*(playerPosition + (moveX + moveY)) == '*' )
 27         {
 28             if (*(playerPosition + 2* (moveX + moveY)) != '@')
 29             {
 30                 if (playerPosition + (moveX + moveY) == boxPosition[0])
 31                     i = 0;
 32                 else
 33                     i = 1;
 34                 *boxPosition[i] = ' ';
 35                 boxPosition[i] += (moveX + moveY);
 36                 *boxPosition[i] = '*';
 37                 *playerPosition = ' ';
 38                 playerPosition += (moveX + moveY);
 39                 *playerPosition = '8';
 40             }
 41         }
 42         else
 43         {
 44             *playerPosition = ' ';
 45             playerPosition += (moveX+moveY);
 46             *playerPosition = '8';
 47         }
 48     }
 49 
 50 }
 51 /*輸出結果
 52     map:地圖數組
 53     n:    地圖的行數
 54     m:    地圖的列數*/
 55 void sc(char map[15][15],int n,int m)
 56 {
 57     for (int i = 0;i < n;i++)
 58     {
 59         for (int j = 0;j < m;j++)
 60             printf("%c ", map[i][j]);
 61         printf("\n");
 62     }
 63 }
 64 /*進行重開、跳關、移動的判斷,進入相應的函數,並傳參給相應函數
 65     map:地圖數組*/
 66 char pd(char map[15][15])
 67 {
 68     char pd;
 69 
 70     pd = _getch();
 71     switch (pd)
 72     { 
 73         case 'w':move(0,-1);break;
 74         case 's':move(0, 1);break;
 75         case 'a':move(-1, 0);break;
 76         case 'd':move(1, 0);break;
 77         case 13:return 1;break;
 78         case 32:return 2;
 79     }
 80     return 0;
 81 }
 82 
 83 /*第一關*/
 84 void diyiguan()
 85 {
 86     int cnt = 0;
 87     char map[15][15],cz;
 88     boolean isEnd = false, isAgain = false, isNext = false;
 89 
 90     csh(map, 8, 6);
 91     //生成地圖
 92     map[0][1] = map[0][2] = map[0][0] = map[1][0] = map[2][0] = map[3][0] = map[4][0] = map[5][0] = map[6][0] = map[7][0] = map[7][1] = map[7][2] = map[7][3] = map[6][3] = map[5][3] = map[4][3] = map[4][4] = map[4][5] = map[2][3] = map[2][4] = map[2][5] = map[3][5] = map[1][2] = map[2][2] = '@';
 93     map[6][2] = 'O';
 94     playerPosition = &map[3][1];
 95     *playerPosition = '8';
 96     boxPosition[0] = &map[4][2];
 97     *boxPosition[0] = '*';
 98 
 99 
100     //開始游戲
101     sc(map, 8, 6);
102     printf("第一關");
103     while (!isEnd && !isAgain && !isNext)
104     {
105         cz = pd(map);
106         cnt++;
107         if (map[6][2] == ' ')
108             map[6][2] = 'O';
109         if (cz == 1) isAgain = true;
110         if (cz == 2) isNext = true;
111         system("cls");
112         sc(map, 8, 6);
113         printf("已走 % d步\n第二關, 點擊回車重開本關,點擊空格跳過本關",cnt);
114         if (map[6][2] == '*')
115             isEnd = true;        
116     }
117     system("cls");
118     if (cz == 1)
119         diyiguan();
120         
121     
122 
123 }
124 /*第二關*/
125 void dierguan()
126 {
127     int cnt = 0;
128     char map[15][15], cz;
129     boolean isEnd = false, isAgain = false, isNext = false;
130 
131     csh(map, 8, 6);
132     //生成地圖
133     for (int i = 0;i <= 5; i++)
134         map[0][i] = map[7][i]='@';
135     for (int i = 0;i <= 7; i++)
136         map[i][0] = map[i][5] = '@';
137     map[4][4]='@';
138     map[6][2] = 'O';
139     map[6][4] = 'O';
140     playerPosition = &map[3][1];
141     *playerPosition = '8';
142     boxPosition[0] = &map[4][2];
143     *boxPosition[0] = '*';
144     boxPosition[1] = &map[3][3];
145     *boxPosition[1] = '*';
146 
147 
148     //開始游戲
149     sc(map, 8, 6);
150     printf("第二關");
151     while (!isEnd && !isAgain && !isNext)
152     {
153         cz = pd(map);
154         cnt++;
155         if (map[6][2] == ' ')map[6][2] = 'O';
156         if (map[6][4] == ' ')map[6][4] = 'O';
157         if (cz == 1) isAgain = true;
158         if (cz == 2) isNext = true;
159         system("cls");
160         sc(map, 8, 6);
161         printf("已走%d步\n第二關,點擊回車重開本關,點擊空格跳過本關",cnt);
162         if (map[6][2] == '*'&&map[6][4]=='*')
163             isEnd = true;
164     }
165     system("cls");
166     if (cz == 1)
167         dierguan();
168 }
169 
170 void main()
171 {    
172     diyiguan();
173     dierguan();
174     printf("\n恭喜你成功通關(這么簡單的關卡真的有什么好恭喜的嗎?)\n");
175 }

 

運行截圖


 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM