**C语言学习的第一个小程序–三子棋 **
记录Verb-calming的第一次写博客!
前言
学习C语言,博客见证着我的成长,由菜鸟成长到高级菜鸟,留下我编程的小脚步。
一个小游戏-------三子棋-------
一、头文件
建一个头文件----game.h
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define ROW 3
#define COL 3
//函数声明
void InitBoard(char board[ROW][COL], int row, int col);
void DisplayBoard(char board[ROW][COL], int row, int col);
void PlayerMove(char board[ROW][COL], int row, int col);
void ComputerMove(char board[ROW][COL], int row, int col);
//告诉我们四种游戏状态
//玩家赢'*'
//电脑赢'#'
//平局'Q'
//游戏继续'C'
char IsWin(char board[ROW][COL], int row, int col);
二、建立C文件
1.函数C文件
建一个函数C文件----game.c
代码如下(示例1):
#include "game.h"
void DisplayBoard(char board[ROW][COL], int row, int col)
{
int i = 0;
for (i = 0; i < row; i++)
{
//打印一行的数据
int j = 0;
for (j = 0; j < col; j++)
{
printf(" %c ", board[i][j]);
if (j < col - 1)
{
printf("|");
}
}
printf("\n");
//打印分割行
if (i < row - 1)
{
// printf("---|---|---\n");
for (j = 0; j < col; j++)
{
printf("---");
if (j < col - 1)
{
printf("|");
}
}
printf("\n");
}
}
}
void PlayerMove(char board[ROW][COL], int row, int col)
{
int x = 0;
int y = 0;
printf("Player play chess\n");
while (1)
{
//
printf("The coordonates of the player is:\n");
scanf("%d%d", x, y);
if (x >= 1 && x <= row && y >= 1 && y <= col)
{
if (board[x - 1][y - 1] == ' ')
{
board[x - 1][y - 1] = '*';
break;
}
else
{
printf("The coordinate is occupied!\n");
}
}
else
{
printf("Coordinate do not match,please re-enter!\n");
}
}
}
void ComputerMove(char board[ROW][COL], int row, int col)
{
int x = 0;
int y = 0;
printf("Computer play chess\n");
while (1)
{
x = rand() % row;
y = rand() % col;
if (board[x - 1][y - 1] == ' ')
{
board[x - 1][y - 1] = '#';
break;
}
}
}
//返回1表示棋盘满了
// 返回0表示棋盘没满
int IsFull(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++)
{
if (board[i][j] == ' ')
{
return 0;
}
}
}
return 1;
}
char IsWin(char board[ROW][COL], int row, int col)
{
int i = 0;
//判断横三行
for (i = 0; i < row; i++)
{
if (board[i][0] == board[i][1] && board[i][1] == board[i][2] && board[i][0] == board[i][2] && board[i][1] != ' ')
{
return board[i][1];
}
}
//判断竖三列
for (i = 0; i < col; i++)
{
if (board[0][i] == board[1][i] && board[1][i] == board[2][i] && board[0][i] == board[2][i] && board[1][i] != ' ')
{
return board[1][i];
}
}
//判断对角线
if (board[0][0] == board[1][1] && board[1][1] == board[2][2] && board[0][0] == board[2][2] && board[1][1] != ' ')
{
return board[1][1];
}
//判断平局
if (1 == IsFull(board, ROW, COL))
{
return 'Q';
}
return 'C';
}
2.c源文件
建一个c源文件----test.c
代码如下(示例2)
#include "game.h"
void menu() //显示菜单
{
printf("-------------TIC-TAC-TOC GAME--------------\n");
printf("-------1.Begin------------0.Sign out-------\n");
printf("-------------------------------------------\n");
}
void game() //游戏代码实现
{
char ret = 0;
char board[ROW][COL] = {0};
InitBoard(board, ROW, COL); //初始化棋盘
DisplayBoard(board, ROW, COL); //打印棋盘
while (1)//下棋
{
PlayerMove(board, ROW, COL);//玩家下棋
DisplayBoard(board, ROW, COL);//打印玩家落子
ret = IsWin(board, ROW, COL);//判断玩家是否赢
if (ret != 'C')
{
break;
}
ComputerMove(board, ROW, COL);//电脑下棋
DisplayBoard(board, ROW, COL);//打印电脑落子
ret = IsWin(board, ROW, COL);//判断电脑是否赢
if (ret != 'C')
{
break;
}
}
if (ret == '*')
{
printf("The player won!\n");
}
else if (ret == '#')
{
printf("Computer won!\n");
}
else
{
printf("It ends in a draw!\n");
}
}
void test()
{
int start = 0;
srand((unsigned int)time(NULL)); //产生随机数,让电脑落子
do
{
menu();
printf("Please choose whether to start the game\n");
scanf("%d", &start);
switch (start)
{
case 1:
game();
break;
case 0:
printf("----------Sign out game-----------\n");
break;
default:
printf("----------Choose Again-----------\n");
break;
}
} while (start);
}
main()
{
test();
getchar();
getchar();
}
三、总结
学习写一些小游戏来加强自己对C语言的练习,加强语法的掌握程度。
最后再为自己加油一下,加油!加油!加油!
编程超级菜鸟我来了!