三子棋是一个简单的游戏,特别适合编程新手练习,这里我们就简单介绍一下c语言实现三子棋的过程。
—————————————————我是下划线——————————————
首先我们将函数分为两大部分。
一、三子棋游戏的主体部分—test.c
二、三子棋游戏的具体执行部分—-game.c
首先我们来介绍test.c
#define _CRT_SECURE_NO_WARNINGS
#include"game.h"
//打印开始界面的菜单函数
void menu()
{
printf("*****************************************\n");
printf("************欢迎来到三子棋游戏***********\n");
printf("******************请选择*****************\n");
printf("********* 1.进入游戏 0.退出 ************\n");
printf("*****************************************\n");
}
//三子棋游戏
void game()
{
//我们建立一个二维数组来建立棋盘
char board[ROW][COL];
int ret = 0;
//初始化二维数组
init(board, ROW, COL);
//打印棋盘
print(board,ROW,COL);
while (1)
{
//虽然电脑比较笨,但是我们先走
playermove(board, ROW, COL);
system("cls");
print(board, ROW, COL);
//判断输赢,不管玩家还是电脑每走一步都应该判断输赢
ret = iswin(board, ROW, COL);
if (ret == 1)
{
system("cls");
printf("\n恭喜你,获胜了!\n\n");
break;
}
if (ret != 0)
{
system("cls");
printf("\n平局\n\n");
break;
}
computermove(board, ROW, COL);
system("cls");
print(board, ROW, COL);
ret = iswin(board, ROW, COL);
if (ret == -1)
{
printf("\n很遗憾,电脑获胜。\n\n");
break;
}
if (ret != 0)
{
printf("\n平局\n\n");
break;
}
}
}
//以下是主函数
int main()
{
int input = 0;
srand(time(NULL)); //我们用时间作为电脑落字随机值的种子
do
{
menu();
scanf("%d", &input);
switch (input)
{
case 1:
game();
break;
case 0:
break;
default:
printf("选择错误,请重新选择:>\n");
break;
}
} while (input);
return 0;
}
以上就是test.c的具体实现过程。
接下来我们来介绍game函数的具体实现。
……..满脸黑线……….这么长,别怕,我们来一步一步分析
#define _CRT_SECURE_NO_WARNINGS
#include"game.h"
void init(char board[ROW][COL], int row, int col)
{
//meset函数的作用是将数组的元素重置
memset(board, ' ', row*col);
}
void print(char board[ROW][COL], int row, int col)
{
int i = 0;
//要打印带外框的棋盘,下面的这条直线就是盖子
printf(" ________ ________ ________\n");
for (i = 0; i < row; i++)
{
//下面的是棋盘第一行的格子
printf("| | | |\n");
printf("| %c | %c | %c |\n", \
board[i][0], board[i][1], board[i][2]);
printf("| | | |\n");
for (j = 0; j < col; j++)
{
printf("|________");
}
printf("|\n");
}
}
void computermove(char board[ROW][COL], int row, int col)
{
printf("\n电脑走:>\n");
int x = 0;
int y = 0;
do
{
int x = rand() % row; //小于row的随机数
int y = rand() % col;
if (board[x][y] == ' ')
{
board[x][y] = '*';
break;
}
} while (board[x][y] != ' ');
}
void playermove(char board[ROW][COL], int row, int col)
{
int m = 0;
int n = 0;
do
{
printf("请输入坐标:>\n");
scanf("%d%d", &m, &n);
//输入的坐标必须是空格才能落子
if (board[m - 1][n - 1] == ' ')
{
board[m - 1][n - 1] = 'o';
break;
}
else
{
printf("输入的坐标非法,请重新输入!\n");
}
} while (board[m - 1][n - 1] != ' ');
}
//判断输赢无非就是罗列各种情况,这里不再赘述
int iswin(char board[ROW][COL], int row, int col)
{
int m = 0;
for (m = 0; m < ROW; m++)
{
if (board[m][0] == 'o'&&board[m][1] == 'o'&&board[m][2] == 'o')
{
return 1;
}
else if (board[0][m] == 'o'&&board[1][m] == 'o'&&board[2][m] == 'o')
{
return 1;
}
}
if (board[0][0] == 'o'&&board[1][1] == 'o'&&board[2][2] == 'o'\
|| board[0][2] == 'o'&&board[1][1] == 'o'&&board[2][0] == 'o')
{
return 1;
}
int n = 0;
for (n = 0; n < ROW; n++)
{
if (board[n][0] == '*'&&board[n][1] == '*'&&board[n][2] == '*')
{
return -1;
}
else if (board[0][n] == '*'&&board[1][n] == '*'&&board[2][n] == '*')
{
return -1;
}
}
if (board[0][0] == '*'&&board[1][1] == '*'&&board[2][2] == '*'\
|| board[0][2] == '*'&&board[1][1] == '*'&&board[2][0] == '*')
{
return -1;
}
//遍历棋盘。如果没有空格说明棋盘下满,平局
int i = 0;
for (i = 0; i < ROW; i++)
{
int j = 0;
for (j = 0; j < COL; j++)
{
if (board[i][j] == ' ')
{
return 0;
}
}
}
}
以上就是三字棋实现的,,,不,还没完,还有头文件
#pragma once
#ifndef __GAME_H__
#define __GAME_H__
#define ROW 3
#define COL 3
#include
#include
#include
#include
void init(char board[ROW][COL], int row, int col);
void print(char board[ROW][COL], int row, int col);
void computermove(char board[ROW][COL], int row, int col);
void playermove(char board[ROW][COL], int row, int col);
int iswin(char board[ROW][COL], int row, int col);
#endif
嗯嗯,这次完整了,以上就是三子棋具体的实现过程,,但是写完之后还觉得有一些第方不太完善,比如电脑根据随机数落字真的太机械,我们可以考虑各种情况加到函数里,让电脑更聪明一些,这里就不在叙述,等日后学习更加深入,我们再考虑这些问题。