C语言实战演练之C语言满屏飘字表白代码

简介: C语言实战演练之C语言满屏飘字表白代码

 

在本篇文章中,厾罗将c语言实现的文字跑马灯做了进一步的完善,最终实现了一个进阶版的满屏飘字表白程序,一起来看看吧!

(在代码的34~62行这里可以更改你想说的话哦)

 

 

在开始编写代码前,我们需要先安装一下EasyX库哦~

 

 

 

 

EasyX是一个基于Windows GDI(图形设备接口)的C++图形库。它为C++程序员提供了一个易于使用且功能强大的图形编程接口,可以在Windows操作系统下创建各种图形界面应用程序。EasyX提供了丰富的绘图函数,可以实现图形绘制、文本输出、图像处理等功能,开发者可以使用它来实现各种有趣的图形应用程序,比如游戏、画图等。


 

 

 

 

 

EasyX的最大特点是其易用性,它基于简单易懂的GDI接口封装了一套易于学习和使用的C++接口。EasyX支持众多的图形绘制函数,比如直线、矩形、椭圆、圆弧等,再加上丰富的颜色、字体、图片等参数设置,可以轻松实现各种复杂的图形绘制。


 

 

 

 

 

除此之外,EasyX还提供了一些实用的辅助功能,比如键盘输入、鼠标操作等。开发者可以使用这些辅助功能来实现用户交互、游戏逻辑等功能,使得开发过程更加简单快捷。


 

 

 

 

 

EasyX适用于Windows操作系统,并且可以兼容多个版本的VC++编译器。EasyX不仅支持多种语言的编程,比如C++、C#、Python等,而且还提供了详细的开发文档和示例代码,方便开发者使用和学习。EasyX库的安装非常简单,只需下载并解压缩,然后在Visual Studio等IDE平台中配置相关设置即可完成安装。它还提供了详细的使用手册和丰富的示例代码,用户可以通过手册和示例代码快速学习和使用EasyX库。


 

 

 

 

 

总的来说,EasyX库是一个非常适合初学者学习和使用的图形库,因为它不仅提供了简单易用的API接口,同时也提供了丰富的教程和示例代码,帮助用户快速上手。对于有一定图形开发经验的程序员来说,EasyX库可以极大地提高开发效率,快速实现各种图形界面和界面效果。因此,EasyX库在教育、游戏、多媒体等领域有着广泛的应用。


 

EasyX下载安装

 

                                     

进入EasyX官网,点击“下载EasyX”开始下载

下载完成后,进入下载目录双击.exe文件开始安装EasyX

接下来就是无脑安装啦

 

 

 

 

       表白代码

 

 

 

 

      完整程序如下:

