三子棋小游戏(源码如下)
头文件
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define COL 3
#define ROW 3
void boardplay(char board[ROW][COL],int row,int col);
void initiboard(char board[ROW][COL], int row, int col);
void player(char board[ROW][COL], int row, int col);
void computer(char board[ROW][COL], int row, int col);
char judge(char board[ROW][COL], int row, int col);
主函数
#include"game.h"
game() {
char ret;
char board[ROW][COL] = { 0 };
srand((unsigned int)time(NULL));
initiboard(board, ROW, COL);//初始化棋盘
boardplay(board,ROW,COL);//打印棋盘
while (1) {
player(board, ROW, COL);//玩家走
boardplay(board, ROW, COL);//打印棋盘
ret=judge(board, ROW, COL);
if (ret!='c') {
break;
}
computer(board, ROW, COL);//电脑走
boardplay(board, ROW, COL);//打印棋盘
ret = judge(board, ROW, COL);
if ( ret != 'c') {
break;
}
}
if (ret == 'n')printf("平局\n");
if(ret=='*')printf("%c玩家赢\n",ret);
if (ret == '#')printf("%c电脑赢\n", ret);
}
menu() {
printf("****************************************\n");
printf("*********** 1 开始 0 退出***************\n");
printf("****************************************\n");
}
tect() {
int sele;
do {//先输入,在判断
menu();
scanf("%d", &sele);
switch (sele) {
case 1: {printf("游戏开始\n"); game(); break; }
case 0: { printf("退出游戏\n"); break; }
default:printf("输入非法,重新输入\n");
}
} while (sele);
}
int main(void) {
tect();
}
内部函数实现
#include"game.h"
void boardplay(char board[ROW][COL], int row, int col) {
int i, j, k;
for (i = 0; i < row; i++) {
for (j = 0; j < col; j++) {
printf(" %c ", board[i][j]);
if (j < col - 1) { printf("|"); }
}
printf("\n");
if (i < row - 1) {
for (k = 0; k < col; k++) {
printf("---");
if (k < col - 1) {
printf("|");
}
}
}
printf("\n");
}
}
void initiboard(char board[ROW][COL], int row, int col) {
int i, j;
for (i = 0; i < ROW; i++) {
for (j = 0; j < COL; j++) {
board[i][j] = ' ';
}
}
}
void player(char board[ROW][COL], int row, int col) {
int x,y;
while (1) {//如果不能满足条件就一直循环
printf("请输入坐标\n");
scanf("%d", &x);
scanf("%d", &y);
if (board[x-1][y-1] == ' ') {
board[x-1][y-1] = '*';
break;
}
else printf("坐标非法,重新输入");
}
}
void computer(char board[ROW][COL], int row, int col) {
int x, y;
printf("电脑走\n");
while(1){//如果不能满足条件就一直循环
x = rand() % col;
y = rand() % col;
if (board[x][y] == ' ') {
board[x][y] = '#';
break;
}
}
}
int isfull(char board[ROW][COL],int row ,int col) {
int i, j;
for (i = 0; i < row; i++) {
for (j = 0; j < col; j++) {
if (board[i][j] == ' ')
{
return 0;
}
}
}
return 1;
}
char judge(char board[ROW][COL], int row, int col) {
int i, j;
for (i = 0; i < row; i++) {
if (board[i][0] == board[i][1] && board[i][0] == board[i][2] && board[i][0] != ' ') {
return board[i][0];
}
};
for (j = 0; j < col; j++) {
if(board[0][j] == board[1][j] && board[0][j] == board[2][j] &&board[0][j]!=' '){
return board[0][j];
}
}
if (board[0][0] == board[1][1] && board[1][1] == board[2][2] && board[0][0] != ' ')
return board[1][1];
if (board[2][0] == board[1][1] && board[2][0] == board[0][2] && board[2][0] != ' ')
return board[2][0];
if (1 == isfull(board, ROW, COL)) {
return 'n';
}
return 'c';
}