三子棋

来源:互联网 发布:手机怎样修改淘宝评价 编辑:程序博客网 时间:2024/06/14 11:55
完成一个简单三子棋的实现。 

头文件: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 Display(char arr[ROW][COL], int row, int col);
void InitBoard(char arr[ROW][COL], int row, int col);
void ComputerMove(char arr[ROW][COL]);
void PlayerMove(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 Display(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 InitBoard(char arr[ROW][COL], int row, int col)
{
int i = 0;
int j = 0;
for (i = 0; i < ROW; i++)
{
for (j = 0; j < COL; j++)
{
arr[i][j] = ' ';
}
}
}
void ComputerMove(char arr[ROW][COL])
{
while (1)
{
int x = rand() % 3;
int y = rand() % 3;
if (arr[x][y] == ' ')
{
arr[x][y] = 'o';
break;
}
}
}
void PlayerMove(char arr[ROW][COL], int row, int col)
{
int x = 0;
int y = 0;
while (1)
{
scanf("%d%d", &x, &y);
if (x < row && y < col && arr[x][y] == ' ')
{
arr[x][y] = 'X';
break;
}
}

}
int Isfull(char arr[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 (arr[i][j] == ' ')
{
return 0;
}
}
}
return 1;
}
char IsWin(char arr[ROW][COL], int row, int col)
{
int i = 0;
for (i = 0; i < ROW; i++)
{
if ((arr[i][0] == arr[i][1]) && (arr[i][1] == arr[i][2]) && (arr[i][0] != ' '))
{
return 'w';
}
}
for (i = 0; i < COL; i++)
{
if ((arr[0][i] == arr[1][i]) && (arr[1][i] == arr[2][i]) && (arr[0][i] != ' '))
{
return 'w';
}
}
if ((arr[0][0] == arr[1][1]) && (arr[1][1] == arr[2][2]) && (arr[1][1] != ' '))
{
return 'w';
}
else if ((arr[0][2] == arr[1][1]) && (arr[1][1] == arr[2][0]) && (arr[1][1] != ' '))
{
return 'w';
}
if (Isfull(arr, ROW, COL))
{
return 'q';
}
return '  ';
}


文件:test.c

#define _CRT_SECURE_NO_WARNINGS 1
#include "game.h"
void menu( )
{
printf("**************************************************************\n");
printf("********* 1.START GAME      0. EXIT GAME *********\n");
printf("**************************************************************\n");
}
void play_game()
{
srand((unsigned int)time(NULL));
char arr[ROW][COL];
char ret=' ';
InitBoard(arr, ROW, COL);
Display(arr, ROW, COL);
while (ret != 'q')
{
printf("电脑走:\n");
ComputerMove(arr);
Display(arr, ROW, COL);
ret = IsWin(arr, ROW, COL);
if (ret == 'w')
{
printf("电脑赢!\n");
break;
}
else if (ret == 'q')
{
printf("平局!\n");
break;
}
printf("玩家走:\n");
PlayerMove(arr, ROW, COL);
Display(arr, ROW, COL);
ret = IsWin(arr, ROW, COL);
if (ret == 'w')
{
printf("玩家赢!\n");
break;
}
else if (ret == 'q')
{
printf("平局!\n");
break;
}


}
void test()
{
int choose = 0;
while (1)
{
menu();
printf("请选择:>\n");
scanf("%d", &choose);
switch (choose)
{
case 1:
play_game();
break;
case 0:
exit(0);
break;
default:
printf("选择错误!\n");
}
}
}


int main()
{
test();
system("pause");
return 0;
}

原创粉丝点击