如何解决指针给出整个数组而不是C ++ RayLib中的一个字符
我对C ++还是很陌生,因此决定首先使用RayLib作为图形引擎制作井字游戏。 下面的代码设置了一个屏幕,绘制了网格并检查了输入。 我正在处理的部分在单击的字段中显示X或O。 我终于有了绘制文本的程序,但是它似乎是绘制整个数组而不是一个字母。
#include "raylib.h"
#include <string.h>
#include <stdio.h>
#include <math.h>
int main(void)
{
//INITIALIZE//
int screenWidth = 750;
int screenHeight = 750;
char matrix[9] = {'E','E','E'};
char currentPlayer = 'X';
InitWindow(screenWidth,screenHeight,"raylib [core] example - basic window");
SetTargetFPS(60);
while (!WindowShouldClose())
{
//INPUT//
if (IsMouseButtonPressed(MOUSE_LEFT_BUTTON)) {
int mouseX = GetMouseX();
int mouseY = GetMouseY();
double x = floor(mouseX/250);
double y = floor(mouseY/250);
int index = x + 3*y;
matrix[index] = currentPlayer;
currentPlayer = (currentPlayer == 'X') ? 'O' : 'X';
}
//DRAWING//
BeginDrawing();
ClearBackground(WHITE);
for (int i = 1; i < 3; i++) {
int num = i*250;
DrawLine(num,num,screenWidth,LIGHTGRAY);
DrawLine(0,LIGHTGRAY);
}
//Code I was working on
for (int i = 0; i < 9; i++) {
if (matrix[i] != 'E') {
int textX = 115 + i*250 - (i%3)*750;
int textY = 115 + (i%3)*250;
char text = matrix[i];
DrawText(&text,textX,textY,20,LIGHTGRAY); //The problem is here
}
}
EndDrawing();
}
CloseWindow();
return 0;
}
当我单击左上方的单元格以绘制X时,它将绘制为“ XXEEEEEEEE0?D”。 有谁知道如何从数组中仅绘制一个字符?
谢谢!
解决方法
C风格的字符串以空字符(\0
结尾,因此您必须添加该字符串,否则您将读取超出界限的字符串并调用未定义行为。
因此
char text = matrix[i];
应该是
char text[] = {matrix[i],'\0'};
和
DrawText(&text,textX,textY,20,LIGHTGRAY);
应该是
DrawText(text,LIGHTGRAY);
(在&
之前删除text
)
DrawText()
期望以空值结尾的字符串作为输入,但是您却给了它一个char
。更改此:
char text = matrix[i];
DrawText(&text,...);
对此:
char text[2] = {matrix[i],'\0'};
DrawText(text,...);
,
您可以这样做:
char text = matrix[i];
char shortenedText[2] = {0,0};
shortenedText[0] = text;
DrawText(shortenedText,LIGHTGRAY); //The problem is here
基本上只用一个字符构建一个很小的字符串。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。