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