用C语言实现三子棋,自己思路是先让以菜单的形式让玩家选择进入游戏或者退出。下棋时玩家以坐标的形式将棋子放在定义的二维数组里,用o表示,电脑用随机函数将棋子放入棋盘,用x表示。每次玩家和电脑放入后都判断是否已经满足规则。
1、首先设计菜单,编写主函数。
#include "game.h"
void menu() //菜单
{
printf("###############################\n");
printf("############1.Play#############\n");
printf("############2.Exit#############\n");
}
int main()
{
int c=0;
do{ //用循环的形式便于玩家选择进入游戏或者退出游戏
menu();
scanf_s("%d", &c);
switch (c) //用switch语句来实现进入游戏或者退出游戏
{
case 1:
game();
break;
case 2:
exit(0);
default:
printf("Select error!!!\n");
}
} while (1);
system("pause");
return 0;
}
2.编写头文件,是函数调用方便,程序主体更加整齐
#ifndef __GAME_H_
#define __GAME_H_
#include <stdio.h>
#include <windows.h>
#include <stdlib.h>
#include <time.h>
#define ROW 3 //数组的行
#define COL 3 //数组的列
void game();
#pragma warning(disable:4996)
#endif3.编写游戏函数,程序的灵魂。
#include "game.h"
static void displayBoard(char board[][COL], int row) //用来显示棋盘的函数
{
int i = 0;
for (; i < row; i++)
{
printf(" %c | %c | %c \n", board[i][0], board[i][1], board[i][2]);
if (i < row - 1)
{
printf("---|---|---\n");
}
}
}
static void playerMove(char board[][COL], int row) //玩家放棋子函数
{
int x, y;
do{
printf("Please Enter (x,y)\n");
scanf("%d%d", &x,&y);
if (x >= 1 && x <= 3 && y >= 1 && y <= 3) //防止棋子落入棋盘外
{
if (board[x-1][y-1] == ' ') //判断数组(棋盘)是否为空
{
board[x - 1][y - 1] = 'o'; //以o来表示玩家的棋子
break;
}
else
{
printf("Please Try Another Place\n ");
break;
}
}
else
{
printf("Please Enter Right Place\n");
}
} while (1);
}
static void compMove(char board[][COL], int row) //电脑移动
{
srand((unsigned long)time(NULL)); //产生一个随机数
do{
int x = rand() % ROW; //使随机数在坐标范围内
int y = rand() % COL; //使随机数在坐标范围内
if (board[x][y] = ' '&&board[x][y]!='o') //判断此位置是否已经被占
{
board[x][y] = 'x'; //用x表示电脑棋子
break;
}
} while (1);
}
static int isfull(char board[][COL], int row) //判断是棋盘否下满的函数
{
int i = 0;
for (; i < ROW; i++)
{
int j = 0;
for (; j < COL; j++)
{
if (board[i][j] == ' ') //棋盘内有空格则表示未下满
{
return 0;
}
}
}
return 1;
}
static char isWin(char board[][COL], int row) //判断是否赢了的函数
{
int i = 0;
for (; i < ROW; i++) //判断行是否够三个
{
if (board[i][0] == board[i][1] && board[i][1] == board[i][2] && board[i][0]!=' ')
{
return board[i][1]; //返回够三个的棋子
}
}
for (; 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[0][0]!=' ') //判断右对角线是否够三个
{
return board[0][0];
}
if (board[2][0] == board[1][1] && board[1][1] == board[0][2] && board[2][0]!=' ') //判断左对角线是否够三个
{
return board[2][0];
}
if (isfull(board, row))
{
return 't'; //如果平局,返回t
}
return ' ';
}
void game()
{
char board[ROW][COL];
memset(board, ' ', ROW*COL); //将数组全部初始化为空格
char ret;
do{
system("CLS"); //清屏操作
displayBoard(board, COL); //显示棋盘
playerMove(board, COL); //玩家移动
system("CLS"); //继续清屏操作,使面板整洁
displayBoard(board, COL); //继续显示棋盘
ret = isWin(board, COL); //是否产生结果
if (ret!=' ')
{
break;
}
compMove(board, COL);
system("CLS");
displayBoard(board, COL);
ret = isWin(board, COL);
} while (ret==' ');
if (ret == 'o') //返回值为o则表示玩家赢了
{
printf("nice,you win\n");
}
else if (ret == 'x') //返回值为x则表示电脑赢了
{
printf("you lose,try again\n");
}
else if (ret == 't') //返回值为t则表示棋盘下满未产生输赢,平局
{
printf("平局\n");
}
}运行程序,其中x为电脑下的棋子,o为玩家下的棋子,很惭愧输给了电脑,哈哈

本文介绍了如何使用C语言实现一个简单的三子棋游戏。游戏通过菜单选择进行或退出,玩家和电脑交替下棋,棋子分别用o和x表示。在每次落子后,程序会检查游戏结束条件,包括横、竖、斜方向上连续三个棋子的情况。最终,作者分享了游戏的主函数、头文件和游戏逻辑函数的实现,并在实际运行中体验到与电脑对弈的乐趣。
4122

被折叠的 条评论
为什么被折叠?



