c语言三子棋实验报告,C语言实现三子棋

game.h

#ifndef __GAME_H__

#define __GAME_H__

#include

#include

#include

#define ROWS 3

#define COLS 3

void init_board(char board[ROWS][COLS], int row, int col);

void display_board(char board[ROWS][COLS], int row, int col);

void player_move(char board[ROWS][COLS], int row, int col);

void computer_move(char board[ROWS][COLS], int row, int col);

char check_win(char board[ROWS][COLS], int row, int col);

#endif //__GAME_H__

game.c

#define _CRT_SECURE_NO_WARNINGS 1

#include"game.h"

void init_board(char board[ROWS][COLS], int row, int col)

{

memset(board, ' ', row*col);

}

void display_board(char board[ROWS][COLS], int row, int col)

{

int i = 0;

for (i = 0; i

{

printf(" %c | %c | %c \n", board[i][0], board[i][1], board[i][2]);

if (i != 2)

printf("---|---|---\n");

}

}

void player_move(char board[ROWS][COLS], int row, int col)

{

int x = 0;

int y = 0;

while (1)

{

printf("请输入坐标:");

scanf("%d%d", &x, &y);

x--;

y--;

if (((x >= 0) && (x <= 2)) && ((y >= 0) && (y <= 2)))

{

if (board[x][y] == ' ')

{

board[x][y] = 'X';

break;

}

else

{

printf("输入有误 !");

}

}

else

{

printf("输入有误 !");

}

}

}

void computer_move(char board[ROWS][COLS], int row, int col)

{

printf("电脑下:\n");

while (1)

{

int x = rand() % 3;

int y = rand() % 3;

if (board[x][y] == ' ')

{

board[x][y] = 'O';

break;

}

}

}

static int is_full(char board[ROWS][COLS], int row, int col)

{

int i = 0;

int j = 0;

for (i = 0; i

{

for (j = 0; j

{

if (board[i][j] == ' ')

return 0;

}

}

return 1;

}

char check_win(char board[ROWS][COLS], int row, int col)

{

int i = 0;

for (i = 0; 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

{

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];

if (is_full(board, row, col))

{

return 'q';

}

return ' ';

}

test.c

#define _CRT_SECURE_NO_WARNINGS 1

#include

#include

#include

#include"game.h"

void game()

{

int ret = 0;

char board[ROWS][COLS] = { 0 };

init_board(board, ROWS, COLS);

display_board(board, ROWS, COLS);

srand((unsigned int)time(NULL));

while (1)

{

player_move(board, ROWS, COLS);

if ((ret = check_win(board, ROWS, COLS)) != ' ')

break;

display_board(board, ROWS, COLS);

computer_move(board, ROWS, COLS);

if ((ret = check_win(board, ROWS, COLS)) != ' ')

break;

display_board(board, ROWS, COLS);

}

ret = check_win(board, ROWS, COLS);

if (ret == 'X')

{

printf("恭喜你!你赢了!\n");

}

else if (ret == 'O')

{

printf("不好意思!你输了!\n");

}

else if (ret == 'q')

{

printf("平局!\n");

}

display_board(board, ROWS, COLS);

}

void menu()

{

printf("*******************************\n");

printf("****** 1. play 0. exit ******\n");

printf("*******************************\n");

}

int main()

{

int input = 0;

do

{

menu();

scanf("%d", &input);

switch (input)

{

case 1:

game();

break;

case 0:

break;

default:

printf("选择错误!!");

break;

}

} while (input);

return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值