Když má hráč v players[pointer] jediný záznam, vrátí [-2:][0]tentýž prvek jako [-1:][0] — slice [-2:] na jednoprvkovém seznamu je celý ten seznam. Vnitřní podmínka je tedy splněná automaticky a zobrazí se xx, přestože hráč má za sebou teprve jednu nulu.
Reprodukce
Spustit hru, první hráč hned v prvním tahu skončí s nulou (k při skóre 0, nebo hod bez hodnoty).
Až na něj znovu přijde řada, v hlavičce je Na tahu je X (0xx/10000).
Očekáváno: 0x/10000 — druhá nula ještě nepadla.
Dopad
Jen zobrazení. Samotné vynulování skóre po třech nulách je v pořádku, protože používá vlastní kontrolu:
last_two=players[pointer][-2:]iflen(last_two)>1:
Hráč ale podle hlavičky vidí, že je „o jeden hod od vynulování", i když má ve skutečnosti hody dva.
Narazil jsem na to při přenosu těchto mechanik do repa dice-counter, kde jsem opravu už udělal (větev agents/claude/tri-nuly-a-vitez).
## Popis
V `game()` (`kostky/kostky.py`, cca ř. 275–281) se počítá indikátor nulových hodů:
```python
if len(players[pointer]) > 0:
if players[pointer][-1:][0] == 0:
strikes = "x"
if players[pointer][-2:][0] == 0:
strikes += "x"
```
Když má hráč v `players[pointer]` jediný záznam, vrátí `[-2:][0]` **tentýž** prvek jako `[-1:][0]` — slice `[-2:]` na jednoprvkovém seznamu je celý ten seznam. Vnitřní podmínka je tedy splněná automaticky a zobrazí se `xx`, přestože hráč má za sebou teprve jednu nulu.
## Reprodukce
1. Spustit hru, první hráč hned v prvním tahu skončí s nulou (`k` při skóre 0, nebo hod bez hodnoty).
2. Až na něj znovu přijde řada, v hlavičce je `Na tahu je X (0xx/10000).`
3. Očekáváno: `0x/10000` — druhá nula ještě nepadla.
## Dopad
Jen zobrazení. Samotné vynulování skóre po třech nulách je v pořádku, protože používá vlastní kontrolu:
```python
last_two = players[pointer][-2:]
if len(last_two) > 1:
```
Hráč ale podle hlavičky vidí, že je „o jeden hod od vynulování", i když má ve skutečnosti hody dva.
## Návrh opravy
```python
if len(players[pointer]) > 0:
if players[pointer][-1] == 0:
strikes = "x"
if len(players[pointer]) > 1 and players[pointer][-2] == 0:
strikes += "x"
```
## Kontext
Narazil jsem na to při přenosu těchto mechanik do repa `dice-counter`, kde jsem opravu už udělal (větev `agents/claude/tri-nuly-a-vitez`).
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Popis
V
game()(kostky/kostky.py, cca ř. 275–281) se počítá indikátor nulových hodů:Když má hráč v
players[pointer]jediný záznam, vrátí[-2:][0]tentýž prvek jako[-1:][0]— slice[-2:]na jednoprvkovém seznamu je celý ten seznam. Vnitřní podmínka je tedy splněná automaticky a zobrazí sexx, přestože hráč má za sebou teprve jednu nulu.Reprodukce
kpři skóre 0, nebo hod bez hodnoty).Na tahu je X (0xx/10000).0x/10000— druhá nula ještě nepadla.Dopad
Jen zobrazení. Samotné vynulování skóre po třech nulách je v pořádku, protože používá vlastní kontrolu:
Hráč ale podle hlavičky vidí, že je „o jeden hod od vynulování", i když má ve skutečnosti hody dva.
Návrh opravy
Kontext
Narazil jsem na to při přenosu těchto mechanik do repa
dice-counter, kde jsem opravu už udělal (větevagents/claude/tri-nuly-a-vitez).