#define _CRT_SECURE_NO_WARNINGS 1
#include "game.h"voideum(){printf("########################\n");printf("##1. play 0. exit ##\n");printf("########################\n");}voidgame(){
char bord[ROW][COL]={0};//棋盘初始化为空格is_space(bord,ROW,COL);//打印棋盘displaybord(bord,ROW,COL);
char ret =0;//一直下棋while(1){//玩家下棋playmove(bord,ROW,COL);displaybord(bord,ROW,COL);//判断输赢
ret =iswin(bord,ROW,COL);if(ret !='C')//判断游戏是否结束break;//电脑下棋computermove(bord,ROW,COL);displaybord(bord,ROW,COL);//判断输赢
ret =iswin(bord,ROW,COL);if(ret !='C')//判断游戏是否结束break;}if(ret =='*')printf("玩家赢\n");elseif(ret =='#')printf("电脑赢\n");elseprintf("平局\n");}
int main(){
int input =0;srand((unsigned int)time(NULL));do{eum();printf("请输入>:");scanf("%d",&input);switch(input){case1:game();break;case0:printf("退出游戏\n");break;default:printf("输入错误,重新输入\n");break;}}while(input);return0;}
2.game.c
#define _CRT_SECURE_NO_WARNINGS 1
#include "game.h"//初始化为空格voidis_space(char bord[ROW][COL], int row, int col){for(int i =0; i < row; i++){for(int j =0; j < col; j++){
bord[i][j]=' ';}}}//打印棋盘voiddisplaybord(char bord[ROW][COL], int row, int col){for(int i =0; i < row; i++){//1.打印数据for(int j =0; j < col; j++){printf(" %c ", bord[i][j]);if(j < col -1)//最后一列 | 不打印{printf("|");}}printf("\n");//2.打印分割线if(i < row -1)//最后一行{for(int j =0; j < col; j++){printf("---");if(j < col -1)//最后一列 | 不打印{printf("|");}}printf("\n");}}}//玩家下棋voidplaymove(char bord[ROW][COL], int row, int col){
int x =0;
int y =0;printf("玩家下棋>:");while(1){printf("请输入下棋的坐标,用空格隔开>:");scanf("%d %d",&x,&y);//输入合法,可以输入if(x >=1&& x <= row && y >=1&& y <= col){//可以落子if(bord[x -1][y -1]==' '){
bord[x -1][y -1]='*';break;}//不可以落子else{printf("坐标被占用,不能落子,请重新输入\n");}}//输入非法else{printf("输入非法,重新输入\n");}}}//电脑随机下棋voidcomputermove(char bord[ROW][COL], int row, int col){
int x =0;
int y =0;printf("电脑下棋>:\n");while(1){
x =rand()% row;//0 ~ row - 1
y =rand()% col;//0 ~ col - 1if(bord[x][y]==' '){
bord[x][y]='#';break;}}}//判断满没满
int iffull(char bord[ROW][COL], int row, int col){for(int i =0; i < row; i++){for(int j =0; j < col; j++){if(bord[i][j]==' '){return0;//没满}}}//满了return1;}//判断输赢
char iswin(char bord[ROW][COL], int row, int col){//赢//行for(int i =0; i < row; i++){if(bord[i][0]== bord[i][1]&& bord[i][1]== bord[i][2]&& bord[i][0]!=' '){return bord[i][0];}}//列for(int j =0; j < col; j++){if(bord[0][j]== bord[1][j]&& bord[1][j]== bord[2][j]&& bord[0][j]!=' '){return bord[0][j];}}//对角线if(bord[0][0]== bord[1][1]&& bord[1][1]== bord[2][2]&& bord[1][1]!=' ')return bord[1][1];if(bord[0][2]== bord[1][1]&& bord[1][1]== bord[2][0]&& bord[1][1]!=' ')return bord[1][1];//平局if(iffull(bord, row, col)==1){return'Q';}//继续return'C';}
3. game.h
#pragma once
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define ROW3
#define COL3//棋盘初始化为空格voidis_space(char bord[ROW][COL], int row, int col);//打印棋盘voiddisplaybord(char bord[ROW][COL],int row, int col);//玩家下棋voidplaymove(char bord[ROW][COL], int row, int col);//电脑下棋voidcomputermove(char bord[ROW][COL], int row, int col);//判断输赢//玩家赢 - '*'//电脑赢 - '#'//平局 - 'Q'//继续 - 'C'
char iswin(char bord[ROW][COL],int row, int col);
int iffull(char bord[ROW][COL], int row, int col);