#include <graphics.h>
#include <time.h>
#include <stdio.h>
#include <conio.h>
#include <vector>
using namespace std;
// 彩球基础设置
#define MAXLove 999  // 设置彩球总数
// 文字基础设置
#define MAX_TEXT_SIZE 20        // 最小文字大小
#define MAX_TEXT_COUNT 30       // 最大同时显示的文字数量
#define MAX_TEXT_BUFFER 255     // 每一句文字的最大字符个数
struct Love
{
  double x;    // 彩球横坐标
  int y;          // 彩球纵坐标
  int r;        // 彩球的大小
  double  speed;  // 彩球下落速度
  int   color;      // 彩球的颜色
};
// 文字结构体
struct Text
{
  int x;       // 橫坐标
  int y;         // 纵坐标
  int textWidth;    // 句子长度
  int textHeight;   // 句子高度
  double step;  // 速度
  int color;    // 颜色
  int size;    // 文字大小
  int direction;  // 方向:默认右边滚动到左边   
  WCHAR* content;      // 文字内容
};
// 定义你想输出的文字,注意句子长度不能超过 MAX_TEXT_BUFFER 个字符,句子数量不能超过 MAX_TEXT_COUNT 
WCHAR TEXT_LIST[MAX_TEXT_COUNT][MAX_TEXT_BUFFER] = {
   _T("我爱你"),
   _T("I Love You!"),
   _T("永远爱你"),
   _T("你是我年少的欢喜"),
   _T("一生一世一双人"),
   _T("余生我陪你走"),
   _T("陪你到来生"),
   _T("春风十里不如你"),
   _T("三生有幸来日方长"),
   _T("夜很长幸有你"),
   _T("爱你的全部"),
   _T("踏过八荒四海只为你"),
   _T("愿得一人心"),
   _T("众里寻他千百度"),
   _T("顶峰相见"),
   _T("等你下课"),
   _T("往后余生"),
   _T("Missing You!"),
   _T("做我女朋友好么"),
   _T("你已经在我的未来里了"),
   _T("陪你到世界之巅"),
   _T("白头偕老"),
   _T("我喜欢你"),
   _T("好想好想你"),
   _T("想你想你想你"),
   _T("今夜月色真美"),
   _T("你是我的唯一")
};
// 存储所有彩球
Love Love[MAXLove]; //保存所有彩球
// 设置字体
LPCTSTR textType = (LPCTSTR)("微软雅黑");
// 存储所有文字数据
Text text[MAX_TEXT_SIZE];
// 初始化彩球
void InitLove(int i, int width, int height)
{
  Love[i].x = rand() % width;
  Love[i].y = rand() % height - height;
  Love[i].r = rand() % 4 + 1;
  Love[i].speed = (rand() % 3333) / 1000.0 + 1;
  Love[i].color = RGB(rand() % 256, rand() % 256, rand() % 256);
}
// 彩球的下落函数
void MoveLove(int i, int width, int height)
{
  setlinecolor(RGB(0, 0, 0));
  setfillcolor(RGB(0, 0, 0));
  // 删除原来的彩球
  fillcircle((int)Love[i].x, Love[i].y, Love[i].r);
  // 计算彩球新位置
  Love[i].y += Love[i].speed;
  if (Love[i].y > height)  InitLove(i, width, height);
  // 画新彩球
  setfillcolor(Love[i].color);
  setlinecolor(Love[i].color);
  fillcircle((int)Love[i].x, Love[i].y, Love[i].r);
}
// 初始化文字
void InitText(int index, int Width, int Height) {
  text[index].x = Width;
  text[index].y = rand() % Height;
  text[index].size = rand() % MAX_TEXT_SIZE + MAX_TEXT_SIZE; // 设置最小文字大小为 20 个像素
  text[index].step = (rand() % 20) + 2;
  text[index].direction = (rand() % 2) + 0.5;
  text[index].content = TEXT_LIST[(rand() % MAX_TEXT_COUNT)];
  text[index].textWidth = textwidth(text[index].content);
  text[index].textHeight = textheight(text[index].content);
  int color = (int)(text[index].step * 255 / 5.0 + 0.5);
  text[index].color = RGB((rand() % 255), (rand() % 255), (rand() % 255));
}
// 初始化文字个数
void InitTexts(int Width, int Height) {
  for (int i = 0; i < MAX_TEXT_COUNT; i++) {
    InitText(i, Width, Height);
  }
}
// 移动文字
void MoveText(int Width, int Height)
{
  for (int i = 0; i < MAX_TEXT_COUNT; i++) {
    // 删除原来的文字
    int textHeight = textheight(text[i].content);
    int textWidth = textwidth(text[i].content);
    settextcolor(RGB(0, 0, 0));
    settextstyle(text[i].size, text[i].size, textType);
    outtextxy(text[i].x, text[i].y, text[i].content);
    // 计算新位置
    text[i].x -= text[i].step;
    if ((text[i].x + textWidth) <= 0) {
      InitText(i, Width, Height);
    }
    settextcolor(text[i].color);
    settextstyle(text[i].size, 0, textType);
    outtextxy(text[i].x, text[i].y, text[i].content);
  }
}
// 主函数
int main()
{
  srand((unsigned)time(NULL));// 设置随机种子
  int ScreenWidth = GetSystemMetrics(SM_CXSCREEN);
  int ScreenHeight = GetSystemMetrics(SM_CYSCREEN);
  initgraph(ScreenWidth, ScreenHeight);// 创建绘图窗口
  HWND hwnd = GetHWnd(); // 获取绘图窗口句柄
  int x = 0; // 窗口左上角横坐标
  int y = 0; // 窗口左上角纵坐标
  SetWindowPos(hwnd, HWND_TOP, x, y, 0, 0, SWP_NOSIZE); // 设置窗口位置
  // 初始化所有彩球
  for (int i = 0; i < MAXLove; i++)
  {
    InitLove(i, ScreenWidth, ScreenHeight);
    Love[i].x = rand() % ScreenWidth;
  }
  // 初始化所有文字
  InitTexts(ScreenWidth, ScreenHeight);
  // 绘制彩球,按任意键退出
  while (!_kbhit())
  {
    for (int i = 0; i < MAXLove; i++)
      MoveLove(i, ScreenWidth, ScreenHeight);
    BeginBatchDraw();
    MoveText(ScreenWidth, ScreenHeight);
    FlushBatchDraw();
    Sleep(5);
  }
  EndBatchDraw();
  closegraph();// 关闭绘图窗口
}

 

 

