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

news2024/11/19 19:18:34

🍿*★,°*:.☆( ̄▽ ̄)/$:*.°★* 🍿
       🍟欢迎来到静渊隐者的csdn博文,本文是c++游戏制作指南的一部🍟

 

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

🍨 c++游戏制作指南🍨


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

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

🌭学习目的:能够自主编写出有趣的c++控制台游戏,并掌握自学的方法。
🥞喜欢的朋友可以关注一下,下次更新不迷路


🥙前言

做游戏,先要玩游戏。

我们先观察一下游戏。

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

启动界面

 启动界面。

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

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

众所周知,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>

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

开场动画

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(" ");  
        }  
    }  
}  

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(" ");
	}
}

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

科学的讲,就是这样。

第一段代码是一个函数的定义,名为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 << " ";  
        }  
    }  
}

功能解释如下:

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

  1. 定义了函数 drawrad,它接受三个参数:hl 和 z,其中 h 表示圆的半径高度,l 表示坐标轴的长度,z 表示输出字体的颜色偏移量。
  2. 初始化变量 x 和 y 为 h 和 l 的一半,用于计算圆心坐标。
  3. 声明了变量 e 和 d,用于计算绘制圆时的相关值。
  4. 声明了一个大小为 17 的双精度浮点数数组 m,用于存储圆在坐标系上的角度值。
  5. 初始化变量 w 为 8.0,用于计算圆在坐标系上的角度。
  6. 使用循环遍历数组 m,计算每个角度对应的值。
  7. 使用两层嵌套的循环,遍历坐标轴的每个位置,并计算该位置对应的圆的极坐标参数 e 和 d
  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(" ");  
        }  
    }  
}  

自己运行一下,试试看。 

显示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);  
    }  

效果图如下:

 

 

结语 

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

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

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

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

相关文章

SAP 集成以及PO异步接口调优

前言&#xff1a;目前国内的SAP相关的技术文档实在是少得可怜&#xff0c;PO相关的就更少了&#xff0c;基本上都是需要摸索&#xff0c;官方的技术专家很多时候的回复都是说了又似乎没说。。。 背景&#xff1a;由于目标系统接收数据缓慢或者是异步线程出现异常导致错误积压。…

IO流(3)- 转换流与打印流

目录 1. 为什么要用到转换流&#xff1f; 2. 字符输入转换流&#xff08;重点掌握&#xff09; 3. 字符转换输出流&#xff08;理解即可&#xff09; 4. 认识打印流 5. 打印流的作用 6. PrintStream(字节打印流)如何使用&#xff1f; 7. PrintStream 内部没有缓冲区 8. …

Go -- 测试 and 项目实战

没有后端基础&#xff0c;学起来真是费劲&#xff0c;所以打算速刷一下&#xff0c;代码跟着敲一遍&#xff0c;有个印象&#xff0c;大项目肯定也做不了了&#xff0c;先把该学的学了&#xff0c;有空就跟点单体项目&#xff0c;还有该看的书.... 目录 &#x1f34c;单元测试…

【LeetCode】【数据结构】单链表OJ常见题型(二)

&#x1f440;樊梓慕&#xff1a;个人主页 &#x1f3a5;个人专栏&#xff1a;《C语言》《数据结构》《蓝桥杯试题》《LeetCode刷题笔记》 &#x1f31d;每一个不曾起舞的日子&#xff0c;都是对生命的辜负 目录 前言&#xff1a; 【LeetCode】面试题02.04. 分割链表 【Lee…

Unity实现物体上下漂浮旋转效果

效果展示 代码&#xff08;直接挂载在物体上就可以了&#xff09; using System.Collections; using System.Collections.Generic; using UnityEngine;public class FloatingObject : MonoBehaviour {public float amplitude 0.5f; // 上下移动的幅度public float frequency …

C# OpenCvSharp 去水印 图像修复

效果 项目 VS2010.net4.0OpenCvSharp3 代码 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.IO; using System…

简单了解一下vue-router是什么

要学习vue-router就要先知道这里的路由是什么&#xff1f;为什么我们不能像原来一样直接用<a></a>标签编写链接哪&#xff1f;vue-router如何使用&#xff1f;常见路由操作有哪些&#xff1f;等等这些问题&#xff0c;就是本篇要探讨的主要问题。 vue-router是什么…

【二叉树进阶】二叉树的前中后序遍历(非递归迭代实现)

文章目录 1. 二叉树的前序遍历1.1 思路分析1.2 AC代码 2. 二叉树的中序遍历2.1 思路分析2.2 AC代码 3. 二叉树的后序遍历3.1 思路13.2 思路1AC3.3 思路23.4 思路2AC 1. 二叉树的前序遍历 题目链接: link 不用递归&#xff0c;用迭代算法如何实现对二叉树的前序遍历&#xff1f…

