C语言实现井字棋 详解在注释上,直接贴代码 这是头文件game.h
#pragma once
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define ROW 3
#define COL 3
void InitBoard(char board[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 IsWin(char board[ROW][COL], int row, int col);
.c文件
#define _CRT_SECURE_NO_WARNINGS 1
#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<row - 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)
{
printf("玩家走\n");
int x, y;
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, y;
while (1){
x = rand() % row;
y = rand() % col;
if (board[x][y] == ' ')
{
board[x][y] = '#';
break;
}
}
}
char IsWin(char board[ROW][COL], int row, int col)
{
if ((board[0][0] == board[0][1] && board[0][2] == board[0][1] && board[0][1]!=' ')
|| (board[1][0] == board[1][1] && board[1][2] == board[1][1] && board[1][1] != ' ')
|| (board[2][0] == board[2][1] && board[2][2] == board[2][1] && board[2][1] != ' ')
|| (board[0][0] == board[1][0] && board[2][0] == board[1][0] && board[0][0] != ' ')
|| (board[0][1] == board[1][1] && board[2][1] == board[1][1] && board[0][1] != ' ')
|| (board[0][2] == board[1][2] && board[2][2] == board[1][2] && board[0][2] != ' ')
|| (board[0][0] == board[1][1] && board[2][2] == board[1][1] && board[1][1] != ' ')
|| (board[0][2] == board[1][1] && board[2][0] == board[1][1] && board[1][1] != ' ')
)
return board[0][0];
for (int i = 0; i < row; ++i)
for (int j = 0; j < col; ++j)
if (board[i][j] == ' ')
return 'c';
return 0;
}
主函数
#define _CRT_SECURE_NO_WARNINGS 1
#include "game.h"
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 = IsWin(board, ROW, COL);
if (ret != 'c')
{
break;
}
ComputerMove(board, ROW, COL);
DisplayBoard(board, ROW, COL);
ret = IsWin(board, ROW, COL);
if (ret != 'c')
{
break;
}
}
if (ret == '*')
{
printf("你赢了\n");
}
else if (ret == '#')
{
printf("电脑赢了,你输了\n");
}
else
{
printf("平局\n");
}
}
void menu()
{
printf("**********************************\n");
printf("************ 1. van游戏 ********\n");
printf("************ 0. 不van了 ********\n");
printf("**********************************\n");
}
int main()
{
srand((unsigned int)time(NULL));
do
{
menu();
printf("请选择");
int input = 0;
scanf("%d",&input);
switch (input)
{
case 1:
printf("三字棋\n");
game();
break;
case 0:
printf("那就不van了\n");
break;
default:
printf("给爷重选\n");
}
} while (1);
return 0;
}
|