Raylib中GetRandomValue函数每次返回0,贪吃蛇食物固定于左上角
贪吃蛇食物绘制问题修复
问题根源
你的代码存在两个关键问题导致食物始终出现在左上角:
- 随机数未正确初始化:
GetRandomValue需要在InitWindow之后调用,Raylib的随机数生成器在窗口初始化前未启动,所以返回值始终为0。 - 坐标未转换为屏幕像素:
foodPos存储的是单元格索引(0到CELLCOUNT-1),直接传入DrawRectangle会把它当作屏幕像素坐标,自然会绘制在左上角。
修复后的代码
#include "raylib.h" #define CELLSIZE 30 #define CELLCOUNT 25 Color green = {173, 204, 96, 255}; Color darkGreen = {43, 51, 24, 255}; int main(void){ InitWindow(CELLSIZE * CELLCOUNT, CELLSIZE * CELLCOUNT, "retro snake"); SetTargetFPS(60); // 移到InitWindow之后,确保随机数生成器已初始化 Vector2 foodPos = {GetRandomValue(0, CELLCOUNT - 1), GetRandomValue(0, CELLCOUNT - 1)}; while (!WindowShouldClose()) { BeginDrawing(); ClearBackground(green); // 将单元格索引转换为屏幕像素坐标 DrawRectangle(foodPos.x * CELLSIZE, foodPos.y * CELLSIZE, CELLSIZE, CELLSIZE, darkGreen); EndDrawing(); } CloseWindow(); return 0; }
额外说明
如果后续需要食物被吃掉后重新生成,只需在对应的逻辑里再次调用GetRandomValue更新foodPos即可,注意同样要保证在InitWindow之后执行。
内容的提问来源于stack exchange,提问作者Neraan Jain
相关产品推荐
相关产品推荐

