c语言五子棋

下面是一个简单的C语言五子棋实现示例:

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #define BOARD_SIZE 15
  4. char board[BOARD_SIZE][BOARD_SIZE];
  5. void init_board() {
  6.     int i, j;
  7.     for (i = 0; i < BOARD_SIZE; i++) {
  8.         for (j = 0; j < BOARD_SIZE; j++) {
  9.             board[i][j] = '-';
  10.         }
  11.     }
  12. }
  13. void print_board() {
  14.     int i, j;
  15.     printf("\n");
  16.     for (i = 0; i < BOARD_SIZE; i++) {
  17.         for (j = 0; j < BOARD_SIZE; j++) {
  18.             printf("%c ", board[i][j]);
  19.         }
  20.         printf("\n");
  21.     }
  22. }
  23. int check_win() {
  24.     int i, j, count;
  25.     // check horizontal
  26.     for (i = 0; i < BOARD_SIZE; i++) {
  27.         for (j = 0; j < BOARD_SIZE - 4; j++) {
  28.             if (board[i][j] == board[i][j + 1] && board[i][j] == board[i][j + 2] && board[i][j] == board[i][j + 3] && board[i][j] == board[i][j + 4]) {
  29.                 return 1;
  30.             }
  31.         }
  32.     }
  33.     // check vertical
  34.     for (i = 0; i < BOARD_SIZE - 4; i++) {
  35.         for (j = 0; j < BOARD_SIZE; j++) {
  36.             if (board[i][j] == board[i + 1][j] && board[i][j] == board[i + 2][j] && board[i][j] == board[i + 3][j] && board[i][j] == board[i + 4][j]) {
  37.                 return 1;
  38.             }
  39.         }
  40.     }
  41.     // check diagonals
  42.     for (i = 0; i < BOARD_SIZE - 4; i++) {
  43.         for (j = 0; j < BOARD_SIZE - 4; j++) {
  44.             if (board[i][j] == board[i + 1][j + 1] && board[i][j] == board[i + 2][j + 2] && board[i][j] == board[i + 3][j + 3] && board[i][j] == board[i + 4][j + 4]) {
  45.                 return 1;
  46.             }
  47.             if (board[i][j] == board[i + 1][j - 1] && board[i][j] == board[i + 2][j - 2] && board[i][j] == board[i + 3][j - 3] && board[i][j] == board[i + 4][j - 4]) {
  48.                 return 1;
  49.             }
  50.         }
  51.     }
  52.     return 0;
  53. }
  54. int main() {
  55.     int i, j, turn, count;
  56.     init_board();
  57.     turn = 0;  // white's turn first
  58.     while (!check_win()) {
  59.         printf("It's %s's turn. Input the position (row column) you want to drop the stone. Enter q to quit.\n", (turn == 0) ? "white" : "black");
  60.         scanf("%d %d", &i, &j);
  61.         if (board[i][j] != '-') {
  62.             printf("Error: the position is already occupied.\n");

}

    // check anti-diagonals

    for (i = 0; i < BOARD_SIZE - 4; i++) {

        for (j = 4; j < BOARD_SIZE; j++) {

            if (board[i][j] == board[i + 1][j - 1] && board[i][j] == board[i + 2][j - 2] && board[i][j] == board[i + 3][j - 3] && board[i][j] == board[i + 4][j - 4]) {

                return 1;

            }

        }

    }

    return 0;

}

void game_over() {

    printf("Game over!\n");

    print_board();

    exit(0);

}

int main() {

    int i, j, turn = 0;

    init_board();

    while (1) {

        print_board();

        if (check_win()) {

            game_over();

        }

        if (turn % 2 == 0) {

            printf("Player 1, make your move (row col): ");

        } else {

            printf("Player 2, make your move (row col): ");

        }

        scanf("%d %d", &i, &j);

        if (i < 0 || i >= BOARD_SIZE || j < 0 || j >= BOARD_SIZE) {

            printf("Invalid move!\n");

            continue;

        }

        if (board[i][j] != '-') {

            printf("Invalid move! The position is already occupied.\n");

            continue;

        }

        board[i][j] = (turn % 2 == 0) ? 'X' : 'O';

        turn++;

    }

    return 0;

}

上面的代码实现了一个简单的五子棋游戏,但是还有一些可以改进的地方。以下是一些建议:

  1. 添加游戏规则的说明:在游戏开始前,可以打印出游戏规则,让玩家知道如何进行游戏。
  2. 改进输入验证:在读入玩家输入的时候,可以使用更严谨的验证方法,以确保玩家输入的是合法的位置。
  3. 添加提示信息:当玩家落子后,可以输出一些提示信息,例如告诉玩家他们的棋子已经胜利了或者游戏已经结束了。
  4. 添加AI对手:可以使用简单的AI算法来让计算机自动进行游戏,这样玩家就可以和计算机进行对战了。
  5. 优化界面:可以使用图形界面来增强游戏的体验,例如使用GUI库来显示游戏板面和菜单等。
  6. 增加难度等级:可以添加多个难度等级,让玩家可以选择不同难度的对手进行对战。
  7. 保存游戏进度:可以让玩家随时保存和恢复游戏进度,以便他们在需要离开时能够继续游戏。
  8. 添加多人对战:可以添加多人对战模式,让多个玩家可以在同一台计算机上进行对战。
  9. 优化算法:可以使用更高效的算法来检查游戏是否结束,以提高游戏的性能。
  10. 添加声音效果:可以使用声音效果来增强游戏的体验,例如在玩家获胜时播放欢快的音乐。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/224904.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

“2024京津冀人工智能大会”推动京津冀人工智能产业快速发展

作为全球科技创新的前沿阵地&#xff0c;北京的人工智能产业近年来得到了迅速发展。在京津冀地区&#xff0c;人工智能产业已经成为了一个热点领域&#xff0c;产业规模和创新能力在全国居于领先地位。在这个背景下&#xff0c;2024北京国际人工智能展览会&#xff08;简称:世亚…

Sql Server 2017主从配置之:AlwaysOn高可用

AlwaysOn高可用功能&#xff0c;真正实现了数据库的灾备切换、高可用。 AlwaysOn通过Windows Server故障转移群集&#xff0c;部署高可用数据库组。 在故障转移群集基础上完成部署读写分离&#xff0c;只读负载平衡最多3个写入节点实现故障转移最多3个数据实时同步节点 环境…

MySQL 8创建数据库、数据表、插入数据并且查询数据

我使用的数据库是MySQL 8。 创建数据库 create database Bookbought; -- 创建数据库Bookbought use Bookbought; -- 使用数据库Bookbought创建数据表 创建用户表bookuser。 create table ## 往allbook里边插入数据(id INT PRIMARY KEY AUTO_INCREMENT, -- id 为 主键userna…

什么是https加密协议,相比http的好处在哪?

先了解什么是http HTTP&#xff08;Hypertext Transfer Protocol&#xff09;是一种用于在计算机网络上传输超文本的应用层协议。它是一种无状态的、无连接的协议&#xff0c;通常用于在Web浏览器和服务器之间传输HTML页面、图片、音频、视频以及其他数据资源。 以下是HTTP的…

圆通单号查询,圆通速递物流查询,对需要的单号进行颜色标记

批量查询圆通速递单号的物流信息&#xff0c;并对需要的单号进行颜色标记。 所需工具&#xff1a; 一个【快递批量查询高手】软件 圆通速递单号若干 操作步骤&#xff1a; 步骤1&#xff1a;运行【快递批量查询高手】软件&#xff0c;第一次使用的伙伴记得先注册&#xff0c…

249:vue+openlayers 经纬度坐标转化为地址信息,点击后在弹窗显示

第249个 点击查看专栏目录 本示例是演示如何在vue+openlayers项目中点击某点,转化经纬度坐标为地址信息,弹窗显示。 通过点击地图,获取到经纬度坐标,然后通过调取mapbox的地址转换API,将经纬度坐标转化为地址信息,通过overlay的方式,在弹窗中展示出来。 直接复制下面的…

API接口使用方法(封装好的电商平台)

为了进行此平台API的调用&#xff0c;首先我们需要做下面几件事情。 1、 获取一个KEY。 点击获取 2、 参考API文档里的接入方式和示例。 3、查看测试工具是否有需要的接口&#xff0c;响应实例的返回字段是否符合参数要求。 4、利用平台的文档中心和API测试工具&#xff0c…

可视化监控云平台/智能监控平台EasyCVR国标设备开启音频没有声音是什么原因?

视频云存储/安防监控EasyCVR视频汇聚平台基于云边端智能协同&#xff0c;支持海量视频的轻量化接入与汇聚、转码与处理、全网智能分发、视频集中存储等。GB28181视频平台EasyCVR拓展性强&#xff0c;视频能力丰富&#xff0c;具体可实现视频监控直播、视频轮播、视频录像、云存…

从零开始的c语言日记day40——字符函数和字符串函数——内存函数

常用函数介绍 求字符串长度 strlen 长度不受限制的字符串函数 Strcpy Strcat strcmp 长度受限制的字符串函数介绍 strncpy strncat strncmp 字符串查找 Strstro strtok 错误信息报告 strerror 字符操作 内存操作函数 memcpy memmove memset Memcmp 使用Asser…

Vue学习计划-Vue2--VueCLi(一)准备工作,安装node、vuecli

1. 安装node 网址&#xff1a;https://nodejs.org/en下载LTS版本表示长期支持版本说明&#xff1a; node是一个基于Chrome V8引擎的javascript运行环境,让JavaScript 运行在服务端的开发平台vuecli创建的项目必须运行在node环境中&#xff0c;npm为node自带包管理工具&#xf…

100G光模块的选购技巧——帮助您节省数据中心成本

数据中心在确保信息的即时可用性和访问性方面扮演着至关重要的角色。随着数据呈指数级增长&#xff0c;数据中心运营商一直在积极寻求优化其基础设施和降低成本的有效途径。在数据中心这个复杂生态系统中&#xff0c;100G光模块是一个不可或缺的部分&#xff0c;它对于实现高速…

C#如何使用SqlSugar操作MySQL/SQL Server数据库

一. SqlSugar 连接MySQL数据库 public class MySqlCNHelper : Singleton<MySqlCNHelper>{public static SqlSugarClient CnDB;public void InitDB() {//--------------------MySQL--------------------CnDB new SqlSugarClient(new ConnectionConfig(){ConnectionString…

【C++11(二)】lambda表达式以及function包装器

&#x1f493;博主CSDN主页:杭电码农-NEO&#x1f493;   ⏩专栏分类:C从入门到精通⏪   &#x1f69a;代码仓库:NEO的学习日记&#x1f69a;   &#x1f339;关注我&#x1faf5;带你学习C   &#x1f51d;&#x1f51d; C11 1. 前言2. lambda表达式的提出3. lambda表达…

STM32F1定时器TIM

目录 1. TIM&#xff08;Timer&#xff09;定时器 2. 定时器类型 2.1 基本定时器框图 2.2 通用定时器框图 2.3 高级定时器框图 3. 定时器代码 3.1 恢复缺省配置 3.2 时基单元初始化 3.3 结构体变量附一个默认值 3.4 使能计数器 3.5 使能中断输出信号 3.…

Office Tool Plus 使用教程 让个人也能轻松使用上免费的Office

&#x1f680; 个人主页 极客小俊 ✍&#x1f3fb; 作者简介&#xff1a;web开发者、设计师、技术分享博主 &#x1f40b; 希望大家多多支持一下, 我们一起学习和进步&#xff01;&#x1f604; &#x1f3c5; 如果文章对你有帮助的话&#xff0c;欢迎评论 &#x1f4ac;点赞&a…

网络安全(四)--Linux 主机防火墙

7.1. 介绍 防火墙&#xff08;Firewall&#xff09;&#xff0c;也称防护墙&#xff0c;是由Check Point创立者Gil Shwed于1993年发明并引入国际互联网&#xff08;US5606668&#xff08;A&#xff09;1993-12-15&#xff09;。 它是一种位于内部网络与外部网络之间的网络安全…

Unity中Batching优化的动态合批

文章目录 前言一、动态合批的规则1、材质相同是合批的前提&#xff0c;但是如果是材质实例的话&#xff0c;则一样无法合批。2、支持不同网格的合批3、动态合批需要网格支持的顶点条件二、我们导入一个模型并且制作一个Shader&#xff0c;来测试动态合批1、我们选择模型的 Mesh…

第十一节HarmonyOS 常用容器组件2-List和Grid

一、List列表组件的使用 1、简介 List是很常见的滚动类容器组件&#xff0c;一般和子组件ListItem一起使用&#xff0c;List列表中每一个列表项对应一个ListItem组件。 2、List组件使用ForEeach渲染列表 一个列表往往由多个相似的Item项组成&#xff0c;所以一个List组件中包含…

​Python Flask库:web开发神器

概要&#xff1a; Python是一种广泛应用的编程语言&#xff0c;它在Web开发领域中有着丰富的库和框架。其中&#xff0c;Flask是一款轻量级的Web应用框架&#xff0c;它简单而灵活&#xff0c;适用于从简单的静态网页到复杂的Web应用的开发。本文将详细介绍使用Python Flask库…

SpringBoot 项目 Jar 包加密,防止反编译

1场景 最近项目要求部署到其他公司的服务器上&#xff0c;但是又不想将源码泄露出去。要求对正式环境的启动包进行安全性处理&#xff0c;防止客户直接通过反编译工具将代码反编译出来。 2方案 第一种方案使用代码混淆 采用proguard-maven-plugin插件 在单模块中此方案还算简…
最新文章