效果展示
test.c 主函数
//test.c
#include "game.h"
void menu(){
printf("***************************\n");
printf("******** 1. play *****\n");
printf("******** 0. exit *****\n");
printf("***************************\n");
}
void game(){
char Board[ROW][COL];
initBoard(Board,ROW,COL);
DisplayBoard(Board,ROW,COL);
char ret;
while (1){
//玩家下
PlayerMove(Board,ROW,COL);
DisplayBoard(Board,ROW,COL);
ret = Is_win(Board,ROW,COL);
if (ret != 'C'){
break;
}
//电脑下
ComputerMove(Board,ROW,COL);
DisplayBoard(Board,ROW,COL);
ret = Is_win(Board,ROW,COL);
if(ret != 'C'){
break;
}
}
if(ret == '*'){
printf("玩家赢了!\n");
}
if(ret == '#'){
printf("电脑赢了!\n");
}
if(ret == 'Q'){
printf("平局!\n");
}
DisplayBoard(Board,ROW,COL);
}
int main(){
int input = 0;
srand((unsigned int)time(NULL));
do{
menu();
scanf("%d",&input);
switch (input) {
case 1:
game();
break;
case 0:
printf("退出游戏!");
break;
default:
printf("请重新输入!");
break;
}
} while (input);
return 0;
}
game.h 功能头文件
//game.h
#ifndef BASIC_LEARNING_GAME_H
#define BASIC_LEARNING_GAME_H
#include "stdio.h"
#include <stdlib.h>
#include <time.h>
#define ROW 3
#define COL 3
void initBoard(char Borad[ROW][COL], int row, int col);
void DisplayBoard(char Board[ROW][COL], int row, int col);
void PlayerMove(char Board[ROW][COL], int row, int col);
void ComputerMove(char Board[ROW][COL], int row, int col);
char Is_win(char Board[ROW][COL], int row, int col);
#endif //BASIC_LEARNING_GAME_H
game.c 功能函数
#include "game.h"
void initBoard(char Board[ROW][COL], int row, int col){
for (int i = 0; i < row; ++i) {
for (int j = 0; j < col; ++j) {
Board[i][j] = ' ';
}
}
}
void DisplayBoard(char Board[ROW][COL], int row, int col){
for (int i = 0; i < row; ++i) {
for (int j = 0; j < col; ++j) {
printf(" %c ",Board[i][j]);
if(j < col-1){
printf("|");
}
}
printf("\n");
if(i < row-1){
for (int j = 0; j < col; ++j) {
printf("---");
if(j < col-1){
printf("|");
}
}
}
printf("\n");
}
}
void PlayerMove(char Board[ROW][COL], int row, int col){
int x = 0;
int y = 0;
printf("玩家走:>\n");
while (1){
printf("请输入你想下棋的坐标:>");
scanf("%d %d",&x, &y);
if(x>=1 && x<=row && y>=1 && y<=col){
if(Board[x-1][y-1] == ' '){
Board[x-1][y-1] = '*';
break;
} else{
printf("坐标被占用,请重新输入\n");
}
} else{
printf("坐标越界,请重新输入\n");
}
}
}
void ComputerMove(char Board[ROW][COL], int row, int col){
printf("电脑走:>\n");
int x = 0;
int y = 0;
while (1){
x = rand() % row;
y = rand() % col;
if(Board[x][y] == ' '){
Board[x][y]='#';
break;
}
}
}
char Is_win(char Board[ROW][COL], int row, int col){
for (int i = 0; i < row; ++i) {
if(Board[i][0]==Board[i][1] && Board[i][1]==Board[i][2] && Board[i][0]!=' '){
return Board[i][0];
}
}
for (int i = 0; i < col; ++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];
}
for (int i = 0; i < row; ++i) {
for (int j = 0; j < col; ++j) {
if(Board[i][j] == ' '){
return 'C';
}
}
}
return 'Q';
}
https://gitee.com/ipengx1029
https://gitee.com/ipengx1029/bit