基于C++寫一個推箱子小游戲
更新時間:2023年09月14日 09:16:36 作者:強國豪,林中霖
這篇文章主要為大家詳細介紹了基于C++寫一個推箱子小游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
上代碼:
#include <stdio.h> #include <stdlib.h> #include <conio.h> int map[2][7][8] = { //0:空的 1:■ :墻 //3:☆ 4:★ //目的地和箱子 //5:※ //人 //7:⊙ //目的(3)和箱子(4)在一起 //8:※ //人(5)和目的(3)在一起 //為讓多種情況使用一種算法 { 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 3, 1, 0, 1, 1, 3, 1, 1, 4, 0, 0, 4, 0, 3, 1, 1, 0, 1, 0, 1, 1, 4, 1, 1, 0, 0, 5, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1 }, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 3, 1, 0, 1, 1, 3, 1, 1, 3, 4, 5, 4, 0, 3, 1, 1, 4, 1, 0, 1, 1, 4, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1 } }; int cas = 0; //為0表示第一關 //記錄每一關的箱子數(shù) 或者是項目和目的在一起的總數(shù) int boxSum[2] = {3,4}; //地圖繪圖 void drawMap() { for (int i = 0; i < 7; i++) { for (int j = 0; j < 8; j++) { if (j == 0) printf("\t\t"); switch (map[cas][i][j]) { // //0:空的 1:■ :墻 case 0: printf(" "); break; case 1: printf("■"); break; //3:☆ 4:★ //目的地和箱子 case 3: printf("☆"); break; case 4: printf("★"); break; //5:※ //人 case 5: case 8: printf("※"); break; case 7: printf("⊙"); break; //7:⊙ //目的(3)和箱子(4)在一起 //8:※ //人(5)和目的(3)在一起 } } printf("\n"); } } //按鍵處理 void keyDown() { //分析按鍵過程 //定位人在哪里 //人有兩種情況:第一個是:人,第二個:人站在目的上 int i, j; for (i = 0; i < 7; i++) { for (j = 0; j < 8; j++) { if (map[cas][i][j] == 5 || map[cas][i][j] == 8) { break; } } if (map[cas][i][j] == 5 || map[cas][i][j] == 8) { break; } } char ch = _getch(); //看不見的字符輸入,+頭文件 conio.h switch (ch) { //72 80 75 77 case 'w': case 'W': case 72: //下一個地方等于空地或者是目的 能走 if (map[cas][i - 1][j] == 0 || map[cas][i - 1][j] == 3) { //3+5=8 :表示目的和人在一起 //新地方(map[i-1][j])人(5)來了 map[cas][i - 1][j] += 5; //老地方(map[i][j])人(5)走了 map[cas][i][j] -= 5; } //如果下一個是箱子,要進一步判斷能走 //注意點:箱子兩種狀態(tài):箱子,箱子和目的在一起 else if (map[cas][i - 1][j] == 4 || map[cas][i - 1][j] == 7) { //做箱子的下一個地方判斷能不能走 if (map[cas][i - 2][j] == 0 || map[cas][i - 2][j] == 3) { //新的地方箱子來了 map[cas][i - 2][j] += 4; //箱子的位置:箱子(-4)走了 人來(+5) map[cas][i - 1][j] += 1; //原來的地方人走了 map[cas][i][j] -= 5; } } break; case 's': case 'S': case 80: //下一個地方等于空地或者是目的 能走 if (map[cas][i + 1][j] == 0 || map[cas][i + 1][j] == 3) { //3+5=8 :表示目的和人在一起 //新地方(map[i-1][j])人(5)來了 map[cas][i + 1][j] += 5; //老地方(map[i][j])人(5)走了 map[cas][i][j] -= 5; } else if (map[cas][i + 1][j] == 4 || map[cas][i + 1][j] == 7) { //做箱子的下一個地方判斷能不能走 if (map[cas][i + 2][j] == 0 || map[cas][i + 2][j] == 3) { //新的地方箱子來了 map[cas][i + 2][j] += 4; //箱子的位置:箱子(-4)走了 人來(+5) map[cas][i + 1][j] += 1; //原來的地方人走了 map[cas][i][j] -= 5; } } break; case 'a': case 'A': case 75: //下一個地方等于空地或者是目的 能走 if (map[cas][i][j - 1] == 0 || map[cas][i][j - 1] == 3) { //3+5=8 :表示目的和人在一起 //新地方(map[i-1][j])人(5)來了 map[cas][i][j - 1] = map[cas][i][j - 1] + 5; //老地方(map[i][j])人(5)走了 map[cas][i][j] = map[cas][i][j] - 5; //j+=5 j=j+5 } else if (map[cas][i][j - 1] == 4 || map[cas][i][j - 1] == 7) { //做箱子的下一個地方判斷能不能走 if (map[cas][i][j - 2] == 0 || map[cas][i][j - 2] == 3) { //新的地方箱子來了 map[cas][i][j - 2] += 4; //箱子的位置:箱子(-4)走了 人來(+5) map[cas][i][j - 1] += 1; //原來的地方人走了 map[cas][i][j] -= 5; } } break; case 'D': case 'd': case 77: //下一個地方等于空地或者是目的 能走 if (map[cas][i][j + 1] == 0 || map[cas][i][j + 1] == 3) { //3+5=8 :表示目的和人在一起 //新地方(map[i-1][j])人(5)來了 map[cas][i][j + 1] += 5; //老地方(map[i][j])人(5)走了 map[cas][i][j] -= 5; } //下一個地方是箱子,判斷箱子的下一個地方是不是目的和空地 else if (map[cas][i][j + 1] == 4 || map[cas][i][j + 1] == 7) { //做箱子的下一個地方判斷能不能走 if (map[cas][i][j + 2] == 0 || map[cas][i][j + 2] == 3) { //新的地方箱子來了 map[cas][i][j + 2] += 4; //箱子的位置:箱子(-4)走了 人來(+5) map[cas][i][j + 1] += 1; //原來的地方人走了 map[cas][i][j] -= 5; } } break; } } //勝負判斷 //用什么判斷勝負: 箱子到達目的的個數(shù) int gameOver() { int count = 0; //所有的地方找一遍 for (int i = 0; i < 7; i++) { for (int j = 0; j < 8; j++) { if (map[cas][i][j] == 7) count++; } } return count; } //箱子數(shù)是零的時候也是勝利 int gameOver2() { int count = 3; //所有的地方找一遍 for (int i = 0; i < 7; i++) { for (int j = 0; j < 8; j++) { if (map[cas][i][j] == 3) count--; } } return count; } int main() { while (1) { printf("\n\t用方向鍵或w a s d鍵移動※推動★進入☆\n",cas+1); printf("\n\t\t 共兩關 第 %d 關\n",cas+1); drawMap(); if (gameOver() == boxSum[cas]) { cas++; if (cas == 2) break; else printf("\n\t\t 該關 OK!按任一鍵進繼續(xù)\n"); } keyDown(); system("cls"); } printf("游戲結束!"); printf("\n"); system("pause"); return 0; }
到此這篇關于基于C++寫一個推箱子小游戲的文章就介紹到這了,更多相關C++推箱子游戲內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
vc++實現(xiàn)的tcp socket客戶端和服務端示例
這篇文章主要介紹了vc++實現(xiàn)的tcp socket客戶端和服務端示例,需要的朋友可以參考下2014-03-03