编写一个基于Linux的2048游戏代码
以下是一个基于Linux的2048游戏的代码示例:
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <time.h>
#define SIZE 4
int board[SIZE][SIZE];
void initializeBoard() {
// 初始化游戏板
for (int i = 0; i < SIZE; i++) {
for (int j = 0; j < SIZE; j++) {
board[i][j] = 0;
}
}
// 随机生成两个初始数字
srand(time(0));
int count = 0;
while (count < 2) {
int i = rand() % SIZE;
int j = rand() % SIZE;
if (board[i][j] == 0) {
board[i][j] = 2;
count++;
}
}
}
void printBoard() {
// 打印游戏板
printf("\n");
for (int i = 0; i < SIZE; i++) {
for (int j = 0; j < SIZE; j++) {
printf("%d\t", board[i][j]);
}
printf("\n");
}
printf("\n");
}
bool isGameOver() {
// 检查游戏是否结束
for (int i = 0; i < SIZE; i++) {
for (int j = 0; j < SIZE; j++) {
if (board[i][j] == 0) {
return false;
}
if (i != SIZE - 1 && board[i][j] == board[i + 1][j]) {
return false;
}
if (j != SIZE - 1 && board[i][j] == board[i][j + 1]) {
return false;
}
}
}
return true;
}
void addRandomNumber() {
// 在空白位置随机添加数字2或4
int count = 0;
while (count < 1) {
int i = rand() % SIZE;
int j = rand() % SIZE;
if (board[i][j] == 0) {
board[i][j] = (rand() % 2 + 1) * 2;
count++;
}
}
}
void swipeLeft() {
// 向左滑动
for (int i = 0; i < SIZE; i++) {
int k = 0;
for (int j = 1; j < SIZE; j++) {
if (board[i][j] != 0) {
if (board[i][k] == 0) {
board[i][k] = board[i][j];
board[i][j] = 0;
} else if (board[i][k] == board[i][j]) {
board[i][k] *= 2;
board[i][j] = 0;
k++;
} else {
k++;
board[i][k] = board[i][j];
if (j != k) {
board[i][j] = 0;
}
}
}
}
}
}
void swipeRight() {
// 向右滑动
for (int i = 0; i < SIZE; i++) {
int k = SIZE - 1;
for (int j = SIZE - 2; j >= 0; j--) {
if (board[i][j] != 0) {
if (board[i][k] == 0) {
board[i][k] = board[i][j];
board[i][j] = 0;
} else if (board[i][k] == board[i][j]) {
board[i][k] *= 2;
board[i][j] = 0;
k--;
} else {
k--;
board[i][k] = board[i][j];
if (j != k) {
board[i][j] = 0;
}
}
}
}
}
}
void swipeUp() {
// 向上滑动
for (int j = 0; j < SIZE; j++) {
int k = 0;
for (int i = 1; i < SIZE; i++) {
if (board[i][j] != 0) {
if (board[k][j] == 0) {
board[k][j] = board[i][j];
board[i][j] = 0;
} else if (board[k][j] == board[i][j]) {
board[k][j] *= 2;
board[i][j] = 0;
k++;
} else {
k++;
board[k][j] = board[i][j];
if (i != k) {
board[i][j] = 0;
}
}
}
}
}
}
void swipeDown() {
// 向下滑动
for (int j = 0; j < SIZE; j++) {
int k = SIZE - 1;
for (int i = SIZE - 2; i >= 0; i--) {
if (board[i][j] != 0) {
if (board[k][j] == 0) {
board[k][j] = board[i][j];
board[i][j] = 0;
} else if (board[k][j] == board[i][j]) {
board[k][j] *= 2;
board[i][j] = 0;
k--;
} else {
k--;
board[k][j] = board[i][j];
if (i != k) {
board[i][j] = 0;
}
}
}
}
}
}
int main() {
initializeBoard();
while (!isGameOver()) {
printBoard();
// 获取用户输入
char move;
printf("Enter move (w/a/s/d): ");
scanf(" %c", &move);
// 根据用户输入执行相应操作
switch (move) {
case 'w':
swipeUp();
break;
case 'a':
swipeLeft();
break;
case 's':
swipeDown();
break;
case 'd':
swipeRight();
break;
default:
printf("Invalid move. Try again.\n");
continue;
}
// 随机添加一个数字
addRandomNumber();
}
printf("Game Over!\n");
return 0;
}
这是一个简单的基于控制台的2048游戏实现。游戏板是一个4x4的二维数组,数字2或4随机出现在空白位置。玩家可以使用"w"、"a"、"s"和"d"键来移动数字。玩家根据移动的方向,相邻并相等的数字会相加。游戏在所有位置都被填满且无法再进行移动时结束
原文地址: http://www.cveoy.top/t/topic/h1Fn 著作权归作者所有。请勿转载和采集!