用C语言写一个数独游戏的代码,要求可以选择3个难度等级,用户输入行列以及该行列上对应的结果,检验正确性并给出答案
时间: 2024-02-15 18:02:50 浏览: 17
好的,以下是用C语言编写数独游戏的代码,它支持三个难度等级,可以让用户输入行列及其对应的结果,并检验正确性并给出答案。
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define ROW 9
#define COL 9
#define EASY_LEVEL 35
#define MEDIUM_LEVEL 45
#define HARD_LEVEL 55
void print_board(int board[ROW][COL]) {
int i, j;
printf("\n");
for (i = 0; i < ROW; i++) {
for (j = 0; j < COL; j++) {
printf("%d ", board[i][j]);
if (j == 2 || j == 5) {
printf(" ");
}
}
printf("\n");
if (i == 2 || i == 5) {
printf("\n");
}
}
}
int check_row_col(int board[ROW][COL], int row, int col, int num) {
int i, j;
for (i = 0; i < ROW; i++) {
if (board[row][i] == num || board[i][col] == num) {
return 0;
}
}
return 1;
}
int check_3x3(int board[ROW][COL], int row, int col, int num) {
int i, j;
int r = row - row % 3;
int c = col - col % 3;
for (i = r; i < r + 3; i++) {
for (j = c; j < c + 3; j++) {
if (board[i][j] == num) {
return 0;
}
}
}
return 1;
}
int generate_board(int board[ROW][COL], int level) {
int i, j, k, num, count;
srand(time(NULL));
for (i = 0; i < ROW; i++) {
for (j = 0; j < COL; j++) {
board[i][j] = 0;
}
}
for (i = 0; i < ROW; i++) {
count = 0;
for (j = 0; j < COL; j++) {
num = rand() % 9 + 1;
if (check_row_col(board, i, j, num) && check_3x3(board, i, j, num)) {
board[i][j] = num;
count++;
if (count >= level) {
break;
}
}
}
if (count < level) {
return 0;
}
}
return 1;
}
int is_valid_input(int row, int col, int num) {
if (row < 1 || row > 9 || col < 1 || col > 9 || num < 1 || num > 9) {
return 0;
}
return 1;
}
int is_valid_move(int board[ROW][COL], int row, int col, int num) {
if (!check_row_col(board, row - 1, col - 1, num) || !check_3x3(board, row - 1, col - 1, num)) {
return 0;
}
return 1;
}
int is_solved(int board[ROW][COL]) {
int i, j;
for (i = 0; i < ROW; i++) {
for (j = 0; j < COL; j++) {
if (board[i][j] == 0) {
return 0;
}
}
}
return 1;
}
void get_user_input(int *row, int *col, int *num) {
printf("Enter row, column, and number (separated by spaces): ");
scanf("%d %d %d", row, col, num);
}
void solve_board(int board[ROW][COL]) {
int i, j, num;
for (i = 0; i < ROW; i++) {
for (j = 0; j < COL; j++) {
if (board[i][j] == 0) {
for (num = 1; num <= 9; num++) {
if (check_row_col(board, i, j, num) && check_3x3(board, i, j, num)) {
board[i][j] = num;
solve_board(board);
if (is_solved(board)) {
return;
}
board[i][j] = 0;
}
}
return;
}
}
}
}
void play_game(int level) {
int board[ROW][COL];
int row, col, num;
if (!generate_board(board, level)) {
printf("Failed to generate board!\n");
return;
}
print_board(board);
while (1) {
get_user_input(&row, &col, &num);
if (!is_valid_input(row, col, num)) {
printf("Invalid input!\n");
continue;
}
if (!is_valid_move(board, row, col, num)) {
printf("Invalid move!\n");
continue;
}
board[row - 1][col - 1] = num;
print_board(board);
if (is_solved(board)) {
printf("Congratulations! You solved the puzzle!\n");
return;
}
}
}
int main() {
int choice;
printf("Choose difficulty level:\n");
printf("1 - Easy\n");
printf("2 - Medium\n");
printf("3 - Hard\n");
scanf("%d", &choice);
switch (choice) {
case 1:
play_game(EASY_LEVEL);
break;
case 2:
play_game(MEDIUM_LEVEL);
break;
case 3:
play_game(HARD_LEVEL);
break;
default:
printf("Invalid choice!\n");
break;
}
return 0;
}
```
以上就是用C语言编写数独游戏的代码,它支持三个难度等级,可以让用户输入行列及其对应的结果,并检验正确性并给出答案。