【新书推荐】7.6语句综合实战

本节必须掌握的知识点:

   项目需求

    示例二十八

综合实战,本小节将我们之前介绍的所有知识点结合在了一起,其目的就为了告诉大家,学了这么长时间的C语言了,我们可以做一些有趣的小游戏了。

7.6.1 项目需求

游戏界面

写一个主界面,如下图7-7所示:

                                      图7-7 游戏主界面

如果我们选择1,则出现图7-8游戏加载界面:

                                           图7-8 游戏加载界面

如果选择2,则退出程序。

加载完成后进入游戏主界面,如图7-9游戏主界面:

                                        图7-9 游戏界面

 打开了游戏主界面,笔者一共准备了2个游戏,如果输入1则可以进入猜数字的游戏界面;如果选择2,则进入打地鼠游戏的界面;如果选择3,则退出程序。

■猜数字游戏规则:

猜数字游戏规则:系统通过使用随机函数(rand())产生一个数字,该数字在0~10之间。如果猜小了,则输出小了;如果猜大了,则输出大了;如果猜对了,则输出猜对了。

如果猜的次数等于10次,则游戏结束。

打地鼠游戏规则

首先生成一张地图,3行3列共9个老鼠洞,使用随机函数老鼠在9个洞里跑,通过输入x、y坐标来判断我们有没有打中老鼠,如果打中,则输出“Boom”打中了;如果没打中,则继续。

7.6.2 示例二十八

示例代码二十八

这里不再将代码一行行分析了,因为每行代码后面都有注释,且每行代码读者都能看懂。希望读者在看代码之前,能自己动手写一下,多锻炼自己的动手能力。

/*

   猜数字和打地鼠游戏

*/

#include <stdio.h>  //输入输出头文件

#include <stdlib.h> //工具库头文件(随机函数)

#include <windows.h>//windows操作系统头文件(Sleep函数)

#include <time.h>   //time函数头文件获取系统时间

int main(void)

