利用c++編寫簡(jiǎn)易版2048小游戲
別的不多說,先上效果圖
我們都知道2048是個(gè)4 4的方格,為了方便數(shù)組下表我們生成5 5的數(shù)組,只用到1~4的下標(biāo)。
初始化時(shí)候先隨便生成兩個(gè)目標(biāo)
1、程序初始化
// 程序初始化 void init() { score = 0; memset(a, 0, sizeof(a)); int x1 = rand() % 4 + 1, y1 = rand() % 4 + 1, x2 = rand() % 4 + 1, y2 = rand() % 4 + 1; // 隨機(jī)生成兩個(gè)初始點(diǎn) a[x1][y1] = a[x2][y2] = 2; // 初始點(diǎn)初始化為 2 }
2、畫圖操作
畫圖操作,就是把有數(shù)組都打印出來,數(shù)字為0的就打印空字符,數(shù)字不為0的,就打印數(shù)字。
void drawmap() { system("cls"); for (int i = 1; i <= 4; i++) { for (int j = 1; j <= 4; j++) { if (a[i][j]) // 如果該位置沒有數(shù)字,則不繪制 { if(a[i][j]>1000) cout<<a[i][j]<<" "; else if(a[i][j]>100) cout<<a[i][j]<<" "; else if(a[i][j]>10) cout<<" "<<a[i][j]<<" "; else cout<<" "<<a[i][j]<<" "; } else { cout<<" "; } } cout<<"\n"; } }
3、字符控制
然后就是移動(dòng)了,我這里用輸入字符控制,用wsad,控制上下左右。
// 玩家操作 void move() { memcpy(b, a, sizeof(a)); // 將 a 備份至 b memset(mov, false, sizeof(mov)); // 初始化 mov 為 false(所有點(diǎn)均未移動(dòng)) char c; cin>>c; if(c=='w') //向上 { for (j = 1; j <= 4; j++) for (i = 2; i <= 4; i++) { if (!a[i][j])continue; int k = i; while (!a[k - 1][j] && k >= 2) { a[k - 1][j] = a[k][j]; a[k][j] = 0; k--; } if (a[k][j] == a[k - 1][j] && !mov[k - 1][j]) { a[k - 1][j] = 2 * a[k][j]; a[k][j] = 0; mov[k - 1][j] = true; score += a[k - 1][j]; } } } else if(c=='s') //向下 { //。。。 } else if(c=='a') //向左 { //。。。 } else if(c=='d') { } }
4、判斷游戲結(jié)束和游戲勝利
// 判斷游戲結(jié)束,對(duì)于任意一個(gè)位置,該位置為空 或 四周有位置上的數(shù)字與該位置上數(shù)字相等,說明可繼續(xù)移動(dòng)(游戲可繼續(xù)),否則游戲結(jié)束
// 判斷勝利,有任意一個(gè)位置達(dá)到 2048,則勝利
bool gameover() { for (i = 1; i <= 4; i++) for ( j = 1; j <= 4; j++) if (!a[i][j] || a[i][j] == a[i + 1][j] || a[i][j] == a[i - 1][j] || a[i][j] == a[i][j + 1] || a[i][j] == a[i][j - 1])return false; return true; } bool win() { for ( i = 1; i <= 4; i++) for ( j = 1; j <= 4; j++) if (a[i][j] == 256)return true; return false; }
到此這篇關(guān)于利用c++編寫簡(jiǎn)易版2048小游戲的文章就介紹到這了,更多相關(guān)c++編寫簡(jiǎn)易版2048小游戲內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C++深入學(xué)習(xí)之徹底理清重載函數(shù)匹配
C++ 不允許變量重名,但是允許多個(gè)函數(shù)取相同的名字,只要參數(shù)表不同即可,這叫作函數(shù)的重載,下面這篇文章主要給大家介紹了關(guān)于C++深入學(xué)習(xí)之徹底理清重載函數(shù)匹配的相關(guān)資料,需要的朋友可以參考下2019-01-01Qt實(shí)現(xiàn)TCP網(wǎng)絡(luò)編程
這篇文章主要為大家詳細(xì)介紹了Qt實(shí)現(xiàn)TCP網(wǎng)絡(luò)編程,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-08-08visual?studio?2022一個(gè)不易發(fā)現(xiàn)的問題
本文主要介紹了visual?studio?2022一個(gè)不易發(fā)現(xiàn)的問題,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07C++ 數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)兩個(gè)棧實(shí)現(xiàn)一個(gè)隊(duì)列
這篇文章主要介紹了詳解C++ 數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)兩個(gè)棧實(shí)現(xiàn)一個(gè)隊(duì)列的相關(guān)資料,需要的朋友可以參考下2017-03-03基于C++語言實(shí)現(xiàn)機(jī)動(dòng)車違章處罰管理系統(tǒng)
這篇文章主要介紹了基于C++語言實(shí)現(xiàn)機(jī)動(dòng)車違章處罰管理系統(tǒng)的相關(guān)資料,需要的朋友可以參考下2016-07-07