c语言计时棋类程序,C语言实现小游戏(三) 3*3棋盘游戏

实现3*3棋盘游戏主要流程:

一、定义一些所需要的函数

1.定义初始化棋盘函数:void init(char arr[3][3],int i,int j );

2.定义打印棋盘函数:int prit(char arr[3][3], int i, int j);

3.定义玩家下棋函数:void play(char arr[3][3], int x, int y);

4.定义电脑下棋函数:void computer(char arr[3][3]);

5.定义判断三个同样字符是否连成一线的函数:int check(char arr[3][3], int i, int j);

二、主函数打印游戏说明

选择是否开始游戏,选择‘1’则开始游戏,选择其他则退出游戏。

选择下棋次序,选择‘1’玩家先下棋,选择‘2’电脑先下棋。

若玩家开始下棋,输入下棋坐标位置。并且判断是否有三个同样字符连成一线;若没有则你电脑继续下棋并判断。若电脑先下棋,判断是否有三个同样字符连成一线,若没有则输入下棋坐标位置继续下棋。知道判断出三字符连成一线,则判断出输赢。当所有的地方都有字符时,此时若还没有判断出输赢那么这局是平局。

下棋是应该判断玩家输入的坐标是否是合法下标,若不是合法下标那么应该提示并且重新输入坐标。

三、代码如下:

#include

#include

void init(char arr[3][3],int i,int j )

{

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

{

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

{

arr[i][j] = ' ';

}

}

}

int prit(char arr[3][3], int i, int j)

{

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

{

printf(" %c | %c | %c ", arr[i][0],arr[i][1],arr[i][2]);

if (i != 2)

printf("\n---|---|---\n");

}

return 0;

}

void computer(char arr[3][3])

{

int i = 0;

int j = 0;

int flag = 0;

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

{

if (flag == 1)

break;

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

{

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

{

arr[i][j] = 'O';

flag = 1;

break;

}

}

}

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

{

printf(" %c | %c | %c ", arr[i][0], arr[i][1], arr[i][2]);

if (i != 2)

printf("\n---|---|---\n");

}

}

void play(char arr[3][3], int x, int y)

{

int i=0;

int j = 0;

int flag = 0;

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

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

{

if (flag == 1)

break;

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

{

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

{

arr[i][j] = 'O';

flag = 1;

break;

}

}

}

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

{

printf(" %c | %c | %c ", arr[i][0], arr[i][1], arr[i][2]);

if (i != 2)

printf("\n---|---|---\n");

}

}

int check(char arr[3][3], int i, int j)

{

int ret = -1;

int k = 0;//判断对角线X

int n = 0;//判断对角线O

int a = 0;//判断反对角线X

int b = 0;//判断反对角线O

int count = 0;

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

{

if (arr[i][i] == 'X')

k++;

if (arr[i][2-i] == 'X')

a++;

if (arr[i][i] == 'O')

n++;

if (arr[i][2-i] == 'O')

b++;

}

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

{

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

{

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

count++;

}

}

if ((k == 3)||(a == 3))

{

ret=1;

}

if ((n == 3)||(b == 3))

{

ret=0;

}

if (count == 9)

ret = 3;

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

{

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

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

{

ret=1;

break;

}

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

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

{

ret=0;

break;

}

}

return ret;

}

void manu()

{

printf("****************************************\n");

printf("**************欢迎进入游戏**************\n");

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

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

printf("****************************************\n");

}

void order()

{

printf("**********请选择下棋先后次序************\n");

printf("*************1.玩家先下*****************\n");

printf("*************0.本机先下*****************\n");

}

int main()

{

char arr[3][3];

int i = 0;

int j = 0;

int x = 0;

int y = 0;

int input = 1;

int ret = 0;

int c = 0;

while (1)

{

manu();

printf("请选择>");

scanf("%d", &input);

switch (input)

{

case 1:

{

while (1)

{

order();

printf("请选择>");

scanf("%d", &c);

switch (c)

{

case 1:

{init(&arr[0], i, j);

prit(&arr[0], i, j);

while (1)

{

lop:        printf("\n请输入要下棋的位置坐标:");

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

while (1)

{

if ((arr[x - 1][y - 1] != ' ') || (x > 3) || y > 3)

{

printf("坐标不合法,请重新输入:");

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

}

else

{

play(&arr[0], x, y);

break;

}

}

ret = check(&arr[0], i, j);

if (ret == 1)

{

printf("\n恭喜你赢了!\n");

break;

}

if (ret == 0)

{

printf("\n很遗憾你输了!\n");

break;

}

if (ret == 3)

{

printf("\n这局是平局\n");

break;

}

}

break;

}

case 0:

{

init(&arr[0], i, j);

prit(&arr[0], i, j);

printf("\n本机下棋为:\n");

computer(&arr[0]);

goto  lop;

break;

}

}

break;

}

break;

}

default:

{      printf("退出游戏\n");

system("pause");

exit(0);

break;

}

}

}

system("pause");

return 0;

}

游戏可能有不完善的地方,后续发现问题会及时修改。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值