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

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

头文件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来退出游戏

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

 

 

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

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

相关文章

【开源】基于JAVA+Vue+SpringBoot的智慧家政系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块三、系统展示四、核心代码4.1 查询家政服务4.2 新增单条服务订单4.3 新增留言反馈4.4 小程序登录4.5 小程序数据展示 五、免责说明 一、摘要 1.1 项目介绍 基于微信小程序JAVAVueSpringBootMySQL的智慧家政系统&#xff0…

OpenCV-29 自适应阈值二值化

一、引入 在前面的部分我们使用的是全局阈值&#xff0c;整幅图像采用同一个数作为阈值。当时这种方法并不适应于所有情况。尤其是当同一幅图像上的不同部分具有不同的亮度时。这种情况下我们需要采用自适应阈值。此时的阈值时根据图像上的每一个小区域计算与其对应的阈值。因此…

Less-1(sqlmap自动注入攻击)--sqli

环境准备 打开火狐浏览器&#xff0c;进入sqli第一关的页面 工具准备 sqlmap 参数解释 -u URL 指定目标URL进行注入测试。--dataDATA指定POST请求的数据进行注入测试--cookieCOOKIE指定用于身份验证的cookie进行注入测试-p PARAMETER指定要测试的参数--levelLEVEL设置测试的深…

微信小程序开发 逐级选择地区

1.需求 微信小程序开发,逐级选择地区&#xff08;市、区县、街道、社区、网格&#xff09;&#xff0c;选择每一级然后展示下一级数据。 微信小程序逐级选择 2. 完整代码 2.1. 选择界面 2.1.1. selectArea.wxml <text bindtap"selectGrid">{{gridName}}</…

Java技术栈 —— Hadoop入门(二)

Java技术栈 —— Hadoop入门&#xff08;二&#xff09; 一、用MapReduce对统计单词个数1.1 项目流程1.2 可能遇到的问题1.3 代码勘误1.4 总结 一、用MapReduce对统计单词个数 1.1 项目流程 (1) 上传jar包。 (2) 上传words.txt文件。 (3) 用hadoop执行jar包的代码&#xff0c;…

go语言基础之泛型