{

agining1:

    printf("\t\t 欢迎来到游戏世界!\n");

    printf("\t\t是否进入选择游戏界面:\n\t\t\t是请输入1;\n\t\t\t否请输入2;\n");

    int option_enter = 0;//选择是否进入界面

    scanf_s("%d", &option_enter);

    switch (option_enter)

    {

        case 1://输入1 进入

        {

            printf("\n\n您选择的是进入游戏界面\n");

            printf("请您耐心等待,界面加载中");

            for (int i = 0; i < 15; i++) //加载进度条

            {

                printf(" □");

                Sleep(100);//延迟100毫秒

            }

            system("CLS");//清屏

            //

            Sleep(500);//延迟500毫秒

    agining2:

            printf("\t\t 游戏主界面 \n");

            printf("\t\t 1、猜数字\n");

            printf("\t\t 2、打地鼠\n");

            printf("\t\t 3、退出\n");

            int option_game = 0;//选择要玩的游戏

            printf("\t\t 请输入您要玩的游戏编号:\n");

            scanf_s("%d", &option_game);

            switch (option_game)

            {

                case 1:

                {

                    system("CLS");//清屏,清理之前屏幕上的痕迹

            agining31: ;//magic猜的数字,rangNum生成的随机数

                    int magic, rangNum, i, count

                    i = 0;

                    count = 0;

                    srand((unsigned int)time(NULL));//以当前系统时间为随机种子

                    rangNum = rand() % 10 + 1;//生成1~10之间的随机数

                agin:

                    printf("请输入您猜的数字(1~10):"); i++;

                    scanf_s("%d", &magic);

                    for (; i <= 10; )

                    {

                        count++;

                        if (magic == rangNum)//如果相等输出结果,并退出程序

                        {

                            printf("恭喜猜对了!");

                            printf("magic = %d rangNum = %d\n", magic,rangNum);

                            system("PAUSE");

                            break;

                        }

//如果猜的次数大于随机数且猜的次数小于等于9次了则进入下轮猜数字游戏

                        if ((magic > rangNum) && i <= 9)

                        {

                            printf("大了!\n继续");

                            goto agin;

                        }

//如果猜的次数大于随机数 且猜的次数等于10次了则介结束游戏

                        if ((magic > rangNum) && i == 10)

                        {

                            printf("大了!");

                            goto end;

                        }

//如果猜的次数小于随机数且猜的次数小于等于9次了则进入下轮猜数字游戏

                        if ((magic < rangNum) && i <= 9)

                        {

                            printf("小了!\n继续");

                            goto agin;

                        }

//如果猜的次数小于随机数 且猜的次数等于10次了则介结束游戏

                        if ((magic < rangNum) && i == 10)

                        {

                            printf("小了!\n继续");

                            goto end;

                        }

                    end:

                        printf("猜了%d轮", count);

                        if (count >= 10)  //猜数的次数大于等于10次则退出游戏

                        {

                            printf("GameOver!");

                        }

                    }

                    //Sleep(500);

                    system("CLS");//清屏

                    printf("是否返回游戏主界面:\t是请输入1;\t否请输入4;\n");

                    printf("是否返回游戏界面:\t是请输入2;\t否请输入4;\n");

                    printf("重玩此游戏,请输入3:");

                    int option_agin = 0;

                    scanf_s("%d", &option_agin);

                    switch (option_agin)

                    {

                    case 1:

                    {

                        system("CLS");//清屏

                        goto agining1;

                        break;

                    }

                    case 2:

                    {

                        system("CLS");//清屏

                        goto agining2;

                        break;

                    }

                    case 3:

                    {

                        system("CLS");//清屏

                        goto agining31;

                        break;

                    }

                    default:

                    {

                        exit(0);

                        break;

                    }

                    }

                    break;

                }

                case 2:

                {

                    system("CLS");//清屏

        agining32:

                    int times;//游戏的次数

                    int mousex = 0;//老鼠的X轴坐标

                    int mousey = 0;//老鼠的Y轴坐标

                    int posx = 0;//锤子的X轴坐标

                    int posy = 0;//锤子的Y轴坐标

                    int hits = 0;//统计击中老鼠的次数

                    int missed = 0;//统计击错的次数

                    int i, row, col;//循环打老鼠效果的变量

                    //1、九个老鼠洞以及打老鼠的次数                            

                    srand((unsigned int)time(0));//随机种子

                    printf("□□□\n□□□\n□□□\n");

                    printf("请输入打老鼠的次数:\n");

                    scanf_s("%d", &times);

                    //2.循环多次打老鼠的效果

                    for (i = 1; i <= times; i++)

                    {

                        //老鼠的随机坐标

                        mousex = rand() % 3 + 1;//老鼠的X轴坐标从1-3的随机数

                        mousey = rand() % 3 + 1;//老鼠的Y轴坐标从1-3的随机数

                                                //判断锤子的使用范围

                        do

                        {

                            printf("请输入锤子的坐标:\n");

                            scanf_s("%d%d", &posx, &posy);

                        } while (posx < 1 || posx>3 || posy < 1 || posy>3);

                        //判断锤子和老鼠的坐标是否一致

                        if (mousex == posx && mousey == posy)//击中老鼠

                            hits++;

                        else

                            missed++;

                        //循环打印地图

                        for (row = 1; row <= 3; row++)

                        {

                            for (col = 1; col <= 3; col++)

                            {

                                if (row == posy && col == posx)//锤子的坐标

                                    printf("■");

                        //老鼠的坐标

                                else if (row == mousey && col == mousex)

                                    printf("@");

                                else

                                    printf("□");

                            }

                            printf("\n");

                        }

                        if (mousey == posy && mousex == posx) {

                            printf("Boom,打中老鼠了!\n");

                        }

                        else {

                            printf("Sorry,没有打中\n");

                        }

                        //打印总成绩 

                        printf("打中%d次,错过%d次\n", hits, missed);

                        system("pause");

                    }

                    system("CLS");//清屏

                    printf("是否返回游戏主界面:\t是请输入1;\t否请输入4;\n");

                    printf("是否返回游戏界面:\t是请输入2;\t否请输入4;\n");

                    printf("重玩此游戏,请输入3:");

                    int option_agin = 0;

                    scanf_s("%d", &option_agin);

                    switch (option_agin)

                    {

                    case 1:

                    {

                        system("CLS");//清屏

                        goto agining1;

                        break;

                    }

                    case 2:

                    {

                        system("CLS");//清屏

                        goto agining2;

                        break;

                    }

                    case 3:

                    {

                        system("CLS");//清屏

                        goto agining32;

                        break;

                    }

                    default:

                    {

                        exit(0);

                        break;

                    }

                    }

                    break;

                }

                default:

                {

                    exit(0);//退出程序

                }

            }

            break;

        }

        default://输入其他退出

        {

            exit(0);//退出

            break;

        }

    }

    system("pause");

    return 0;

}

  

                                        图7-10 猜数字游戏                                                              

                图7-11 打地鼠游戏

