三子棋的思路
game.h
#ifndef _GAME_H_
#define _GAME_H_
#include <stdio.h>
#include <windows.h>
#include <math.h>
#pragma warning(disable:4996)
#define ROW 3
#define COL 3
#define P_COLOR 'X'
#define C_COLOR 'O'
#define NEXT 'N'
#define DRAW 'D'
void Menu();
void Game();
#endif
main.c
#include "game.h"
int main()
{
int quit = 0;
int select = 0;
while (!quit){
Menu();
printf("输入你的选择\n");
scanf("%d", &select);
switch (select){
case 1:
Game();
printf("再来一把?\n");
break;
case 2:
quit = 1;
break;
default:
printf("输入有误");
}
}
printf("再见");
system("pause");
return 0;
}
game.c
#include "game.h"
void Menu()
{
printf("开始一个三子棋游戏\n");
printf("#####################\n");
printf("## 1. Play 2. Exit##\n");
printf("#####################\n");
printf("please select\n");
}
void ShowBoard(char board[][COL], int row, int col){
printf(" | 1 | 2 | 3 |\n");
printf("---------------\n");
for (int i = 0; i < row; i++){
printf("%d |", i + 1);
for (int j = 0; j < col; j++){
printf(" %c |", board[i][j]);
}
printf("\n---------------\n");
}
}
void PlayMove(char board[][COL], int row, int col){
int x = 0;
int y = 0;
while (1){
printf("输入坐标\n");
scanf("%d%d", &x, &y);
if (x<1 || x>3 || y<1 || y>3){
printf("请重新输入");
continue;
}
else if (board[x - 1][y - 1] != ' '){
printf("被占用了\n");
continue;
}
else {
board[x - 1][y - 1] = P_COLOR;
break;
}
}
}
char Judge(char board[][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 j = 0; j < col; j++){
if (board[0][j] == board[1][j] && \
board[1][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[0][0];
}
if (board[0][2] == board[1][1] && \
board[1][1] == board[2][0] && board[0][2] != ' '){
return board[0][0];
}
for (int i = 0; i < row; i++){
for (int j = 0; j < COL; j++){
if (board[i][j] == ' '){
return NEXT;
}
}
}
return DRAW;
}
void ComputerMove(char board[ROW][COL], int row, int col){
while (1){
int x = rand() % row;
int y = rand() % col;
if (board[x][y] == ' '){
board[x][y] = C_COLOR;
break;
}
}
}
void Game()
{
srand((unsigned long)time(NULL));
char board[ROW][COL];
memset(board, ' ', sizeof(board));
char result = 'x';
do{
ShowBoard(board, ROW, COL);
PlayMove(board, ROW, COL);
result = Judge(board, ROW, COL);
if (result != NEXT){
break;
}
ComputerMove(board, ROW, COL);
result = Judge(board, ROW, COL);
system("cls");
if (result != NEXT){
break;
}
} while (1);
if (result == P_COLOR){
printf("你赢了\n");
}
else if (result == C_COLOR){
printf("你输了\n");
}
else{
printf("和棋\n");
}
ShowBoard(board, ROW, COL);
}