網(wǎng)站開發(fā)通常叫什么部門如何做市場推廣方案
名人說:莫聽穿林打葉聲,何妨吟嘯且徐行?!?蘇軾《定風(fēng)波·莫聽穿林打葉聲》
Code_流蘇(CSDN)(一個喜歡古詩詞和編程的Coder)
目錄
- 一、效果圖
- 二、代碼(帶注釋)
- 三、說明
一、效果圖
二、代碼(帶注釋)
//創(chuàng)作者:Code_流蘇(CSDN)
//未經(jīng)允許,禁止轉(zhuǎn)載發(fā)布,可自己學(xué)習(xí)使用
#include <iostream>
#include <vector>
#include <cstdlib>
#include <ctime>using namespace std;const int SIZE = 4; // 定義游戲板的大小為4x4// 初始化游戲板
void initializeBoard(vector<vector<int>>& board) {board.assign(SIZE, vector<int>(SIZE, 0)); // 將游戲板初始化為SIZE x SIZE的0矩陣// 在游戲板上隨機生成兩個數(shù)字2board[rand() % SIZE][rand() % SIZE] = 2;board[rand() % SIZE][rand() % SIZE] = 2;
}// 打印游戲板
void printBoard(const vector<vector<int>>& board) {for (int i = 0; i < SIZE; ++i) {for (int j = 0; j < SIZE; ++j) {if(board[i][j] == 0) cout << ".";else cout << board[i][j];cout << "\t";}cout << endl;}
}// 檢查是否還有可移動的格子
bool canMove(const vector<vector<int>>& board) {for (int i = 0; i < SIZE; ++i) {for (int j = 0; j < SIZE; ++j) {// 如果有空格或者有相鄰的相同數(shù)字,則可以移動if (board[i][j] == 0) return true;if (i < SIZE - 1 && board[i][j] == board[i + 1][j]) return true;if (j < SIZE - 1 && board[i][j] == board[i][j + 1]) return true;}}return false;
}// 在隨機位置添加一個數(shù)字2或4
void addNumber(vector<vector<int>>& board) {int i, j;do {i = rand() % SIZE;j = rand() % SIZE;} while (board[i][j] != 0); // 選擇一個空的格子board[i][j] = (rand() % 10 == 0) ? 4 : 2; // 有10%的概率生成4,90%的概率生成2
}// 旋轉(zhuǎn)游戲板
void rotateBoard(vector<vector<int>>& board) {vector<vector<int>> temp(SIZE, vector<int>(SIZE));for (int i = 0; i < SIZE; ++i) {for (int j = 0; j < SIZE; ++j) {temp[j][SIZE - 1 - i] = board[i][j]; // 旋轉(zhuǎn)90度}}board = temp;
}// 向左移動格子并合并
void moveTiles(vector<vector<int>>& board) {for (int i = 0; i < SIZE; ++i) {int lastMergePosition = -1; for (int j = 1; j < SIZE; ++j) {if (board[i][j] == 0) continue; // 如果當(dāng)前格子為空,則跳過int previousPosition = j - 1;// 尋找可以合并或移動的位置while (previousPosition > lastMergePosition && board[i][previousPosition] == 0) {previousPosition--;}if (previousPosition == j) continue; // 如果沒有可移動或合并的位置,繼續(xù)下一個格子// 根據(jù)情況移動或合并格子if (board[i][previousPosition] == 0) {board[i][previousPosition] = board[i][j];board[i][j] = 0;} else if (board[i][previousPosition] == board[i][j]) {board[i][previousPosition] *= 2;board[i][j] = 0;lastMergePosition = previousPosition;} else if (previousPosition + 1 != j) {board[i][previousPosition + 1] = board[i][j];board[i][j] = 0;}}}
}// 定義不同方向的移動
void moveLeft(vector<vector<int>>& board) {moveTiles(board);
}void moveRight(vector<vector<int>>& board) {rotateBoard(board);rotateBoard(board);moveTiles(board);rotateBoard(board);rotateBoard(board);
}void moveUp(vector<vector<int>>& board) {rotateBoard(board);rotateBoard(board);rotateBoard(board);moveTiles(board);rotateBoard(board);
}void moveDown(vector<vector<int>>& board) {rotateBoard(board);moveTiles(board);rotateBoard(board);rotateBoard(board);rotateBoard(board);
}// 主函數(shù)
int main() {srand(time(NULL)); // 設(shè)置隨機種子vector<vector<int>> board;initializeBoard(board); // 初始化游戲板printBoard(board); // 打印游戲板while (true) {if (!canMove(board)) {cout << "游戲結(jié)束!" << endl;break;}char input;cout << "選擇方向 (w/a/s/d): ";cin >> input; // 獲取用戶輸入switch (input) {case 'a':moveLeft(board);break;case 'd':moveRight(board);break;case 'w':moveUp(board);break;case 's':moveDown(board);break;default:cout << "無效輸入! 請使用 w/a/s/d." << endl;continue;}if (canMove(board)) {addNumber(board); // 在合適位置添加新的數(shù)字}printBoard(board); // 打印更新后的游戲板}return 0;
}
三、說明
上述代碼實現(xiàn)了一個簡單的2048游戲,主要由以下幾個部分組成:
-
初始化游戲板 (
initializeBoard
函數(shù)):用于初始化一個SIZE x SIZE
(在這個例子中是4x4)的游戲板,并隨機在兩個位置放置數(shù)字2。 -
打印游戲板 (
printBoard
函數(shù)):該函數(shù)用于遍歷游戲板并打印每個元素,其中0被替換為.
以便于觀看。 -
檢查是否可以移動 (
canMove
函數(shù)):這個函數(shù)用來檢查游戲板上是否還有可合并的元素或者空位,以決定游戲是否結(jié)束。 -
添加數(shù)字 (
addNumber
函數(shù)):在玩家移動之后,在一個隨機的空位置上添加一個新的數(shù)字(90%的概率是2,10%的概率是4)。 -
旋轉(zhuǎn)游戲板 (
rotateBoard
函數(shù)):為了簡化移動邏輯,此函數(shù)用來將游戲板順時針旋轉(zhuǎn)90度。 -
移動方塊 (
moveTiles
函數(shù)):該函數(shù)用于處理實際的方塊移動和合并邏輯。 -
移動方向 (
moveLeft
,moveRight
,moveUp
,moveDown
函數(shù)):這些函數(shù)使用moveTiles
和rotateBoard
來處理不同方向的移動。 -
主函數(shù) (
main
函數(shù)):設(shè)置游戲的初始狀態(tài),然后進(jìn)入一個循環(huán),等待玩家輸入來移動方塊,直到?jīng)]有移動可做時結(jié)束游戲。
補充說明:
- 游戲板的大小是通過
const int SIZE = 4
預(yù)設(shè)的,即方格大小為4x4。 - 游戲開始時,游戲板上有兩個數(shù)字2。
- 玩家可以通過輸入’w’, ‘a(chǎn)’, ‘s’, 'd’來控制方塊向上、左、下、右移動。
- 當(dāng)游戲板上沒有空位或者沒有可合并的相鄰方塊時,游戲結(jié)束。
- 這個程序沒有實現(xiàn)計分功能,可自己擴充實現(xiàn)。
Code_流蘇(CSDN)(一個喜歡古詩詞和編程的Coder)
點贊加關(guān)注,收藏不迷路!本篇文章對你有幫助的話,還請多多點贊支持!