我的编程空间,编程开发者的网络收藏夹
学习永远不晚

怎么利用C语言实现AI五子棋游戏

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

怎么利用C语言实现AI五子棋游戏

本篇内容介绍了“怎么利用C语言实现AI五子棋游戏”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

目录
  • 一.如何实现

  • 二.实现代码及分析

    • (1)菜单的制作

    • (2)棋盘的初始化和打印

    • (3)玩家下子

    • (4)电脑下子

    • (5)判断输赢

  • 三.整个代码

    • (1)test.c文件下代码:

    • (2)game.c下的代码

    • (3)game.h下的代码

  • 四.具体效果

    • 棋盘打印以及选择先后手

    • 玩家和电脑下子

    • 判断输赢

一.如何实现

说明:由于本文只是对初学C语言的人学习,所以将不会涉及任何算法,电脑将采用随机下子的方式。(后期会为大家介绍Alpha-Beta剪枝算法实现人工智能AI)

主要部分:

(1)菜单

(2)打印棋盘

(3)玩家下子

(4)电脑下子

(5)判断输赢

二.实现代码及分析

(1)菜单的制作

怎么利用C语言实现AI五子棋游戏

怎么利用C语言实现AI五子棋游戏

运用do…while循环调用菜单,根据用户选择实现玩游戏和退出游戏

(2)棋盘的初始化和打印

棋盘采用标准的15*15的格子,我们可以宏定义ROW和COL分别为15和15来表示行和列。

怎么利用C语言实现AI五子棋游戏

分别封装两个函数对棋盘进行初始化和打印

初始化:(这里将棋盘初始化为空格,可初始化为其他)

怎么利用C语言实现AI五子棋游戏

打印棋盘:

怎么利用C语言实现AI五子棋游戏

效果如下:

怎么利用C语言实现AI五子棋游戏

(3)玩家下子

void PlayerMove(char board[ROW][COL], int row, int col) {int x, y;while (1) {printf("玩家走:\n");printf("请输入坐标:\n");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] = 'O';break;}else {printf("坐标被占用,请重新输入\n");}}else {printf("坐标非法,请重新输入\n");}}}

玩家下子主要采用的思路是,判断棋盘上是否有子,已经输入的坐标是否合法。

(4)电脑下子

void ComputerMove(char board[ROW][COL], int row, int col) {int x, y;printf("电脑走\n");while (1) {x = rand() % row;y = rand() % col;if (board[x][y] == ' ') {board[x][y] = 'X';break;}}}

与玩家下子相同,此处采用的随机下子,后期可进行优化(比如:极大极小值算法、Alpha-Beta剪枝算法等)

(5)判断输赢

通过遍历整个棋盘,观察是否有连五子情况出现,代码如下:

