目录
1.打印三子棋目录
2.初始化棋盘
3.显示棋盘
4.玩家下棋
5.电脑下棋
6.判断输赢
7.主函数
8.game函数
包含头文件与自定义函数声明
#pragma once
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#include<time.h>
#define COL 3
#define ROW 3
void initmenu(char board[ROW][COL], int row, int col);
void displaymenu(char board[ROW][COL], int row, int col);
void menu();
void palyermove(char board[ROW][COL], int row, int col);
void computremove(char board[ROW][COL], int row, int col);
char iswin(char board[ROW][COL], int row, int col);
1.打印三子棋目录
void menu() {
printf("******************\n");
printf("**** 1. play *****\n");
printf("**** 0. exit *****\n");
printf("******************\n");
}
2.初始化棋盘
void initmenu(char board[ROW][COL], int row, int col) {
for (int q = 0; q < row; q++) {
for (int w = 0; w < col; w++) {
board[q][w] =' ';
}
}
}
3.显示棋盘
void displaymenu(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");
for (int j = 0; j < col; j++) {
printf("---");
if (j < col - 1)
printf("|");
}
printf("\n");
}
}
4.玩家下棋
void palyermove(char board[ROW][COL], int row, int col) {
int i, j;
while (1) {
printf("玩家下棋\n");
printf("请输入坐标:>");
scanf("%d %d", &i, &j);
if (i <= row && j <= col && i >= 1 && j >= 1) {
if (board[i -1][j-1] == ' ') {
board[i - 1][j - 1] = '*';
break;
}
else
printf("该位置已被占用,请重新输入!\n");
}
else
printf("坐标不存在,请重新输入!\n");
}
}
5.电脑下棋
void computremove(char board[ROW][COL], int row, int col) {
printf("电脑下棋\n");
while (1) {
int i = rand() % 3 + 1;
int j = rand() % 3 + 1;
if (board[i - 1][j - 1] == ' ')
{
board[i - 1][j - 1] = '#';
break;
}
}
}
6.判断输赢
char iswin(char board[ROW][COL], int row, int col) {
for (int i = 0; i < row; i++) {
if (board[i][1] == board[i][2] && board[i][2]==board[i][0] && board[i][1] != ' ') {
return board[i][1];
}
}
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][2] == board[1][1] && board[1][1]== board[2][0] && board[0][2] != ' ') {
return board[0][2];
}
if (board[0][0] == board[1][1] && board[1][1]== board[2][2] && board[2][2] != ' ')
{
return board[2][2];
}
if (Isfull(board, ROW, COL)) {
return 'Q';
}
else
return 'C';
}
static int Isfull(char board[ROW][COL], int row, int col) {
for (int i = 0; i < row; i++) {
for (int j = 0; j < col; j++) {
if (board[i][j] == ' ')
return 0;
}
}
return 1;
}
7.主函数
int main() {
int input;
srand((unsigned int)time(NULL));
do {
menu();
scanf("%d", &input);
switch (input) {
case 1:game(); break;
case 0:printf("退出游戏"); break;
default:printf("输入错误,请重新输入!\n"); break;
}
} while (input);
return 0;
}
8.game函数
void game() {
char board[ROW][COL];
initmenu(board, ROW, COL);
displaymenu(board, ROW, COL);
char ret = 0;
while (1) {
palyermove(board, ROW, COL);
displaymenu(board, ROW, COL);
char ret=iswin(board, ROW, COL);
if (ret == '*')
printf("玩家赢\n");
if (ret == '#')
printf("电脑赢\n");
if (ret == 'Q')
printf("平局\n");
if(ret!= 'C')
break;
computremove(board, ROW, COL);
displaymenu(board, ROW, COL);
ret = iswin(board, ROW, COL);
if (ret == '*')
printf("玩家赢\n");
if (ret == '#')
printf("电脑赢\n");
if (ret == 'Q')
printf("平局\n");
if (ret != 'C')
break;
}
}