详细分析

 

 

本代码使用了EasyX图形库和WinAPI,是一个萌萌哒的表白程序,主要功能是随机生成不同颜色的彩球和文字,在屏幕上自由飘动,让人感到温馨。

该程序主要分成以下几个部分:

 

 

在程序开头,先定义了一些宏和数据结构,用于控制彩球数量、文字数量、颜色等等。同时定义了两个结构体,分别用于存储彩球和文字的相关信息。

 

初始化彩球和文字

在程序开始运行时,先通过一个for循环,初始化了所有的彩球。根据屏幕的宽度和高度生成随机的x、y坐标、大小、颜色、下落速度,并将生成的彩球信息存储在Love数组中。同样地,也会初始化所有的文字,生成随机的x、y坐标、文字大小、方向、颜色、文字内容等信息,并将信息存储在text数组中。

 

彩球下落和文字滚动

 

在绘制窗口的过程中,使用for循环遍历所有的彩球和文字,通过MoveLove()函数实现彩球的下落效果,通过MoveText()函数实现文字的水平滚动效果。在下落和滚动的过程中,先通过setlinecolor()和setfillcolor()函数去除图形原来的颜色,再根据彩球或文字的新坐标和新的颜色进行填充。

 

程序主函数

 

在主函数中,先通过srand()函数设置随机种子,生成真正的随机数。然后通过initgraph()函数初始化图形窗口,并获取窗口句柄,设置窗口的位置。接着运用for循环,绘制所有彩球和文字。通过BeginBatchDraw()和EndBatchDraw()函数实现图形的批量绘制和刷新,加快图形绘制的速度。最后,在while循环中等待键盘输入,如果有键盘输入,则退出程序,并通过closegraph()函数关闭图形窗口。

 

总结

 

本程序通过EasyX图形库和WinAPI,利用C++实现了一个简单的萌萌哒表白程序,让人感到温馨。程序运用到了数组、结构体、随机数、批量绘制、键盘输入等知识点,适合初学者练手。

 

 

运行结果

 

