您的位置:首页 > 其它

写一个三子棋小游戏的感悟

2016-06-12 10:13 399 查看
在写之前,我已经把函数的结构设计出来,主要由以下几个函数实现;
1:初始化棋框
2:玩家下棋
3:电脑下棋
4:判断胜负
5:更新棋框
6:主函数
在写的过程中碰到了不能将玩家下的位置放入棋框中,原因是在函数定义过程中没有将二维数组引入,
导致棋框更新不正确,在函数中引用二维数组时,因为c语言编译系统不检查第一维的大小,只要第二维大小相同,形参数组第一维可以与实参不同,因此在函数定义时只需要写int qk(arr[][i]),i为常数,在主函数调用时只需要写qk(arr)即可,因为数组名本身就是地址,所以就相当于将arr[0][0]的地址传给函数,所以在函数中可以直接改变数组的内容。源码如下:
//三子棋
#define _CRT_SECURE_NO_WORNINGS 1
#include<stdio.h>
#include<stdlib.h>
void qk(int i, int j,char arr[][3])
{
for (i = 0; i < 3; i++)
{
for (j = 0; j < 3; j++)
{
arr[i][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");
}

}
printf("\n****************************\n");
}
void print(int i, int j, char arr[][3])
{
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");
}

}
printf("\n***************************\n");
}
void play(int i,int j,char arr[][3])
{
printf("请输入棋子坐标");
while (1)
{
int m = 0, n = 0;
scanf_s("%d%d", &m, &n);
i = m - 1;
j = n - 1;
if ((arr[i][j] != 'o')&&(arr[i][j] != 'x'))
{
arr[i][j] = 'o';
break;
}
else
printf("请重新输入");
}
}
int comp(int i,int j,char arr[][3])
{
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
if (arr[i][j] != 'o'&&arr[i][j] != 'x')
{
arr[i][j] = 'x';
return 0;
}
}
printf("************************");
}
return 1;
}
int judge(int i, int j,char arr[][3])
{
for (i = 0; i < 3; i++)
{
if (arr[i][0] == 'o'&&arr[i][1] == 'o' && arr[i][2] == 'o')
{
printf("您赢了\n");
return 0;
}
if (arr[i][0] == 'x'&&arr[i][1] == 'x' && arr[i][2] == 'x')
{
printf("您输了\n");
return 0;
}
if (arr[0][i] == 'o'&&arr[1][i] == 'o' && arr[2][i] == 'o')
{
printf("您赢了\n");
return 0;
}
if (arr[0][i] == 'x'&&arr[1][i] == 'x' && arr[2][i] == 'x')
{
printf("您输了\n");
return 0;
}

}
if ((arr[0][0] == 'o'&&arr[1][1] == 'o' && arr[2][2] == 'o') || (arr[0][2] == 'o'&&arr[1][1] && arr[2][0]))
{
printf("您赢了\n");
return 0;
}
if ((arr[0][0] == 'x'&&arr[1][1] == 'x' && arr[2][2] == 'x') || (arr[0][2] == 'x'&&arr[1][1]=='x' && arr[2][0]=='x'))
{
printf("您输了\n");
return 0;
}
return 1;
}
int main()
{
char arr[3][3];
int i = 3, j = 3;
int ret;
qk(i, j, arr);//初始化棋框
while (1)
{
play(i, j, arr);
print(i, j, arr);
ret=judge(i, j, arr);
if (ret == 0)
{
printf("游戏结束");
break;
}
comp(i, j, arr);
print(i, j, arr);
ret=judge(i, j, arr);
if (ret == 0)
{
printf("游戏结束");
break;
}
}
system("pause");
return 0;
}
过几天继续写,今天的水平有限,希望大神提出问题。。
本文出自 “qin-wang” 博客,请务必保留此出处http://10810196.blog.51cto.com/10800196/1709661
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: