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.mzph.cn/news/203862.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HarmonyOS4.0从零开始的开发教程09页签切换

HarmonyOS&#xff08;七&#xff09;页签切换 List组件和Grid组件的使用 Tabs组件的使用 概述 在我们常用的应用中&#xff0c;经常会有视图内容切换的场景&#xff0c;来展示更加丰富的内容。比如下面这个页面&#xff0c;点击底部的页签的选项&#xff0c;可以实现“首页…

CTF工控工业互联网(ISC)复现总结WP(超详细)

工业互联网复现 Modbus协议&#xff1a;MMS协议&#xff1a;ISC工业互联网比赛题目复现&#xff1a;Modbus协议分析&#xff1a;组态软件安全分析&#xff1a;工业协议分析1&#xff1a;工业协议分析2&#xff1a;特殊的工控流量&#xff1a; Modbus协议&#xff1a; Modbus 市…

JavaScript中的连续赋值问题a.x = a = {n:2}

输出以下代码的执行结果并解释为什么 var a {n: 1}; var b a; a.x a {n: 2}; console.log (a.x); console.log (b.x); 下面来分析下这段简单代码的工作步骤&#xff0c;从而进一步理解js引用类型“赋值”的工作方式。 首先第一行和第二行 var a {n:1}; var b a; …

JVM 命令行监控及诊断工具

面试题 你使用过Java虚拟机性能监控和故障处理工具吗&#xff1f;&#xff08;美图&#xff09; 怎么打出线程栈信息。&#xff08;字节跳动&#xff09; JVM诊断调优工具用过哪些&#xff1f; (京东) 怎么获取 Java 程序使用的内存&#xff1f;堆使用…

学生成绩管理系统(Java)

开发环境: Windows 11 IDEA 2021.3.3 需求: package com.it.neu;import java.util.ArrayList; import java.util.Scanner;import static java.time.Clock.system;class Student { //创建学生类private String Stu_name;private String Stu_id;public Student(String id, S…

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

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

【Java】实现顺序表基本的操作(数据结构)

文章目录 前言顺序表1、打印顺序表2、增加元素3、在任意位置增加元素4、判断是否包含某个元素5、查找某个元素对于的位置6、获取任意位置的元素7、将任意位置的元素设为value8、删除第一次出现的关键字9、获取顺序表长度10、清空顺序表总结 前言 在了解顺序表之前我们要先了解…

Kubernetes集群安装高可用postgresql

Kubernetes集群安装高可用postgresql Bitnami 提供的 postgresql-ha 解决方案是一个预配置的、高可用的 PostgreSQL 集群配置&#xff0c;通常部署在 Kubernetes 环境中。它使用了一些关键技术和组件来实现数据库的高可用性。&#xff0c;Bitnami postgresql-ha 主要采用以下构…

JVM 虚拟机(二)类的生命周期

类的声明周期描述了一个类加载、使用和卸载的整个过程。 一个类的声明周期包括五个阶段&#xff1a;加载、连接、初始化、使用、卸载&#xff0c;其中连接部分分为验证、准备和解析阶段。 加载阶段 加载阶段是第一步是类加载器根据类的全限定名通过不同的渠道以二进制流的方式…

区块链媒体:Web3.0时代的推广创新10爆款策略概览-华媒舍

随着Web3.0时代的到来&#xff0c;互联网推广正经历着一场创新的革命。在这个新的时代背景下&#xff0c;一系列全新的推广策略正在兴起&#xff0c;引领着市场的变革。本文将基于这一背景&#xff0c;为大家介绍Web3.0时代中的10大爆款推广策略概览。 1. 个性化推广 在Web3.0…

【MATLAB】SSA+FFT+HHT组合算法

有意向获取代码&#xff0c;请转文末观看代码获取方式~也可转原文链接获取~ 1 基本定义 SSAFFTHHT组合算法是一种基于奇异谱分析&#xff08;SSA&#xff09;、快速傅里叶变换&#xff08;FFT&#xff09;和希尔伯特-黄变换&#xff08;HHT&#xff09;的组合算法。 其中&am…

谈谈SQL的优化经验

目录 前言 表设计优化 索引优化 读写分离&#xff0c;主从复制优化 ​编辑sql语句优化 前言 SQL调优在项目中是比较常见的&#xff0c;SQL调优不仅仅包括SQL语句的编写&#xff0c;其中还应包括了数据库的表设计&#xff0c;数据库的配置架构&#xff08;主从复制&#xf…

pure::variants—产品平台化及变体管理工具

产品概述 pure::variants是德国pure-systems公司的产品&#xff0c;其目的是帮助企业实现对产品线的变体管理&#xff0c;提高企业项目资产的复用效率。pure::variants的核心理念是运用产品线管理方法对项目资产&#xff08;项目计划、需求、模型、功能模块、代码、测试用例&am…

如何将 MySQL 数据库转换为 SQL Server

本文解释了为什么组织希望将其 MySQL 数据库转换为 Microsoft SQL 数据库。本文接着详细介绍了尝试转换之前需要记住的事项以及所涉及的方法。专业的数据库转换器工具将帮助您快速将 MySQL 数据库记录转换为 MS SQL Server。 在继续之前&#xff0c;我们先讨论一下 MySQL 到 M…

Linux(centos)学习笔记(初学)

[rootlocalhost~]#:[用户名主机名 当前所在目录]#超级管理员标识 $普通用户的标识 Ctrlshift放大终端字体 Ctrl缩小终端字体 Tab可以补全命令 Ctrlshiftc/V复制粘贴 / &#xff1a;根目录&#xff0c;Linux系统起点 ls&#xff1a; #list列出目录的内容&#xff0c;通常用户查看…

单片机开发常用的软件构架

对于单片机程序来说&#xff0c;大家都不陌生&#xff0c;但是真正使用架构&#xff0c;考虑架构的恐怕并不多&#xff0c;随着程序开发的不断增多&#xff0c;架构是非常必要的。 一、时间片轮询法 介于前后台顺序执行法和操作系统之间的一种程序架构设计方案。该设计方案需能…

Modbus TCP工业RFID读写器的选型要点

Modbus TCP工业RFID读写器是一种采用Modbus TCP通信协议的RFID读写器。它可以通过TCP/IP网络与计算机或其它设备进行通信&#xff0c;实现远程读取和写入RFID标签数据的目的。 与传统的RFID读写器相比&#xff0c;Modbus TCP工业RFID读写器具有更远的读写距离、更高的读写灵敏度…

Flink Flink数据写入Kafka

一、环境准备 官网地址 flink官方集成了通用的 Kafka 连接器&#xff0c;使用时需要根据生产环境的版本引入相应的依赖 <properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><flink.version>1.14.6</flink.version&g…

CCF编程能力等级认证GESP—C++1级—20230611

CCF编程能力等级认证GESP—C1级—20230611 单选题&#xff08;每题 2 分&#xff0c;共 30 分&#xff09;判断题&#xff08;每题 2 分&#xff0c;共 20 分&#xff09;编程题 (每题 25 分&#xff0c;共 50 分)时间规划累计相加 答案及解析单选题判断题编程题1编程题2 单选题…

关于小红书商单变现的一些答疑

AI小红书商单训练营也过去1个月了&#xff0c;今天给大家汇总几个常遇到的问题&#xff0c;希望对大家在运营过程中有所帮助。 1.账号封面是否要统一模版&#xff1f; 为了让账号主页呈现整洁美观的效果&#xff0c;建议统一封面设计&#xff0c;视频开头可以设置一个固定画面…