三子棋

本文介绍了一个简单的井字游戏(Tic Tac Toe)程序实现,使用C语言编写。该程序包括游戏菜单、棋盘初始化、玩家与电脑交替下棋、游戏状态显示及胜负判断等功能。通过随机数实现电脑自动落子。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include <stdio.h>

#include <stdlib.h>

#include<math.h>

#include<time.h>

#define row 3

#define col 3  

 

 

void printf_chess(char arr[row][col])      //打印每次操作后的状态  

{

int i = 0, j = 0;

for (i = 0; i<row; i++)

{

for (j = 0; j<col; j++)

{

printf("%c  ", arr[i][j]);//打印操作后的棋盘

}

printf("\n");

}

}

 

void menu()//打印菜单  

{

printf("##############1.开始游戏##############\n");

printf("##############0.退出游戏##############\n");

}

 

 

 

int check(char arr[row][col])//检查游戏结果  

{

int j = 0;

int i = 0;

int count = 0;

for (i = 0; i < 3; i++)

{

if ((((arr[i][0] == arr[i][1]) && (arr[i][1] == arr[i][2])) && (arr[i][1] == 'o')) ||

(((arr[0][i] == arr[1][i]) && (arr[1][i] == arr[2][i])) && (arr[1][i] == 'o')) ||

(((arr[0][0] == arr[1][1]) && (arr[1][1] == arr[2][2])) && (arr[1][1] == 'o')) ||

(((arr[0][2] == arr[1][1]) && (arr[1][1] == arr[2][0])) && (arr[1][1] == 'o')))

{

printf("电脑赢\n");

    }

if ((((arr[i][0] == arr[i][1]) && (arr[i][1] == arr[i][2])) && (arr[i][1] == 'x')) ||

(((arr[0][i] == arr[1][i]) && (arr[1][i] == arr[2][i])) && (arr[1][i] == 'x')) ||

(((arr[0][0] == arr[1][1]) && (arr[1][1] == arr[2][2])) && (arr[1][1] == 'x')) ||

(((arr[0][2] == arr[1][1]) && (arr[1][1] == arr[2][0])) && (arr[1][1] == 'x')))

{

printf(" 玩家赢\n");

 

}

for (j = 0; j < 3; j++)

{

 

if (arr[i][j] != '_')

{

count++;

}

}

}

if (count == 9)

{

printf("和棋!");

}

 

}

 

 

 

void fill(char arr[row][col])//填充,对棋盘进行符号操作  

{

int x = 0, y = 0;

int ran1 = 0, ran2 = 0;

srand((unsigned)time(NULL));//随机数发生器  

 

while (1)

{

x = 0, y = 0;                //玩家玩,初始坐标为0 0

printf("请输入你的坐标:");

scanf("%d%d", &x, &y);

if (x>row || x<1 || y>col || y<1)

{

printf("坐标有误,请重新输入!\n");

continue;

}

if (arr[x - 1][y - 1] == '_')

{

arr[x - 1][y - 1] = 'x';

check(arr, row, col);       //检查是否获胜  

}

else

{

printf("已被填充,请重新填充!\n");

continue;

}

while ((arr[ran1 - 1][ran2 - 1] != '_'))

{

ran1 = rand() % 3 + 1;

ran2 = rand() % 3 + 1;

}

arr[ran1 - 1][ran2 - 1] = 'o';      //电脑走  

check(arr,row,col);//检查是否获胜  

printf_chess(arr, row, col);  //双方操作完一次后打印出结果  

 

}

}

 

 

void init(char arr[row][col])//棋盘建立  

{

int i = 0, j = 0;

char line[row][col] = { "___", "___", "___" }; //创建一个数组

 

for (i = 0; i<row; i++)

{

for (j = 0; j<col; j++)

{

arr[i][j] = line[i][j];

printf("%c  ", arr[i][j]);//棋盘初形建立  

}

printf("\n");

}

}

 

 

void game(char arr[row][col])

{

init(arr, row, col);//建立棋盘  

fill(arr, row, col);//填充棋盘  

}

 

 

int main()

{

char arr[row][col] = { "___", "___", "___" };

int input = 1;

while (input)

{

menu();

printf("请选择:");

scanf("%d", &input);

switch (input)

{

case 1:

game(arr,row,col);

break;

case 0:

return 0;

break;

default:

printf("输入错误\n");

break;

}

}

        return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值