csata menük, csata nyerés, game over képernyő
This commit is contained in:
@@ -15,5 +15,8 @@ Teljesen AI-generált szakaszokat egy `# !!! CHATGPT !!!` komment jelzi
|
||||
### battle_data.py
|
||||
* csata függvények
|
||||
|
||||
### gamestates/battle.py
|
||||
* menük
|
||||
|
||||
## Dokumentáció
|
||||
Ezen a fájlon kívül minden dokumentáció AI generálta.
|
||||
@@ -2,12 +2,14 @@ import gamestates.none
|
||||
import gamestates.title
|
||||
import gamestates.overworld
|
||||
import gamestates.battle
|
||||
import gamestates.gameover
|
||||
|
||||
gamestates = {
|
||||
"none": gamestates.none,
|
||||
"title": gamestates.title,
|
||||
"overworld": gamestates.overworld,
|
||||
"battle": gamestates.battle
|
||||
"battle": gamestates.battle,
|
||||
"gameover": gamestates.gameover,
|
||||
}
|
||||
gamestate = "none"
|
||||
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
import math
|
||||
import copy
|
||||
import random
|
||||
import arcade
|
||||
import arcade
|
||||
import gamestate
|
||||
|
||||
from battle import Combatant, Action, Damage, StatusChange
|
||||
from menu import MenuItem
|
||||
@@ -35,30 +37,157 @@ battle_id = 0
|
||||
|
||||
def switch(game):
|
||||
global enemies, party_members, battle_music, enemy_turn, enemy_ai_data, party_menus, spells, inventory
|
||||
enemies = battle_data.battles[battle_id]["enemies"]
|
||||
party_members = battle_data.battles[battle_id]["party_members"]
|
||||
enemy_turn = battle_data.battles[battle_id]["enemy_turn_func"]
|
||||
enemy_ai_data = battle_data.battles[battle_id]["init_ai_data"]
|
||||
party_menus = battle_data.battles[battle_id]["menus"]
|
||||
spells = battle_data.battles[battle_id]["spells"]
|
||||
inventory = battle_data.battles[battle_id]["inventory"]
|
||||
print("asdfasdfasdf")
|
||||
enemies = copy.deepcopy(battle_data.battles[battle_id]["enemies"])
|
||||
party_members = copy.deepcopy(battle_data.battles[battle_id]["party_members"])
|
||||
enemy_turn = copy.deepcopy(battle_data.battles[battle_id]["enemy_turn_func"])
|
||||
enemy_ai_data = copy.deepcopy(battle_data.battles[battle_id]["init_ai_data"])
|
||||
party_menus = copy.deepcopy(battle_data.battles[battle_id]["menus"])
|
||||
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)
|
||||
|
||||
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():
|
||||
global menu, menu_open
|
||||
menu = []
|
||||
menu_open = 0
|
||||
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):
|
||||
user, aparty, eparty, action = data
|
||||
|
||||
match action:
|
||||
|
||||
case "unselectable":
|
||||
return
|
||||
|
||||
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()
|
||||
|
||||
case "magic":
|
||||
open_spell_menu(user)
|
||||
|
||||
case "items":
|
||||
open_item_menu(user)
|
||||
|
||||
case _:
|
||||
print(f"Unknown action: {action}")
|
||||
close_menu()
|
||||
@@ -113,20 +242,23 @@ def update(game, dt):
|
||||
menu_open = whose
|
||||
menu_text.reset(f"{whose.name}'s Menu")
|
||||
menu_text.type_all()
|
||||
|
||||
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()
|
||||
open_menu(whose)
|
||||
|
||||
for m in menu:
|
||||
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)
|
||||
ene_text.reset(enetext)
|
||||
party_text.type_all()
|
||||
|
||||
38
src/gamestates/gameover.py
Normal file
38
src/gamestates/gameover.py
Normal 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()
|
||||
|
||||
@@ -2,4 +2,4 @@ import gamestate
|
||||
|
||||
# Azért létezik ez a "none" gamestate hogy meghívja az elsö gamestate init() funkcióját
|
||||
def update(game, dt):
|
||||
gamestate.switch_gamestate(game, "overworld")
|
||||
gamestate.switch_gamestate(game, "gameover")
|
||||
|
||||
@@ -34,6 +34,7 @@ def update(game, dt):
|
||||
|
||||
if btrans_timer >= BTRANS_DURATION:
|
||||
game.mos_enabled = False
|
||||
btrans_active = False
|
||||
btrans_sound.stop()
|
||||
gamestate.switch_gamestate(game,"battle")
|
||||
|
||||
|
||||
Reference in New Issue
Block a user