csata menük, csata nyerés, game over képernyő

This commit is contained in:
markojozsef
2026-10-07 13:02:35 +02:00
parent 7ac1a8259f
commit 2a29f318b4
6 changed files with 197 additions and 21 deletions

View File

@@ -15,5 +15,8 @@ Teljesen AI-generált szakaszokat egy `# !!! CHATGPT !!!` komment jelzi
### battle_data.py ### battle_data.py
* csata függvények * csata függvények
### gamestates/battle.py
* menük
## Dokumentáció ## Dokumentáció
Ezen a fájlon kívül minden dokumentáció AI generálta. Ezen a fájlon kívül minden dokumentáció AI generálta.

View File

@@ -2,12 +2,14 @@ import gamestates.none
import gamestates.title import gamestates.title
import gamestates.overworld import gamestates.overworld
import gamestates.battle import gamestates.battle
import gamestates.gameover
gamestates = { gamestates = {
"none": gamestates.none, "none": gamestates.none,
"title": gamestates.title, "title": gamestates.title,
"overworld": gamestates.overworld, "overworld": gamestates.overworld,
"battle": gamestates.battle "battle": gamestates.battle,
"gameover": gamestates.gameover,
} }
gamestate = "none" gamestate = "none"

View File

@@ -1,6 +1,8 @@
import math import math
import copy
import random import random
import arcade import arcade
import gamestate
from battle import Combatant, Action, Damage, StatusChange from battle import Combatant, Action, Damage, StatusChange
from menu import MenuItem from menu import MenuItem
@@ -35,30 +37,157 @@ battle_id = 0
def switch(game): def switch(game):
global enemies, party_members, battle_music, enemy_turn, enemy_ai_data, party_menus, spells, inventory global enemies, party_members, battle_music, enemy_turn, enemy_ai_data, party_menus, spells, inventory
enemies = battle_data.battles[battle_id]["enemies"] print("asdfasdfasdf")
party_members = battle_data.battles[battle_id]["party_members"] enemies = copy.deepcopy(battle_data.battles[battle_id]["enemies"])
enemy_turn = battle_data.battles[battle_id]["enemy_turn_func"] party_members = copy.deepcopy(battle_data.battles[battle_id]["party_members"])
enemy_ai_data = battle_data.battles[battle_id]["init_ai_data"] enemy_turn = copy.deepcopy(battle_data.battles[battle_id]["enemy_turn_func"])
party_menus = battle_data.battles[battle_id]["menus"] enemy_ai_data = copy.deepcopy(battle_data.battles[battle_id]["init_ai_data"])
spells = battle_data.battles[battle_id]["spells"] party_menus = copy.deepcopy(battle_data.battles[battle_id]["menus"])
inventory = battle_data.battles[battle_id]["inventory"] spells = copy.deepcopy(battle_data.battles[battle_id]["spells"])
inventory = copy.deepcopy(battle_data.battles[battle_id]["inventory"])
battle_music = assets.sounds[battle_data.battles[battle_id]["mus_id"]].play(loops=True) battle_music = assets.sounds[battle_data.battles[battle_id]["mus_id"]].play(loops=True)
def open_menu(whose):
party_idx = party_members.index(whose)
for i, m in enumerate(party_menus[party_idx]):
menu.append(MenuItem(m[0], 19, 64-(i*13), None, None, None, None, menu_action, (whose, party_members, enemies, m[1])))
for i, m in enumerate(menu):
m.up = menu[(i - 1) % len(menu)]
m.down = menu[(i + 1) % len(menu)]
menu[1].select()
def close_menu(): def close_menu():
global menu, menu_open global menu, menu_open
menu = [] menu = []
menu_open = 0 menu_open = 0
menu_text.reset("") menu_text.reset("")
# !!! CHATGPT !!!
def open_spell_menu(user, aparty, eparty):
global menu
party_idx = party_members.index(user)
spell_list = spells[party_idx]
menu = []
for i, spell in enumerate(spell_list):
menu.append(
MenuItem(
spell[0],
19,
64 - (i * 13),
None,
None,
None,
None,
spell_action,
(user, spell, aparty, eparty)
)
)
if len(menu) == 0:
return
for i, m in enumerate(menu):
m.up = menu[(i - 1) % len(menu)]
m.down = menu[(i + 1) % len(menu)]
menu[0].select()
def spell_action(data):
user, spell, aparty, eparty = data
name, mp_cost, action = spell
action_name, func, target_type = action
action_queue.append(func(user, [p for p in eparty if not p.ko][0]))
close_menu()
def open_item_menu(user, aparty, eparty):
global menu
menu = []
for i, item in enumerate(inventory):
if item[1] <= 0:
continue
menu.append(
MenuItem(
f"{item[0]} x{item[1]}",
19,
64 - (i * 13),
None,
None,
None,
None,
item_action,
(user, item, aparty, eparty)
)
)
if len(menu) == 0:
return
for i, m in enumerate(menu):
m.up = menu[(i - 1) % len(menu)]
m.down = menu[(i + 1) % len(menu)]
menu[0].select()
def item_action(data):
user, item, aparty, eparty = data
name, amount, action = item
action_name, func, target_type = action
action_queue.append(
func(user, user)
)
item[1] -= 1
close_menu()
# !!! CHATGPT VÉGE !!!
def menu_action(data): def menu_action(data):
user, aparty, eparty, action = data user, aparty, eparty, action = data
match action: match action:
case "unselectable": case "unselectable":
return return
case "phys_att": case "phys_att":
action_queue.append(Action("Physical Attack", user, eparty[0], Damage(166, 0, 0, 0), StatusChange(0, 0, 0), battle_data.anim_default)) action_queue.append(
Action(
"Physical Attack",
user,
[p for p in eparty if not p.ko][0],
Damage(166, 0, 0, 0),
StatusChange(0, 0, 0),
battle_data.anim_default
)
)
close_menu() close_menu()
case "magic":
open_spell_menu(user)
case "items":
open_item_menu(user)
case _: case _:
print(f"Unknown action: {action}") print(f"Unknown action: {action}")
close_menu() close_menu()
@@ -113,20 +242,23 @@ def update(game, dt):
menu_open = whose menu_open = whose
menu_text.reset(f"{whose.name}'s Menu") menu_text.reset(f"{whose.name}'s Menu")
menu_text.type_all() menu_text.type_all()
open_menu(whose)
party_idx = party_members.index(whose)
for i, m in enumerate(party_menus[party_idx]):
menu.append(MenuItem(m[0], 19, 64-(i*13), None, None, None, None, menu_action, (whose, party_members, enemies, m[1])))
for i, m in enumerate(menu):
m.up = menu[(i - 1) % len(menu)]
m.down = menu[(i + 1) % len(menu)]
menu[1].select()
for m in menu: for m in menu:
m.update() m.update()
if len(enemies) != 0 and all(e.ko for e in enemies):
print("\nVICTORY! all enemies were defeated.")
battle_music.stop()
gamestate.switch_gamestate(game,"overworld")
return
if len(party_members) != 0 and all(a.ko for a in party_members):
print("\nGAME OVER! the party was defeated.")
battle_music.stop()
gamestate.switch_gamestate(game,"gameover")
return
party_text.reset(partytext) party_text.reset(partytext)
ene_text.reset(enetext) ene_text.reset(enetext)
party_text.type_all() party_text.type_all()

