三子棋分为三个文件,一个是 三子棋.c / game.c / game.h
三子棋.c:
#define _CRT_SECURE_NO_WARNINGS 1
#include "game.h"
void menu()
{
printf("***************************\n");
printf("******** 1.开始 ********\n");
printf("******** 0.结束 ********\n");
printf("***************************\n");
}
void begin()
{
int ret = 0;
char board[TRA][POR];
init_board(board, TRA, POR);//初始化棋盘
set_board(board, TRA, POR);//设置棋盘
while (1)
{
py_move(board, TRA, POR); //玩家下
set_board(board, TRA, POR); //打印棋盘
ret = judge(board, TRA, POR);//判断
if (ret != 'C')
break;
printf("-----电脑下-----\n");
com_move(board, TRA, POR); //电脑下
set_board(board, TRA, POR); //打印棋盘
ret = judge(board, TRA, POR);
if (ret != 'C')
break;
printf("-----玩家下-----\n");
}
if (ret == '*')
printf("你赢了!\n");
else if (ret == '#')
printf("电脑赢了!\n");
else if(ret == 'Q')
printf("平局!\n");
}
int main()
{
srand((unsigned int)time(NULL));
int input = 0;
//目录选择,开始,结束
do
{
menu();
printf("请输入:");
scanf("%d", &input);
//判断
switch (input)
{
case(1):
printf("开始游戏:\n");
begin();
break;
case(0):
printf("游戏结束!\n");
break;
default:
printf("请重新输入!\n");
}
} while (input);
return 0;
}
game.h:
#pragma once
//引用头文件
#include <stdio.h>
#include <string.h>
#include <time.h>
#include <stdlib.h>
//定义全局变量
#define TRA 3 //transverse
#define POR 3 //portrait
//设置棋盘
void set_board(char board[TRA][POR], int tra, int pro);
//初始化棋盘
void init_board(char board[TRA][POR], int tra, int por);
//玩家下棋
void py_move(char board[TRA][POR], int tra, int por);
//判断
char judge(char board[TRA][POR], int tra, int por);
//电脑下棋
void com_move(char board[TRA][POR], int tra, int por);
game.c:
#define _CRT_SECURE_NO_WARNINGS 1
#include "game.h"
void init_board(char board[TRA][POR], int tra, int por)
{
int i = 0;
int j = 0;
for (i = 0; i < tra; i++)
{
for (j = 0; j < por; j++)
{
board[i][j] = ' ';
}
}
}
void set_board(char board[TRA][POR], int tra, int por)
{
int i = 0;
int j = 0;
for (i = 0; i < tra; i++)
{
for (j = 0; j < por; j++)
{
printf(" %c ",board[i][j]);
if (j < por - 1)
printf("|");
}
printf("\n");
for (j = 0; j < tra; j++)
{
if (i < por - 1)
{
printf("---");
if (j < tra - 1)
printf("|");
}
}
printf("\n");
}
}
void py_move(char board[TRA][POR], int tra, int por)
{
while (1)
{
printf("请落子(例如‘1’空格‘1’):>");
scanf("%d %d", &tra, &por);
if (tra <= TRA && tra > 0 && por <= POR && por > 0)
{
if (board[tra - 1][por - 1] != '*' && board[tra - 1][por - 1] != '#')
{
board[tra - 1][por - 1] = '*';
break;
}
else
printf("请重新输入!!!!!!\n");
}
else
printf("请重新输入!!!!!!\n");
}
}
int is_full(char board[TRA][POR], int tra, int por)
{
int i = 0;
int j = 0;
for (i = 0; i < tra; i++)
{
for (j = 0; j < por; j++)
{
if (board[i][j] == ' ')
return 0;
}
}
return 1;
}
char judge(char board[TRA][POR], int tra, int por)
{
int i = 0;
int j = 0;
for (i = 0; i < tra; i++)
{
if (board[i][0] == board[i][1] && board[i][1] == board[i][2] && board[i][1] != ' ')
return board[i][1];
}
for (i = 0; i < tra; i++)
{
if (board[0][i] == board[1][i] && board[1][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[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];
}
int full = is_full(board, TRA, POR);
if (full == 1)
{
return 'Q';
}
return 'C';
}
void com_move(char board[TRA][POR], int tra, int por)
{
while(1)
{
tra = rand() % 3;
por = rand() % 3;
if (board[tra][por] == ' ')
{
board[tra][por] = '#';
break;
}
}
}