c++游戏制作指南(二):制作一个炫酷的启动界面(c++绘图)

简介: c++游戏制作指南(二):制作一个炫酷的启动界面(c++绘图)

🍿*★,°*:.☆( ̄▽ ̄)/$:*.°★* 🍿

      🍟欢迎来到静渊隐者的csdn博文,本文是c++游戏制作指南的一部🍟

🍕更多文章请点击下方链接🍕

🍨 c++游戏制作指南🍨


🍜专栏介绍:在这一专栏中,我将循循善诱,带领你,在冷峻的控制台上,种满缤纷,一同走入c++控制台游戏的殿堂。

🥨适宜人群:学习C++语言三个月及以上的爱好者,熟记基础语法(选择、循环两大结构),掌握基础算法(高精度、排序、模拟、贪心、搜索、动规等),知晓基础数据结构(数组、字符串、链表、栈、队列、树、图)。

🌭学习目的:能够自主编写出有趣的c++控制台游戏,并掌握自学的方法。

🥞喜欢的朋友可以关注一下,下次更新不迷路

🥙前言

做游戏,先要玩游戏。

我们先观察一下游戏。

打开游戏,扑面而来的往往是——

image.gif编辑

启动界面。

那么,就让我们来制作一个炫酷的启动界面吧。

在这启动界面,主要涉及的是绘图

众所周知,c++可以利用图形库:easyX

easyX是什么?

EasyX 是针对 C++ 的图形库,可以帮助 C/C++ 初学者快速上手图形和游戏编程。

比如,可以基于 EasyX 图形库很快的用几何图形画一个房子,或者一辆移动的小车,可以编写俄罗斯方块、贪吃蛇、黑白棋等小游戏,可以练习图形学的各种算法,等等。

