开始学习第二十五天(番外)

今天分享一下写的小游戏啦

头文件game.h

#include<stdio.h>
#include<time.h>
#include<stdlib.h>
#define H 3
#define L 3
void InitBoard(char Board[H][L], int h, int l);

void DisplayBoard(char Board[H][L], int h, int l);

void playermove(char Board[H][L], int h, int l);

void computermove(char Board[H][L], int h, int l);

char iswin(char Board[H][L], int h, int l);

源文件game.c

#define _CRT_SECURE_NO_WARNINGS
#include"game.h"
void InitBoard(char Board[H][L], int h, int l)
{
    int i = 0;
    int j = 0;
    for (i = 0; i < H; i++)
    {
        for (j = 0; j < L; j++)
        {
            Board[i][j] = ' ';
        }
    }
}
void DisplayBoard(char Board[H][L], int h, int l)
{
    int i = 0;
    for (i = 0; i < H; i++)
    {
        int j = 0;
            /*printf(" %c | %c | %c  \n", Board[i][0], Board[i][1], Board[i][2]);*/
        for (j = 0; j < L; j++)
        {
            printf(" %c ",Board[i][j]);
            if (j<L-1)
            printf("|");
        }
        printf("\n");
        if (i < H - 1)
        {
            for (j = 0; j < L ; j++)
            {
                printf("---");
                if (j < L - 1)
                printf("|");
            }
        }
        printf("\n");
    }
}
void playermove(char Board[H][L], int h, int l)
{
    int x = 0;
    int y = 0;
    printf("玩家下棋:>\n");
    while (1)
    {
        printf("请输入坐标-->");
        scanf("%d %d", &x, &y);
        if (x >= 1 && x <= H&&y >= 1 && y <= L)
        {
            if (Board[x - 1][y - 1] == ' ')
            {
                Board[x - 1][y - 1] = '*';
                break;
            }
            else
            {
                printf("被占用,请重新输入\n");
            }
        }
        else
        {
            printf("坐标非法,请重新输入\n");
        }
    }
}
void computermove(char Board[H][L], int h, int l)
{
    int x = 0;
    int y = 0;
    printf("电脑下棋:>\n");
    while (1)
    {
    x = rand() % H;
    y = rand() % L;
        if (Board[x][y] == ' ')
        {
            Board[x][y] = '#';
            break;
        }
    }
}
isfull(char Board[H][L], int h, int l)
{
    int i = 0;
    int j = 0;
    for (i = 0; i < H; i++)
    {
        for (j = 0; j < L; j++)
        {
            if (Board[i][j] == ' ')
            {
                return 0;
            }
        }
    }
    return 1;
}
char iswin(char Board[H][L], int h, int l)
{
    int i = 0;
    for (i = 0; i < H; i++)
    {
        if (Board[i][0] == Board[i][1] && Board[i][1] == Board[i][2] && Board[i][1] != ' ')
        {
            return Board[i][1];
        }
    }
    int j = 0;
    for (j = 0; j < L; j++)
    {
        if (Board[0][j] == Board[1][j] && Board[1][j] == Board[2][j] && Board[1][j] != ' ')
        {
            return Board[1][j];
        }
    }
    if (Board[0][0] == Board[1][1] && Board[1][1] == Board[2][2] && Board[1][1] != ' ')
    {
        return Board[1][1];
    }
    if (Board[0

            学习.c

#define _CRT_SECURE_NO_WARNINGS
#include"game.h"

void menu()
{
    printf("************************************\n");
    printf("********      1.三子棋      ********\n");
    printf("********       0.退出       ********\n");
    printf("************************************\n");
}
void game()
{
    int ret = 0;
    char Board[H][L] = { 0 };
    //初始化函数
    InitBoard(Board, H, L);
    DisplayBoard(Board, H, L);
    while (1)
    {
        playermove(Board, H, L);
        ret = iswin(Board, H, L);
        if (ret != 'c')
        {
            break;
        }
        DisplayBoard(Board, H, L);
        computermove(Board, H, L);
        ret = iswin(Board, H, L);
        if (ret != 'c')
        {
            break;
        }
        DisplayBoard(Board, H, L);
    }
    if (ret == '*')
    {
        printf("玩家赢\n");
    }
    else if (ret == '#')
    {
        printf("电脑赢\n");
    }
    else
    {
        printf("平局\n");
    }
}
int main()
{
    srand((unsigned int)time(NULL));
    int input = 0;
    do
    {
        menu();
        printf("请输入-->");
        scanf("%d", &input);
        switch (input)
        {
        case 1: 
        {
                  printf("三子棋\n");
                  game();
                  break;
        }
        case 0: printf("退出游戏\n");
            break;
        default:printf("输入错误\n");
            break;
        }
    } while (input);
    {

    }
    return 0;
}

编写思路是先初始化棋盘 打印棋盘 然后玩家移动 接着电脑移动 最后判断胜负就好啦

当我们开始运行程序 并且输入1 就会出现以下结果

f8c6fed885ec45ef85ce64faa0cf27dc.png

 然后我们可以开始愉快的三子棋啦

0c82d48de7444f07bcf4c7206cdc2acf.png

当我们赢了笨笨的机器人 就可以获得胜利!反之亦然 当然也有平局哦

17ed495f0e8741eeb97a273942d137cd.png 

当我们不想玩的时候 就可以输入0来退出游戏

大家有兴趣的话可以玩一下呀 看看能不能战胜机器人 获得胜利 

 

 

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

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

相关文章

【LeetCode: Z 字形变换 + 模拟】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

5G_RACH(一)

什么是RACH RACH 代表 Random Access Channel。这是开机时UE发给eNB的第一条消息。 为什么选择RACH &#xff1f;&#xff08;RACH 的功能是什么&#xff1f; 当你第一次听到RACH或RACH Process这个词时&#xff0c;你脑海中浮现的第一个问题是“为什么是RACH&#xff1f;”…

Windows XP x86 sp3 安装 Google Chrome 49.0.2623.112 (正式版本) (32 位)

1 下载地址&#xff1b; https://dl.google.com/release2/h8vnfiy7pvn3lxy9ehfsaxlrnnukgff8jnodrp0y21vrlem4x71lor5zzkliyh8fv3sryayu5uk5zi20ep7dwfnwr143dzxqijv/49.0.2623.112_chrome_installer.exe 2 直接 双击 49.0.2623.112_chrome_installer.exe 安装&#xff1b; 3 …

Redis6基础知识梳理~

初识NOSQL&#xff1a; NOSQL是为了解决性能问题而产生的技术&#xff0c;在最初&#xff0c;我们都是使用单体服务器架构&#xff0c;如下所示&#xff1a; 随着用户访问量大幅度提升&#xff0c;同时产生了大量的用户数据&#xff0c;单体服务器架构面对着巨大的压力 NOSQL解…

SpringBoot之JWT登录

JWT JSON Web Token&#xff08;JSON Web令牌&#xff09; 是一个开放标准(rfc7519)&#xff0c;它定义了一种紧凑的、自包含的方式&#xff0c;用于在各方之间以JSON对象安全地传输信息。此信息可以验证和信任&#xff0c;因为它是数字签名的。jwt可以使用秘密〈使用HNAC算法…

10. UE5 RPG使用GameEffect创建血瓶修改角色属性

前面我们通过代码实现了UI显示角色的血量和蓝量&#xff0c;并实现了初始化和在数值变动时实时更新。为了测试方便&#xff0c;没有使用GameEffect去修改角色的属性&#xff0c;而是通过代码直接修改的数值。 对于GameEffect的基础&#xff0c;这里不再讲解&#xff0c;如果需要…

《动手学深度学习(PyTorch版)》笔记4.4

注&#xff1a;书中对代码的讲解并不详细&#xff0c;本文对很多细节做了详细注释。另外&#xff0c;书上的源代码是在Jupyter Notebook上运行的&#xff0c;较为分散&#xff0c;本文将代码集中起来&#xff0c;并加以完善&#xff0c;全部用vscode在python 3.9.18下测试通过。…

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之Swiper容器组件

鸿蒙&#xff08;HarmonyOS&#xff09;项目方舟框架&#xff08;ArkUI&#xff09;之Swiper容器组件 一、操作环境 操作系统: Windows 10 专业版、IDE:DevEco Studio 3.1、SDK:HarmonyOS 3.1 二、Swiper容器组件 滑块视图容器&#xff0c;提供子组件滑动轮播显示的能力。…

漏洞原理MySql注入 Windows中Sqlmap 工具的使用

漏洞原理MySql注入 SQLmap是一款开源的自动化SQL注入工具&#xff0c;用于检测和利用Web应用程序中的SQL注入漏洞。以下是SQLmap工具的使用总结&#xff1a; 安装和配置&#xff1a;首先需要下载并安装SQLmap工具。安装完成后&#xff0c;可以通过命令行界面或图形用户界面来使…

Kafka-服务端-GroupMetadataManager

GroupMetadataManager是GroupCoordinator中负责管理Consumer Group元数据以及其对应offset信息的组件。 GroupMetadataManager底层使用Offsets Topic,以消息的形式存储Consumer Group的GroupMetadata信息以及其消费的每个分区的offset,如图所示。 consumer_offsets的某Partiti…

C#算法(11)—求三个点构成圆的圆心坐标和半径

前言 我们在上位机开发领域也经常会碰到根据三个点求出圆的圆心、半径等信息的场景,本文就是详细的介绍如何根据三个点使用C#代码求出三点构成的圆的圆心坐标、圆半径、三点构成的圆弧的角度。 1、3点求圆分析 A、B、C三个点都是圆上的坐标点,过向量AB做中垂线,过向量AC做…

RabbitMQ“延时队列“

1.RabbitMQ"延时队列" 延迟队列存储的对象是对应的延迟消息&#xff0c;所谓“延迟消息”是指当消息被发送以后&#xff0c;并不想让消费者立刻拿到消息&#xff0c;而是等待特定时间后&#xff0c;消费者才能拿到这个消息进行消费 注意RabbitMQ并没有延时队列慨念,…

一款相对比较强大的国产ARM单片机HC32F4A0

已经用了3年的HC32F4A0&#xff0c;已经对它比较熟悉了&#xff0c;与STM32相比它的外设使用这些的确是挺大大&#xff0c;不像GD32一类的单片机很多都能兼容STM32。用久了之后就更喜欢用HC32F4A0&#xff0c;功能强大&#xff0c;外设使用灵活&#xff0c;用点向FPGA靠拢的感觉…

TCP 三次握手 四次挥手以及滑动窗口

TCP 三次握手 简介&#xff1a; TCP 是一种面向连接的单播协议&#xff0c;在发送数据前&#xff0c;通信双方必须在彼此间建立一条连接。所谓的 “ 连接” &#xff0c;其实是客户端和服务器的内存里保存的一份关于对方的信息&#xff0c;如 IP 地址、端口号等。 TCP 可以…

系统调用:计算机中的“服务员”

一、什么是系统调用 想象一下&#xff0c;你在一家餐厅就餐&#xff0c;你需要通过服务员来点菜、支付等。系统调用就像是这个服务员&#xff0c;它在软件和操作系统之间起到了桥梁的作用。当软件需要操作系统提供的某项服务时&#xff0c;它就像顾客一样&#xff0c;通过点菜…

双非本科准备秋招(9.2)——力扣哈希

1、383. 赎金信 跟昨天的题大同小异&#xff0c;因为只有26个字母&#xff0c;所以可以建个有26个坑位的数组。 做完昨天的题目&#xff0c;这个题没啥新意。 class Solution {public boolean canConstruct(String ransomNote, String magazine) {int[] hashTable new int[…

Gin 应用多实例部署session问题、session参数与刷新

文章目录 一、Gin Session 存储的实现方案二、memstore&#xff1a;基于内存的实现2.1 基本使用2.2 关键参数 三、使用redis&#xff1a;多实例部署3.1 使用redis优势3.2 基本使用 四、信息安全的三个核心概念五、Gin Session 参数5.1 参数介绍 六、Session 自动刷新 一、Gin S…

FFMPEG解析ts流

三篇相关联的文章&#xff1a; ffmpeg下HLS解析过程-CSDN博客TS文件格式详解及解封装过程-CSDN博客 FFMPEG解析ts流-CSDN博客 一、简介 关于TS格式解析&#xff0c;可以参考《TS文件格式详解及解封装过程-CSDN博客》&#xff0c;本文主要代码部分解读。建议大家熟读iso138…

Apache Shiro <= 1.2.4反序列化漏洞攻击 CVE-2016-4437 已亲自复现

Apache Shiro < 1.2.4反序列化漏洞攻击 CVE-2016-4437 已亲自复现 漏洞名称漏洞描述影响版本 漏洞复现环境搭建漏洞利用 修复建议总结 漏洞名称 漏洞描述 在 1.2.5 之前的 Apache Shiro 中&#xff0c;当未为“记住我”功能配置密钥时&#xff0c;远程攻击者可以通过未指定…

聚醚醚酮(Polyether Ether Ketone)PEEK在粘接使用时可以使用UV胶水吗?要注意哪些事项?

一般情况下&#xff0c;聚醚醚酮&#xff08;Polyether Ether Ketone&#xff0c;PEEK&#xff09;是一种难以黏附的高性能工程塑料&#xff0c;而UV胶水通常不是与PEEK进行粘接的首选方法。PEEK表面的化学性质和高温性能使得它对常规胶水的附着性较低。然而&#xff0c;有一些…