Compare commits
2 Commits
eb57b16544
...
4de57827b0
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4de57827b0 | ||
|
|
b30a7c291b |
16
doc/AIHasznalat.md
Normal file
16
doc/AIHasznalat.md
Normal file
@@ -0,0 +1,16 @@
|
||||
# AI használat a kódban
|
||||
|
||||
## Jelző
|
||||
Teljesen AI-generált szakaszokat egy `# !!! CHATGPT !!!` komment jelzi
|
||||
|
||||
## AI generálta komponensek:
|
||||
|
||||
### main.py
|
||||
* Game
|
||||
|
||||
### renderers.py
|
||||
* TextureRenderer
|
||||
* NineSlicesPanel
|
||||
|
||||
### battle_data.py
|
||||
* csata függvények
|
||||
203
doc/MenuItem.md
Normal file
203
doc/MenuItem.md
Normal file
@@ -0,0 +1,203 @@
|
||||
# MenuItem
|
||||
|
||||
## Áttekintés
|
||||
|
||||
A `MenuItem` osztály egy játék menürendszerének egyetlen választható elemét reprezentálja. Az osztály kezeli:
|
||||
|
||||
- a menüpont szövegének megjelenítését,
|
||||
- a kijelölést,
|
||||
- a menüpontok közötti navigációt,
|
||||
- a kiválasztáskor meghívandó függvényt (akciót),
|
||||
- valamint a kurzor kirajzolását.
|
||||
|
||||
A menüpontok egy irányított hálózatot alkotnak, ahol minden elem ismeri a szomszédait (`up`, `down`, `left`, `right`).
|
||||
|
||||
---
|
||||
|
||||
## Konstruktor
|
||||
|
||||
```python
|
||||
MenuItem(
|
||||
label,
|
||||
x,
|
||||
y,
|
||||
left,
|
||||
right,
|
||||
up,
|
||||
down,
|
||||
action,
|
||||
data=None
|
||||
)
|
||||
```
|
||||
|
||||
### Paraméterek
|
||||
|
||||
- `label` (`str`)
|
||||
A menüpont megjelenő szövege.
|
||||
|
||||
- `x` (`int`)
|
||||
A menüpont vízszintes pozíciója.
|
||||
|
||||
- `y` (`int`)
|
||||
A menüpont függőleges pozíciója.
|
||||
|
||||
- `left` (`MenuItem | None`)
|
||||
A bal oldali szomszédos menüpont.
|
||||
|
||||
- `right` (`MenuItem | None`)
|
||||
A jobb oldali szomszédos menüpont.
|
||||
|
||||
- `up` (`MenuItem | None`)
|
||||
A felső szomszédos menüpont.
|
||||
|
||||
- `down` (`MenuItem | None`)
|
||||
Az alsó szomszédos menüpont.
|
||||
|
||||
- `action` (`callable`)
|
||||
A menüpont kiválasztásakor meghívandó függvény.
|
||||
|
||||
- `data` (`any`, opcionális)
|
||||
A kiválasztáskor az akciónak átadott adat.
|
||||
|
||||
---
|
||||
|
||||
## Attribútumok
|
||||
|
||||
### Navigáció
|
||||
|
||||
```python
|
||||
self.left
|
||||
self.right
|
||||
self.up
|
||||
self.down
|
||||
```
|
||||
|
||||
A szomszédos menüpontokra mutató referenciák.
|
||||
|
||||
Ha egy adott irányban nincs további menüpont, akkor az attribútum értéke:
|
||||
|
||||
```python
|
||||
None
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Akció
|
||||
|
||||
```python
|
||||
self.action
|
||||
```
|
||||
|
||||
A kiválasztás során meghívandó függvény.
|
||||
|
||||
Példa:
|
||||
|
||||
```python
|
||||
def start_game(data):
|
||||
print("Játék indul!")
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Adat
|
||||
|
||||
```python
|
||||
self.data
|
||||
```
|
||||
|
||||
A menüelemhez kapcsolódó opcionális adat, amelyet az akciófüggvény paraméterként kap meg.
|
||||
|
||||
Példa:
|
||||
|
||||
```python
|
||||
MenuItem(
|
||||
"Nehéz",
|
||||
100, 100,
|
||||
None, None, None, None,
|
||||
set_difficulty,
|
||||
"hard"
|
||||
)
|
||||
```
|
||||
|
||||
Kiválasztáskor:
|
||||
|
||||
```python
|
||||
set_difficulty("hard")
|
||||
```
|
||||
|
||||
fut le.
|
||||
|
||||
---
|
||||
|
||||
### Pozíció
|
||||
|
||||
```python
|
||||
self.x
|
||||
self.y
|
||||
```
|
||||
|
||||
A menüpont képernyőn elfoglalt pozíciója.
|
||||
|
||||
---
|
||||
|
||||
### Szövegmegjelenítő
|
||||
|
||||
```python
|
||||
self.text
|
||||
```
|
||||
|
||||
Egy `TextRenderer` objektum, amely a felirat megjelenítéséért felel.
|
||||
|
||||
---
|
||||
|
||||
### Kijelölt állapot
|
||||
|
||||
```python
|
||||
self.selected
|
||||
```
|
||||
|
||||
Logikai érték:
|
||||
|
||||
- `True`: a menüpont jelenleg ki van jelölve;
|
||||
- `False`: a menüpont nincs kijelölve.
|
||||
|
||||
---
|
||||
|
||||
## Metódusok
|
||||
|
||||
### `select()`
|
||||
|
||||
```python
|
||||
select()
|
||||
```
|
||||
|
||||
Kijelöli a menüpontot.
|
||||
|
||||
#### Működés
|
||||
|
||||
```python
|
||||
self.selected = True
|
||||
```
|
||||
|
||||
#### Példa
|
||||
|
||||
```python
|
||||
start_button.select()
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### `update()`
|
||||
|
||||
```python
|
||||
update()
|
||||
```
|
||||
|
||||
A menüpont állapotának frissítése.
|
||||
|
||||
Ha az elem nincs kijelölve, a függvény azonnal visszatér:
|
||||
|
||||
```python
|
||||
if not self.selected:
|
||||
return
|
||||
```
|
||||
218
doc/TextRenderer.md
Normal file
218
doc/TextRenderer.md
Normal file
@@ -0,0 +1,218 @@
|
||||
# TextRenderer
|
||||
|
||||
A `TextRenderer` osztály egy egyszerű, karakterenként gépelődő (typewriter effektusú) szövegmegjelenítő. A szöveget sprite-okként tárolja és rendereli, támogatja a sortörést meghatározott szélesség esetén, valamint speciális karakterek kezelését egyedi `display()` függvényeken keresztül.
|
||||
|
||||
---
|
||||
|
||||
## Konstruktor
|
||||
|
||||
```python
|
||||
TextRenderer(x, y, width=None)
|
||||
```
|
||||
|
||||
Új szövegmegjelenítőt hoz létre.
|
||||
|
||||
### Paraméterek
|
||||
|
||||
- `x` (`int`) - A szöveg kezdő X koordinátája.
|
||||
- `y` (`int`) - A szöveg kezdő Y koordinátája.
|
||||
- `width` (`int | None`) - Opcionális maximális szélesség pixelekben. Túllépés esetén automatikus sortörés történik.
|
||||
|
||||
### Attribútumok
|
||||
|
||||
- `sprites` - A renderelendő karaktersprite-ok listája.
|
||||
- `base_x` - Kezdő X koordináta.
|
||||
- `base_y` - Kezdő Y koordináta.
|
||||
- `width` - Maximális szövegszélesség.
|
||||
- `text` - A megjelenítendő szöveg.
|
||||
- `textptr` - Az aktuálisan feldolgozott karakter indexe.
|
||||
- `x` - Aktuális rajzolási pozíció X tengelyen.
|
||||
- `y` - Aktuális rajzolási pozíció Y tengelyen.
|
||||
|
||||
---
|
||||
|
||||
## `reset(text)`
|
||||
|
||||
```python
|
||||
reset(text)
|
||||
```
|
||||
|
||||
Visszaállítja a renderelőt alapállapotba, és új szöveget tölt be.
|
||||
|
||||
### Paraméterek
|
||||
|
||||
- `text` (`str`) - A megjelenítendő szöveg.
|
||||
|
||||
### Működés
|
||||
|
||||
- Törli az összes korábbi sprite-ot.
|
||||
- Visszaállítja a rajzolási pozíciót a kezdőkoordinátákra.
|
||||
- Nullázza a karaktermutatót (`textptr`).
|
||||
|
||||
### Példa
|
||||
|
||||
```python
|
||||
renderer.reset("Helló világ!")
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## `amend(text)`
|
||||
|
||||
```python
|
||||
amend(text)
|
||||
```
|
||||
|
||||
Hozzáfűz további szöveget a már meglévő szöveghez.
|
||||
|
||||
### Paraméterek
|
||||
|
||||
- `text` (`str`) - A hozzáfűzendő szöveg.
|
||||
|
||||
### Példa
|
||||
|
||||
```python
|
||||
renderer.reset("Helló")
|
||||
renderer.amend(" világ!")
|
||||
```
|
||||
|
||||
Eredmény:
|
||||
|
||||
```text
|
||||
Helló világ!
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## `type_tick()`
|
||||
|
||||
```python
|
||||
type_tick()
|
||||
```
|
||||
|
||||
Egyetlen karakter feldolgozását végzi el. A függvény elsősorban gépelési animációk megvalósítására használható.
|
||||
|
||||
### Visszatérési érték
|
||||
|
||||
```python
|
||||
bool
|
||||
```
|
||||
|
||||
- `True` - a teljes szöveg feldolgozása befejeződött.
|
||||
- `False` - még vannak feldolgozatlan karakterek.
|
||||
|
||||
### Működés
|
||||
|
||||
1. Lekéri az aktuális karakterhez tartozó definíciót a `texttable` szótárból.
|
||||
2. Ismeretlen karakter esetén a `'?'` definíciót használja.
|
||||
3. Látható karakter esetén:
|
||||
- kivágja a megfelelő textúrát a font atlaszból,
|
||||
- létrehozza a sprite adatait,
|
||||
- hozzáadja azokat a `sprites` listához.
|
||||
4. Ha a megadott szélesség elfogyott:
|
||||
- új sorba lép,
|
||||
- az Y koordinátát 13 pixellel csökkenti.
|
||||
5. Nem látható karakter esetén meghívja a karakter:
|
||||
|
||||
```python
|
||||
display(renderer)
|
||||
```
|
||||
|
||||
metódusát.
|
||||
|
||||
### Példa
|
||||
|
||||
```python
|
||||
while not renderer.type_tick():
|
||||
pass
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## `type_all()`
|
||||
|
||||
```python
|
||||
type_all()
|
||||
```
|
||||
|
||||
A teljes szöveget azonnal feldolgozza.
|
||||
|
||||
### Működés
|
||||
|
||||
A `type_tick()` függvényt hívja ismételten addig, amíg minden karakter feldolgozásra nem kerül.
|
||||
|
||||
### Példa
|
||||
|
||||
```python
|
||||
renderer.reset("Szia!")
|
||||
renderer.type_all()
|
||||
```
|
||||
|
||||
A teljes szöveg egyetlen frame alatt elkészül.
|
||||
|
||||
---
|
||||
|
||||
## `render()`
|
||||
|
||||
```python
|
||||
render()
|
||||
```
|
||||
|
||||
Kirajzolja az összes létrehozott karaktersprite-ot.
|
||||
|
||||
### Működés
|
||||
|
||||
A `sprites` listán végighaladva minden karakterhez meghívja:
|
||||
|
||||
```python
|
||||
arcade.draw_texture_rect()
|
||||
```
|
||||
|
||||
függvényt pixelpontos (`pixelated=True`) rendereléssel.
|
||||
|
||||
### Példa
|
||||
|
||||
```python
|
||||
def on_draw(self):
|
||||
arcade.start_render()
|
||||
renderer.render()
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
# Tipikus használat
|
||||
|
||||
## Gépelési effekt
|
||||
|
||||
```python
|
||||
renderer = TextRenderer(10, 100, width=200)
|
||||
|
||||
renderer.reset(
|
||||
"Ez egy hosszabb szöveg, amely több sorba törhet."
|
||||
)
|
||||
|
||||
renderer.type_tick()
|
||||
|
||||
renderer.render()
|
||||
```
|
||||
|
||||
## Azonnali megjelenítés
|
||||
|
||||
```python
|
||||
renderer = TextRenderer(10, 100)
|
||||
|
||||
renderer.reset("Helló világ!")
|
||||
renderer.type_all()
|
||||
|
||||
renderer.render()
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
# Megjegyzések
|
||||
|
||||
- Az osztály nem hoz létre külön `Sprite` objektumot minden karakterhez, hanem csak a szükséges textúrát és pozíciót tárolja.
|
||||
- Ismeretlen karakter esetén automatikusan a `'?'` karakter kerül megjelenítésre.
|
||||
- A sortörés kizárólag a megadott `width` túllépésekor történik.
|
||||
- Speciális vezérlőkarakterek létrehozhatók `visible=False` karakterdefiníciókkal.
|
||||
- Ezek a karakterek tetszőleges működést valósíthatnak meg a `display(renderer)` metóduson keresztül.
|
||||
@@ -13,6 +13,7 @@ def anim_default(action, text, timer, dt):
|
||||
|
||||
return False
|
||||
|
||||
# !!! CHATGPT !!!
|
||||
def move_attack(user, target):
|
||||
return Action("Attack", user, target, Damage(user.attack, 0, 0, 0), StatusChange(0, 0, 0), anim_default)
|
||||
|
||||
@@ -79,6 +80,8 @@ def enemy_turn_test(e,ep, ap,d):
|
||||
print(f" ({e.name} chooses {act} -> {target.name})")
|
||||
return builder(e, target)
|
||||
|
||||
# !!! CHATGPT VÉGE !!!
|
||||
|
||||
battles = [
|
||||
{ "enemies": [
|
||||
Combatant("Six-Seven kid", 120, 30, 80, 20, 0, 50, False, False),
|
||||
|
||||
@@ -8,6 +8,7 @@ import text
|
||||
SCREEN_WIDTH = 256
|
||||
SCREEN_HEIGHT = 224
|
||||
|
||||
# !!! CHATGPT !!!
|
||||
class Game(arcade.Window):
|
||||
def __init__(self):
|
||||
super().__init__(
|
||||
|
||||
Reference in New Issue
Block a user