首页 > 其他分享 >C语言每日一题——第五天

C语言每日一题——第五天

时间:2022-10-01 20:57:29浏览次数:56  
标签:quit Right log 每日 C语言 Lift command printf 第五天

第五天

今天小明觉得自己又可以了!于是他决定继续实现游戏开发,这次从玩家行为控制入手。

在长度无限、宽度为9的地图场景中,我们可以控制角色向左右移动,移动后会留下轨迹,该轨迹保留两回合。此外,角色初始位置为第5格,输入q可以退出游戏。

输入

每回合获取输入,l代表向左移动,r代表向右移动,q表示退出游戏。

输出

回合开始前应打印地图,地图内容为前两次的轨迹(开始行动前按位置为5处理)。当输入不正确时,应当作出提示。

运行示例

---+-------
--+--------
-+---------
<l>Lift or <r>Right (Q to quit):l

--+--------
-+---------
+----------
<l>Lift or <r>Right (Q to quit):l
 You cannot go left!

-+---------
+----------
+----------
<l>Lift or <r>Right (Q to quit):r

+----------
+----------
-+---------
<l>Lift or <r>Right (Q to quit):r

+----------
-+---------
--+--------
<l>Lift or <r>Right (Q to quit):0
 Unknown command <0>.

-+---------
--+--------
--+--------
<l>Lift or <r>Right (Q to quit):q

进程已结束,退出代码0

提示

连续获取输入时,第二次可能拿到上一次输入时按下回车键产生的“换行符”。可以通过以下代码避免scanf获取错误的内容:

scanf("%c", &command);
getchar();  // “拿走”换行符

关键

流程控制实战。


解答

我们可以发现,在打印地图时出现了大量重复代码。我们也可以使用函数来避免代码重复。

#include <stdio.h>


int main() {
    char command;
    int log_1 = 5, log_2 = 5, place = 5;
    int i;

    while (1) {  // 游戏主循环

        // 打印地图
        printf("\n");
        // 轨迹 1
        for (i = 0; i < log_1; i++) {
            printf("-");
        }
        printf("+");
        for (; i < 10; i++) {
            printf("-");
        }
        printf("\n");
        // 轨迹 2
        for (i = 0; i < log_2; i++) {
            printf("-");
        }
        printf("+");
        for (; i < 10; i++) {
            printf("-");
        }
        printf("\n");
        // 当前位置
        for (i = 0; i < place; i++) {
            printf("-");
        }
        printf("+");
        for (; i < 10; i++) {
            printf("-");
        }
        printf("\n");

        // 调整轨迹
        log_1 = log_2;
        log_2 = place;

        // 获取指令
        printf("<l>Lift or <r>Right (Q to quit): ");
        scanf("%c", &command);
        getchar();  // “拿走”换行符

        //读取指令
        if (command == 'l') {
            // 向左移动
            if (place == 0) {  // 判断能否向左
                // 不能
                printf("You cannot go left!\n");
                continue;
            } else {
                // 能
                place -= 1;
            }
        } else if (command == 'r') {
            // 向右移动
            if (place == 9) {  // 判断能否向右
                // 不能
                printf("You cannot go right!\n");
                continue;
            } else {
                // 能
                place += 1;
            }
        } else if (command == 'q') {
            // 退出游戏
            break;
        } else {
            // 输入了未知的命令
            printf("Unknown command <%c>.\n", command);
            continue;
        }

    }

    return 0;
}

标签:quit,Right,log,每日,C语言,Lift,command,printf,第五天
From: https://www.cnblogs.com/tobe-goodlearner/p/basic_C_programming-day_5.html

相关文章

  • 测试用例框架——C语言
    测试用例框架——C语言目录测试用例框架——C语言1宏定义2初始化函数3测试的结果函数4状态测试函数5字符串的比较函数6值比较函数1宏定义staticintTestNum=......
  • 这次是大学生辣(C语言版)
    【题目描述】某日,国家安全局获得一份珍贵的材料,上面记载了一个即将进行的恐怖活动的信息。不过,国家安全局没法获知具体的时间,因为材料上的时间使用的是LINUX的时间戳,即是......
  • 【C语言练习_4】输入字符串,将所有字母转换成大写字母输出,如果不是字母,结束进程
    1.题目输入字符串,将所有字母转换成大写字母输出,如果不是字母,结束进程2.代码#include<stdio.h>#include<string.h>inttest(char*input,char*output){inti=0,z=0,l=0......
  • 【C语言初级】使用函数求闰年
    想求闰年,首先得了解闰年的规则:普通闰年:公历年份是4的倍数,且不是100的倍数的,为闰年(如2004年、2020年等就是闰年)。世纪闰年:公历年份是整百数的,必须是400的倍数才是闰年(如19......
  • 【C语言】给定两个数,求这两个数的最大公约数
    ​​intmain()​​​​{​​​​​intnum1=0;​​​​ intnum2=0;​​​​ inta=0;​​​​ scanf("%d%d",&num1,&num2);​​​​ while(a=num1%num2......
  • C语言中的循环语句要点
    C语言中循环语句主要有三种:while;for;dowhile。1.while循环​​//while语法结构​​​​while(表达式)​​​​{​​​​循环语句;​​​​}​​1.1while语句中的break......
  • 初学C语言笔记221001
    int(*p)[5]  此时数组指针p约等于一个含有5个int型元素数组的数组名*p就是数组int[5]的第一个元素的地址p+1就是跳过int[5]数组的下一个同int[5]类型的数组名*(p+1)再解......
  • C语言第20天,typedef关键词和条件编译
    1.给整型类型取别名原因:我们在整型数据类型中讨论过的,C语言标准并未规定这些数据类型的大小范围,具体的实现交由了编译器和平台决定。也就是说,int在VisualStudio2019中......
  • C语言的enum(枚举)
    一、enum的语法格式为:enum枚举名{枚举元素1,枚举元素2,……}; 二、用enum代替define繁琐的定义1、繁琐的define定义:#defineMON1#defineTUE2#defineW......
  • C语言每日一题——第四天
    第四天小明这两天写代码有些累。。他差点忘记了9月30日的下一天是十月一日……于是决定写一个程序告诉他每个月有多少天。执行:main.exeA输出:31输入程序通过命令行......