C++控制台骰子游戏开发:如何输出骰子符号替代数字显示
骰子符号替换实现方案
你只需要给1-6的骰子点数做一层字符映射,输出时替换原有数字即可,现有掷骰子的随机逻辑完全不需要改动。
对应关系
6个骰子面的Unicode字符和点数一一对应:
- 1点:⚀
- 2点:⚁
- 3点:⚂
- 4点:⚃
- 5点:⚄
- 6点:⚅
最简便的实现方式是用数组存储这组字符:把数组下标0的位置留空,下标1到6的位置依次存放上面6个符号,输出时直接用骰子的整数值当下标取对应字符就行,不用写一堆if/switch判断。
修改后的代码
你只需要改mostrarCubilete函数的逻辑就行,另外顺便提一个你现有代码的常见新手坑:srand(time(NULL))是随机数种子初始化,整个程序只需要调用1次,你现在把它写在掷骰子函数里,如果短时间内多次调用掷骰子,会因为time()的精度只有1秒,生成完全重复的随机数,这行应该挪到main函数最开头。
///Lanza los dados void cargarCubilete(int v[], int tam, int limite){ int i; for( i=0; i<tam; i++ ){ v[i]=(rand()%limite)+1; } } ///MUESTRA EL CUBILETE (符号版) void mostrarCubilete(int v[], int tam){ // 下标0留空,1-6位对应1-6点的骰子符号 const char* simbolosDados[] = {"", "⚀", "⚁", "⚂", "⚃", "⚄", "⚅"}; for(int i=0;i<tam;i++){ cout << simbolosDados[v[i]] << " "; } cout << endl; } /* main函数调用参考: int main() { srand(time(NULL)); // 随机种子只初始化一次,放在最开头 int dados[5]; cargarCubilete(dados, 5, 6); mostrarCubilete(dados, 5); return 0; } */
乱码问题处理
如果运行后骰子符号显示为问号或者乱码,是控制台编码不支持UTF-8导致的:
- macOS、Linux系统终端默认支持UTF-8,直接运行就能正常显示
- Windows下旧版CMD默认是GBK编码,要么换用新版Windows终端运行,要么在main函数开头加一行
system("chcp 65001");切换控制台到UTF-8编码即可正常显示。
如果后续需要做更精致的骰子效果(比如带边框、彩色、大号骰子面),可以基于这个映射逻辑扩展,用多行ASCII/Unicode字符拼接绘制每个骰子面就行。
内容的提问来源于stack exchange,提问作者Matías Bergés
相关产品推荐
相关产品推荐

