首页 > 其他分享 >基于EasyX和Raylib的字符阵

基于EasyX和Raylib的字符阵

时间:2023-01-25 21:34:22浏览次数:68  
标签:字符 rand int EasyX Raylib ++ include

字符阵是 EasyX 的经典样例程序: https://codebus.cn/yangw/character-matrix

使用 raylib 替代 easyx. 除了常规的 API 替换, 还需要额外调用 SwapScreenBuffer().
由于 DrawText() / DrawTextEx() 并不会检测已经绘制文字的位置, 会存在字体重叠的问题
Raylib 默认的字体显示效果不太理想, 需要额外准备 ttf 字体文件加载使用

基于 Raylib 的实现

#include "raylib.h"
#include <stdio.h>
#include <stdlib.h>
#include "raylib_helper.hpp"
#include <time.h>
#include <math.h>

#include <string>

const int width = 640;
const int height = 480;
int x[3];
int y[3];
int c[3];
char s[2] = { 0 };

Font font;

void startup()
{
	InitWindow(width, height, "Character Matrix");
	SetTargetFPS(60);

	srand((unsigned)time(NULL));
	// anonymous_pro_bold.ttf
	font = LoadFontEx("anonymous_pro_bold.ttf", 96, 0, 0);
}

void update()
{
	for (int j = 0; j < 3; j++)
	{
		x[j] = (rand() % 80) * 8;
		y[j] = (rand() % 20) * 24;
		c[j] = (rand() % 26) + 'a';
	}
}

void show()
{
	static int i = 0;
	BeginDrawing();
	{
		ClearBackground(BLACK);
		for (int j = 0; j < 3; j++)
		{
			//DrawText(s, x[j], y[j], 30, GREEN);
			Vector2 pos = make_vector(x[j], y[j]);
			int fontsize = 16;
			int spacing = 10;
			s[0] = c[j];
			DrawTextEx(font, s, pos, fontsize, spacing, GREEN);
			//DrawRectangle(x[j], y[j], 8, 16, GREEN);
		}

		i = (i + 1) % height;
		Vector2 startPos = make_vector(0, i);
		Vector2 endPos = make_vector(width - 1, i);
		int thick = 2;
		DrawLineEx(startPos, endPos, thick, BLACK);

		SwapScreenBuffer(); //! 确保相邻两帧的内容都被正确绘制。若没有这句,则当前帧绘制的文字在下一帧不显示,在第三帧才显示
	}
	EndDrawing();
}

int main()
{
	startup();
	while (!WindowShouldClose())
	{
		update();
		show();
	}
	CloseWindow();

	return 0;
}

基于 EasyX 的实现

// 程序名称:字符阵
// 编译环境:Visual C++ 6.0 / 2010,EasyX_20200902
// 发布日期:2009-2-22
//
#include <graphics.h>
#include <time.h>
#include <conio.h>

int main()
{
	// 设置随机函数种子
	srand((unsigned)time(NULL));

	// 初始化图形模式
	initgraph(640, 480);

	int x, y;
	TCHAR c;

	settextstyle(16, 8, _T("Courier"));	// 设置文字样式
	settextcolor(GREEN);				// 设置文字颜色
	setlinecolor(BLACK);				// 设置画线颜色

	while (!_kbhit())
	{
		for (int i = 0; i < 479; i++)
		{
			for (int j = 0; j < 3; j++)
			{
				x = (rand() % 80) * 8;
				y = (rand() % 20) * 24;
				c = (rand() % 26) + 65;
				outtextxy(x, y, c);
			}

			line(0, i, 639, i);

			Sleep(10);
			if (_kbhit()) break;
		}
	}

	// 关闭图形模式
	closegraph();
	return 0;
}

标签:字符,rand,int,EasyX,Raylib,++,include
From: https://www.cnblogs.com/zjutzz/p/17067313.html

相关文章

  • 字符串
    KMPKMP是一种字符串单模匹配算法,复杂度\(\operatorname{O(n+k)}\)。KMP这个名字的由来:它是三个人:D.E·Knuth、J.H·Morris和V.R·Pratt同时发现的。其中,......
  • 基于EasyX和Raylib的自由落体小球
    这个简陋的小游戏,在《C和C++游戏趣味编程》第三章,是逐次迭代写成的。这里贴出基于easyx和raylib的各自实现。基于EasyX//根据《C和C++游戏趣味编程》第二章仿......
  • 基于EasyX和Raylib的十字消除
    基于EasyX//根据《C和C++游戏趣味编程》第10章十字消除写出#include<graphics.h>#include<conio.h>//_kbhit()#include<stdio.h>#include<stdlib.h>#inc......
  • 基于EasyX和Raylib的别碰方块
    基于EasyX//根据《C和C++游戏趣味编程》第三章别碰方块写出#include<graphics.h>#include<conio.h>//_kbhit()#include<stdio.h>//检测按下了空格键voi......
  • 基于EasyX和Raylib的推箱子
    基于EasyX//根据《C和C++游戏趣味编程》第九章推箱子写出#include<graphics.h>#include<conio.h>//_kbhit()#include<stdio.h>#include<stdlib.h>//玩......
  • 基于EasyX和Raylib的坚持100秒
    EasyX//根据《C和C++游戏趣味编程》第12章坚持100秒写出#include<graphics.h>#include<conio.h>//_kbhit()#include<stdio.h>#include<stdlib.h>#include......
  • 使用 Linux 命令来获取输入文件中特定字符的出现次数
    概述我们将学习如何使用Linux命令来获取输入文件中特定字符的出现次数。我们假设您知道一些常见的Linux命令,包括grep、awk和tr。我们还假设我们的输入文件tpoint.tx......
  • 基于EasyX和Raylib的字符雨
    思路按如下顺序尝试:绘制一个字符下落绘制4个字符(一列)的下落绘制20个字符(一列)的下落,并封装其位置更新、绘制的过程为Rain类的成员函数绘制多个雨滴每个雨滴在更新......
  • 基于EasyX和Raylib的贪吃蛇
    基于EasyX//根据《C和C++游戏趣味编程》第七章贪吃蛇写出#include<graphics.h>#include<conio.h>//_kbhit()#include<stdio.h>#include<stdlib.h>//全......
  • C++Day09 深拷贝、写时复制(cow)、短字符串优化
    一、std::string的底层实现1、深拷贝1classString{2public:3String(constString&rhs):m_pstr(newchar[strlen(rhs)+1]()){4}5private:6cha......