linux作业

1.简述静态网页和动态网页的区别 (1).程序是否在服务器端运行&#xff0c;是重要标志。 (2).编程技术不同。静态网页和动态网页主要根据网页制作的语言来区分。 (3).被搜索引擎收录情况不同。 (4).用户访问速度不同。 (5).制作和后期维护工作量不同。 2. 简述 Webl.0 和 …

嵌入式pc技术的特点有哪些?

嵌入式PC技术是将计算机硬件和软件嵌入到各种设备中的一种技术&#xff0c;它具有低功耗、高效率、小型化、易于集成等优点&#xff0c;广泛应用于工业自动化、医疗设备、电力、通信、家用电器、物联网等领域&#xff0c;成为新时代工业生产和社会生活必不可少的技术之一。 嵌入…

Python基本数据类型之散列类型详解

前言&#xff1a; python的基本数据类型可以分为三类&#xff1a;数值类型、序列类型、散列类型&#xff0c;本文主要介绍散列类型。 一、散列类型 散列类型&#xff1a;内部元素无序&#xff0c;不能通过下标取值 1&#xff09;字典&#xff08;dict&#xff09;&#xff…

SAP 特殊采购类型52简介

特殊采购类型52简介-52 直接生产/收集订单可以在物料主数据中进行设置或者在BOM中进行设置, 所谓“直接生产”,是相对于一般的“间接生产”模式而言的。在我们通常采用的计划模式下面,所有在BOM结构里面的半成品,都是在库存中作为一个整体, 可以用在任意的一个成品物料,或…

STM32 NOR_FLASH 学习

NOR FLASH FLASH是常用的&#xff0c;用于存储数据的半导体器件&#xff0c;它具有容量大&#xff0c;可重复擦写、按“扇区/块”擦除、掉电后数据可继续保存的特性。 NOR FLASH的单位是MB&#xff0c;EEPROM的单位是KB。 NM25Q128&#xff0c;是NOR FLASH的一种&#xff0c…

正则匹配img标签里面src

正则&#xff1a; (?<src\s*\s*\")\S(?\"{1})匹配效果&#xff1a;

SAP F4下拉值报错:【内部错误:表格格式】

报错截图如下&#xff1a; 解决办法&#xff1a; 事务码&#xff1a;SU3 在【参数】页签维护如下值&#xff1a; SET/GET参数标识参数值简短描述F4METHODNoActiveXActiveX/NoActiveX 维护好以上信息之后&#xff0c;就可以正常显示下拉值了

OpenHarmony ArkUI 如何调用相机

​ ArkUI调用相机和调用相册其实是一个思路&#xff0c;只用修改一个地方。 我们继续来说相机调用&#xff0c;ArkUI没办法自己获取相机&#xff0c;所以得依靠一下ohos.multimedia.camera 相机开发指导 介绍 本指导主要展示了调用相机的调用过程&#xff0c;以及调用相机的…

【Elasticsearch】学好Elasticsearch系列-Query DSL

本文已收录至Github&#xff0c;推荐阅读 &#x1f449; Java随想录 先看后赞&#xff0c;养成习惯。 点赞收藏&#xff0c;人生辉煌。 文章目录 查询上下文相关度评分&#xff1a;_score源数据&#xff1a;_source数据源过滤器全文检索match&#xff1a;匹配包含某个term的子句…

整个个人博客?想找纯html代码模板?来个手机版带菜单的首页模板“参考参考”

以前做毕业设计的时候老想找一些不掺杂后端代码的前端模板。 可是下载下来&#xff0c;不是php就是python后台的。看又看不懂&#xff0c;想换语言就必须先把里面的后台代码拿掉。 就很像买了个精装的二手房&#xff0c;白白多花了砸墙钱。 就比如&#xff0c;想做个带菜单的…

【go-zero】docker镜像直接部署API与RPC服务 如何实现注册发现?docker network 实现 go-zero 注册发现

一、场景&问题 使用docker直接部署go-zero微服务会发现API无法找到RPC服务 1、API无法发现RPC服务 用docker直接部署 我们会发现API无法注册发现RPC服务 原因是我们缺少了docker的network网桥 2、系统内查看 RPC服务运行正常API服务启动,通过docker logs 查看日志还是未…

数据库相关知识点

体系结构图&#xff1a; 体系介绍&#xff1a; Client Connectors 接入方。支持很多协议(JDBC、ODBC、.NET、PHP、Python、PERL、C 等) Management Serveices & Utilities 系统管理和控制工具&#xff0c;mysqldump、 mysql复制集群、分区管理等 Connection Pool 连接池…