学了C语言的程序员都有一个通病,不相信自己可以写出一个小游戏,下面我用VS来实现一个三子棋小游戏(本人知识尚浅,不足之处还望指出):
首先我们创建三个文件game.h、test.c、game.c。
首先在test.c中实现主函数:
int main()
{
int input = 0;
do{
menu();
printf("请选择是否进行游戏:");
scanf("%d", &input);
switch (input){
case 1:game();
break;
case 0:printf("游戏结束!");
break;
default:printf("请重新输入!\n");
break;
}
}while (input);
return 0;
}
主函数中有menu()函数:
void menu()
{
printf("###############################\n");
printf("####### 1.play 0.exit #######\n");
printf("###############################\n");
}
以及game()函数:
void game()
{
int ret = 0;
char board[ROW][COL];
srand((unsigned int)time(NULL));
Init_board(board,ROW,COL);
Print_board(board, ROW, COL);
while (1){
Player(board, ROW, COL);
if ((ret = is_win(board, ROW, COL)) != ' ')
{
break;
}
Print_board(board, ROW, COL);
printf("\n");
Computer(board, ROW, COL);
if ((ret = is_win(board, ROW, COL)) != ' ')
{
break;
}
Print_board(board, ROW, COL);
printf("\n");
}
if (ret == 'X')
{
printf("恭喜你,赢了此次比赛\n");
}
if (ret == '0')
{
printf("电脑胜,你输了\n");
}
else if (ret == 'p')
{
printf("平局\n");
}
Print_board(board, ROW, COL);
}
在这个函数里我们看到又调用了许多的函数,我们将这些都放在game.c里,当然我们去实现这些函数时需要一步一步地去实现,需要什么就创建什么。下面是game.c文件:
#define _CRT_SECURE_NO_WARNINGS 1
#include"game.h"
void Init_board(char board[ROW][COL], int row, int col)
{
int i, j;
for (i = 0; i < row;i++)
for (j = 0; j < col; j++)
board[i][j] = ' ';
}
void Print_board(char board[ROW][COL], int row, int col)
{
int i = 0, j = 0;
for (i = 0; i < row; i++)
{
for (j = 0; j < col; j++)
{
printf(" %c ", board[i][j]);
if (j < col - 1)
printf("|");
else
printf("\n");
}
if (i < row - 1)
{
for (j = 0; j < col; j++)
{
printf("---");
if (j < col - 1)
printf("|");
else
printf("\n");
}
}
}
}
void Player(char board[ROW][COL], int row, int col)
{
int i, j;
while (1)
{
printf("玩家落子: ");
scanf("%d %d", &i,&j);
if (i >= 1 && i <= row&&j >= 1 && j <= col)
{
if (board[i - 1][j - 1] == ' ')
{
board[i - 1][j - 1] = 'X';
break;
}
else {
printf("已经有子了!\n");
}
}
else {
printf("错误落子,请重新落子\n");
}
}
}
void Computer(char board[ROW][COL], int row, int col)
{
int x = 0;
int y = 0;
x = rand() % 3;
y = rand() % 3;
while (1)
{
x = rand() % 3;
y = rand() % 3;
if (board[x][y] == ' ')
{
board[x][y] = '0';
break;
}
}
}
int is_full(char board[ROW][COL], int row, int col)//判断棋盘是否为满
{
int i = 0, j = 0;
for (i = 0; i<row; i++)
{
for (j = 0; j<col; j++)
{
if (board[i][j] == ' ')
return 0;
}
}
return 1;
}
char is_win(char board[ROW][COL], int row, int col)
{
int i = 0, j = 0;
for (i = 0; i<row; i++)
{
if ((board[i][0] == board[i][1]) && (board[i][1] == board[i][2]) && board[i][1] != ' ')
{
return board[i][1];
}
}
for (j = 0; j<col; j++)
{
if ((board[0][j] == board[1][j]) && (board[1][j] == board[2][j]) && board[1][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];
}
else if ((board[0][2] == board[1][1]) && (board[1][1] == board[2][0]) && board[1][1] != ' ')
{
return board[1][1];
}
else if (is_full(board, row, col))
{
return 'f';
}
else return ' ';
}
我们看到我们使用了#include<game.h>,事实上我们将函数的声明都放在了game.h里:
#ifndef _GAME__H__
#define _GAME__H__
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<time.h>
#define ROW 3
#define COL 3
void Init_board(char board[ROW][COL], int row, int col);
void Print_board(char board[ROW][COL], int row, int col);
void Player(char board[ROW][COL], int row, int col);
void Computer(char board[ROW][COL], int row, int col);
char is_win(char board[ROW][COL], int row, int col);
#endif
我们看一下最终的结果:
剩下的可以自己下去实现,不足之处望指出!