三子棋的规则:在九宫格棋盘中,只要横、竖、对角线都能走成一条直线,就赢了。
我将实现三子棋游戏的程序分为三个部分
第一部分:头文件 game.h
#ifndef _GAME_H_
#define _GAME_H_
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define ROW 3
#define COL 3
void InitBoard(char arr[ROW][COL], int row, int col);
void DisplayBoard(char arr[ROW][COL], int row, int col);
void PlayerMove(char arr[ROW][COL], int row, int col);
void ComputerMove(char arr[ROW][COL], int row, int col);
char IsWin(char arr[ROW][COL], int row, int col);
#endif
第二部分:源文件 game.c
#define _CRT_SECURE_NO_WARNINGS 1
#include "game.h"
void game()
{
char ret = 0;
char arr[ROW][COL];
InitBoard(arr, ROW, COL);
do
{
PlayerMove(arr, ROW, COL);
DisplayBoard(arr, ROW, COL);
ret = IsWin(arr, ROW, COL);
if(ret!=0)
break;
ComputerMove(arr, ROW, COL);
DisplayBoard(arr, ROW, COL);
ret = IsWin(arr, ROW, COL);
}while(ret==0);
if(ret=='X')
printf("恭喜你赢了\n");
if(ret=='*')
printf("你输了\n");
if(ret=='q')
printf("平局\n");
}
char arr[ROW][COL];
void InitBoard(char arr[ROW][COL], int row, int col)
{
int i = 0;
for(i=0; i<row; i++)
{
int j = 0;
for(j=0; j<col; j++)
{
arr[i][j] = ' ';
}
}
}
void DisplayBoard(char arr[ROW][COL], int row, int col)
{
int i = 0;
for(i=0; i<row; i++)
{
printf(" %c | %c | %c \n", arr[i][0], arr[i][1], arr[i][2]);
if(i!=row-1)
printf("---|---|---\n");
}
}
void PlayerMove(char arr[ROW][COL], int row, int col)
{
int m = 0, n = 0;
printf("玩家走:\n");
while(1)
{
scanf("%d %d", &m, &n);
if((m>=1)&&(m<=row)&&(n>=1)&&(n<=col))
{
if(arr[m-1][n-1]==' ')
{
arr[m-1][n-1]='X';
break;
}
else
printf("此位置被占用,请重新输入\n");
}
else
printf("输入错误,请重新输入\n");
}
}
void ComputerMove(char arr[ROW][COL], int row, int col)
{
int m = 0, n = 0;
printf("电脑走:\n");
while(1)
{
m = rand()%row;
n = rand()%col;
if(arr[m][n]==' ')
{
arr[m][n]='*';
break;
}
}
}
int IsFull(char arr[ROW][COL], int row, int col)
{
int i = 0;
for(i=0; i<row; i++)
{
int j = 0;
for(j=0; j<col; j++)
{
if(arr[i][j]==' ')
return 0;
}
}
return 1;
}
char IsWin(char arr[ROW][COL], int row, int col)
{
int i = 0, j = 0;
for(i=0; i<row; i++)
{
if((arr[i][0]==arr[i][1])&&(arr[i][1]==arr[i][2])&&(arr[i][0]!=' '))
return arr[i][0];
}
for(j=0; j<col; j++)
{
if((arr[0][j]==arr[1][j])&&(arr[1][j]==arr[2][j])&&(arr[0][j]!=' '))
return arr[0][j];
}
if((arr[0][0]==arr[1][1])&&(arr[1][1]==arr[2][2])&&(arr[0][0]!=' '))
return arr[0][0];
else if((arr[0][2]==arr[1][1])&&(arr[1][1]==arr[2][0])&&(arr[0][2]!=' '))
return arr[0][0];
else if(IsFull(arr, row, col))
return 'q';
return 0;
}
第三部分:源文件 test.c
#define _CRT_SECURE_NO_WARNINGS 1
#include "game.h"
void menu()
{
printf("***********************************\n");
printf("********** 1. play ***********\n");
printf("********** 0. exit ***********\n");
printf("***********************************\n");
}
int main()
{
int a = 0;
srand((unsigned int)time(NULL));
do
{
menu();
printf("请选择:");
scanf("%d", &a);
switch(a)
{
case 1:
game();
break;
case 0:
break;
default:
printf("输入错误,请重新输入\n");
break;
}
}while(a);
return 0;
}