今天学习了三子棋
首先
建立一个头文件game.h,再建立两个源文件game.c和menu.c
先在头文件game.h里面写出#include 需要用到的头文件
//game.h
#include <stdio.h>
#include <stdlib.h> //因为要用到随机数rand函数
然后在其他两个源文件写包含
//game.c
#include "game.h"
//menu.c
#include "game.h"
这样两个源文件就可以使用game.c里面的stdio和stdlib了
接着在menu.c里面先打印出菜单
//menu.c
#include "game.h"
void menu()
{ printf("\n-----------------\n");
printf("-----1.play------\n");
printf("-----0.exit------\n");
printf("-----------------\n");
}
int main()
{
int input;
do
{
menu();
printf("请选择:")
scanf("%d",&input);
if(input==1)game();
}
while(input);
return 0;
}
接下来通过game()函数来进入游戏
game()先在game.h里面声明,然后在game.c里面写内容
//game.h
#include <stdio.h>
#include <stdlib.h> //因为要用到随机数rand函数
void game();
void Initboard(char board[3][3]);
void Displayboard(char board[3][3]);
void Playerboard(char board[3][3]);
void Computerboard(char board[3][3]);
char Iswin(char board[3][3]);
//以上是函数声明
//game.c
#include "game.h"
game()
{
char board[3][3]={0};//先建立一个二维数组当作棋盘
Initboard(board);//然后将二维数组传进初始化棋盘函数里进行初始化
Displayboard(board);//初始化完屏幕打印显示出棋盘
Playerboard(board);//然后玩家开始下棋
Iswin(board);//判断输赢
Displayboard(board);//显示棋盘
Computerboard(board);//电脑下棋
Iswin(board);//判断输赢
Displayboard(board);//显示棋盘
//这是目前一个简单化的流程框架
//函数使用前在game.h里面先进行函数声明
}
接下来依次拆分每个函数,写在game.c里面
//game.c
#include "game.h"
game()
{
char board[3][3]={0};//先建立一个二维数组当作棋盘
Initboard(board);//然后将二维数组传进初始化棋盘函数里进行初始化
Displayboard(board);//初始化完屏幕打印显示出棋盘
Playerboard(board);//然后玩家开始下棋
Iswin(board);//判断输赢
Displayboard(board);//显示棋盘
Computerboard(board);//电脑下棋
Iswin(board);//判断输赢
Displayboard(board);//显示棋盘
//这是目前一个简单化的流程框架
//函数使用前在game.h里面先进行函数声明
}
void Initboard(char board[3][3])
{
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
board[i][j] = ' ';
}
}
}
void Displayboard( char board[3][3])
{
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
printf(" %c ",board[i][j]);
if (j < 2)
{
printf("|");
}
}
printf("\n");
for (int j = 0; j < 2; j++)
{
if (i < 2)
{
printf("------");
}
else
printf("");
}
printf("\n");
}
}
void Playerboard(char board[3][3])
{
int x = 0;
int y = 0;
printf("玩家下棋:\n请输入坐标:");
while (1)
{
scanf("%d %d", &x, &y);
if (x >= 1 && x <= 3 && y >= 1 && y <= 3)
{
if (board[x-1][y-1] == ' ')
{
board[x-1][y-1] = '*';
break;
}
else
{
printf("\n坐标被占用,\n请重新输入坐标");
}
}
else
{
printf("\n坐标范围超出,\n请重新输入坐标");
}
}
}
void Computerboard(char board[3][3])
{
srand((unsigned)time(NULL));
printf("电脑下棋:\n");
while (1)
{
int x = rand() % 3;
int y = rand() % 3;
if (board[x][y] == ' ')
{
board[x][y] = '#';
break;
}
}
}
char Iswin(char board[3][3])
{
int p = 0;
int c = 0;
int flag = 1;
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
if (board[i][j] == ' ')
flag = 0;
break;
}
}
if (flag == 1)
{
return 'p';
}
else
{
//先判断对角线
for (int i = 0; i < 3; i++)
{
if (board[i][i] == '*')
{
p++;
}
if (board[i][i] == '#')
{
c++;
}
}
if (p == 3)
{
return '*';
}
if (c == 3)
{
return '#';
}
p = 0;
c = 0;
for (int i = 0; i < 3; i++)
{
if (board[i][2 - i] == '*')
{
p++;
}
if (board[i][2 - i] == '#')
{
c++;
}
}
if (p == 3)
{
return '*';
}
if (c == 3)
{
return '#';
}
//判断横线
for (int i = 0; i < 3; i++)
{
p = 0;
c = 0;
for (int j = 0; j < 3; j++)
{
if (board[i][j] == '*')
{
p++;
}
if (board[i][j] == '#')
{
c++;
}
}
if (p == 3)
{
return '*';
}
if (c == 3)
{
return '#';
}
}
//判断竖线
for (int i = 0; i < 3; i++)
{
p = 0;
c = 0;
for (int j = 0; j < 3; j++)
{
if (board[j][i] == '*')
{
p++;
}
if (board[j][i] == '#')
{
c++;
}
}
if (p == 3)
{
return '*';
}
if (c == 3)
{
return '#';
}
}
}
}
game.c里面写完这些基本上就可以了,其余个文件内容如下
//menu.c
#include "game.h"
void menu()
{ printf("\n-----------------\n");
printf("-----1.play------\n");
printf("-----0.exit------\n");
printf("-----------------\n");
}
int main()
{
int input;
do
{
menu();
printf("请选择:")
scanf("%d",&input);
if(input==1)game();
}
while(input);
return 0;
}
//game.h
#include <stdio.h>
#include <stdlib.h> //因为要用到随机数rand函数
void game();
void Initboard(char board[3][3]);
void Displayboard(char board[3][3]);
void Playerboard(char board[3][3]);
void Computerboard(char board[3][3]);
char Iswin(char board[3][3]);
//以上是函数声明
game.h里面就是给函数声明一下,menu.c里面就是打印出菜单,然后进行选择,选择play后进入游戏--进入game.c(主程序)
是不是挺简单的!
以上代码可能有Bug,本人刚学没几天,发此贴记录自己的成长,大佬可以给点建议,谢谢啦