DX: arregla 'Vides /' al game over (bug de tostr amb negatius)
This commit is contained in:
@@ -96,6 +96,8 @@ El atributo de color de una celda es 1 byte: nibble bajo = INK (tinta), nibble a
|
||||
|
||||
> **Nota**: `whichbtn()` está declarado en `ascii.h` y existe en C++, pero **no está expuesto a Lua** (no aparece en los `lua_setglobal` de `lua.cpp`). Para detectar qué tecla se ha pulsado en un frame hay que iterar con `btnp()` sobre las constantes `KEY_*`.
|
||||
|
||||
> **Bug de `tostr` con negativos**: la implementación de `tostr()` en `lua.cpp` (función `intToStr`) hace `(x % 10) + '0'` que con `x = -1` produce `-1 + 48 = 47`, o sea `'/'`. Por tanto `tostr(-1)` devuelve `"/"`, `tostr(-2)` devuelve `"."`, etc. Si vas a imprimir un número que puede ser negativo, usa `string.format("%d", n)` (que sí maneja signo) o clampa con `max(0, n)` antes de pasar a `tostr`.
|
||||
|
||||
Códigos de tecla — todos definidos como globales `KEY_*` en Lua. Lista completa (de `lua.cpp` 502-608):
|
||||
|
||||
```
|
||||
|
||||
+3
-1
@@ -745,7 +745,9 @@ function pintar_hud()
|
||||
-- Text dins del marc
|
||||
print(textos.level_label.." "..string.format("%02d", level), 3, 26)
|
||||
print(textos.score_label.." "..string.format("%03d", score), 16, 26)
|
||||
print(textos.lives_label.." "..tostr(pepe.vides), 29, 26)
|
||||
-- max(0, ...) evita que la pantalla mostre "Vides /" en el game over:
|
||||
-- l'implementacio de tostr() d'ascii torna "/" per a -1 (bug intern).
|
||||
print(textos.lives_label.." "..tostr(max(0, pepe.vides)), 29, 26)
|
||||
local r = textos.record_label.." "..string.format("%03d", hi_score).." "..nom_hi_score
|
||||
print(r, flr((40 - strlen(r)) / 2), 28)
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user