您好,登錄后才能下訂單哦!
今天就跟大家聊聊有關(guān)使用C++怎么編寫(xiě)一個(gè)開(kāi)心消消樂(lè)游戲,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。
用C++實(shí)現(xiàn)的開(kāi)心消消樂(lè)主要分成一個(gè)一個(gè)模塊去實(shí)現(xiàn)的,較少代碼的耦合性,在這里用了一個(gè)xiaoxiaogame類去實(shí)現(xiàn),其中構(gòu)造函數(shù)中對(duì)數(shù)組和變量的初始化 xiaoxiaogame(int row1, int col1); 用void display();這樣一個(gè)函數(shù)實(shí)現(xiàn)顯示,用bool isvalid(int x, int y);來(lái)判斷一個(gè)坐標(biāo)所在的位置能不能消除, 用bool isgameover();判斷游戲有沒(méi)有結(jié)束,用void remove(int x, int y, int target);來(lái)消除方塊,然后用void adjustment()去調(diào)試消除方塊后的位置 用void playgame();來(lái)執(zhí)行游戲。
代碼如下:
#include<iostream> #include<string> #include<vector> #include<ctime> using namespace std; class xiaoxiaogame { public: //構(gòu)造函數(shù)中對(duì)數(shù)組和變量的初始化 xiaoxiaogame(int row1, int col1); //顯示 void display(); //判斷一個(gè)坐標(biāo)所在的位置能不能消 bool isvalid(int x, int y); //判斷游戲有沒(méi)有結(jié)束 bool isgameover(); //用深度遍歷去執(zhí)行消除功能 void remove(int x, int y, int target); //消除方塊后剩余方塊的擺放位置的調(diào)整 void adjustment(); //執(zhí)行游戲 void playgame(); private: //存放游戲開(kāi)心消消樂(lè)的二維數(shù)組 vector<vector<int>>nums; //記錄存在的狀態(tài) vector<vector<bool>>state; //記錄分?jǐn)?shù) int score; //連在一起的相同數(shù)字的個(gè)數(shù) int cnt; //開(kāi)心消消樂(lè)的行 int row; //開(kāi)心消消樂(lè)的列 int col; }; xiaoxiaogame::xiaoxiaogame(int row1, int col1) { row = row1; col = col1; score = 0; cnt = 0; srand(time(0)); vector<vector<int>>tmp(row1,vector<int>(col1,0)); vector<vector<bool>>temp(row1, vector<bool>(col1, false)); state = temp; for (int i = 0; i < row; i++) { for (int j = 0; j < col; j++) { tmp[i][j] = rand() % 3; } } nums = tmp; display(); } void xiaoxiaogame::display() { for (int i = 0; i < row; i++) { for (int j = 0; j < col; j++) { if (!state[i][j]) cout << nums[i][j] << " "; else cout << " "; } cout << endl; } cout << "your score is :" << score << endl; } bool xiaoxiaogame::isvalid(int x, int y) { if (x < 0 || x >= row || y < 0 || y >= col || state[x][y])return false; return true; } bool xiaoxiaogame::isgameover() { for (int i = 0; i < row; i++) { for (int j = 0; j < col; j++) { int target = nums[i][j]; int x = i; int y = j; if (!isvalid(i, j))return false; if ((isvalid(x + 1, y) && nums[x + 1][y] == target) || (isvalid(x - 1, y) && nums[x - 1][y] == target) || \ (isvalid(x, y + 1) && nums[x][y + 1] == target) || (isvalid(x, y - 1) && nums[x][y - 1] == target)) return false; } } return true; } void xiaoxiaogame::remove(int x, int y, int target) { if (!isvalid(x, y))return; if (nums[x][y] != target)return; state[x][y] = true; cnt++; remove(x + 1, y, target); remove(x - 1, y, target); remove(x, y + 1, target); remove(x, y - 1, target); } void xiaoxiaogame::adjustment() { for (int j = 0; j < col; j++) { vector<int>tmp; for (int i = row - 1; i >= 0; --i) { if (!state[i][j])tmp.push_back(nums[i][j]); } int r = row - 1; for (int i = 0; i < tmp.size(); i++) { nums[r][j] = tmp[i]; state[r][j] = false; r--; } for (; r >= 0; r--) { state[r][j] = true; } } } void xiaoxiaogame::playgame() { int x, y; while (cin >> x >> y) { if (!isvalid(x, y))continue; int target = nums[x][y]; cnt = 0; if ((isvalid(x + 1, y) && nums[x + 1][y] == target) || (isvalid(x - 1, y) && nums[x - 1][y] == target) || \ (isvalid(x, y + 1) && nums[x][y + 1] == target) || (isvalid(x, y - 1) && nums[x][y - 1] == target)) remove(x, y, target); score += target*cnt; adjustment(); display(); if (isgameover()) { cout << "gameover" << endl; break; } } } int main() { xiaoxiaogame t(10, 10); t.playgame(); cin.get(); return 0; }
看完上述內(nèi)容,你們對(duì)使用C++怎么編寫(xiě)一個(gè)開(kāi)心消消樂(lè)游戲有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請(qǐng)關(guān)注億速云行業(yè)資訊頻道,感謝大家的支持。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。