许多人学编程都是从 C 语言入门的,而现状是:

    1. 有些学校以 Turbo C 为环境学习 C 语言,只是 Turbo C 实在太老了,复制粘贴都很不方便。
    2. 有些学校直接拿 VC 来讲 C 语言,因为 VC 的编辑和调试环境都很优秀,并且 VC 有适合教学的免费版本。可惜在 VC 里面只能做一些文字性的练习题,想画条直线或一个圆都很难,例如需要注册窗口类、建消息循环等等,初学者会受严重打击的。初学编程想要绘图就得用 TC,很是无奈。
    3. 还有计算机图形学,这门课程的重点是绘图算法,而不是 Windows 编程。所以,许多老师不得不用 TC 教学,因为 Windows 绘图太复杂了,会偏离教学的重点。新的图形学的书有不少是用的 OpenGL,可是门槛依然很高。

    所以,我们想给大家一个更好的学习平台,就是 VC 方便的开发平台和 TC 简单的绘图功能,于是就有了这个 EasyX 库。如果您刚开始学 C 语言,或者您是一位教 C 语言的老师,再或者您在教计算机图形学,那么这个库一定会让您兴奋的。

    当然,可以用。

    但安装起来有点麻烦。

    曾有人说过这样的话:

    真正的强者,不需要廉价的帮助

    ——鲁迅(我没说过这句话)

    所以,这里提供 仅仅

    #include<bits/stdc++.h>
    #include<windows.h>
    #include<stdlib.h>
    #include<conio.h>

    image.gif

    这几个头文件就可以编译成功的炫酷开场代码。

    开场动画

    1.色块升降

    先给出两段代码。

    int drawbar(int h = 40, int l = 120) {  
        for (int i = 0; i < h; i++) {  
            cursor_to_the_position(i, 0);  
            set_output_font_color(i, 0);  
            for (int to_judge_if_lose = 0; to_judge_if_lose < l; to_judge_if_lose++) {  
                printf(" ");  
            }  
        }  
    }

    image.gif

    int drawbar1(int h = 40, int l = 120) 
    {  
        srand(time(NULL));  
        int s = rand()%4343536+1,missionaries_num;
      srand(s);
      for(int i=0; i<h; i++) 
      {
        missionaries_num=rand()%15+1;
        cursor_to_the_position(i,0);
        set_output_font_color(missionaries_num,0);
        for(int to_judge_if_lose=0; to_judge_if_lose<l; to_judge_if_lose++) printf(" ");
      }
    }

    image.gif

    用人话说,就是几条线从天而降,运行一下可知。但第二条,色块更大。

    科学的讲,就是这样。

    第一段代码是一个函数的定义,名为drawbar,它接受两个参数hl,默认为40和120。该函数的作用是在控制台中绘制一行,行高由参数h控制,行长由参数l控制。在函数的内部,使用一个嵌套的for循环来控制行的长度,循环变量to_judge_if_lose从0开始,每次增加1,直到达到l的值。在循环的每次迭代中,使用printf函数输出一个空格字符,从而在行中绘制出一定长度的空白部分。

    第二段代码是一个修改过的版本,名为drawbar1,它与前一个函数类似,但是添加了一些额外的功能。首先,在代码的开始处添加了使用srand函数设置随机数种子,以便后续的随机数生成。此处使用了time函数作为种子,以确保每次运行程序时生成的随机数序列不同。然后,在循环内部,新增了一个变量missionaries_num,用于存储每次迭代生成的随机数。该变量的类型为整型,且范围在[1, 4343536]之间。在调用set_output_font_color函数时,将missionaries_num作为第一个参数,以便根据每次迭代生成的随机数来设置输出字体的颜色。

    总体而言,这两段代码都是用于在控制台中绘制一行,其中第二段代码添加了随机数生成器来设置输出字体的颜色,以增加变化的多样性。

    同样,你也可以设计出向上下左右的。

    就这样了。

    2.花朵绽放

    直接贴代码。

    int drawrad(int h=40, int l=120, int z=0) {  
        int x = h / 2, y = l / 2;  
        double e, d;  
        double m[17];  
        double w = 8.0;  
        for (int i = 0; i <= 16; i++) {  
            m[i] = PI * (double)(i - w) / (2 * w);  
        }  
        for (int i = 0; i < h; i++) {  
            for (int to_judge_if_lose = 0; to_judge_if_lose < l; to_judge_if_lose++) {  
                e = (double)(i - x) / (double)(to_judge_if_lose - y) * 2;  
                d = atan(e);  
                for (int k = 0; k < 16; k++) {  
                    if (d > m[k] && d < m[k + 1]) {  
                        set_output_font_color(k + z, 0);  
                    }  
                }  
                cursor_to_the_position(i, to_judge_if_lose);  
                cout << " ";  
            }  
        }  
    }

    image.gif

    功能解释如下:

    这段代码实现了一个函数 drawrad,该函数用于绘制一个半径为 h 的圆在长度为 l 的坐标轴上。以下是代码的功能解释:

      1. 定义了函数 drawrad,它接受三个参数:hlz,其中 h 表示圆的半径高度,l 表示坐标轴的长度,z 表示输出字体的颜色偏移量。
      2. 初始化变量 xyhl 的一半,用于计算圆心坐标。
      3. 声明了变量 ed,用于计算绘制圆时的相关值。
      4. 声明了一个大小为 17 的双精度浮点数数组 m,用于存储圆在坐标系上的角度值。
      5. 初始化变量 w 为 8.0,用于计算圆在坐标系上的角度。
      6. 使用循环遍历数组 m,计算每个角度对应的值。
      7. 使用两层嵌套的循环,遍历坐标轴的每个位置,并计算该位置对应的圆的极坐标参数 ed
      8. 使用嵌套的循环,遍历每个位置,根据圆在坐标系上的角度判断输出字体的颜色,并设置输出字体的颜色。
      9. 将光标移动到当前位置,输出一个空格。
      10. 返回绘制的结果。

      总体而言,这段代码的功能是在指定长度和半径的坐标轴上绘制一个圆,并根据圆在坐标系上的角度确定输出字体的颜色。

      3.马赛克

      int drawbar2(int h=40, int l=120) {  
          srand(time(NULL));  
          int s = rand() % 4343536 + 1;  
          srand(s);  
          for (int i = 0; i < h; i++) {  
              cursor_to_the_position(i, 0);  
              for (int to_judge_if_lose = 0; to_judge_if_lose < l; to_judge_if_lose++) {  
                  int missionaries_num = rand() % 15 + 1;  
                  set_output_font_color(missionaries_num, 0);  
                  printf(" ");  
              }  
          }  
      }

      image.gif

      自己运行一下,试试看。

      显示LOGO

      首先,LOGO要居中,因此先确定控制器长宽,再利用换行和空格到达。

      然后,将标志转化成可输出的,并输出。

      下面给大家看看我的工作室(一个人)的标志如何输出(仅展示中心代码):

      std::cout << "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n";  
          std::cout << "                                                      HH   HH  LL    " << std::endl;  
          std::cout << "                                                      HHHHHHH  LL    " << std::endl;  
          std::cout << "                                                      HH   HH  LL    " << std::endl;  
          std::cout << "                                                      HH   HH  LLLLL" << std::endl;  
          std::cout << "\n\n\n                                                       ";  
          Sleep(200);  
          string woshinibaba = "火龙游艺";  
          for (int i = 0; i < woshinibaba.size(); i++) {  
              printf("%c", woshinibaba[i]);  
              Sleep(300);  
          }

      image.gif

      效果图如下:

      image.gif编辑

      结语

      上面只是提供了一些参考,闹着玩的。

      具体还要结合更多资料开展学习。

      相关文章
      |
      2月前
      |
      IDE 测试技术 开发工具
      Poco新增对cocos c++游戏的支持
      Poco新增对cocos c++游戏的支持
      |
      4月前
      |
      数据可视化 图形学 C++
      C++ Qt开发:Charts绘图组件概述
      Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍`QCharts`二维绘图组件的常用方法及灵活运用。Qt Charts 提供了一个强大且易于使用的工具集,用于在 Qt 应用程序中创建各种类型的图表和图形可视化,该模块提供了多种类型的图表,包括折线图、散点图、条形图、饼图等。这使得开发人员能够轻松地将数据以直观的方式呈现给用户,增强应用程序的可视化效果。
      54 0
      C++ Qt开发:Charts绘图组件概述
      |
      7月前
      |
      C++ 计算机视觉 Python
      C++曲线图折线图Qt窗体绘图
      C++曲线图折线图Qt窗体绘图
      121 0
      |
      25天前
      |
      人工智能 机器人 测试技术
      【C/C++】C语言 21点桌牌游戏 (源码) 【独一无二】
      【C/C++】C语言 21点桌牌游戏 (源码) 【独一无二】
      |
      1月前
      |
      C++
      C++循环结构实现的猜数字游戏
      C++循环结构实现的猜数字游戏
      38 1
      |
      2月前
      |
      机器学习/深度学习 算法 测试技术
      【动态规划】【C++算法】1563 石子游戏 V
      【动态规划】【C++算法】1563 石子游戏 V
      |
      2月前
      |
      算法 测试技术 vr&ar
      【动态规划】【C++算法】1340. 跳跃游戏 V
      【动态规划】【C++算法】1340. 跳跃游戏 V
      |
      3月前
      |
      C++ Java Go
      Java每日一练(20230428) 搜索旋转排序数组、栈实现队列、平方根
      Java每日一练(20230428) 搜索旋转排序数组、栈实现队列、平方根
      45 0
      Java每日一练(20230428) 搜索旋转排序数组、栈实现队列、平方根
      |
      3月前
      |
      算法 C++ Java
      Java每日一练(20230423) 数组元素统计、杨辉三角II、二进制求和
      Java每日一练(20230423) 数组元素统计、杨辉三角II、二进制求和
      29 0
      Java每日一练(20230423) 数组元素统计、杨辉三角II、二进制求和
      |
      3月前
      |
      算法 C++ Java
      C/C++每日一练(20230421) 位1的个数、递归和非递归求和、俄罗斯套娃信封问题
      C/C++每日一练(20230421) 位1的个数、递归和非递归求和、俄罗斯套娃信封问题
      24 0
      C/C++每日一练(20230421) 位1的个数、递归和非递归求和、俄罗斯套娃信封问题