一.具体实现:
1.棋盘初始化(memset)
2.棋盘的展示
3.电脑下棋
4.玩家下棋
5.判断输赢(三字连珠)
******判断输赢的时候有四种情况:
1.玩家赢
2.电脑赢
3.平局
4.还没下完,继续游戏。
*******电脑下棋为O,玩家下棋为X,棋盘初始化为空
二.代码框架:
源文件main.c(用于存放主函数)
#include "three_chess.h"
int main()
{
int select = 0;
int quiz = 0;
while (!quiz)
{
ShowUI();
printf("请输入一个数:");
scanf("%d", &select);
switch(select)
{
case 1:
Game();
break;
case 0:
quiz = 1;
printf("退出游戏!\n");
break;
default:
printf("请重新输入:\n");
break;
}
}
system("pause");
return 0;
}
源文件three_chess.c (此处放函数的实现)
1.提供用户选择的界面
void ShowUI()
{ printf("****************************\n");
printf("***** 1.play! ******\n");
printf("***** 0.exit! ******\n");
printf("****************************\n");
}
2.电脑下棋
void ComputerMove(char board[ROW][COL], int row, int col)
{ while (1)
{
int x = rand() % row; //随机产生的横坐标【0,3)
int y = rand() % col; //随机产生的纵坐标【0,3)
if (board[x][y] == ' ') //此处还没有下棋,为空
{
board[x][y] = 'O'; //赋值
break;
}
}
}
3.玩家下棋
void PlayerMove(char board[ROW][COL], int row, int col)
{
int x, y;
while (1)
{
printf("请输入你所下的棋的位置pos(x,y):>");
scanf("%d %d", &x, &y);
if (x >= 1 && x <= row&&y >= 1 && y <= col) //输入的坐标合法
{
if (board[x-1][y-1] == ' ') //注意坐标要减1
{
board[x-1][y-1] = 'X';
break;
}
else
printf("位置不对,请重新输入!\n"); //此位置已被占了
}
else printf("位置不对,请重新输入!\n");
}
}
4.展示棋盘
void ShowBoard(char board[ROW][COL], int row, int col)
{
int i, j;
printf(" 1 2 3\n");
printf(" -----------\n");
for (i = 1; i <= row; i++)
{
printf("%d |", i);
for (j = 1; j <= col; j++)
{
printf("%c |", board[i - 1][j - 1]);
}
printf("\n");
}
}
5.玩游戏
void Game()
{
char board[ROW][COL]; //定义棋盘
char result = 'N';
memset(board, ' ', sizeof(board)); //初始化棋盘全为空
srand((unsigned long )time(NULL)); srand->rand
while (1)
{ //注意:不管电脑下棋还是玩家下棋,下完之后都要展示面板 还有判断输赢
ComputerMove(board,ROW,COL);
ShowBoard(board, ROW, COL);
result = Judge(board, ROW, COL);
if (result != 'N')
break;
PlayerMove(board, ROW, COL);
ShowBoard(board, ROW, COL);
result = Judge(board, ROW, COL);
if (result != 'N')
break;
}
switch (result)
{
case 'X':
printf("你赢了!\n");
break;
case 'O':
printf("电脑赢了!\n");
break;
case 'E':
printf("平局!\n");
break;
default:
break;
}
}
6.判断谁赢
char Judge(char board[ROW][COL], int row, int col)
{
int i = 0;
int j = 0;
for (i=0; i < row; i++)
{
if (board[i][0] == board[i][1] && board[i][1] == board[i][2] && \
board[i][0] != ' ')
return board[i][0];
}
for (i = 0; i < col; i++)
{
if (board[0][i] == board[1][i] && board[1][i] == board[2][i] && \
board[0][i] != ' ')
return board[0][i];
}
if (board[0][0] == board[1][1] && board[1][1] == board[2][2] && board[1][1] != ' ') return board[0][0];
if (board[0][2] == board[1][1] && board[1][1] == board[2][0] && board[1][1] != ' ') return board[0][2];
for (i = 0; i < row; i++)
{
for (j = 0; j < col; j++)
{
if (board[i][j] == ' ')
{
return 'N';
}
}
}
return 'E';
}
头文件three_chess.h (此处放函数的申明)
#ifndef _THREE_CHESS_H_
#define _THREE_CHESS_H_
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<windows.h>
#include<time.h>
#define ROW 3
#define COL 3
void ShowUI();
void Game();
void ComputerMove(char board[ROW][COL], int row, int col);
void ShowBoard(char board[ROW][COL], int row, int col);
void PlayerMove(char Bobrd[ROW][COL], int row, int col);
char Judge(char board[ROW][COL], int row, int col);
#endif
三.演示效果: