文件分类
一般来说,一个项目都是分为这样的三个文件
主函数文件 =》main.c
三子棋头文件 =》MineJapplet.h
三子棋源文件 =》MineJapplet.c
主函数文件 =》
字面意思就是一个程序当中只有一个的main函数文件。
三子棋头文件 =》
主要就是将函数的声明放在其中。
三子棋源文件 =》
主要就是将函数具体实现的代码,也就是函数的定义放在其中。
以上就是编写代码时,对于文件的一个规范。
整体框架梳理
1,玩家进入游戏时,需要有一个菜单界面,给玩家进行选择,并且系统能够进行正确的反馈
2,玩家选择开始游戏进入到游戏界面,需要有一个棋盘给玩家看到下棋后棋子的位置
3,玩家输入坐标下棋,下完棋以后电脑随机进行一个下子。并且玩家与电脑下的子需要在视觉上进行一个区分
4,每次落子以后都要进行一次判断,只要有一方在棋盘上的棋子超过三个相邻,并在一条直线上,那么该方获得胜利,游戏结束。
开始写代码
直接上代码:
MineJapplet.h
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdbool.h>
#include<stdlib.h>//随机数
#include<time.h>//时间戳
#define rows 3
#define cols 3
void menu();
void game();
void PrintBoard(char chess[rows][cols]);
void PlayerChess(char chess[rows][cols]);
void ComputerChess(char chess[rows][cols]);
bool PlayerWin(char chess[rows][cols]);
bool ComputerWin(char chess[rows][cols]);
bool IsTie(char chess[rows][cols]);
MineJapplet.c
#include"MineJapplet.h"
void menu()
{
printf("-------------------------\n");
printf("----- 1.play game -----\n");
printf("----- 2.exit ----------\n");
printf("-------------------------\n");
printf("-------------------------\n");
}
void PrintBoard(char chess[rows][cols])
{
int r = 0;
printf("-");
for ( r = 0; r < rows; r++)
{
printf("----");
}
printf("\n");
int i = 0;
for (i=0; i<rows; i++)
{
int j = 0;
for (j=0; j<cols; j++)
{
if (chess[i][j]==0)
{
printf("| ");
}
else
{
printf("| %c ", chess[i][j]);
}
if (j==cols-1)
{
printf("|");
}
}
printf("\n");
printf("-");
for (r = 0; r < rows; r++)
{
printf("----");
}
printf("\n");
}
}
void PlayerChess(char chess[rows][cols])
{
int a = 0;
int row = 0;
int col = 0;
while (true)
{
printf("坐标用空格隔开\n");
printf("请输入坐标落子 =》");
scanf("%d %d", &row, &col);
if (0 < row && row < 4 && 0 < col && col < 4 && chess[row-1][col-1]==0)
{
chess[row - 1][col - 1] = '*';
break;
}
else
{
printf("您的坐标输入有误,请重新输入");
continue;
}
}
}
void ComputerChess(char chess[rows][cols])
{
while (true)
{
int row = rand() % rows;
int col = rand() % cols;
if (chess[row][col] == 0)
{
chess[row][col] = '#';
break;
}
}
}
bool PlayerWin(char chess[rows][cols])
{
int row = 0;
int col = 0;
for (row=0;row<rows;row++)
{
for (col=0;col<cols;col++)
{
if ((chess[row][0] + chess[row][1] + chess[row][2]) == 126)
{
return true;
}
else if((chess[0][col] + chess[1][col] + chess[2][col])==126)
{
return true;
}
}
}
if ((chess[0][0] + chess[1][1] + chess[2][2]) == 126)
{
return true;
}
if ((chess[0][2] + chess[1][1] + chess[2][0]) == 126)
{
return true;
}
if (IsTie(chess))
{
printf("平局\n");
return false;
}
return false;
}
bool ComputerWin(char chess[rows][cols])
{
int row = 0;
int col = 0;
for (row = 0; row < rows; row++)
{
for (col = 0; col < cols; col++)
{
if ((chess[row][0] + chess[row][1] + chess[row][2]) == 105)
{
return true;
}
else if ((chess[0][col] + chess[1][col] + chess[2][col]) == 105)
{
return true;
}
}
}
if ((chess[0][0] + chess[1][1] + chess[2][2]) == 105)
{
return true;
}
if ((chess[0][2] + chess[1][1] + chess[2][0]) == 105)
{
return true;
}
if (IsTie(chess))
{
printf("平局\n");
return false;
}
return false;
}
bool IsTie(char chess[rows][cols])
{
int i = 0;
for (i=0;i<rows;i++)
{
int j = 0;
for (j=0;j<cols;j++)
{
if (chess[i][j]==0)
{
return false;
}
}
}
return true;
}
void game()
{
char chess[rows][cols] = {0};
int row = 0;
int col = 0;
PrintBoard(chess);
while (true)
{
PlayerChess(chess);
PrintBoard(chess);
if (PlayerWin(chess))
{
printf("玩家胜利\n");
break;
}
ComputerChess(chess);
PrintBoard(chess);
if (ComputerWin(chess))
{
printf("电脑胜利\n");
break;
}
}
}
main.c
#include"MineJapplet.h"
int main()
{
int a = 0;
srand((unsigned int)time(NULL));
do
{
xunhuan:
menu();
printf("请输入数字进行游戏 =》");
scanf("%d", &a);
switch (a)
{
case 1:
game();
goto xunhuan;
break;
case 2:
printf("---------游戏结束---------");
break;
default:
break;
}
}
while (0);
return 0;
}
运行效果图