练习

       使用汇编语言完成示例二十八,并进行反汇编代码分析。

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

jQuery 基础、选择器和筛选器

【一】JQuery基础 【1】什么时Jquery &#xff08;1&#xff09;定义 jQuery是一个流行的JavaScript库&#xff0c;旨在简化JavaScript编程和处理HTML文档的任务。它提供了一组易于使用的功能和方法&#xff0c;可以加快开发速度并提高跨浏览器兼容性。一款轻量级的JS框架 …

vivado VHDL Objects、VHDL实体描述

VHDL对象包括&#xff1a;信号、变量、常量和运算符。 信号 在中声明VHDL信号&#xff1a; •体系结构声明部分&#xff1a;在该体系结构内的任何位置使用VHDL信号。 •一个块&#xff1a;在该块中使用VHDL信号。 使用<信号分配运算符分配VHDL信号。 signal sig1 : std…

matlab|计及源荷不确定性的综合能源生产单元运行调度与容量配置随机优化模型

目录 1 主要内容 1.1 风光场景聚类 1.2 主模型程序结果 1.3 随机模型和确定性模型对比 1.4 有无储气对比 1.5 煤价灵敏性分析 1.6 甲烷价格灵敏性分析 2 部分程序 3 下载链接 1 主要内容 本程序复现《计及源荷不确定性的综合能源生产单元运行调度与容量配置两阶段随机…

基础算法(算法竞赛)--排序区间合并火烧赤壁、堆 序列合并

1、B站视频链接&#xff1a;A21 排序 区间合并_哔哩哔哩_bilibili 题目链接&#xff1a;火烧赤壁 - 洛谷 #include <bits/stdc.h> using namespace std; #define N 20005 struct line{int l,r;bool operator<(line &t){return l<t.l;} }a[N];//定义结构体数组…

面向对象设计模式

一、单例 一个类只能创建唯一一个对象 利用限制构造、static完成 二、工厂模式 优势&#xff1a;规范接口&#xff08;纯虚函数&#xff09;&#xff1b;实现多态&#xff08;虚函数表&#xff09;&#xff1b;继承 1、简单工厂 一个工厂创建所有产品。 返回基类指针可…

µC/OS-II---两个系统任务

目录 空闲任务---OS_TaskIdle()统计任务---OS_TaskStat()统计任务初始化统计任务代码 OSInit()函数二者的协调使用 空闲任务—OS_TaskIdle() C/OS-II 规定&#xff1a;一个用户应用程序必须使用这个空闲任务&#xff0c;而且这个任务不能用软件来删除。优先级别&#xff1a;OS…

K线实战分析系列之七:行情顶部的看跌信号——黄昏星形态

K线实战分析系列之七&#xff1a;行情顶部的看跌信号——黄昏星形态 一、黄昏星形态二、黄昏线总结 一、黄昏星形态 二、黄昏线总结 黄昏星的高点形成阻力位&#xff0c;启明星的低点形成支撑位中间的星线实体与第一根K线的实体跳空区域比较宽&#xff0c;第三根K线覆盖了第一…

linux系统git仓库

git仓库 获取 Git 仓库&#xff08;初始化仓库&#xff09;创建裸库创建本地库 获取 Git 仓库&#xff08;初始化仓库&#xff09; 创建裸库 git仓库服务器创建useradd git passwd git mkdir /git-root/ cd /git-root/git init --bare shell.git #制作裸库chown -R git:gi…

Linux进程信号 ----- (信号保存)

前言 信号从产生到执行&#xff0c;并不会被立即处理&#xff0c;这就意味着需要一种 “方式” 记录信号是否产生&#xff0c;对于 31 个普通信号来说&#xff0c;一个 int 整型就足以表示所有普通信号的产生信息了&#xff1b;信号还有可能被 “阻塞”&#xff0c;对于这种多状…

在Win11上部署Stable Diffusion WebUI Forge

