C语言简单实现三子棋游戏

本文实例为大家分享了C语言简单实现三子棋游戏的具体代码,供大家参考,具体内容如下
设计思路
1. 二维数组实现棋盘
2. 设计并打印出棋盘
3. 玩家先手
4. 每一次下棋后判断输赢
首先我们写出游戏的主函数,让玩家能自由选择开始游戏或者退出游戏。

int main(){int input = 0; srand((unsigned int)time(NULL)); //生成随机数用于电脑下棋do{menu(); //打印菜单printf("请选择 >"); scanf("%d", &input); //玩家进行选择switch (input){case 1:game(); break; case 0:printf("退出游戏\n"); break; default:printf("请正确输入\n"); break; }} while (input); }

接下来我们看看游戏该怎样具体实现
【C语言简单实现三子棋游戏】首先确定我们的棋盘长度和宽度
C语言简单实现三子棋游戏
文章图片

我们希望能够将完整棋盘展示给玩家,所以我们通过以下方式来实现
C语言简单实现三子棋游戏
文章图片

void DisplayBoard(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++){printf("%c", board[i][j]); if (j < col - 1){printf("|"); }}printf("\n"); if (i < row - 1){for (j = 0; j < col-1; j++){printf("---|"); }printf("---\n"); } }}

当我们下棋时,棋盘中最好时没有任何内容的,这样才能方便玩家使用
所以我们可以将棋盘中的内容先放入 “空格”
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 PlayerMove(char board[ROW][COL], int row, int col){ printf("请输入坐标>\n"); int x = 0; int y = 0; while (1) {scanf("%d%d", &x,&y); if (1<= x && x <=COL && 0 <= y && y <= ROW){if (board[x-1][y-1] == ' '){board[x-1][y-1] = '*'; break; }else{printf("坐标已被占用,请重新输入>\n"); }}else {printf("坐标不合法,请重新输入>\n"); } } }

电脑下棋我们又该如何实现呢?
void ComputerMove(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; } }}

玩家或电脑下棋之后,如果已经成型,也就是“三子一线”,我们不能再继续游戏了,所以我们要考虑何时游戏结束,这里给出了我的判断函数。
char IsWin(char board[ROW][COL], int row, int col){ int x=0, y=0; int z = 0; for (x = 0; x < COL; x++) {int m = 0; //用于判断某一行int n = 0; //用于判断某一列int i = 0; //用于判断升斜线方向int j = 0; //用于判断降斜线方向for (y = 0; y < ROW; y++){if (board[x][0] != ' '&&board[x][0] == board[x][y]){n++; }else if ( board[0][x] != ' '&&board[0][x] == board[y][x] ){m++; }if (board[x][y]==' '){z++; }}if ( board[0][0] != ' '&&board[0][0] == board[x][x]){i++; }if (board[ROW - 1][0] == board[ROW - 1 - x][x] && board[ROW-1][0] != ' '){j++; }if (n == COL){return board[x][0]; }else if (m == ROW){return board[0][x]; }else if (i == COL){return board[0][0]; }else if (j == ROW){return board[ROW - 1][0]; } } if (z == 0) {return z; } return 'C'; }

将这些函数做成我们的游戏函数
void menu(){ printf("***************************\n"); printf("********1.play*********\n"); printf("********0.exit*********\n"); printf("***************************\n"); }void game(){ char board[ROW][COL]; InitBoard(board, ROW, COL); //棋盘初始化 DisplayBoard(board, ROW, COL); //展示初始棋盘 char ret = 0; while (1) {PlayerMove(board, ROW, COL); //玩家下棋DisplayBoard(board, ROW, COL); //棋盘展示ret = IsWin(board, ROW, COL); //判断是否继续游戏if (ret != 'C'){break; }ComputerMove(board, ROW, COL); //电脑下棋DisplayBoard(board, ROW, COL); //棋盘展示ret = IsWin(board, ROW, COL); //判断是否继续游戏if (ret != 'C'){break; } }if (ret == '*'){printf("玩家赢\n"); }else if (ret == '#'){printf("电脑赢\n"); }else{printf("平局\n"); } }

到此我们的游戏就做好啦,让我们看看效果吧。
C语言简单实现三子棋游戏
文章图片

C语言简单实现三子棋游戏
文章图片

哈哈 我赢啦?
最后是总体代码
game.h
#pragma once#include#include #include #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 PlayerMove(char board[ROW][COL], int row, int col); //电脑下棋void ComputerMove(char board[ROW][COL], int row, int col); //判断输赢char IsWin(char board[ROW][COL], int row, int col);

game.c
#define _CRT_SECURE_NO_WARNINGS #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){ 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-1; j++){printf("---|"); }printf("---\n"); } }}void PlayerMove(char board[ROW][COL], int row, int col){ printf("请输入坐标>\n"); int x = 0; int y = 0; while (1) {scanf("%d%d", &x,&y); if (1<= x && x <=COL && 0 <= y && y <= ROW){if (board[x-1][y-1] == ' '){board[x-1][y-1] = '*'; break; }else{printf("坐标已被占用,请重新输入>\n"); }}else {printf("坐标不合法,请重新输入>\n"); } } } void ComputerMove(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; } }}char IsWin(char board[ROW][COL], int row, int col){ int x=0, y=0; int z = 0; for (x = 0; x < COL; x++) {int m = 0; //用于判断某一行int n = 0; //用于判断某一列int i = 0; //用于判断升斜线方向int j = 0; //用于判断降斜线方向for (y = 0; y < ROW; y++){if (board[x][0] != ' '&&board[x][0] == board[x][y]){n++; }else if ( board[0][x] != ' '&&board[0][x] == board[y][x] ){m++; }if (board[x][y]==' '){z++; }}if ( board[0][0] != ' '&&board[0][0] == board[x][x]){i++; }if (board[ROW - 1][0] == board[ROW - 1 - x][x] && board[ROW-1][0] != ' '){j++; }if (n == COL){return board[x][0]; }else if (m == ROW){return board[0][x]; }else if (i == COL){return board[0][0]; }else if (j == ROW){return board[ROW - 1][0]; } } if (z == 0) {return z; } return 'C'; }

三子棋.c
#define _CRT_SECURE_NO_WARNINGS #include"game.h"void menu(){ printf("***************************\n"); printf("********1.play*********\n"); printf("********0.exit*********\n"); printf("***************************\n"); }void game(){ char board[ROW][COL]; InitBoard(board, ROW, COL); //棋盘初始化 DisplayBoard(board, ROW, COL); //展示初始棋盘 char ret = 0; while (1) {PlayerMove(board, ROW, COL); //玩家下棋DisplayBoard(board, ROW, COL); //棋盘展示ret = IsWin(board, ROW, COL); //判断是否继续游戏if (ret != 'C'){break; }ComputerMove(board, ROW, COL); //电脑下棋DisplayBoard(board, ROW, COL); //棋盘展示ret = IsWin(board, ROW, COL); //判断是否继续游戏if (ret != 'C'){break; } }if (ret == '*'){printf("玩家赢\n"); }else if (ret == '#'){printf("电脑赢\n"); }else{printf("平局\n"); } } int main(){int input = 0; srand((unsigned int)time(NULL)); //生成随机数用于电脑下棋do{menu(); //打印菜单printf("请选择 >"); scanf("%d", &input); //玩家进行选择switch (input){case 1:game(); break; case 0:printf("退出游戏\n"); break; default:printf("请正确输入\n"); break; }} while (input); }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

    推荐阅读