DEVC++實(shí)現(xiàn)推箱子小游戲
推箱子小游戲(基于DEVC++),供大家參考,具體內(nèi)容如下
#include<iostream> #include<stdio.h> #include<conio.h> #include <windows.h> using namespace std; void Game_Menu(HANDLE hout); void Game_description(HANDLE hout); void gotoxy(HANDLE hout, int x, int y); int DrawMap(HANDLE hout); void Move(HANDLE hout); int finish(); void setmap(int n); void color(int m); bool flag = true; int pass = 1; #define R 10 #define C 10 #define framex 20 #define framey 14 int map[R][C] = {0}; //關(guān)卡1 int map1[R][C] = { { 0,0,1,1,1,0,0,0 }, { 0,0,1,3,1,0,0,0 }, { 0,0,1,0,1,1,1,1 }, { 1,1,1,0,0,4,3,1 }, { 1,3,4,4,0,1,1,1 }, { 1,1,1,5,4,1,0,0 }, { 0,0,0,1,3,1,0,0 }, { 0,0,0,1,1,1,0,0 } }; //地圖 2(關(guān)卡2) int map2[R][C]={ {1,1,1,1,1,0,0,0,0,0}, {1,5,0,0,1,0,0,0,0,0}, {1,0,4,4,1,0,1,1,1,0}, {1,0,4,0,1,0,1,3,1,0}, {1,1,1,0,1,1,1,3,1,0}, {0,1,1,0,0,0,0,3,1,0}, {0,1,0,0,0,1,0,0,1,0}, {0,1,0,0,0,1,1,1,1,0}, {0,1,1,1,1,1,0,0,0,0} }; //地圖 3(關(guān)卡3) int map3[R][C]={ { 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 }, { 0,0,1,4,0,4,0,4,0,1 }, { 0,0,1,0,4,1,1,0,0,1 }, { 1,1,1,0,4,0,1,0,1,1 }, { 1,3,3,3,3,3,0,0,1,0 }, { 1,1,1,1,1,1,1,1,1,0 }, }; void Game_Menu(HANDLE hout){//游戲開(kāi)始菜單 system("cls"); gotoxy(hout, framex, 1); cout << "*******************"; gotoxy(hout, framex, 3); cout << " 推箱子 "; gotoxy(hout, framex, 5); cout << " 按s或S開(kāi)始 "; gotoxy(hout, framex, 7); cout << " 按q或Q退出 "; gotoxy(hout, framex, 9); cout << "游戲前關(guān)閉中文輸入 "; gotoxy(hout, framex, 11); cout << "*******************"; _getch(); }; void Game_description(HANDLE hout){//操作提示 system("cls"); gotoxy(hout, framex, 1); cout << "*****************************"; gotoxy(hout, framex, 3); cout << " 按方向鍵上下左右移動(dòng) "; gotoxy(hout, framex, 5); cout << " 所有箱子到達(dá)目的地游戲勝利 "; gotoxy(hout, framex, 7); cout << " 按q或Q退出 "; gotoxy(hout, framex, 9); cout << "*****************************"; }; void gotoxy(HANDLE hout, int x, int y){ COORD pos; pos.X = x; pos.Y = y; SetConsoleCursorPosition(hout, pos); }; void print(int i){//根據(jù)map值輸出相應(yīng)的圖形 switch(i){ case 0: color(0x7); 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 箱子到達(dá)目的地 color(6); cout << "◆"; break; case 8: //5+3 人與目的地重合 color(3); cout << "♀"; break; default: break; } } int DrawMap(HANDLE hout){//新的關(guān)卡開(kāi)始時(shí)載入地圖 //HANDLE hout = GetStdHandle(STD_OUTPUT_HANDLE); gotoxy(hout, framex + C, framey - 3); color(0xF); cout << "第" << pass << "關(guān)"; //printf("第%d關(guān)", pass); for(int i = 0; i < R; i++){ gotoxy(hout, framex, framey + i); for(int j = 0; j < C; j++){ print(map[i][j]); } } return 0; }; void Move(HANDLE hout){//移動(dòng)小人 int x = 0, y = 0; for(int i = 0; i < R; i++){ for(int j = 0; j < C; j++){ if(map[i][j] == 5 || map [i] [j] == 8){ x = i; y = j; break; } } } gotoxy(hout, framex, framey + R); color(0xF); printf("當(dāng)前位置:(%d, %d)", x, y); int ch = _getch(); switch(ch){ case 'w': case 'W': case 72: if(map[x - 1][y] == 0 || map[x - 1][y] == 3){ map[x][y] -= 5; gotoxy(hout, framex + 2 * y, framey + x); print(map[x][y]); map[x - 1][y] += 5; gotoxy(hout, framex + 2 * y, framey + x - 1); print(map[x - 1][y]); } else if(map[x - 1][y] == 4 || map[x - 1][y] == 7){ if(map[x - 2][y] == 0 || map[x - 2][y] == 3){ map[x][y] -= 5; gotoxy(hout, framex + 2 * y, framey + x); print(map[x][y]); map[x - 1][y] += 1; gotoxy(hout, framex + 2 * y, framey + x - 1); print(map[x - 1][y]); map[x - 2][y] += 4; gotoxy(hout, framex + 2 * y, framey + x - 2); print(map[x - 2][y]); } } break; case 's': case 'S': case 80: if(map[x + 1][y] == 0 || map[x + 1][y] == 3){ map[x][y] -= 5; gotoxy(hout, framex + 2 * y, framey + x); print(map[x][y]); map[x + 1][y] += 5; gotoxy(hout, framex + 2 * y, framey + x + 1); print(map[x + 1][y]); } else if(map[x + 1][y] == 4 || map[x + 1][y] == 7){ if(map[x + 2][y] == 0 || map[x + 2][y] == 3){ map[x][y] -= 5; gotoxy(hout, framex + 2 * y, framey + x); print(map[x][y]); map[x + 1][y] += 1; gotoxy(hout, framex + 2 * y, framey + x + 1); print(map[x + 1][y]); map[x + 2][y] += 4; gotoxy(hout, framex + 2 * y, framey + x + 2); print(map[x + 2][y]); } } break; case 'a': case 'A': case 75: if(map[x][y - 1] == 0 || map[x][y - 1] == 3){ map[x][y] -= 5; gotoxy(hout, framex + 2 * y, framey + x); print(map[x][y]); map[x][y - 1] += 5; gotoxy(hout, framex + 2 * y - 2, framey + x); print(map[x][y - 1]); } else if(map[x][y - 1] == 4 || map[x][y - 1] == 7){ if(map[x][y - 2] == 0 || map[x][y - 2] == 3){ map[x][y] -= 5; gotoxy(hout, framex + 2 * y, framey + x); print(map[x][y]); map[x][y - 1] += 1; gotoxy(hout, framex + 2 * y - 2, framey + x); print(map[x][y - 1]); map[x][y - 2] += 4; gotoxy(hout, framex + 2 * y - 4, framey + x); print(map[x][y - 2]); } } break; case 'd': case 'D': case 77: if(map[x][y + 1] == 0 || map[x][y + 1] == 3){ map[x][y] -= 5; gotoxy(hout, framex + 2 * y, framey + x); print(map[x][y]); map[x][y + 1] += 5; gotoxy(hout, framex + 2 * y + 2, framey + x); print(map[x][y + 1]); } else if(map[x][y + 1] == 4 || map[x][y + 1] == 7){ if(map[x][y + 2] == 0 || map[x][y + 2] == 3){ map[x][y] -= 5; gotoxy(hout, framex + 2 * y, framey + x); print(map[x][y]); map[x][y + 1] += 1; gotoxy(hout, framex + 2 * y + 2, framey + x); print(map[x][y + 1]); map[x][y + 2] += 4; gotoxy(hout, framex + 2 * y + 4, framey + x); print(map[x][y + 2]); } } break; case 'q': case 'Q': flag = false; default: break; } }; int finish(){//判斷游戲結(jié)束 for(int i = 0; i < R; i++){ for(int j = 0; j < C; j++){ if(map[i][j] == 4)return 0; } } return 1; }; void setmap(int n){ switch(n){ case 1: memcpy(map, map1, sizeof(map1)); break; case 2: memcpy(map, map2, sizeof(map2)); break; case 3: memcpy(map, map3, sizeof(map3)); break; } }; void color(int m){//改變輸出符號(hào)的顏色 HANDLE consolehend; consolehend = GetStdHandle(STD_OUTPUT_HANDLE); SetConsoleTextAttribute(consolehend, m); }; int main(){ HANDLE hout = GetStdHandle(STD_OUTPUT_HANDLE); Game_Menu(hout); char ch = getch(); setmap(pass); Game_description(hout); DrawMap(hout); if(ch == 'q' || ch == 'Q'){ return 0; } while(flag){ Move(hout); if(finish()){ DrawMap(hout); gotoxy(hout, framex, framey + R); cout << " 恭喜,成功過(guò)關(guān)!"; gotoxy(hout, framex, framey + R + 2); cout << "重玩(R)"; ch = getch(); system("cls"); pass++; if(ch == 'r' || ch == 'R')pass--; if(pass > 3) { gotoxy(hout, framex, framey); cout << " 您已通過(guò)全部關(guān)卡!"; getch(); flag = false; } else{ setmap(pass); Game_description(hout); DrawMap(hout); } } } return 0; }
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
你真的理解C語(yǔ)言qsort函數(shù)嗎?帶你深度剖析qsort函數(shù)
這篇文章主要介紹了你真的理解C語(yǔ)言qsort函數(shù)嗎?帶你深度剖析qsort函數(shù),本篇將引入一個(gè)庫(kù)函數(shù)來(lái)實(shí)現(xiàn)我們希望的順序,結(jié)合示例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2023-02-02C語(yǔ)言雙指針多方法旋轉(zhuǎn)數(shù)組解題LeetCode
這篇文章主要為大家介紹了C語(yǔ)言雙指針使用多方法旋轉(zhuǎn)數(shù)組題解LeetCode,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2022-02-02詳解如何從Matlab中導(dǎo)出清晰的結(jié)果圖片
寫(xiě)文章的時(shí)候有時(shí)需要matlab導(dǎo)出清晰的圖片,如果直接用figure里面的保存的話不夠清晰,下面這篇文章主要給大家介紹了關(guān)于如何從Matlab中導(dǎo)出清晰的結(jié)果圖片的相關(guān)資料,需要的朋友可以參考下2022-06-06C++ 使用PrintWindow實(shí)現(xiàn)窗口截圖功能
這篇文章主要介紹了C++ 如何使用PrintWindow實(shí)現(xiàn)窗口截圖功能,文中示例代碼非常詳細(xì),幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下2020-08-08Qt事件過(guò)濾實(shí)現(xiàn)點(diǎn)擊圖片的放大和縮小
這篇文章主要為大家詳細(xì)介紹了Qt事件過(guò)濾實(shí)現(xiàn)點(diǎn)擊圖片的放大和縮小,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-08-08C++實(shí)現(xiàn)LeetCode(51.N皇后問(wèn)題)
這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(51.N皇后問(wèn)題),本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-07-07C++ Qt開(kāi)發(fā)之使用QTcpSocket實(shí)現(xiàn)TCP網(wǎng)絡(luò)通信
Qt 是一個(gè)跨平臺(tái)C++圖形界面開(kāi)發(fā)庫(kù),利用Qt可以快速開(kāi)發(fā)跨平臺(tái)窗體應(yīng)用程序,本文主要為大家介紹了如何運(yùn)用QTcpSocket組件實(shí)現(xiàn)基于TCP的網(wǎng)絡(luò)通信功能,需要的可以參考下2024-03-03c語(yǔ)言網(wǎng)絡(luò)編程-標(biāo)準(zhǔn)步驟(改進(jìn)版)
這篇文章主要介紹了c語(yǔ)言網(wǎng)絡(luò)編程-標(biāo)準(zhǔn)步驟的改進(jìn)說(shuō)明,需要的朋友可以參考下2014-01-01