我用C语言实现的文字跑马灯,简直是程序员的表白神器!

技术

点击关注 | 开启我们的故事

"三生有幸,来日方长"

picture.image

系列文章

picture.image

Python百宝箱

C语言百宝箱

Java百宝箱

picture.image

写在前面

picture.image

教你用C语言实现文字跑马灯效果,简直是C语言表白神器!

环境:C语言/C++

软件:Visual Studio 2022

picture.image

C语言简介

picture.image

C语言是一种通用的高级编程语言,由丹尼斯·里奇在20世纪70年代初开发。C语言的设计目的是为了提供一种简洁、高效、可移植的编程语言,适用于不同平台和操作系统。

C语言之所以成为一种重要的编程语言,是因为它具有以下几个优点:

  1. 简洁高效:C语言的语法简洁,代码执行效率高。同时,C语言可以直接访问计算机硬件,使得程序员可以更加精细地控制程序的运行。

  2. 可移植性强:C语言的语法和标准库是跨平台的,可以在不同操作系统和计算机上编写和运行程序。这种跨平台特性使得C语言成为了许多操作系统和软件的主要开发语言。

  3. 丰富的库函数:C标准库提供了丰富的函数,这些函数可以帮助程序员完成各种任务,如文件处理、字符串处理和数学计算等。这些函数是C程序员必备的工具之一。

  4. 应用广泛:由于C语言具有高效、可移植和丰富的库函数等优点,它被广泛应用于系统软件、嵌入式系统、游戏开发、科学计算、互联网应用和金融行业等领域。

总体来说,C语言是一种简洁、高效、可移植的编程语言,具有广泛的应用领域。学习C语言可以帮助程序员掌握编程基本原理和技术,为其未来的编程生涯奠定坚实的基础。

**picture.image

EasyX简介

picture.image**

EasyX是一款基于C++语言的简单易用的图形界面库,可以轻松实现窗口、绘图、动画等功能。它是对Windows GDI和GDI+的封装,使得程序员能够更加方便地进行二维图形绘制和窗口控制。

EasyX提供了丰富多彩的绘图函数,包括绘制线段、矩形、圆形、曲线、文字等,同时还支持多种颜色和渐变效果。此外,EasyX还提供了一些窗口控制函数,使得程序员可以轻松地创建、打开、关闭窗口、设置窗口大小等。

EasyX对于初学者来说非常友好,它的函数名和参数都比较易懂,而且在官方网站上也提供了详细的使用说明和示例代码,帮助用户更快地上手使用。此外,EasyX还提供了一些常用的功能模块,如游戏引擎、音乐播放器等,使得程序员可以更快地开发出功能完备的应用程序。

EasyX支持多种编译器,包括Visual Studio、Code::Blocks、Dev-C++等,用户可以根据自己的喜好选择不同的编译器进行开发。其内置了一些常用的头文件和库文件,使得程序员可以更加方便地编写代码,减少了繁琐的配置工作。

总体来说,EasyX是一款非常实用、易用的图形界面库,适用于想要快速开发二维图形应用程序的C++初学者和开发者。它简洁易懂的函数调用方式和丰富多彩的绘图效果,可以让程序员在短时间内快速实现自己的创意。

**picture.image

EasyX下载安装

picture.image**

picture.image

01

进入EasyX官网,点击下载按钮开始下载

picture.image

picture.image

0 2

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

picture.image

picture.image

0 3

按如下步骤进行安装即可

picture.image

picture.image

picture.image

picture.image

文字跑马灯

picture.image

完整程序


            
#include <graphics.h>
            
#include <time.h>
            
#include <stdio.h>
            
#include <conio.h>
            
#include <vector>
            
using namespace std;
            
#define MAX_TEXT_SIZE 20        // 最小文字大小
            
#define MAX_TEXT_COUNT 15       // 最大同时显示的文字数量
            
#define MAX_TEXT_COUNT 15    // 最大句子数量
            
#define MAX_TEXT_BUFFER 255     // 每一句文字的最大字符个数
            
// 文字结构体
            
struct TextContent
            
{
            
  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("顶峰相见")
            
};
            
// 设置字体
            
LPCTSTR textType = (LPCTSTR)("微软雅黑");
            
// 存储所有文字数据
            
TextContent text[MAX_TEXT_SIZE];  
            
// 初始化文字
            
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 / 6.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 Width = GetSystemMetrics(SM_CXSCREEN);
            
  int Height = GetSystemMetrics(SM_CYSCREEN);
            
  initgraph(Width, Height);// 创建绘图窗口
            
  HWND hwnd = GetHWnd(); // 获取绘图窗口句柄
            
  int x = 0; // 窗口左上角横坐标
            
  int y = 0; // 窗口左上角纵坐标
            
  SetWindowPos(hwnd, HWND_TOP, x, y, 0, 0, SWP_NOSIZE); // 设置窗口位置
            
  // 初始化所有文字
            
  InitTexts(Width, Height);
            
  while (!_kbhit())
            
  {
            
    BeginBatchDraw();
            
    MoveText(Width, Height);
            
    FlushBatchDraw();
            
    Sleep(5);
            
  }
            
  EndBatchDraw();
            
  closegraph();          // 关闭绘图窗口
            
}
        

具体分析

本程序是一个基于C语言的文字跑马灯程序,可在Windows平台上运行。

程序中主要使用了Windows.h头文件下的相关API函数和graphics.h头文件下的相关绘图函数来实现文字的滚动效果。

程序中定义了一个TextContent结构体,用于存储文字的相关信息,如横坐标、纵坐标、大小、颜色、内容等。同时,还定义了一些常量,如最小文字大小、最大同时显示的文字数量、句子数量等。

在InitText函数中,程序通过随机生成一些文字的相关信息,如大小、速度、方向等,并将其存储到TextContent结构体中。在InitTexts函数中,程序初始化了所有文字的相关信息。

在MoveText函数中,程序通过循环遍历所有已经存在的TextContent结构体,实现文字的滚动效果。具体实现方式为:首先计算出文字的新位置,然后删除原来的文字,最后在新位置上绘制出新的文字。

在主函数中,程序通过获取系统屏幕的宽度和高度来确定绘图窗口的大小,然后调用initgraph函数创建绘图窗口。接着使用GetHWnd函数获取绘图窗口句柄,并使用SetWindowPos函数设置窗口位置。最后,在循环中调用MoveText函数实现文字的滚动效果。

小伙伴们学会了吗,赶紧写一个文字走马灯送给她吧!

运行结果

picture.image

picture.image

写在后面

picture.image

⭐我是一只有趣的兔子,感谢你的喜欢!⭐

0
0
0
0
关于作者
关于作者

文章

0

获赞

0

收藏

0

相关资源
云原生环境下的日志采集存储分析实践
云原生场景下,日志数据的规模和种类剧增,日志采集、加工、分析的多样性也大大增加。面对这些挑战,火山引擎基于超大规模下的 Kubernetes 日志实践孵化出了一套完整的日志采集、加工、查询、分析、消费的平台。本次主要分享了火山引擎云原生日志平台的相关实践。
相关产品
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论