Stable Diffusion WebUI Forge 是 Stable Diffusion WebUI&#xff08;基于 Gradio&#xff09;之上的平台&#xff0c;可简化开发、优化资源管理并加快推理速度。“Forge”这个名字的灵感来自“Minecraft Forge”。这个项目旨在成为SD WebUI的Forge。 与原始 WebUI&#xff0…

MySQL数据库调优之关联查询、排序查询、分页查询、子查询、Group by优化

关联查询优化 1.准备工作 CREATE TABLE IF NOT EXISTS type(id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,card INT(10) UNSIGNED NOT NULL,PRIMARY KEY(id));CREATE TABLE IF NOT EXISTS book( bookid INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, card INT(10) UNSIGNED N…

堆C++(Acwing)

代码&#xff1a; #include <iostream> #include <algorithm> #include <string.h>using namespace std;const int N 100010;int h[N], hp[N], ph[N], cnt;void heap_swap(int a, int b) {swap(ph[hp[a]] ,ph[hp[b]]);swap(hp[a], hp[b]);swap(h[a], h[b])…

1904_ARM Cortex M系列芯片特性小结

1904_ARM Cortex M系列芯片特性小结 全部学习汇总&#xff1a; g_arm_cores: ARM内核的学习笔记 (gitee.com) ARM Cortex M系列的MCU用过好几款了&#xff0c;也涉及到了不同的内核。不过&#xff0c;关于这些内核的基本的特性还是有些不了解。从ARM的官方网站上找来了一个对比…

[力扣 Hot100]Day33 排序链表

题目描述 给你链表的头结点 head &#xff0c;请将其按 升序 排列并返回 排序后的链表 。 出处 思路 归并排序即可。 代码 class Solution { public:ListNode* merge(ListNode *h1,ListNode *h2) {ListNode *head nullptr;if(h1->val<h2->val){head h1;h1h1-…

Sora:颠覆性AI视频生成工具

Sora是一款基于人工智能&#xff08;AI&#xff09;技术的视频生成工具&#xff0c;它彻底改变了传统视频制作的模式&#xff0c;为创作者提供了高效、便捷、高质量的视频内容生成方式。通过深度学习和自然语言处理等先进技术&#xff0c;Sora实现了从文字描述到视频画面的自动…

计算机体系架构初步入门

&#x1f3ac;个人简介&#xff1a;一个全栈工程师的升级之路&#xff01; &#x1f4cb;个人专栏&#xff1a;高性能&#xff08;HPC&#xff09;开发基础教程 &#x1f380;CSDN主页 发狂的小花 &#x1f304;人生秘诀&#xff1a;学习的本质就是极致重复! 目录 1 计算机五大…

数据结构-列表LinkedList

一,链表的简单的认识. 数组,栈,队列是线性数据结构,但都算不上是动态数据结构,底层都是依托静态数组,但是链表是确实真正意义上的动态数组. 为什么要学习链表? 1,链表时最简单的动态数据结构 2,掌握链表有助于学习更复杂的数据结构,例如,二叉树,trie. 3,学习链表有助于更深入…

【深度学习笔记】卷积神经网络——多输入多输出通道

多输入多输出通道 虽然我们在subsec_why-conv-channels中描述了构成每个图像的多个通道和多层卷积层。例如彩色图像具有标准的RGB通道来代表红、绿和蓝。 但是到目前为止&#xff0c;我们仅展示了单个输入和单个输出通道的简化例子。 这使得我们可以将输入、卷积核和输出看作二…

EasyRecovery2024电脑版软件评测与使用教程

一、EasyRecovery电脑版软件评测 EasyRecovery电脑版是一款功能强大、操作简便的数据恢复软件。它适用于多种场景&#xff0c;无论是误删除、格式化、分区丢失还是硬件故障&#xff0c;都能提供有效的恢复方案。该软件界面直观&#xff0c;即便没有技术背景的用户也能轻松完成…

使用 React 和 MUI 创建多选 Checkbox 树组件

在本篇博客中&#xff0c;我们将使用 React 和 MUI&#xff08;Material-UI&#xff09;库来创建一个多选 Checkbox 树组件。该组件可以用于展示树形结构的数据&#xff0c;并允许用户选择多个节点。 前提 在开始之前&#xff0c;确保你已经安装了以下依赖&#xff1a; Reac…