Autor | Zpráva | ||
---|---|---|---|
Jakubbbb Profil * |
#1 · Zasláno: 22. 7. 2020, 23:00:44
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 |
#2 · Zasláno: 22. 7. 2020, 23:12:41
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 |
#3 · Zasláno: 22. 7. 2020, 23:23:11
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 * |
#4 · Zasláno: 22. 7. 2020, 23:35:54
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 |
#5 · Zasláno: 23. 7. 2020, 07:02:18
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 * |
#6 · Zasláno: 23. 7. 2020, 21:10:48
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 |
#7 · Zasláno: 23. 7. 2020, 23:22:34
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á. |
||
Časová prodleva: 4 roky
|
0