您的位置:首页 > 其它

三子棋you can

2015-11-07 17:28 351 查看
//game.h

#ifndef __GAME_H__
#define __GAME_H__

#define COLS 3
#define ROWS 3

void init_game(char arr[COLS][ROWS]);
void display_board(char arr[COLS][ROWS]);
void player_move(char arr[COLS][ROWS]);
void computer_move(char arr[COLS][ROWS]);
char check(char arr[COLS][ROWS]);

//test.c
#include <stdio.h>
#include "game.h"//引用game函数
#ifndef __GAME_H__
/*定义这两个宏是为了进行条件编译但是有时希望对
其中一部分内容只在满足一定条件才进行编译,
也就是对一部分内容指定编译的条件,
这就是“条件编译”。有时,希望当满足某条件时对一组语句进行编译,
而当条件不满足时则编译另一组语句*/
#define __GAME_H__

#define COLS 3
#define ROWS 3

void init_game(char arr[COLS][ROWS]);//初始化数组
void display_board(char arr[COLS][ROWS]);//打印棋盘
void player_move(char arr[COLS][ROWS]);//玩家下棋
void computer_move(char arr[COLS][ROWS]);//电脑下棋
char check(char arr[COLS][ROWS]);//检查
int main()
{
char chess[COLS][ROWS];
char done = 0;
init_game(chess);
do
{
display_board(chess);
player_move(chess);
done = check(chess);
if (done != ' ')
{
break;
}
computer_move(chess);
done = check(chess);
} while (done == ' ');
if ('X' == done)
{
printf("玩家赢\n");
}
else if ('O' == done)
{
printf("电脑赢\n");
}

return 0;
}
//game.c

#include "game.h"
#include <stdio.h>
//第一个函数初始化数组
void init_game(char arr[COLS][ROWS])//初始化数组
{
int i = 0;
int j = 0;
for (i = 0; i < COLS; i++)
{
for (j = 0; j < ROWS; j++)
{
arr[i][j] = ' ';
}
}
}
//第二个函数打印棋盘
void display_board(char arr[COLS][ROWS])//打印棋盘
{
int i = 0;
for (i = 0; i < COLS; i++)
{
printf(" %c | %c | %c \n",
arr[i][0],arr[i][1],arr[i][2]);
if (i != 2)
printf("---|---|---\n");
}
}
//第三个函数玩家输出旗子
void player_move(char arr[COLS][ROWS])
{
int x = 0, y = 0;
flag:
printf("请输入坐标>:");
scanf("%d%d", &x, &y);//玩家输入坐标

x = x - 1;
y = y - 1;
if ((x < 3) && (y < 3))
{
if (arr[x][y] == ' ')//判断如果坐标为空,则对应坐标点的值为x
{
arr[x][y] = 'X';
}
else
{
printf("坐标有误,请重新输入\n");//如果对应点的坐标已经被占用,则显示输入有误
goto flag;
//player_move(arr);
}
}
else
{
printf("坐标有误,请重新输入\n");//如果输入对应的坐标点(x>=3,y>=3)超出棋盘范围,则也显示坐标有误
goto flag;//转到flag再次重新输入
//player_move(arr);
}
}
//第四个函数电脑输入棋子
void computer_move(char arr[COLS][ROWS])//
{
int i = 0;
int j = 0;
for (i= 0; i < COLS; i++)
{
for (j = 0; j < ROWS; j++)
{
if (arr[i][j] == ' ')//遍历数组如果存在空格,则给输入的坐标点赋值为0
{
arr[i][j] = '0';
goto flag;//否则转到flag继续重新输入
}
}
}
flag:
if (i*j == 9)
{
printf("平局\n");
}
}
//第五个函数检查是否有赢家产生
char check(char arr[COLS][ROWS])//检查函数当出现某一行或者某一列,或者对角线上有三个连续相同的x或0的时候则游戏结束
{
int i = 0;
for (i = 0; i < COLS; i++)
{
if (arr[i][0] == arr[i][1] && arr[i][1] == arr[i][2])
{
return arr[i][0];
}
}
for (i = 0; i < ROWS; i++)
{
if (arr[0][i] == arr[1][i] && arr[1][i] == arr[2][i])
{
return arr[0][i];
}
}
if (arr[0][0] == arr[1][1] && arr[1][1] == arr[2][2])
{
return arr[0][0];
}
if (arr[0][2] == arr[1][1] && arr[1][1] == arr[2][0])
{
return arr[1][1];
}
return ' ';
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  三子旗小游戏