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

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

头文件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.mzph.cn/news/654399.shtml

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

相关文章

幻兽帕鲁越玩越卡,内存溢出问题如何解决?

近期幻兽帕鲁游戏大火&#xff0c;在联机组队快乐游玩的同时&#xff0c;玩家们也发现了一些小问题。由于游戏有随机掉落材料的设定&#xff0c;服务器在加载掉落物的过程中很容易会出现掉帧、卡顿的情况。某些玩家甚至在游戏1&#xff5e;2时后就出现服务器崩溃的情况&#xf…

代码随想录算法刷题训练营day18

代码随想录算法刷题训练营day18&#xff1a;LeetCode(257)二叉树的所有路径、LeetCode(404)左叶子之和 LeetCode(257)二叉树的所有路径 题目 代码 import java.util.ArrayList; import java.util.List;/*** Definition for a binary tree node.* public class TreeNode {* …

代码小技巧

1、秒换算小时&分钟 int Time; int Hour,Minutes; HourTime/3600;//小时 Minutes(Time/60)%60;//分钟 Minutes(Time%3600)/60;//分钟 2、C当中比较大小 法一&#xff1a;利用库函数 int main() {int array[] { 5, 2, 9, 1, 7 }; cout << "最大值: "…

STP生成树协议实验

实验大纲 一、什么是生成树协议 二、生成树原理 1.STP工作原理 2.STP主要参数 3.STP根网桥 4.STP协议版本 三、实验 1.构建网络拓扑结构图 2.配置IP地址&#xff08;8台PC机&#xff09;&#xff1a;192.168.7.1~192.168.7.8 3.配置SW1 4.配置SW2 5.配置SW3 6.配置…

C++ 数论相关题目 求组合数IV

输入 a,b &#xff0c;求 Cba 的值。 注意结果可能很大&#xff0c;需要使用高精度计算。 输入格式 共一行&#xff0c;包含两个整数 a 和 b 。 输出格式 共一行&#xff0c;输出 Cba 的值。 数据范围 1≤b≤a≤5000 输入样例&#xff1a; 5 3 输出样例&#xff1a; 10 #…

蓝桥杯省赛无忧 课件51 第6次学长直播带练配套课件

01 最小的或运算 02 简单的异或难题 03 出列 04 异或森林 05 位移 06 笨笨的机器人 07 迷失的数 08 最大通过数

vue常用指令(v-mode)

一、v-mode 指令 作用: 获取和设置表单元素的值(实现双向数据绑定) 双向数据绑定 单向绑定: 就是把Model绑定到View&#xff0c;当我们用JavaScript代码更新Model时&#xff0c;View就会自动更新。双向绑定: 用户更新了View&#xff0c;Model的数据也自动被更新了&#xff0c;…

蓝牙----蓝牙消息传输_GATT服务发现

蓝牙消息传输_GATT服务发现 1.主机和从机GATT服务的发现2.通知的使用 1.主机和从机GATT服务的发现 GATT服务的发现由主机执行&#xff0c;一共三个阶段  1.处理交换 MTU 请求和响应&#xff0c;启动对 Simple Service 服务的发现。 if (discState BLE_DISC_STATE_MTU){// MT…

​ PaddleHub 首页图像 - 文字识别chinese_ocr_db_crnn_server​

PaddleHub 便捷地获取PaddlePaddle生态下的预训练模型&#xff0c;完成模型的管理和一键预测。配合使用Fine-tune API&#xff0c;可以基于大规模预训练模型快速完成迁移学习&#xff0c;让预训练模型能更好地服务于用户特定场景的应用 零基础快速开始WindowsLinuxMac Paddle…

【更新】ESG-71个工具变量汇总(2024)

一、引言 收集了CSSCI期刊文本数据&#xff0c;并对“ESG”相关期刊进行文本分析&#xff0c;统计了71个“ESG”相关的工具变量&#xff0c;希望对大家提升研究效率有所帮助 工具变量是一种在统计学和计量经济学中常用的技术&#xff0c;用于处理因果关系研究中的内生性问题。…

