上面这个就是我画的一个简单的三子棋 羞涩.jpg
三子棋大家应该都玩过,这可是童年呀。
下面就让我一起来用计算机系学生的方式去实现它。嘿嘿~ 滑稽.jpg
正题:
工具:VS2015
一般写这种程序的时候,需要创建一个项目,我的项目名称叫 Three_game
分别创建一个头文件 game head.h
两个源文件 game body.c
game test.c
一、头文件顾名思义,就是把你在这个游戏中所引用的函数名等包括进去,类似 stdio.h
只不过这个是咱们自己编写的头文件
game head.h
#ifndef __GAME_H__
#define __GAME_H__
#include<stdio.h>
#include<time.h>
#define ROW 3//定义棋盘的行
#define COL 3//定义棋盘的列
void ResetBoard(char board[ROW][COL], int row, int col);//初始化棋盘
void PrintBoard(char board[ROW][COL], int row, int col);//打印棋盘
void GetPlayerAdd(char board[ROW][COL, int row, int col);//玩家走
void GetComputerAdd(char board[ROW][COL], int row, int col);//电脑走
char JudgeWin(char board[ROW][COL], int row, int col);//判断输赢
void JudgeWinner(char win);//输出输赢结果
#endif //__GAME_H__
函数的具体作用做了批注
二、在game test.c文件中写出游戏大体流程,之后逐个功能进行实现,从而使游戏一步步完善。
game test.c
#define _CRT_SECURE_NO_WARNINGS 1
#include"game head.h"
void menu()//游戏菜单
{
printf("******************************************\n");
printf("********* 1.start 0.quit **********\n");
printf("******************************************\n");
}
void game()//游戏流程
{
char board[ROW][COL] = {0};
char win;
ResetBoard(board, ROW, COL);//重置棋盘
PrintBoard(board, ROW, COL);//打印棋盘
srand((unsigned int)time(NULL));
while (1)
{
GetPlayerAdd(board);//玩家下棋位置获取
PrintBoard(board, ROW, COL);
win = JudgeWin(board, ROW, COL);
if (win != ' ')
{
JudgeWinner(win);
break;
}
GetComputerAdd(board, ROW, COL);//电脑下棋位置获取
PrintBoard(board, ROW, COL);
win = JudgeWin(board, ROW, COL);
if (win != ' ')
{
JudgeWinner(win);
break;
}
}
}
void test()//游戏提示
{
int input = 0;
do
{
menu();
printf("请选择你要进行的操作:");
scanf("%d", &input);
switch (input)
{
case 1:
printf("\n游戏载入中.....\n\n");
game();
break;
case 0:
printf("\n游戏已登出.....\n\n");
break;
default:
printf("\n无效操作\n\n");
break;
}
} while (input);
}
int main()
{
test();
return 0;
}
三、在game body.c中实现游戏中所需的功能。
game body.c
#define _CRT_SECURE_NO_WARNINGS 1
#include"game head.h"
void ResetBoard(char board[ROW][COL], int row, int col)//初始化棋盘
{
int i = 0;
int j = 0;
for (i = 0; i < row; i++)
{
for (j = 0; j < col; j++)
{
board[i][j] = ' ';
}
}
}
void PrintBoard(char board[ROW][COL], int row, int col)//打印棋盘
{
int i;
for (int i = 0; i < row; i++)
{
printf(" %c | %c | %c \n", board[i][0], board[i][1], board[i][2]);
if (i != row - 1)
printf(" ---|---|--- \n");
}
}
void GetPlayerAdd(char board[ROW][COL], int row, int col)//玩家走
{
int x = 0,y = 0;
while (1)
{
printf("请输入你想下棋的位置:( X , Y )");
printf("X=");
scanf("%d",&x);
printf("Y=");
scanf("%d",&y);
if (x > 0 && x <= ROW&& y > 0 && y <= COL)
{
if (board[x - 1][y - 1] == ' ')
{
board[x - 1][y - 1] = 'o';
break;
}
else
{
printf("对不起,已有棋子\n");
}
}
else
printf("无效坐标,请重新输入。\n");
}
}
void GetComputerAdd(char board[ROW][COL], int row, int col)//电脑走
{
printf("电脑走>>>\n");
int x, y;
while (1)
{
x = rand() % row;
y = rand() % col;
if (x >= 0 && x < row&&y >= 0 && y < col)
{
if (board[x][y] == ' ')
{
board[x][y] = 'X';
break;
}
}
}
}
void JudgeWin(char board[ROW][COL], int row, int col)//判断输赢
{
int i = 0;
//行相等
for (int i = 0; i < row; i++) {
if (board[i][0] == board[i][1] && board[i][1] == board[i][2]) {
return board[i][0];
}
}
//列相等
for (int j = 0; j < col; j++) {
if (board[0][j] == board[1][j] && board[1][j] == board[2][j]) {
return board[1][j];
}
}
//斜相等
if (board[0][0] == board[1][1] && board[1][1] == board[2][2] && board[1][1] != ' ') {
return board[1][1];
}
if (board[0][2] == board[1][1] && board[1][1] == board[2][0] && board[1][1] != ' ') {
return board[1][1];
}
//棋盘满(平局)
for (int i = 0; i < row; i++) {
for (int j = 0; j < col; j++) {
if (board[i][j] == ' ')
return ' ';
}
}
return 'p';
}
void JudgeWinner(char win)//打印输赢结果
{
if (win == 'o')
printf("玩家赢!\n");
else if (win == 'X')
printf("电脑赢!\n");
else
printf("平局!\n");
}
这个游戏中所用到的C语言知识都比较简单,编写的重点在于对整个游戏过程的理解,以及在编写过程中自己的细心程度