您的位置:首页 > 编程语言 > C语言/C++

C语言实现小游戏(三) 3*3棋盘游戏

2016-04-11 20:03 609 查看
实现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<stdio.h>
#include<stdlib.h>
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;

}

游戏可能有不完善的地方,后续发现问题会及时修改。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: