文章目录
- 游戏简介
- 游戏效果图
- 游戏源码
- 简单总结
游戏简介
三子棋,一个古老的游戏,其规则十分简单,当同一玩家的棋子连成一条线,即为获胜
游戏效果图
游戏源码
- 头文件
为了提高我们代码的可读性,往往一个大型项目是由很多人共同完成,这就意味着你写出来的代码,除了你自己以外,别人也能一眼看懂,这也是区分大佬与萌新的一个关键点,大佬喜欢分享,菜鸟喜欢闭门造车。
先定义游戏的头文件为game.h,头文件是将你所创造的所有函数收录进来,方便你日后查看,某个函数的具体功能
#define ROW 3
#define COL 3
//初始化棋盘
void BoardInit();
//打印棋盘
void BoardShow();
//玩家下子
void BoardPlayer();
//判断棋盘是否下满
char IsFull();
//判断输赢
char BoardWin();
//电脑下子
void BoardComputer();
- 游戏文件
创建一个实现游戏功能的文件 game.c,这个文件才是我们真正去实现功能的,将我们所有需要的函数,统统写在这里面。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include "game.h"
//初始化棋盘
void BoardInit(char board[ROW][COL], int row, int col)
{
for (int i = 0; i < row; i++)
{
for (int j = 0; j < col; j++)
{
board[i][j] = ' ';
}
}
}
//打印棋盘
void BoardShow(char board[ROW][COL],int row,int col)
{
for (int i = 0; i < row; i++)
{
printf("##################\n|");
printf(" | | |\n|");
for (int j = 0; j < col; j++)
{
printf(" %c ", board[i][j]);
printf(" | ");
}
printf("\n");
printf("| | | |\n");
}
printf("##################\n");
}
//玩家下子
void BoardPlayer(char board[ROW][COL], int row, int col)
{
int x, y;
while (1)
{
printf("请输入你要下子的坐标:");
scanf("%d %d", &x, &y);
if (x<0 || y<0 || x>row || y>col)
{
printf("输入的坐标不合法,请重新输入\n");
continue;
}
else if (board[x][y] != ' ')
{
printf("该位置已经有子了,请重新下\n");
continue;
}
else
{
board[x][y] = 'M';
break;
}
}
}
char IsFull(char board[ROW][COL], int row, int col)
{
//判断是否满子
for (int i = 0; i < row; i++)
{
for (int j = 0; j < col; j++)
{
if (board[i][j] == ' ')
{
return 0;
}
}
}
return 'Q';
}
//判断输赢
//'Q'代表平局,'P'代表玩家赢,'C'代表电脑赢
char BoardWin(char board[ROW][COL], int row, int col)
{
//判断行赢
for (int i = 0; i < row; i++)
{
if (board[i][0] == board[i][1] && board[i][1] == board[i][2])
{
if(board[i][0] == 'M')
{
return 'P';
}
else if (board[i][0] == 'C')
{
return 'C';
}
}
}
//判断列赢
for (int i = 0; i < col; i++)
{
if (board[0][i] == board[1][i] && board[1][i] == board[2][i])
{
if (board[0][i] == 'M')
{
return 'P';
}
else if (board[0][i] == 'C')
{
return 'C';
}
}
}
//判断斜赢
if (board[0][0] == board[1][1] && board[1][1] == board[2][2] || board[0][2] == board[1][1] && board[1][1] == board[2][0])
{
if (board[1][1] == 'M')
{
return 'P';
}
else if (board[1][1] == 'C')
{
return 'C';
}
}
IsFull(board, ROW, COL);
}
//电脑下子
void BoardComputer(char board[ROW][COL],int row,int col)
{
srand(time(NULL));
while (1)
{
int x = rand() % 3;
int y = rand() % 3;
if (board[x][y] != ' ')
{
continue;
}
else
{
board[x][y] = 'C';
break;
}
}
}
- 主文件
创建文件的主文件 main.c,我们工程项目的主文件,通过它才能去调用我们别的文件。
#include <stdio.h>
#include "game.h"
//菜单函数
void menu()
{
printf("##########################\n");
printf("#########三子棋小游戏#####\n");
printf("##########1.开始游戏######\n");
printf("##########0.退出游戏######\n");
printf("##########################\n");
}
void game()
{
char board[ROW][COL];
BoardInit(board, ROW, COL);
BoardShow(board, ROW, COL);
while (1)
{
BoardPlayer(board, ROW, COL);
BoardShow(board, ROW, COL);
char ret;
int num = 1;
ret = BoardWin(board, ROW, COL);
if (ret == 'P')
{
printf("玩家获胜,游戏结束\n");
break;
}
else if (ret == 'C')
{
printf("电脑获胜,游戏结束\n");
break;
}
else if (ret == 'Q')
{
printf("游戏平局\n");
break;
}
else
{
printf("继续\n");
}
BoardComputer(board, ROW, COL);
ret = BoardWin(board, ROW, COL);
if (ret == 'M')
{
printf("玩家获胜,游戏结束\n");
break;
}
else if (ret == 'C')
{
printf("电脑获胜,游戏结束\n");
break;
}
else if (ret == 'Q')
{
printf("游戏平局\n");
break;
}
else
{
printf("继续\n");
}
BoardShow(board, ROW, COL);
}
}
int main()
{
int input;
do
{
menu();
printf("请选择:");
scanf("%d", &input);
switch (input)
{
case 1:
game();
break;
case 0:
printf("您已经退出游戏了\n");
break;
default:
printf("输入非法,请重新输入\n");
break;
}
} while (input);
return 0;
}
简单总结
新手在开始写的时候,切记不要直接上手写,这样会很容易造成,想得明白,但做不出来,最好是先认真的看一遍代码,然后逐步分析他的业务逻辑,能够将每一部分实现的功能讲出来,把每个语句的作用都能理解,那么此时,你已经距离项目成功很近啦,加油,你可以的!
更多推荐
C语言入门必备实战详解:三子棋(附源代码和效果图)新手必做
发布评论