c语言4x4数字华容道
时间: 2023-06-23 12:54:59 浏览: 99
好的,下面是一个简单的 C 语言 4x4 数字华容道游戏的实现。
游戏规则:
1. 在 4x4 的格子中,有 15 个数字和一个空格,数字从 1 到 15。
2. 玩家可以通过移动数字,将它们按照从小到大的顺序排列,最后让空格在右下角。
3. 玩家每次可以将数字移动到空格的位置,如果某个数字不能移动,则无法进行该操作。
4. 玩家可以选择退出游戏。
以下是一个简单的实现代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define ROWS 4
#define COLS 4
#define EMPTY_ROW 3
#define EMPTY_COL 3
void init_board(int board[ROWS][COLS]);
void print_board(int board[ROWS][COLS]);
int is_win(int board[ROWS][COLS]);
void move(int board[ROWS][COLS], int row, int col);
int main()
{
int board[ROWS][COLS];
int row, col, choice;
srand((unsigned int)time(NULL)); // 用当前时间作为随机数种子
init_board(board); // 初始化游戏
printf("4x4 数字华容道游戏开始!\n");
do {
print_board(board); // 打印游戏板面
printf("请选择要移动的数字(输入 0 退出游戏):");
scanf("%d", &choice);
if (choice == 0) {
printf("退出游戏!\n");
break;
}
// 在 board 数组中查找选择的数字的位置
for (row = 0; row < ROWS; row++) {
for (col = 0; col < COLS; col++) {
if (board[row][col] == choice) {
move(board, row, col); // 移动数字
if (is_win(board)) { // 如果已经排列好了,结束游戏
printf("恭喜你,游戏胜利!\n");
return 0;
}
break;
}
}
}
} while (1);
return 0;
}
// 初始化游戏板面
void init_board(int board[ROWS][COLS])
{
int i, j, num;
for (i = 0; i < ROWS; i++) {
for (j = 0; j < COLS; j++) {
num = i * COLS + j + 1;
if (num < ROWS * COLS)
board[i][j] = num;
else
board[i][j] = 0; // 最后一个位置留空
}
}
// 随机打乱数字位置
for (i = 0; i < ROWS; i++) {
for (j = 0; j < COLS; j++) {
int new_row = rand() % ROWS;
int new_col = rand() % COLS;
int temp = board[i][j];
board[i][j] = board[new_row][new_col];
board[new_row][new_col] = temp;
}
}
}
// 打印游戏板面
void print_board(int board[ROWS][COLS])
{
int i, j;
printf("\n");
for (i = 0; i < ROWS; i++) {
for (j = 0; j < COLS; j++) {
if (board[i][j] == 0)
printf(" "); // 空格
else
printf("%2d ", board[i][j]);
}
printf("\n");
}
printf("\n");
}
// 判断游戏是否胜利
int is_win(int board[ROWS][COLS])
{
int i, j, num = 1;
for (i = 0; i < ROWS; i++) {
for (j = 0; j < COLS; j++) {
if (board[i][j] != num && num < ROWS * COLS)
return 0; // 没有排列好
num++;
}
}
return 1; // 排列好了
}
// 移动数字
void move(int board[ROWS][COLS], int row, int col)
{
int temp;
if (row > 0 && board[row-1][col] == 0) { // 上移
temp = board[row][col];
board[row][col] = board[row-1][col];
board[row-1][col] = temp;
}
else if (row < ROWS-1 && board[row+1][col] == 0) { // 下移
temp = board[row][col];
board[row][col] = board[row+1][col];
board[row+1][col] = temp;
}
else if (col > 0 && board[row][col-1] == 0) { // 左移
temp = board[row][col];
board[row][col] = board[row][col-1];
board[row][col-1] = temp;
}
else if (col < COLS-1 && board[row][col+1] == 0) { // 右移
temp = board[row][col];
board[row][col] = board[row][col+1];
board[row][col+1] = temp;
}
}
```
希望这个简单的 4x4 数字华容道游戏能够带给你一些乐趣和练习编程的机会!