用C语言写小游戏之三子棋
前言
本文呢将会手把手教大家用c语言来写一个小程序去实现一个简单的三子棋游戏
一、三子棋游戏的大致思路
1.建立棋盘的逻辑模型,这里用二维数组来实现
2.并初始化棋盘
3.打印棋盘
4.玩家落子
5.打印玩家洛子之后的棋盘
6.判断输赢
7.电脑落子,这里我们使用电脑随机洛子(即人工智障)
8.打印电脑洛子之后的棋盘
9.判断输赢
二、具体实现步骤
1.建立棋盘的逻辑模型,这里用二维数组来实现。
代码如下:
char chess[MAX_ROW][MAX_COL];
2.初始化棋盘
代码如下:
void init(char chess[MAX_ROW][MAX_COL]) {
for (int row = 0; row < MAX_ROW; row++) {
for (int col = 0; col < MAX_COL; col++) {
chess[row][col] = ' ';
}
}
}
该处使用二重循环来对数组初始化。
3.打印棋盘
代码如下:
void printChess(char chess[MAX_ROW][MAX_COL]) {
for (int row=0; row < MAX_ROW; row++) {
printf("+-+-+-+\n");
printf("|");
for (int col = 0; col < MAX_COL; col++) {
printf("%c|", chess[row][col]);
}
printf("\n");
}
printf("+-+-+-+\n");
}
4.玩家落子
代码如下:
void putChess(char chess[MAX_ROW][MAX_COL]) {
printf("请落子...\n");
int row, col;
while (1) {
scanf("%d,%d", &row, &col);
if (chess[row][col] == ' '&&row<3&&row>=0&&col<3&&col>=0) {
chess[row][col] = 'x';
break;
}
printf("请重新落子...\n");
}
}
5.打印玩家洛子之后的棋盘
代码如下:
putChess(chess);
6.判断输赢
代码如下:
int winnerIs(char chess[MAX_ROW][MAX_COL]) {
for (int row=0; row < MAX_ROW; row++) {
if (chess[row][0] == chess[row][1] && chess[row][1] == chess[row][2] && chess[row][1] != ' ') {
return 1;
}
}
for (int col = 0; col < MAX_COL; col++) {
if (chess[0][col] == chess[1][col] && chess[1][col] == chess[2][col]&&chess[1][col]!=' ') {
return 1;
}
}
if ((chess[1][1] == chess[0][2] && chess[0][2] == chess[2][0]&&chess[1][1]!=' ') || (chess[0][0] == chess[1][1] && chess[1][1] == chess[2][2] && chess[1][1] != ' ')) {
return 1;
}
return 0;
}
该处逻辑较为复杂,大致思路如下:
1.从第一行开始每一行全相等且不为空,则胜利
2.从第一列开始每一列全相等且不为空,则胜利
3.在两个对角线上的元素全相等且不为空,则胜利
4如果胜利则返回一个1,否则返回0
7.电脑落子
代码如下:
void compPut(char chess[MAX_ROW][MAX_COL]) {
printf("电脑洛子...\n");
while (1) {
int row = rand() % 3;
int col = rand() % 3;
if (chess[row][col] != 'x'&& chess[row][col] != 'o') {
chess[row][col] = 'o';
break;
}
}
}
8.判断输赢
代码如下:
int winnerIs(char chess[MAX_ROW][MAX_COL]) {
for (int row=0; row < MAX_ROW; row++) {
if (chess[row][0] == chess[row][1] && chess[row][1] == chess[row][2] && chess[row][1] != ' ') {
return 1;
}
}
for (int col = 0; col < MAX_COL; col++) {
if (chess[0][col] == chess[1][col] && chess[1][col] == chess[2][col]&&chess[1][col]!=' ') {
return 1;
}
}
if ((chess[1][1] == chess[0][2] && chess[0][2] == chess[2][0]&&chess[1][1]!=' ') || (chess[0][0] == chess[1][1] && chess[1][1] == chess[2][2] && chess[1][1] != ' ')) {
return 1;
}
return 0;
}
三、总代码
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#define MAX_ROW 3
#define MAX_COL 3
//棋盘初始化
char chess[MAX_ROW][MAX_COL];
void init(char chess[MAX_ROW][MAX_COL]) {
for (int row = 0; row < MAX_ROW; row++) {
for (int col = 0; col < MAX_COL; col++) {
chess[row][col] = ' ';
}
}
}
//打印棋盘
void printChess(char chess[MAX_ROW][MAX_COL]) {
for (int row=0; row < MAX_ROW; row++) {
printf("+-+-+-+\n");
printf("|");
for (int col = 0; col < MAX_COL; col++) {
printf("%c|", chess[row][col]);
}
printf("\n");
}
printf("+-+-+-+\n");
}
//玩家落子
void putChess(char chess[MAX_ROW][MAX_COL]) {
printf("请落子...\n");
int row, col;
while (1) {
scanf("%d,%d", &row, &col);
if (chess[row][col] == ' '&&row<3&&row>=0&&col<3&&col>=0) {
chess[row][col] = 'x';
break;
}
printf("请重新落子...\n");
}
}
//电脑落子
void compPut(char chess[MAX_ROW][MAX_COL]) {
printf("电脑洛子...\n");
while (1) {
int row = rand() % 3;
int col = rand() % 3;
if (chess[row][col] != 'x'&& chess[row][col] != 'o') {
chess[row][col] = 'o';
break;
}
}
}
//判断输赢
int winnerIs(char chess[MAX_ROW][MAX_COL]) {
for (int row=0; row < MAX_ROW; row++) {
if (chess[row][0] == chess[row][1] && chess[row][1] == chess[row][2] && chess[row][1] != ' ') {
return 1;
}
}
for (int col = 0; col < MAX_COL; col++) {
if (chess[0][col] == chess[1][col] && chess[1][col] == chess[2][col]&&chess[1][col]!=' ') {
return 1;
}
}
if ((chess[1][1] == chess[0][2] && chess[0][2] == chess[2][0]&&chess[1][1]!=' ') || (chess[0][0] == chess[1][1] && chess[1][1] == chess[2][2] && chess[1][1] != ' ')) {
return 1;
}
return 0;
}
int main() {
//使用‘o’表示玩家 使用‘x’表示电脑 使用‘ ’表示空格
//建立期盼逻辑模型并初始化棋盘
char chess[MAX_ROW][MAX_COL];
init(chess);
//打印棋盘
printChess(chess);
//玩家落子
while (1) {
int winner;
putChess(chess);
//再次打印棋盘
printChess(chess);
//判断输赢
//todo
winner = winnerIs(chess);
if (winner == 1) {
printf("恭喜你侥幸赢了\n");
break;
}
//电脑落子
compPut(chess);
//再次打印棋盘
printChess(chess);
//判断输赢
winner = winnerIs(chess);
if (winner == 1) {
printf("你个菜狗,你输了\n");
break;
}
}
}
总结
本文详细描述了三子棋游戏的C语言写法,欢迎大家批评指正。