三子棋是一种简单的小游戏,用C语言可以实现与电脑进行三子棋游戏。
//game.h
#define X 3
#define Y 3
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void init_board(char arr[X][Y], int x, int y);
void print_board(char arr[X][Y], int x, int y);
char Iswin(char arr[X][Y], int x, int y);
void ComputerMove(char arr[X][Y], int x, int y);
void PlayerMove(char arr[X][Y], int x, int y);
int Isfull(char arr[X][Y], int x, int y);
//test.c
#include"game.h"
void menu()
{
printf("######三子棋########\n");
printf("#####1.开始游戏#####\n");
printf("#####0.结束游戏######\n");
}
void game(char arr[X][Y])
{
char ret='0';
init_board(arr, X, Y);
print_board(arr, X, Y);
while (1)
{
PlayerMove(arr, X, Y);
print_board(arr, X, Y);
ret=Iswin(arr, X, Y);
if (ret != 'C')
break;
ComputerMove(arr, X, Y);
print_board(arr, X, Y);
ret=Iswin(arr, X, Y);
if (ret != 'C')
break;
}
if (ret == '*')
printf("恭喜玩家获得胜利\n");
else if (ret == '#')
printf("恭喜电脑获得胜利\n");
else if (ret == 'Q')
printf("平局");
}
int main()
{
int i;
char arr[X][Y];
srand((unsigned int)time(NULL));
do
{
menu();
printf("请输入你的选择\n");
scanf("%d", &i);
switch(i)
{
case 1:
game(arr, X,Y); break;
case 0:
break;
}
} while (i);
return 0;
}
//game.c
#include"game.h"
void init_board(char arr[X][Y], int x, int y)
{
int i, j;
for(i=0;i<X;i++)
for (j = 0; j < Y; j++)
{
arr[i][j] = ' ';
}
}
void print_board(char arr[X][Y], int x, int y)
{
int i, j;
for (i = 0; i < Y; i++)
{
for (j = 0; j < X; j++)
{
printf(" %c ", arr[i][j]);
if(j<X-1)
printf("|");
}
putchar('\n');
if (i < Y - 1)
{
for (j = 0; j < X; j++)
{
printf("---");
if(j<X-1)
printf("|");
}
putchar('\n');
}
}
}
void PlayerMove(char arr[X][Y], int x, int y)
{
int i, j;
while (1)
{
printf("请输入你下棋的位置坐标\n");
scanf("%d%d", &i, &j);
if (i <= X && j <= Y && i >= 1 && j >= 1)
{
if (arr[i-1][j-1] == ' ')
{
arr[i-1][j-1] = '*';
break;
}
else
printf("该位置已被占用,请重新输入\n");
}
else
printf("此坐标无效,请重新输入\n");
}
}
void ComputerMove(char arr[X][Y], int x, int y)
{
printf("电脑下棋\n");
while (1)
{
int i = rand() % X;
int j = rand() % Y;
if (arr[i ][j ] == ' ')
{
arr[i][j ] = '#';
break;
}
}
}
char Iswin(char arr[X][Y], int x, int y)
{
int i;
for (i = 0; i < X; i++)
{
if (arr[i][0]==arr[i][1]&&arr[i][1]==arr[i][2]&&arr[i][1]!=' ')
return arr[i][1];
}
for (i = 0; i < Y; i++)
{
if (arr[0][i]==arr[1][i]&&arr[1][i]==arr[2][i]&&arr[i][1]!=' ')
return arr[0][i];
}
if (arr[0][0] == arr[1][1] && arr[1][1] == arr[2][2] && arr[1][1] != ' ')
return arr[1][1];
if(arr[0][2] == arr[1][1] && arr[1][1] == arr[2][0] && arr[1][1] != ' ')
return arr[1][1];
if (Isfull(arr,X,Y) == 1)
return 'Q';//平局
return 'C';//游戏继续
}
int Isfull(char arr[X][Y], int x, int y)
{
int i, j;
for (i = 0; i < X; i++)
{
for (j = 0; j < Y; j++)
{
if (arr[i][j] == ' ')
return 0;
}
}
return 1;
}