你好我目前正在处理的是从文本文件获取输入然后将其转换为位图并将其保存到文件的能力。
输入如下所示:
########
# #
########
我希望用allegro绘制它而不是#会有指定大小的像素。每个#应代表一个图块(10x10像素)。所以最终结果看起来像这样
我实际上是使用这段代码绘制的:
for (int i = 0; i < 80; i++){
for (int j = 0; j < 10; j++){
al_draw_pixel(i, j, al_map_rgb(0, 0, 0));
}
}
for (int i = 0; i < 10; i++){
for (int j = 10; j < 20; j++){
al_draw_pixel(i, j, al_map_rgb(0, 0, 0));
}
}
for (int i = 70; i < 80; i++){
for (int j = 10; j < 20; j++){
al_draw_pixel(i, j, al_map_rgb(0, 0, 0));
}
}
for (int i = 0; i < 80; i++){
for (int j = 20; j < 30; j++){
al_draw_pixel(i, j, al_map_rgb(0, 0, 0));
}
}
是的,那是非常糟糕的,所以我如何实现类似的东西,但有一个独立于文本文件的通用程序?谢谢你的任何建议。
注意:唯一允许的标题是allegro5 / allegro.h和allegro5 / allegro_image.h
答案 0 :(得分:0)
要使用Allegro 5绘制图像,您需要执行以下操作:
ALLEGRO_BITMAP *bmp = al_create_bitmap(640, 480);
al_set_target_bitmap(bmp);
现在所有的绘图操作都将在图像上进行。稍后保存:
al_save_bitmap("somefile.bmp", bmp);
如果你的图片库支持启用它,你也可以使用png
和jpg
作为扩展名。
使用这些功能读取文本文件:
al_fopen
al_fgetc
al_feof
al_fclose
将int x
和y
设为零。你将循环直到文件结束。每次迭代增量x
一个。如果您将新行字符(\n
)增加y
一个,并将x
设置为零。 (您应该忽略\r
个字符。)
现在,根据读取的字符,绘制一个图块:
ALLEGRO_BITAMP *tile_to_draw = NULL;
if (c == '#')
tile_to_draw = bmp1;
else if (c == ' ')
tile_to_draw = bmp2;
if (tile_to_draw)
al_draw_bitmap(tile_to_draw, x * 10, y * 10, 0);
当然,有更好的方法将字符映射到磁贴而不是一系列if
,但上述工作方式应该足以帮助您完成作业。