如何用C语言写一个简单的“三子棋游戏”?通过这个练习,希望能对C语言的一个更加熟练的运用。
首先可以分多个模块进行代码的编写:主菜单模块,代码实现模块,头文件引用模块。
在代码实现部分里,封装了这样几个函数:void game(char arr[ROW][COL]); //游戏界面打印
void main_1(); //游戏的整体实现
int move(char arr[ROW][COL]); //下棋动作实现
int IS_win(char arr[ROW][COL]); //判断游戏结果
int full(char arr[ROW][COL]); //判断棋盘是否下满
每一个C语言程序都必须有一个main()函数,所以我这里就把主菜单放在了主函数里,实现输入1开始游戏,输入0结束游戏,输入其他则提示输入错误。
主菜单部分:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include "code1.h"
void meau()
{
printf("\t三子棋\n");
printf("开始游戏**********1\n");
printf("结束游戏**********0\n");
printf("请选择:");
}
int main()
{
int a=1;
while (a!=0)
{
meau();
scanf("%d", &a);
if (1 == a)
{
main_1();
}
else if (a!=0)
{
printf("输入错误!\n");
}
}
printf("谢谢使用!\n");
return 0;
}
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include "code1.h"
void game(char arr[ROW][COL])
{
int i, j;
printf("|---|---|---|\n");
for (i = 0; i < ROW; i++)
{
for (j = 0; j < COL; j++)
{
if (2 == j)
{
printf("| %c |", arr[i][j]);
}
else
{
printf("| %c ", arr[i][j]);
}
}
printf("\n|---|---|---|\n");
}
}
int move(char arr[ROW][COL])
{
int x, y;
static int cout = 0;
if (cout % 2 == 0)
{
printf("甲方下棋:");
}
else
{
printf("乙方下棋:");
}
scanf("%d%d", &x, &y);
if (x < 0 || x > 3 || y < 0 || y > 3)
{
printf("输入错误!\n");
return 0;
}
else if ('\0' == arr[x - 1][y - 1])
{
if (cout % 2 == 0)
{
arr[x - 1][y - 1] = '*';
}
else
{
arr[x - 1][y - 1] = '#';
}
cout++;
return 1;
}
else
{
printf("该位置已落棋!\n");
return 0;
}
}
int full(char arr[ROW][COL])
{
int i, j;
for (i = 0; i < 3; i++)
{
for (j = 0; j < 3; j++)
{
if ('\0' == arr[i][j])
{
return 0;
}
}
}
return 1;
}
int IS_win(char arr[ROW][COL])
{
int i;
for (i = 0; i < ROW; i++)
{
if (arr[i][0] == arr[i][1] && arr[i][0] == arr[i][2] && arr[i][0] != '\0') //第i+1排
{
return arr[i][0];
}
}
for (i = 0; i < COL; i++)
{
if (arr[0][i] == arr[1][i] && arr[0][i] == arr[2][i] && arr[0][i] != '\0') //第j+1排
{
return arr[0][i];
}
}
if (arr[0][0] == arr[1][1] && arr[0][0] == arr[2][2] && arr[0][0] != '\0') // \排
{
return arr[0][0];
}
else if (arr[2][0] == arr[1][1] && arr[2][0] == arr[0][2] && arr[2][0] != '\0') // /排
{
return arr[2][0];
}
else if (full(arr))
{
return 1;
}
return 0;
}
void main_1()
{
char arr[3][3] = { 0 };
int k=0;
for (k=0;k<9;)
{
game(arr);
k+=move(arr);
if ('*' == IS_win(arr))
{
game(arr);
printf("甲方胜利!\n");
break;
}
else if ('#' == IS_win(arr))
{
game(arr);
printf("乙方胜利!\n");
break;
}
else if (1 == IS_win(arr))
{
game(arr);
printf("平局。\n");
break;
}
}
}
#ifndef CODE1_H_
#define CODE1_H_
#define ROW 3
#define COL 3
void game(char arr[ROW][COL]);
void main_1();
int move(char arr[ROW][COL]);
int IS_win(char arr[ROW][COL]);
#endif //code1.h