| 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: 6 let
|
|||
0