本次使用C语言实现初始化棋盘、棋盘的打印、玩家下棋、电脑下棋、判断输赢,其中涉及到二维数组以及分模块编写。

二维数组

        二维数组即多维数组中的一种,就是多个数组集合在一起形成的数组。
int arr_1[3] = { 0 }; int arr_2[3][4] = { 0 };
此处 arr_1,表示元素类型为int型,元素个数为3的数组。

       
arr_2,表示以“元素类型为int型、元素个数为4的数组”为元素、元素个数为3的数组。也可以理解为3行4列的一个表格,但实际上在内存中是连续存放的。

第1组(4个元素)第2组(4个元素)第3组(4个元素)

三子棋游戏框架

        头文件game.h
#pragma once #include <stdio.h> #include <stdlib.h> #include <time.h> #define
ROW 3 #define COL 3 //初始化棋盘 void InitBoard(char board[ROW][COL], int row, int
col); //打印棋盘 void DisplayBoard(char board[ROW][COL], int row, int col); //玩家下棋
void player_move(char board[ROW][COL], int row, int col);
//电脑下棋(随机下棋,判断算法暂时不考虑) void computer_move(char board[ROW][COL], int row, int
col); //判断输赢 char is_win(char board[ROW][COL], int row, int col);

        源文件game.c
#define _CRT_SECURE_NO_WARNINGS 1 #include "game.h" //初始化棋盘 void
InitBoard(char board[ROW][COL], int row, int col) { int i = 0; for (i = 0; i <
row; i++) { int j = 0; for (j = 0; j < col; j++) { board[i][j] = ' '; } } }
//打印棋盘 void DisplayBoard(char board[ROW][COL], int row, int col) {
printf("\n"); int i = 0; for (i = 0; i < row; i++) { int j = 0; for (j = 0; j <
col; j++) { printf(" %c ", board[i][j]); if (j < col - 1) { printf("|"); } }
printf("\n"); if (i < row - 1) { for (j = 0; j < col; j++) { printf("---"); if
(j < col - 1) { printf("|"); } } printf("\n"); } } printf("\n"); } //玩家下棋 void
player_move(char board[ROW][COL], int row, int col) { printf("玩家下棋\n"); int x =
0; int y = 0; while (1) { printf("请输入坐标:>"); scanf("%d %d", &x, &y); if (x >= 1
&& x <= row && y >= 1 && y <= col) { if (board[x - 1][y - 1] == ' ') { board[x
- 1][y - 1] = '*'; break; } else { printf("此处已经被下过了,请重新输入坐标"); } } else {
printf("坐标错误,请重新输入"); } } } //电脑下棋(随机下棋,判断算法暂时不考虑) void computer_move(char
board[ROW][COL], int row, int col) { int x = 0; int y = 0; printf("电脑下棋:>\n");
while (1) { x = rand() % row; y = rand() % col; if (board[x][y] == ' ') {
board[x][y] = '#'; break; } } } //判断棋盘是否满了 static int is_full(char
board[ROW][COL], int row, int col) { int i = 0; for (i = 0; i < row; i++) { int
j = 0; for (j = 0; j < col; j++) { if (board[i][j] == ' ') { return 0; //没满 } }
} return 1; //满了 } //判断输赢 char is_win(char board[ROW][COL], int row, int col) {
int i = 0; //判断行 for (i = 0; i < row; i++) { if (board[i][0] == board[i][1] &&
board[i][1] == board[i][2] && board[i][0] != ' ') { return board[i][0]; } }
//判断列 for (i = 0; i < row; i++) { if (board[0][i] == board[1][i] && board[1][i]
== board[2][i] && board[0][i] != ' ') { return board[0][i]; } } //判断对角线 if
(board[0][0] == board[1][1] && board[1][1] == board[2][2] && board[1][1] != '
') { return board[1][1]; } if (board[0][2] == board[1][1] && board[1][1] ==
board[2][0] && board[1][1] != ' ') { return board[1][1]; } //判断平局 if
(is_full(board, row, col) == 1) { return 'Q'; } return 'C'; }

        主函数源文件test.c
#define _CRT_SECURE_NO_WARNINGS 1 #include "game.h" void menu() {
printf("*******************************\n"); printf("*********** 1.paly
************\n"); printf("*********** 0.exit ************\n");
printf("*******************************\n"); } void game() { char ret = 0; char
board[ROW][COL] = { 0 }; //存放下棋的数据 InitBoard(board, ROW, COL); //初始化为全空格
DisplayBoard(board,ROW, COL); //打印棋盘 while (1) { player_move(board, ROW, COL);
//玩家下棋 DisplayBoard(board, ROW, COL); //打印棋盘 ret = is_win(board, ROW, COL);
//判断输赢 if (ret != 'C') { break; } computer_move(board, ROW, COL);
//电脑下棋(随机下棋,判断算法暂时不考虑) DisplayBoard(board, ROW, COL); //打印棋盘 ret =
is_win(board, ROW, COL); //判断输赢 if (ret != 'C') { break; } } if (ret == '*') {
printf("-----玩家赢了-----\n"); } else if (ret == '#') {
printf("-----电脑赢了-----\n"); } else { printf("-------平局-------\n"); }
DisplayBoard(board, ROW, COL); //打印棋盘 } void test() { int input = 0;
srand((unsigned int)time(NULL)); do { menu(); printf("请选择:>"); scanf("%d",
&input); switch (input) { case 1: printf("三字棋游戏开始\n"); game(); break; case 0:
printf("退出游戏\n"); break; default: printf("输入错误,请输入1或0\n"); break; } } while
(input); } int main() { test(); return 0; }

技术
下载桌面版
GitHub
百度网盘(提取码:draw)
Gitee
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:[email protected]
QQ群:766591547
关注微信