You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 11:41:06