Autor Zpráva
Jakubbbb
Profil *
Zdravím, jak byste řešili soubojový systém, kdy se jedná o souboj dvou klanů?
Tým 1 (3 hráči) / tým 2 (4 hráči).
1. kolo: hráč 1 v týmu 1 porazil hráče 1 v týmu 2.
2. kolo: hráč 1* v týmu 1 porazil hráče 2 v týmu 2.
3. kolo: hráče 1 v týmu 1 porazil hráč 3 v týmu 2.
4. kolo: hráč 2 v týmu 1 porazil hráče 3 v týmu 2.
.....
* hráč 1 v týmu 1 nastoupil protože nebyl poražen. Kdyby byl silnější, mohl klidně porazil všechny v týmu 2 a vůbec nemusel nastoupit hráč 2 z týmu 1.
--------
Jde mi o soubojový systém který je ve hře shakes and figdet.
Máte nekdo nějaký nápad jak toto zrealizovat?
Vřele děkuji za každou myšlenku <3
Kajman
Profil
Tam je jen otázka, jestli pořadí nástupců je dané dopředu, nebo se volí, až když je potřeba.

Jinak v tom žádná složitost není. Vždy hrají proti sobě neporažení z každého týmu dle daného pořadí. Kolo je možné určit, až je dohrané to předchozí.
RastyAmateur
Profil
Jakubbbb:
No a kde je ten problém? S čím si nevíš rady? Zkusil jsi již něco napsat, ať se máme od čeho odrazit? Pokud se jedná o samotný cyklus toho souboje, tak máš dvě pole hráčů - team1 a team2. Ty spolu budou bojovat, dokud alespoň v 1 z nich nebudou poraženi všichni hráči. Vždy budou proti sobě bojovat 2 hráči, poraženého z toho pole odstraníš, vítězovi jen ubereš životy a pošleš ho dál. Až jeden z polí bude prázdný (týmu došli hráči), je konec. Vítězný tým je ten, který má v poli ještě nějaké hráče, první hráč v tom poli je ten, který bojoval jako poslední a ostatní hráči jsou ti, kteří se ani nedostali na řadu.

Něco na způsob tohoto (jestli umíš číst python):

import random

def fight(a, b):
    return (a, b) if random.randint(0, 1) else (b, a)

team1 = ['A', 'B', 'C', 'D']
team2 = ['E', 'F', 'G', 'H']

while team1 and team2:
    winner, looser = fight(team1, team2)
    print('Winner: %s; looser: %s' % (winner[0], looser[0]))
    del looser[0]

print()
print('Winner is %s!' % 'team1' if team1 else 'team2')
Jakubbbb
Profil *
Kajman:
Pravděpobobně od hráče který bude mít nejmenší level. Takže to bude předem dané.
RastyAmateur
No něco jsem zkoušel, ale spíš jsem si hrál s databází. Takže teoreticky je vhodné udělat array do kterého si dám jenom idčka hráčů a pak když dojde na souboj, tak data hráčů (síla, životy,...) budu tahat přímo z db? Nebo je praktičtější si je taky nahrát k tomu array? Beru to kdyby bylo třeba 100 a 100 hráčů v týmech, nebude to pak dělat bordel tolik přístupů k db? A tco by se třeba mohlo stát že by takvých týmů jelo více najednou, že?...

Každopádně v tom vidím složitosti i když v tom nejsou, máte pravdu. Asi nad tím moc přemýšlím jak to udělat složitě...
RastyAmateur
Profil
Jakubbbb:
Nemusí to být nutně IDčka a rozhodně bych nespouštěl na db výrazně více dotazů. Ale to už je nějaký spíš optimalizační problém.

Do toho pole si můžeš dát i nějaké objekty reprezentující toho hráče, pokud ty data budeš používat.
[
  {
    'id': 14,
    'username': 'Rasty',
    'level': 15,
    'health': 1000,
    // ...
  },
  {
    'id': 56,
    'username': 'Jacob',
    'level': 19,
    'health': 1400,
    // ...
  },
  // ...
]
Jakubbbb
Profil *
Zdravím, tak už to mám. Vyřešil jsem to tak, že jsem dal idcka do arrae a pak tahám údaje o předmětech, bonusech,.... přímo z db. Když jsem to dal do arrae, byl dlouhý loading. Pokud mu klesnou životy pod nulu, tak ho z arrae odstraním a jedu celý script znova. Teda zatím pomocí funkce goto :D, jelikož mě to zatím lépe nenapadlo. Každopádně to není úplně prasečina, ne?
RastyAmateur
Profil
Jakubbbb:
Je, ale pro začátečnického programátora stačí, že to funguje, že to napsal sám a že se v tom vyzná.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0