相关文章
|
21天前
|
存储 C语言 开发者
C语言实战 | Flappy Bird游戏
【7月更文挑战第4天】Flappy Bird是由越南开发者制作的简单却极具挑战性的游戏,玩家需控制小鸟穿越水管障碍。游戏涉及角色初始化、显示和更新。小鸟和水管结构体存储数据,使用变量和数组。初始化小鸟和水管,显示背景、小鸟和水管,更新小鸟位置及碰撞检测。代码示例展示了小鸟和水管的状态管理,当小鸟与管道碰撞或触地时,游戏结束。游戏的成功在于其独特的虐心体验。
25 0
C语言实战 | Flappy Bird游戏
|
14天前
|
C语言
C语言实战 | 弹跳的小球
【7月更文挑战第6天】使用C语言实现了一个小球(小方块)在屏幕上斜向移动并反弹的程序。当小球碰到边界时,其运动方向会发生改变。代码分为三部分,分别处理初始化、主循环和更新位置及边界检测。变量drow和dcol控制移动方向,遇到边界时会反转它们的值。
14 3
C语言实战 | 弹跳的小球
|
22天前
|
存储 大数据 文件存储
C语言实战 | 用户管理系统重构
【7月更文挑战第3天】在大数据背景下,云存储成为关键。案例展示了如何创建一个用户管理系统,包含登录和注册功能,确保数据持久化。通过文件存储,即便程序重启,用户信息仍能被保留,实现登录状态的延续。代码图片省略。
18 2
C语言实战 | 用户管理系统重构
|
22天前
|
C语言 数据安全/隐私保护 UED
C语言实战 | 用户管理系统
【7月更文挑战第2天】近期推出的青少年防沉迷系统采用统一标准,管控未成年人上网时段、时长及内容。用户管理系统是其基础,包含登录和注册功能。代码示例展示了用户管理的流程,通过保存用户信息到文件实现持久化,避免重复注册,确保在限制游戏时间的同时提供更好的用户体验。
17 1
C语言实战 | 用户管理系统
|
15天前
|
存储 编译器 C语言
C语言实战 | “贪吃蛇”游戏
【7月更文挑战第5天】在C语言实战中,本文档介绍了如何构建一个简单的“贪吃蛇”游戏。游戏的核心是控制蛇移动并增长,当吃掉食物时,蛇的身体变长。数据结构使用固定大小的数组表示蛇的位置,变量存储食物位置和蛇的长度。初始化后,利用非阻塞式`getKey()`函数实现WASD键盘控制蛇的运动方向。虽然蛇的边界检测和吃食物后的增长尚未详细说明,但提到了这些问题作为练习留给读者解决,并预告将在后续章节讨论模块化编程以简化复杂代码。
27 0
C语言实战 | “贪吃蛇”游戏
|
23天前
|
存储 数据管理 C语言
C语言实战 | 使用链表完成“贪吃蛇”游戏
【7月更文挑战第1天】整体思维,即系统思维,强调以整体视角理解事物。在编程中,结构体体现这种思想,将相关变量打包处理。示例展示了如何用链表而非数组实现“贪吃蛇”游戏,链表提供了更灵活的动态数据管理。一系列代码图片详细描绘了链表结构体在游戏中的应用,包括节点定义、移动、碰撞检测等,凸显了使用链表的优势和代码的清晰组织。
19 0
C语言实战 | 使用链表完成“贪吃蛇”游戏
|
28天前
|
存储 C语言
C语言实战 | “贪吃蛇”游戏重构
在程序设计中,模块化思维至关重要,尤其对于复杂项目,它帮助分解任务,便于团队协作。以“贪吃蛇”游戏为例,游戏涉及两个角色:蛇和食物。使用数组存储蛇的位置,变量存储食物位置。游戏流程分为初始化、显示和更新数据。初始化时,食物位置随机,蛇的位置根据数组设定。显示数据则根据这些信息在屏幕上呈现角色。更新数据时,处理蛇的移动和增长以及食物的生成和消失。类似地,通过模块化方法可开发“打砖块”游戏,涉及球、球拍和砖墙,每个角色都有相应数据结构和更新逻辑。通过这种方式,游戏开发就像搭建积木,遵循框架逐步实现。
30 0
C语言实战 | “贪吃蛇”游戏重构
|
27天前
|
C语言
C语言实现猜数字游戏:代码详解与函数解析
C语言实现猜数字游戏:代码详解与函数解析
14 0
|
28天前
|
存储 C语言
C语言实战 | “俄罗斯方块”游戏重构
摘要(Markdown格式): 在之前的游戏中,全局变量的过度使用导致存储浪费和低代码通用性。以“贪吃蛇”为例,显示功能依赖全局变量,限制了函数的复用。通过参数传递代替全局变量,如在“俄罗斯方块”等游戏中控制物体运动的函数,可提升代码重用性和模块化。重构过程中,即使小到变量命名和代码精简的改进,也能逐步带来程序质量的显著提升。
16 0
|
28天前
|
机器学习/深度学习 C语言 Windows
程序与技术分享:C语言学生宿舍管理系统代码(可运行)
程序与技术分享:C语言学生宿舍管理系统代码(可运行)
17 0