View File

@@ -0,0 +1,38 @@
import menu
import text
import renderers
import gamestate
text = text.TextRenderer(90, 180, 210)
panel = renderers.NineSlicesPanel(84,100,64,100)
m = []
def retry(g):
gamestate.switch_gamestate(g, "title")
def switch(game):
global m
m = [
menu.MenuItem("Ujrapróba", 98, 150, None, None, None, None, retry, game),
menu.MenuItem("Kilépés", 98, 130, None, None, None, None, quit)
]
m[0].down = m[1]
m[1].up = m[0]
m[0].select()
text.reset("Játék vége!")
text.type_all()
def update(game, dt):
for i in m:
i.update()
def draw(game):
panel.render()
text.render()
for i in m:
i.render()

View File

@@ -2,4 +2,4 @@ import gamestate
# Azért létezik ez a "none" gamestate hogy meghívja az elsö gamestate init() funkcióját # Azért létezik ez a "none" gamestate hogy meghívja az elsö gamestate init() funkcióját
def update(game, dt): def update(game, dt):
gamestate.switch_gamestate(game, "overworld") gamestate.switch_gamestate(game, "gameover")

View File

@@ -34,6 +34,7 @@ def update(game, dt):
if btrans_timer >= BTRANS_DURATION: if btrans_timer >= BTRANS_DURATION:
game.mos_enabled = False game.mos_enabled = False
btrans_active = False
btrans_sound.stop() btrans_sound.stop()
gamestate.switch_gamestate(game,"battle") gamestate.switch_gamestate(game,"battle")