c语言2048项目报告,c语言----项目_小游戏2048
2048 小游戲 主要是針對邏輯思維的一個(gè)訓(xùn)練.
主要學(xué)習(xí)方面:1.隨機(jī)數(shù)產(chǎn)生的概率.2.行與列在進(jìn)行移動的時(shí)候幾種情況.3.messagebox的使用
#include
#include
#include
#include
using namespace std;
int board[4][4] = {0}; //二維數(shù)組
int if_need_rand; //是否生成隨機(jī)數(shù)
int if_game_over; //游戲結(jié)束
void showgame() { //打印邊框
system("cls"); //刷新屏幕
printf("┏━━━┳━━━┳━━━┳━━━┓\n");
for (int i = 0; i < 4; i++) {
printf("┃");
for (int j = 0; j < 4;j++) {
if (board[i][j]==0) {
printf(" ┃");
}
else {
printf("%3d┃",board[i][j]);
}
}
if (i<3) {
printf("\n┣━━━╋━━━╋━━━╋━━━┫\n");
}
else {
printf("\n┗━━━┻━━━┻━━━┻━━━┛\n");
}
}
}
//設(shè)計(jì)隨機(jī)數(shù)
void addrand() {
//隨機(jī)數(shù)種子
srand((unsigned)time(null));
int i, j;//行列
while (1) {
i = rand() % 4;
j = rand() % 4;
if (board[i][j]==0) {
//三目運(yùn)算符,幾率時(shí)2分之一
board[i][j] = (rand() % 3 ? 2 : 4);
break;
}
else {
continue;
}
}
}
//初始化
void initgame() {
if_need_rand = 1;
if_game_over = 0;
int i, j;
i = rand() % 4;
j = rand() % 4;
board[i][j] = 2;
//將數(shù)組內(nèi)值,賦值為0;重新初始化
for (int i = 0; i < 4; ++i) {
for (int j = 0; j < 4; j++) {
board[i][j] = 0;
}
}
addrand();
showgame();
}
//方向分為上下左右
//左移
void moveleft() {
for (int i = 0; i < 4;i++) {
for (int j = 1, k = 0; j < 4;++j) {
//先找到k項(xiàng)后面第一個(gè)不為0的項(xiàng)
if (board[i][j]!=0) {
//分為三個(gè)情況.相等,k項(xiàng)是0,不等
//相等
if (board[i][k]==board[i][j]) {
board[i][k++] <<= 1; //k++先賦值給k而后k++到下一個(gè)位置,進(jìn)行判斷
board[i][j] = 0;
if_need_rand = 1;
}else
//k項(xiàng)是0
if (board[i][k]==0) {
board[i][k] = board[i][j];
board[i][j] = 0;
if_need_rand = 1;
}
//k項(xiàng)與j項(xiàng)不等,有兩種情況,j項(xiàng)就在k項(xiàng)后邊,
//所以不能將j項(xiàng)賦值為0
else {
board[i][++k] = board[i][j];
if (j!=k) {
board[i][j] = 0;
if_need_rand = 1;
}
}
}
}
}
}
//右移
void moveringht() {
for (int i = 0; i < 4; i++) {
for (int j = 2, k = 3; j >= 0; j--) {
//先找到k項(xiàng)后面第一個(gè)不為0的項(xiàng)
if (board[i][j] != 0) {
//分為三個(gè)情況.相等,k項(xiàng)是0,不等
//相等
if (board[i][k] == board[i][j]) {
board[i][k--] <<= 1;
board[i][j] = 0;
if_need_rand = 1;
}
else
//k項(xiàng)是0
if (board[i][k] == 0) {
board[i][k] = board[i][j];
board[i][j] = 0;
if_need_rand = 1;
}
//k項(xiàng)與j項(xiàng)不等,有兩種情況,j項(xiàng)就在k項(xiàng)后邊,
//所以不能將j項(xiàng)賦值為0
else {
board[i][--k] = board[i][j];
if (j != k) {
board[i][j] = 0;
if_need_rand = 1;
}
}
}
}
}
}
//上移
void moveup() {
for (int i = 0; i < 4; i++) {
for (int j = 1, k = 0; j < 4; ++j) {
//先找到k項(xiàng)后面第一個(gè)不為0的項(xiàng)
if (board[j][i] != 0) {
//分為三個(gè)情況.相等,k項(xiàng)是0,不等
//相等
if (board[k][i] == board[j][i]) {
board[k++][i] <<= 1;
board[j][i] = 0;
if_need_rand = 1;
}
else
//k項(xiàng)是0
if (board[k][i] == 0) {
board[k][i] = board[j][i];
board[j][i] = 0;
if_need_rand = 1;
}
//k項(xiàng)與j項(xiàng)不等,有兩種情況,j項(xiàng)就在k項(xiàng)后邊,
//所以不能將j項(xiàng)賦值為0
else {
board[++k][i] = board[j][i];
if (j != k) {
board[j][i] = 0;
if_need_rand = 1;
}
}
}
}
}
}
//下移
void movedown() {
for (int i = 0; i < 4; i++) {
for (int j = 2, k = 3; j >=0; --j) {
//先找到k項(xiàng)后面第一個(gè)不為0的項(xiàng)
if (board[j][i] != 0) {
//分為三個(gè)情況.相等,k項(xiàng)是0,不等
//相等
if (board[k][i] == board[j][i]) {
board[k--][i] <<= 1;
board[j][i] = 0;
if_need_rand = 1;
}
else
//k項(xiàng)是0
if (board[k][i] == 0) {
board[k][i] = board[j][i];
board[j][i] = 0;
if_need_rand = 1;
}
//k項(xiàng)與j項(xiàng)不等,有兩種情況,j項(xiàng)就在k項(xiàng)后邊,
//所以不能將j項(xiàng)賦值為0
else {
board[--k][i] = board[j][i];
if (j != k) {
board[j][i] = 0;
if_need_rand = 1;
}
}
}
}
}
}
//查看有沒有空著的格子
int getnull() {
int n = 0;
for (int i = 0; i < 4; ++i) {
for (int j = 0; j < 4; ++j) {
if (board[i][j] == 0) {
n++;
}
}
}
return n;
}
//比較相鄰的兩個(gè)數(shù),是否相等
void gameover() {
for (int i = 0; i < 4; ++i) {
for (int j = 0; j < 3; ++j) {
if (board[i][j] == board[i][j + 1] || board[j][i] == board[j + 1][i]) {
if_game_over = 0;
return;
}
}
}
if_game_over = 1;
}
//執(zhí)行函數(shù)
void startgame() {
on:
initgame();
while (1) {
if_need_rand = 0;//首先將隨機(jī)值設(shè)為0.
switch (_getch())
{
case 'a':
case 'a':
case 75:
moveleft();
break;
case 'd':
case 'd':
case 77:
moveringht();
break;
case 'w':
case 'w':
case 72:
moveup();
break;
case 's':
case 's':
case 80:
movedown();
default:
break;
}
if (if_need_rand) {
addrand();
showgame();
}
//游戲判斷
if (getnull()==0) {
gameover();
if (if_game_over) {
if (messagebox(null,l"是否重來一局!",l"游戲結(jié)束",mb_yesno)==idyes) {
goto on;
}
else {
return;
}
}
}
}
}
int main() {
startgame();
return 0;
}
總結(jié)
以上是生活随笔為你收集整理的c语言2048项目报告,c语言----项目_小游戏2048的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 中原消费金融借钱审核多久可以放款
- 下一篇: vant部署_vant ui rem配置