第一个百行代码,实现自己的一个小突破
作者:互联网
忙碌了两个小时,写出第一个自己的百行代码,此过程有艰辛、心酸,也有探索困难解决后的欣喜和程序如期跑出来的小小成就感。这次写的代码是关于玩家和电脑进行三子棋游戏的具体细则。
首先创建一个简易菜单表用于用户是否决定要进行游戏。然后根据需要创建一个能够存放数据的棋盘,这就需要使用二维数组来创建棋盘的行和列。通过对棋盘行和列的控制实现对棋盘进行初始化,用于后续存储输入的字符数据,根据自己棋盘的需要输出显示出一个自定义大小的空棋盘。到这就是相当于做好了一个模子,接下来需要向模子中输入字符数据,接下来的操作都将使用函数来完成。对于玩家写出一个PlayerMove()函数来让玩家进行对应棋盘坐标的下棋操作,并在下棋之前判断此坐标是否被占用,若被占用就提示玩家输入位置被占用请重新输入,若输入坐标超出棋盘范围就提示输入位置不合理。之后用一个ComputerMove()函数来实现电脑对棋盘中空格出的随机输入,判断输入条件同上。用两个函数就实现了玩家和电脑的相互对弈。当开始下棋的时候我们就应该考虑判断棋盘状况,使用Win()函数来判断输赢情况,通过对连续同行三个相邻位置输入字符相同或者连续同列相邻三个字符相同或者连续对角线三个字符相同就判断获胜,函数用四种不同的返回字符来代表不同的游戏状态,函数返回’#’代表玩家获胜,返回’$’代表电脑获胜,返回’Q代表为平局,返回’C’代表游戏继续,需要在每次下棋后就进行判断对弈局势,才能及时的向玩家反馈情况。还应该使用 Full()函数来对输入后棋盘是否处于全满状态进行审核判断,如果返回1就代表棋盘满了,若返回0就表示没满,能继续输入数据。这样一系列函数功能调用,实现这三子棋游戏的正常编译和运行。
对于第一次尝试写较长的代码还是能发现自己还有很多知识不足、掌握不牢靠的一连串问题。希望通过不断地练习和打磨会对知识的掌握和运用更加熟练。
以下有实现三子棋游戏的核心代码(仅提供参考):
void InitBoard(char arr[Row][Col], int row, int col)//初始化
{
int i = 0;
int j = 0;
for (i = 0; i < row; i++)
{
for (j = 0; j < col; j++)
{
arr[i][j] = ' ';
}
}
}
void Display(char arr[Row][Col], int row, int col)
{
int i = 0;
int j = 0;
for (i = 0; i < row; i++)
{
for (j = 0; j < col; j++)
{
printf(" %c ", arr[i][j]);//打印一行的数据
if (j < row - 1)
{
printf("|");
}
}
printf("\n");
if (i < row - 1)
{
for (j = 0; j < col; j++)//打印分割行
{
printf("---");
if(j<col-1)
printf("|");
}
printf("\n");
}
}
}
void PlayerMove(char arr[Row][Col], int row, int col)
{
int x;
int y;
printf("玩家下棋\n");
while (1)
{
printf("请输入要落子的坐标\n");
scanf("%d%d", &x, &y);
if (x >= 1 && x <= row && y >= 1 && y <= col)
{
if (arr[x - 1][y - 1] = ' ')
{
arr[x - 1][y - 1] = '#';
break;
}
else
{
printf("输入的位置已被占用\n");
}
}
else
{
printf("坐标非法,输入的坐标不存在\n");
}
}
}
void ComputerMove(char arr[Row][Col], int row, int col)
{
int x = 0;
int y = 0;
printf("电脑下棋\n");
x = rand() % row;//使用rand函数之前需要调用srand
y = rand() % col;
while (1)
{
if (arr[x][y] = ' ')
{
arr[x][y] = '$';
}
break;
}
}
int Full(char arr[Row][Col], int row, int col)
{
int i = 0;
int j = 0;
for (i = 0; i < row; i++)
{
for (j = 0; j < col; j++)
{
if (arr[i][j] == ' ');
{
return 0;
}
}
}
return 1;
}
char Win(char arr[Row][Col], int row, int col)
{
int i = 0;
for (i = 0; i < row; i++)//判断横四行是否相等
{
if (((arr[i][0] == arr[i][1] && arr[i][1] == arr[i][2]) || (arr[i][1] == arr[i][2] && arr[i][2] == arr[i][3])) && arr[i][1] != ' ')
{
return arr[i][1];
}
}
for (i = 0; i < col; i++)//判断竖四列是否相等
{
if (((arr[0][i] == arr[1][i]&& arr[1][i] == arr[2][i])||(arr[1][i]==arr[2][i] && arr[2][i] == arr[3][i]))&& arr[1][i] != ' ')
{
return arr[1][i];
}
}
if (((arr[0][0] == arr[1][1] && arr[1][1] == arr[2][2]) || (arr[1][1] == arr[2][2] && arr[2][2] == arr[3][3])) && arr[1][i] != ' ')
return arr[1][1];
if (Full(arr, Row, Col) == 1)//返回1代表棋盘满了,返回0代表棋盘没满
{
return 'Q';
}
if (Full(arr, Row, Col) == 0)
{
return 'C';
}
}
标签:arr,第一个,int,代码,百行,&&,printf,col,row 来源: https://blog.51cto.com/u_15101214/2735452