char iswin(char board[ROW][COL], int row, int col) {//行int ren=0,dian=0,i,j;for (i = 0;i < row;i++) {ren = 0;for (j = 0;j < col;j++) {if (board[i][j] == 'O')ren++;elseren = 0;if (ren >= 5)return 'o';}}for (i = 0;i < row;i++) {dian = 0;for (j = 0;j < col;j++) {if (board[i][j] == 'X')dian++;elsedian = 0;if (dian >= 5)return 'x';}}//列ren = dian = 0;for (i = 0;i < row;i++) {ren = 0;for (j = 0;j < col;j++) {if (board[j][i] == 'O')ren++;elseren = 0;if (ren >= 5)return 'o';}}for (i = 0;i < row;i++) {dian = 0;for (j = 0;j < col;j++) {if (board[j][i] == 'X')dian++;elsedian = 0;if (dian >= 5)return 'x';}}//右下ren = dian =i=j= 0;for (int k = 0;k < row;k++) {i = k;j = 0;ren = 0;while (i < row && j < col) {if (board[i][j] == 'O') {ren++;}else {ren = 0;}i++;j++;if (ren >= 5)return 'o';}}i = j = 0;for (int k = 0;k < row;k++) {i = k;j = 0;dian = 0;while (i < row && j < col) {if (board[i][j] == 'X') {dian++;}elsedian = 0;i++;j++;if (dian >= 5)return 'x';}}//右上for (int k = row;k >=0;k--) {j = col;i = k;ren = 0;while (i >=0 && j >=0) {if (board[i][j] == 'O') {ren++;}elseren = 0;i--;j--;if (ren >= 5)return 'o';}}for (int k = row;k >= 0;k--) {i = k;j = col;dian = 0;while (i >= 0 && j >= 0) {if (board[i][j] == 'X') {dian++;}elsedian = 0;i--;j--;if (dian >= 5)return 'o';}}for (int k = row;k >= 0;k--) {i = k;j = 0;dian = 0;while (i >= 0 && j <col) {if (board[i][j] == 'O') {dian++;}elsedian = 0;i--;j++;if (dian >= 5)return 'o';}}for (int k = row;k >= 0;k--) {i = k;j = 0;dian = 0;while (i >= 0 && j <col) {if (board[i][j] == 'X') {dian++;}elsedian = 0;i--;j++;if (dian >= 5)return 'x';}}for (int k = 0;k < row;k++) {i = k;j = col;dian = 0;while (i < row && j >= 0) {if (board[i][j] == 'O') {dian++;}elsedian = 0;i++;j--;if (dian >= 5)return 'o';}}for (int k = 0;k <row;k++) {i = k;j = col;dian = 0;while (i <row && j >= 0) {if (board[i][j] == 'X') {dian++;}elsedian = 0;i++;j--;if (dian >= 5)return 'x';}}for (int k = row;k >= 0;k--) {i = k;j = 0;dian = 0;while (i >= 0 && j <col) {if (board[i][j] == 'O') {dian++;}elsedian = 0;i--;j++;if (dian >= 5)return 'o';}}for (int k = row;k >= 0;k--) {i = k;j = 0;dian = 0;while (i >= 0 && j <col) {if (board[i][j] == 'X') {dian++;}elsedian = 0;i--;j++;if (dian >= 5)return 'x';}}for (int k = 0;k < row;k++) {i = k;j = col;dian = 0;while (i < row && j >= 0) {if (board[i][j] == 'O') {dian++;}elsedian = 0;i++;j--;if (dian >= 5)return 'o';}}for (int k = 0;k <row;k++) {i = k;j = col;dian = 0;while (i <row && j >= 0) {if (board[i][j] == 'X') {dian++;}elsedian = 0;i++;j--;if (dian >= 5)return 'x';}}return 'c';//左}

三.整个代码

(1)test.c文件下代码:

#define _CRT_SECURE_NO_WARNINGS 1#include"game.h"void menu() {printf("**************************\n");printf("******* 1. play  *********\n");printf("******* 0. exit  *********\n");printf("**************************\n");}void game() {//棋盘数组char board[ROW][COL],ret;//初始化棋盘InitBoard(board, ROW, COL);//打印棋盘PrintBoard(board, ROW, COL);//下棋int a;printf("1.先手 0.后手");scanf("%d", &a);if(a==1)PlayerMove(board, ROW, COL);elseComputerMove(board, ROW, COL);while (1) {if (a == 0) {//PlayerMove(board, ROW, COL);PlayerMove(board, ROW, COL);PrintBoard(board, ROW, COL);ret=iswin(board, ROW, COL);if (ret != 'c') {break;}//ComputerMove(board, ROW, COL);ComputerMove(board, ROW, COL);PrintBoard(board, ROW, COL);ret = iswin(board, ROW, COL);if (ret != 'c') {break;}}else {//ComputerMove(board, ROW, COL);ComputerMove(board, ROW, COL);PrintBoard(board, ROW, COL);ret = iswin(board, ROW, COL);if (ret != 'c') {break;}//PlayerMove(board, ROW, COL);PlayerMove(board, ROW, COL);PrintBoard(board, ROW, COL);ret = iswin(board, ROW, COL);if (ret != 'c') {break;}}}if (ret == 'o')printf("玩家赢\n");else if (ret == 'x')printf("电脑赢\n");elseprintf("平局\n");}int main() {int input;srand((unsigned int)time(NULL));do {menu();scanf("%d", &input);switch (input) {case 1:game();break;case 0:printf("退出游戏\n");break;default:printf("选择错误\n");break;}} while (input);return 0;}

(2)game.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 PrintBoard(char board[ROW][COL], int row, int col) {for (int i = 0;i < row;i++) {printf("  ");printf("%2d", i+1);}printf("\n");for (int i = 0;i < row;i++) {//打印数据printf("%2d", i + 1);for (int j = 0;j < col;j++) {printf(" %c ", board[i][j]);if (j < col - 1)printf("|");}printf("\n");//打印分割行if (i < row - 1) {printf("  ");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) {int x, y;while (1) {printf("玩家走:\n");printf("请输入坐标:\n");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] = 'O';break;}else {printf("坐标被占用,请重新输入\n");}}else {printf("坐标非法,请重新输入\n");}}}void ComputerMove(char board[ROW][COL], int row, int col) {int x, y;printf("电脑走\n");while (1) {x = rand() % row;y = rand() % col;if (board[x][y] == ' ') {board[x][y] = 'X';break;}}}char iswin(char board[ROW][COL], int row, int col) {//行int ren=0,dian=0,i,j;for (i = 0;i < row;i++) {ren = 0;for (j = 0;j < col;j++) {if (board[i][j] == 'O')ren++;elseren = 0;if (ren >= 5)return 'o';}}for (i = 0;i < row;i++) {dian = 0;for (j = 0;j < col;j++) {if (board[i][j] == 'X')dian++;elsedian = 0;if (dian >= 5)return 'x';}}//列ren = dian = 0;for (i = 0;i < row;i++) {ren = 0;for (j = 0;j < col;j++) {if (board[j][i] == 'O')ren++;elseren = 0;if (ren >= 5)return 'o';}}for (i = 0;i < row;i++) {dian = 0;for (j = 0;j < col;j++) {if (board[j][i] == 'X')dian++;elsedian = 0;if (dian >= 5)return 'x';}}//右下ren = dian =i=j= 0;for (int k = 0;k < row;k++) {i = k;j = 0;ren = 0;while (i < row && j < col) {if (board[i][j] == 'O') {ren++;}else {ren = 0;}i++;j++;if (ren >= 5)return 'o';}}i = j = 0;for (int k = 0;k < row;k++) {i = k;j = 0;dian = 0;while (i < row && j < col) {if (board[i][j] == 'X') {dian++;}elsedian = 0;i++;j++;if (dian >= 5)return 'x';}}//右上for (int k = row;k >=0;k--) {j = col;i = k;ren = 0;while (i >=0 && j >=0) {if (board[i][j] == 'O') {ren++;}elseren = 0;i--;j--;if (ren >= 5)return 'o';}}for (int k = row;k >= 0;k--) {i = k;j = col;dian = 0;while (i >= 0 && j >= 0) {if (board[i][j] == 'X') {dian++;}elsedian = 0;i--;j--;if (dian >= 5)return 'o';}}for (int k = row;k >= 0;k--) {i = k;j = 0;dian = 0;while (i >= 0 && j <col) {if (board[i][j] == 'O') {dian++;}elsedian = 0;i--;j++;if (dian >= 5)return 'o';}}for (int k = row;k >= 0;k--) {i = k;j = 0;dian = 0;while (i >= 0 && j <col) {if (board[i][j] == 'X') {dian++;}elsedian = 0;i--;j++;if (dian >= 5)return 'x';}}for (int k = 0;k < row;k++) {i = k;j = col;dian = 0;while (i < row && j >= 0) {if (board[i][j] == 'O') {dian++;}elsedian = 0;i++;j--;if (dian >= 5)return 'o';}}for (int k = 0;k <row;k++) {i = k;j = col;dian = 0;while (i <row && j >= 0) {if (board[i][j] == 'X') {dian++;}elsedian = 0;i++;j--;if (dian >= 5)return 'x';}}return 'c';//左}

(3)game.h下的代码

#pragma once#define ROW 15#define COL 15#include<stdio.h>#include<stdlib.h>#include<time.h>//初始化棋盘void InitBoard(char board[ROW][COL], int row, int col);//打印棋盘void PrintBoard(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);

四.具体效果

1.棋盘打印以及选择先后手

怎么利用C语言实现AI五子棋游戏

2.玩家和电脑下子

怎么利用C语言实现AI五子棋游戏

3.判断输赢

怎么利用C语言实现AI五子棋游戏

此处我们看到玩家赢了,可是电脑实在太蠢了,所以还有很多地方需要添加的

“怎么利用C语言实现AI五子棋游戏”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

怎么利用C语言实现AI五子棋游戏

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

怎么利用C语言实现AI五子棋游戏

本篇内容介绍了“怎么利用C语言实现AI五子棋游戏”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!目录一.如何实现二.实现代码及分析(1)菜单的
2023-06-20

怎么用C语言实现五子棋游戏

这篇文章主要介绍“怎么用C语言实现五子棋游戏”,在日常操作中,相信很多人在怎么用C语言实现五子棋游戏问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么用C语言实现五子棋游戏”的疑惑有所帮助!接下来,请跟着小编
2023-06-20

使用C语言实现五子棋游戏

这篇文章主要为大家详细介绍了使用C语言实现五子棋游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
2022-11-13

怎么用C语言实现简单五子棋游戏

这篇文章主要介绍“怎么用C语言实现简单五子棋游戏”,在日常操作中,相信很多人在怎么用C语言实现简单五子棋游戏问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么用C语言实现简单五子棋游戏”的疑惑有所帮助!接下来
2023-06-25

怎么用C语言实现简单五子棋小游戏

这篇文章主要讲解了“怎么用C语言实现简单五子棋小游戏”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么用C语言实现简单五子棋小游戏”吧!本文实例为大家分享了C语言实现简单五子棋小游戏的具体代
2023-06-20

C语言五子棋小游戏实现代码

这篇文章主要为大家详细介绍了C语言五子棋小游戏实现代码,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
2022-11-13

如何使用C语言实现五子棋小游戏

这篇文章主要介绍如何使用C语言实现五子棋小游戏,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!需要的数据:(全局)1、定义棋盘二维数组 15* 15 空位置 * 2、定义棋子角色变量 白棋为 $ 黑棋为 @ 3
2023-06-20

Python游戏开发怎么用graphics实现AI五子棋

本篇内容介绍了“Python游戏开发怎么用graphics实现AI五子棋”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!效果展示源码impor
2023-06-25

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录