c语言程序三子棋,c语言编程实现简单三子棋游戏

分别创建test.c   game.c 两个源文件,以及game.h头文件

这里的三子棋游戏是指棋盘为3*3,玩家与电脑之间的对决,先将各自的棋下为一排(横/竖/斜)者获胜,电脑所    下位置是随机产生

1. game.h中用于函数定义,如下:

#ifndef __GAME_H__

#define __GMME_H__

#define ROWS 3

#define COLS 3

void init_board(char board[ROWS][COLS], int rows,int cols);//初始化棋盘

void display_board(char board[ROWS][COLS], int rows, int cols);//打印棋盘

void player_move(char board[ROWS][COLS], int rows, int cols);//实现玩家下棋的函数

void computer_move(char board[ROWS][COLS], int rows, int cols);//实现电脑下棋的函数

char check_win(char board[ROWS][COLS], int rows, int cols);//判断输赢的函数

#endif //__GAME_H__

2. test.c用于存放主函数,如下:

#define _CRT_SECURE_NO_WARNINGS 1

#include

#include

#include"game.h"

void menu() //打印菜单

{

printf("********* 1.PLAY ********\n");

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

printf("********* 0.EXIT ********\n");

}

void game()

{

int ret = 0;

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

init_board(board, ROWS, COLS);

display_board(board, ROWS, COLS);

while (1)

{

printf("player move;\n");

player_move(board, ROWS, COLS);

display_board(board, ROWS, COLS);

ret = check_win(board, ROWS, COLS);

if (ret != ' ')

break;

printf("computer move:\n");

computer_move(board, ROWS, COLS);

display_board(board, ROWS, COLS);

check_win(board, ROWS, COLS);

if (ret != ' ')

break;

}

if (ret == 'X')

{

printf("Congratulatons! player win!\n");

}

else if (ret == '0')

{

printf("Undortunately! player lost!\n");

}

else

{

printf("It's tie,play again?\n");

}

}

enum Option

{

EXIT,//0

PLAY //1

};

int main()

{

int input = 0;

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

do

{

menu();

printf("please chose:>");

scanf("%d", &input);

switch(input)

{

case PLAY:

game();

break;

case EXIT:

break;

default:

printf("default!please chose again!\n");

break;

}

} while (input);

system("pause\n");

return 0;

}

3.game.c中实现游戏的函数

#define _CRT_SECURE_NO_WARNINGS 1

#include"game.h"

#include

#include

#include

#include

void init_board(char board[ROWS][COLS], int rows, int cols)

{

memset(board, ' ', sizeof(char)*rows*cols);//用来设置内存的函数(指定内存地址,初始化,内存大小)

}

void display_board(char board[ROWS][COLS], int rows, int cols)

{

int i = 0;

for (i = 0; i < rows; i++)

{

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

if (i != rows - 1)

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

}

}

void player_move(char board[ROWS][COLS], int rows, int cols)

{

int x = 0;

int y = 0;

/*printf("please enter the coordinates:>");

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

/*x--;

y--;*/

while (1)

{

printf("please enter the coordinates:>");

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

x--;

y--;

if ((x >= 0) && (x <= rows - 1) && (y >= 0) && (y <= cols - 1))

{

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

{

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

break;

}

else

{

printf("please enter again:>\n");

}

}

}

}

void computer_move(char board[ROWS][COLS], int rows, int cols)

{

while (1)

{

int x = rand() % 3;

int y = rand() % 3;

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

{

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

break;

}

}

}

static int is_full(char board[ROWS][COLS], int rows, int cols)//仅在此文件内使用

{

int i = 0;

int j = 0;

for (i = 0; i < rows; i++)

{

for (j = 0; j < cols; j++)

{

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

return 0;

}

}

return 1;//表示棋盘已满

}

char check_win(char board[ROWS][COLS], int rows, int cols)//三行三列和两个交叉行

{

int i = 0;

for (i = 0; i < rows; 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 < cols; 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[2][2] != ' '))

{

return board[1][1];

}

if (is_full(board, rows, cols))

{

return 'q';//棋盘满了

}

return ' ';

}

你可能感兴趣的:(c语言程序三子棋)