- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个辅助函数,它接受一个字符串和一个用于格式化字符串的颜色 vector ,现在我的解决方案是手动检查颜色 vector 的大小,并使用相同数量的颜色调用控制台打印颜色。
假设我有一个 4 的颜色 vector ,在代码中它会做类似的事情:
void helper_func(TCODConsole* con, std::string msg_str, std::vector<TCOD_colctrl_t> color_vector)
{
char* message = msg_str.c_str();
//this is repeated 1 through 16, adding another color_vector.at(n) for each.
...
else if (color_vector.size() == 2)
//message might be "%cHello%c was in red"
console->print(x, y, message, color_vector.at(0), color_vector.at(1))
...
else if (color_vector.size() == 4)
//message might be "%cThe octopus%c shimmers at %cnight%c"
console->print(x, y, message, color_vector.at(0), color_vector.at(1), color_vector.at(2), color_vector.at(3))
...
}
虽然这可行,但它很糟糕,我正在研究不同的方法来实现它,允许超过 16 种颜色等。
我尝试为 vector 中的每种颜色执行 sprintf
,将其添加到 out_string 并重复。我试过用 ostringstream 做同样的事情。我试过在 "%c"
上拆分 msg_str,然后在我为每个字符串添加颜色后加入结果字符串。它从来没有成功过,总是要么使用第一种颜色,然后使用随机字符而不是从那里开始的颜色。
我希望以上任何一个都能工作,因为简单的 sprintf(out_char, format_msg, TCOD_COLCTRL_1)
打印到控制台(使用 console->print(out_char)
) 就好了。
我的问题是:是否有一种好方法可以将不同数量的颜色传递给控制台 -> 打印功能并使其准确显示这些颜色,而无需严重的代码冗余?
作为回退,我可以打印出字符串的一部分直到第一种颜色,计算它的大小,将 x
移动那么多并打印下一部分,但这并不理想。
我想这个问题可以概括为询问关于常规 printf
的相同问题也有替换。
最佳答案
可变参数函数的一个可能替代方案可能涉及为“%c”解析 msg_str 并根据 color_vector 以正确的颜色迭代打印字符串的每个部分。我不确定下面这段代码是否可以编译——我是用记事本写的,所以它可能需要一些工作。希望您能理解我的建议。
void helper_func(TCODConsole* con, std::string msg_str, std::vector<TCOD_colctrl_t> color_vector)
{
std::string str2;
std::size_t pos;
std::size_t pos2;
pos = msg_str.find("%c");
if (pos != std::string::npos)
str2 = msg_str.substr(0,pos);
else
str2 = msg_str;
console->print(x, y, str2.c_str());
int n = 0;
while (pos != std::string::npos) {
pos2 = msg_str.find("%c",pos+1);
if (pos2 != std::string::npos)
str2 = msg_str.substr(pos+2,pos2);
else
str2 = msg_str.substr(pos2+2,msg_str.length()-pos2+2);
console->print(x, y, str2.c_str(),color_vector.at(n));
pos = pos2;
n++;
}
}
我想我应该提一下,我的代码有问题。第二个 print 语句中的 x 值需要每次通过 while 循环计算,因为 x 作为 pos2 的函数变化。否则,一切都只会在同一个地方打印。 :) 应该是一个简单的改变...
关于c++ - 使用 Libtcod,如何控制 -> 打印具有动态颜色量的字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23162382/
我正在浏览 Roguebasin python/libtcod roguelike tutorial .我遇到的问题是,每次调用 key = libtcod.console_wait_for_keyp
我正在使用 libtcod 和 c,但我的移动函数不响应输入,这是函数被调用时的样子 TCOD_key_t key; move_entity(player.x, player.y, k
我正在尝试静态链接 libtcod我的 C++ 项目没有成功。我遇到很多链接错误,包括: ./tuto: 加载共享库时出错:libtcodxx.so.1: 无法打开共享对象文件:没有这样的文件或目录
我最近为我的 rougelike 从 SFML 切换到 libtcod,因为我发现 libtcod 对于这类游戏更方便。我找不到任何解决方案的一个问题是如何存储键盘绑定(bind)函数。 在 SFML
每次我运行这个窗口都会立即关闭,并返回 3 #include "libtcod.hpp" int main() { TCODConsole::initRoot(80,50, "j", fals
因此,与许多人一样,我正在阅读有关在 Python 中使用 libtcod 的 roguelikes 的教程。 http://www.roguebasin.com/index.php?title=Co
我有一个辅助函数,它接受一个字符串和一个用于格式化字符串的颜色 vector ,现在我的解决方案是手动检查颜色 vector 的大小,并使用相同数量的颜色调用控制台打印颜色。 假设我有一个 4 的颜色
在Python/Libtcod tutorial在 Roguebasin控制角色的基本代码使用上下左右键。有没有办法让它使用 WSAD 或任何其他 key ? Libtcod 只允许我使用“特殊”键,
我正在尝试使用 C++ 和 libtcod 制作一个简单的 rouge 类游戏。我正在尝试编译使用 TCODColor 声明 col 变量的代码 TCODColor col; 这是实际的错误: 错误:
我正在使用 Libtcod 和 Python 构建一个回合制策略游戏。游戏 map 具有可变地形,每个方 block 可以是 5 种类型中的一种: 平原 - 移动成本 1 森林 - 成本 2 河流 -
我正在尝试使用 tcod-rs 向我的 roguelike 添加图形 block 图书馆。 根控制台的 put_char_ex 函数(或 C 版本,TCOD_putwchar)都只接受 char。要使
我是一名优秀的程序员,十分优秀!