452. 用最少数量的箭引爆气球 - 力扣(LeetCode)

题目描述 有一些球形气球贴在一堵用 XY 平面表示的墙面上。墙面上的气球记录在整数数组 points &#xff0c;其中points[i] [xstart, xend] 表示水平直径在 xstart 和 xend之间的气球。你不知道气球的确切 y 坐标。 一支弓箭可以沿着 x 轴从不同点 完全垂直 地射出。在坐标 …

带大家做一个,易上手的家常麻辣孜然牛蹄筋

首先 我们从冰箱中拿出牛蹄筋 泡水化开 一根大葱 一块生姜 大葱切段 生姜块 一把花椒 七个左右干辣椒 五个左右大料 三瓣蒜 切成蒜片 放入小碗中单独装起来 两个绿辣椒 首选螺丝椒 垃圾切成片 单独装起来 先将牛蹄筋 倒入锅中 然后加水 将牛蹄筋全部泡住即可 然后起锅烧…

RT-Thread: STM32 SPI使用流程

1.添加驱动 ①点开设置界面 ②勾选看门 SPI 驱动 ③点击保存 ④查看添加的驱动文件 drv_spi.c 2.打开驱动头文件定义 ①打开配置文件 ②打开定义 3.打开需要开启的SPI总线 打开 drivers 目录下的 board.h 用SPI搜索&#xff0c;找到如下文字&#xff0c;打开对应的宏。 /*-…

巴厘行记(四)——乌布漫游

欢迎览阅《巴厘行记》系列文章 巴厘行记巴厘行记&#xff08;一&#xff09;——海神庙 巴厘行记&#xff08;二&#xff09;——乌布之夜 巴厘行记&#xff08;三&#xff09;——Auntie和Mudi 巴厘行记&#xff08;四&#xff09;——乌布漫游 巴厘行记&#xff08;五&a…

Pytest单元测试框架

第一章、pytest概述 Pytest is a framework that makes building simple and scalable tests easy. Tests are expressive and readable—no boilerplate code required. Get started in minutes with a small unit test or complex functional test for your application or l…

深入理解与防范C语言中的栈溢出问题

一、引言 栈溢出是计算机安全领域中一个常见的漏洞&#xff0c;特别是在C语言编程中。由于C语言的灵活性和对内存管理的直接操作性&#xff0c;如果程序员在编写代码时不注意&#xff0c;就可能导致栈溢出的发生。本文将全面解析栈溢出的概念、原因、影响以及防范措施。 二、…

springboot+vue3支付宝接口案例-第二节-准备后端数据接口

springbootvue3支付宝接口案例-第二节-准备后端数据接口&#xff01;今天经过2个小时的折腾。准备好了我们这次测试支付宝线上支付接口的后端业务数据接口。下面为大家分享一下&#xff0c;期间发生遇到了一些弯路。 首先&#xff0c;我们本次后端接口使用的持久层框架是JPA。这…

3d合并模型是重名材质---模大狮模型网

当合并3d模型时&#xff0c;如果存在重名的材质&#xff0c;可能会导致加载问题。这是因为3D软件在处理重名材质时可能会出现冲突。你可以尝试以下方法解决这个问题&#xff1a; 重命名材质&#xff1a;检查合并的模型中的材质&#xff0c;确保它们具有唯一的命名。修改重名的材…

Pyroch中transforms 图像增强发方法的应用

1 应用场景 在我们训练模型的时候&#xff0c;有的时候数据不够&#xff0c;就需要通过水平翻转、垂直翻转、镜像、旋转、改变亮度、标准化等方式增加图像的多样性&#xff0c;此时可以调用Pytorch 中的Transforms完成这些操作 2 导入相应的库 from torchvision import tran…

多场景建模:美团HiNet

HiNet: Novel Multi-Scenario & Multi-Task Learning with Hierarchical Information Extraction 背景&#xff1a; 美团的多场景多任务&#xff08;ctr、ctcvr&#xff09; 解决方案 通过分层来分别学习多场景多任务 方案详情 点评&#xff1a;在底层Embedding时用…