1.泛型 泛型是一种独立于所使用的特定类型的编写代码的方法。使用泛型可以编写出适用于一组类型中的任何一种的函数和类型。 1.1 为什么需要泛型 func reverse(s []int) []int {l : len(s)r : make([]int, l)for i, e : range s {r[l-i-1] e}return r }fmt.Println(reverse…

ACL、VLAN、NAT笔记

一、ACL ---访问控制列表 1.ACL的作用 1&#xff0c;访问控制&#xff1a;在路由器流量流入或流出的接口上&#xff0c;匹配流量&#xff0c;然后 执行设定好的动作。 ---- permit 允许 , deny 拒绝 2&#xff0c;抓取感兴趣流&#xff1a;ACL可以和其他服务结合使用。ACL只…

Mac安装nvm,安装多个不同版本node,指定node版本

一.安装nvm brew install nvm二。配置文件 touch ~/.zshrc echo export NVM_DIR~/.nvm >> ~/.zshrc echo source $(brew --prefix nvm)/nvm.sh >> ~/.zshrc三.查看安装版本 nvm -vnvm常用命令如下&#xff1a;nvm ls &#xff1a;列出所有已安装的 node 版本nvm…

CMake 完整入门教程(五)

CMake 使用实例 13.1 例子一 一个经典的 C 程序&#xff0c;如何用 cmake 来进行构建程序呢&#xff1f; //main.c #include <stdio.h> int main() { printf("Hello World!/n"); return 0; } 编写一个 CMakeList.txt 文件 ( 可看做 cmake 的…

导航页配置服务Dashy本地部署并实现公网远程访问

文章目录 简介1. 安装Dashy2. 安装cpolar3.配置公网访问地址4. 固定域名访问 简介 Dashy 是一个开源的自托管的导航页配置服务&#xff0c;具有易于使用的可视化编辑器、状态检查、小工具和主题等功能。你可以将自己常用的一些网站聚合起来放在一起&#xff0c;形成自己的导航…

Unity 中介者模式 (实例详解)

文章目录 简介实例1&#xff1a;玩家与UI交互实例2&#xff1a;战斗模块中的攻击事件协调实例3&#xff1a;游戏场景中的事件广播实例4&#xff1a;模块间通信 - 地图导航与角色移动实例5&#xff1a;UI模块间同步 - 菜单切换与选项状态 简介 在Unity游戏开发中&#xff0c;中…

SpringBoot内置工具类

Collections java.util包下的Collections类&#xff0c;该类主要用于操作集合或者返回集合 一、排序 List<Integer> list new ArrayList<>();list.add(2);list.add(1);list.add(3);Collections.sort(list);//升序System.out.println(list);Collections.reverse(…

【机器学习】欠拟合与过拟合

过拟合&#xff1a;模型在训练数据上表现良好对不可见数据的泛化能力差。 欠拟合&#xff1a;模型在训练数据和不可见数据上泛化能力都很差。 欠拟合常见解决办法&#xff1a; &#xff08;1&#xff09;增加新特征&#xff0c;可以考虑加入特征组合、高次特征&#xff0c;以…

MySql45讲-08.事务到底是隔离的还是不隔离的?(结合MVCC视频)

命令的启动时机 begin/start transaction 命令并不是一个事务的起点&#xff0c;在执行到它们之后的第一个操作InnoDB表的语句&#xff0c;事务才真正启动。如果你想要马上启动一个事务&#xff0c;可以使用start transaction with consistent snapshot 这个命令。 事务的版本…

数据结构—基础知识(14):森林、树与二叉树的转换

数据结构—基础知识&#xff08;14&#xff09;&#xff1a;森林、树与二叉树的转换 将树转换为二叉树进行处理&#xff0c;利用二叉树的算法来实现对树的操作。由于树和二叉树都可以用二叉链表作存储结构&#xff0c;则以二叉链表作媒介可以导出树与二叉树之间的一个对应关系…

Nginx负载均衡下的webshell连接

一、上传AntSword-Labs-master搭建负载均衡实验环境 搭建好docker环境&#xff0c;并且配置好docker-compose 我的Redhat的docker版本&#xff1a; 查看当前环境下的文件是否正确&#xff1a; 接着执行docker compose up -d 拉取环境 访问成功页面&#xff1a; 进入docker容器…

RabbitMQ 死信交换机的详述➕应用

&#x1f973;&#x1f973;Welcome 的Huihuis Code World ! !&#x1f973;&#x1f973; 接下来看看由辉辉所写的关于RabbitMQ的相关操作吧 目录 &#x1f973;&#x1f973;Welcome 的Huihuis Code World ! !&#x1f973;&#x1f973; 一.什么是死信交换机 二. 死信队列…

C++1.0

思维导图 提示输入一个字符串&#xff0c;统计该字符中大写&#xff0c;小写字母个数&#xff0c;数字个数&#xff0c;空格个数以及特殊字符个数&#xff0c;要求使用C风格字符串完成 #include <iostream>using namespace std;int main() {cout << "请输入一…

路由懒加载(React和Vue)

1、为了提升性能&#xff0c;将懒加载的文件单独打包 在webpack.config.js配置打包成chunks // 打包到不同的chunks optimization: {// 将动态加载(懒加载)的文件(imort())单独打包splitChunks: {chunks: "all",},// 避免分割缓存失效runtimeChunk: {name: (entrypo…

数据结构(C语言版)代码实现(五)——双向循环链表的部分实现

目录 参考材料与格式 线性表的有关知识 头文件 库、宏定义、数据类型声明 线性表的双向链表存储结构 构造空链表 销毁链表 链表长度 按位查找 插入元素 删除元素 打印链表 完整头文件DuLinkList.h 测试函数&#xff08;主函数&#xff09; 测试结果 收获 参考材…