PHP Harc győzelem kiszámítása
2011-08-29T12:12:08+02:00
2011-09-04T22:44:45+02:00
2022-07-19T05:18:01+02:00
  • köszi az ötleteket.
    Mutasd a teljes hozzászólást!
  • Szerintem először is határozd meg, hogy a harcos támadó és védekező ereje mennyi. Ez 2 alapértéket feltételez, amit a harcos létrehozásakor beállítasz pl 100-ra.
    A különböző fejlesztések mindig hatnak ezekre az értékekre.Amikor a fejlesztés megvan, akkor a fejlesztés értékének megfelelően állítod át ezt az értéket. Pl valamely harcművészet "megtanulása" növeli a támadóerő értéket és a védekező értéket is. hogy mennyivel, azt neked kell kitalálni.

    Általában a támadó mindig előnyben van az ilyen játékokban, tehát meg kell állapítani, hogy két egyenlő erejű ellenfél esetén mi az a gyengítés, ami mindenképpen bekövetkezik.

    Pl minimum gyengítés: 30

    támadó 150(+30 min gyengítés) - védő 150 = védő életereje 30-al csökken

    támadó 120(+30 min gyengítés) - védő 150 = védő életereje nem csökken

    támadó 90(+30 min gyengítés) - védő 150 = támadó ráfarag -30...

    ***************************

    Természetesen egy jó játékban figyelembe kell venni, hogy nem mindegy milyen karakter támad és milyen védekezőt.. Teszem azt a kard a bőr védőfelszerelés ellen többet ér, mint a fémpáncél ellen... Ugyanakkor a bőrcuccos valőszínűleg ügyesebben tud mozogni majd, mint a páncélos...

    ***************************

    Tehát várhatóan több alapértéket kell beállítani, több hasonló összehasonlítást kell tenni majd egy-egy harc során, és az együtt kapott eredmények alapján kell meghatározni a veszteség mértékét..
    Mutasd a teljes hozzászólást!
  • Kell egy egyenlet, ami kiszámolj egy értéket a képességekből, és amelyiknek nagyobb azt íratod ki győztesként.

    pl.
    2 körre:

    Sebzés: Erő+Fegyver sebzése-5
    Védekezés: Páncél+10

    5-ös sebzés vs. 6 páncél 0-0 sérülés
    3-as páncél vs. 7 sebzés 4-0 sérülés
    Mutasd a teljes hozzászólást!
  • Elküldtem, és köszi előre is.
    Mutasd a teljes hozzászólást!
  • Ha elküldöd priviben, ránézek majd este, most nem érek rá annyira.
    Mutasd a teljes hozzászólást!
  • Bemásoljam, a te peszeudo kódod szerint írt kódomat?

    Örülnék ha le ellenőrizni valaki. :s
    Mutasd a teljes hozzászólást!
  • Huh bocsi, de ezt most nem értem :S
    Mutasd a teljes hozzászólást!
  • Mert valójában ez akart lenni, csak siettem (sorry):
    különben ugyanez csak ellenfél - játékos vonalon helyett: ugyanez csak ellenfél - játékos vonalon különben itt meg lemaradt, hogy a fenti fordítottja


    (Persze ezt az algoritmust is lehet még optimalizálni bőven.)
    Mutasd a teljes hozzászólást!
  • Semmiben nincs hiba. De azért mindent köszönök neked és mindenki másnak, főleg SalyT-nak a peszeudo kódjáért, kicsit az értékeket és tulajdonságokat, és pár "különben"-t kapott és azt hiszem működik, csak az a baj, hogyha az egyiknek nagyobb a szerencséje akkor az kezd az ütéssel ugyebár, de már abban az 1 körben megöli a másikat xd, pedig nem nagy különbség van a két felhasználó között.
    Mutasd a teljes hozzászólást!
  • > Ha én ide bemásolnám az egész lapot, húúúúúúha 1442 soros.

    Szó sincs róla. Csakis azt a részt, amelyikben a hiba van.
    Mutasd a teljes hozzászólást!
  • Ez egyértelmű.
    Mutasd a teljes hozzászólást!
  • Ha már példálózunk, ez is egy érdekes rendszer, és itt csak 4 tulajdonság van:
    Combat


    @phptanulo
    A lényeg az, hogy úgy írod fel a képleteket, ahogy te akarod. Ez elvileg a te játékod, azt csinálsz benne, amit te akarsz, így igazából senki sem tud érdemben tanácsot adni (mivel nem látunk a fejedbe). Megcsinálod, aztán ha valami nem tetszik, akármikor változtathatsz rajta.
    Mutasd a teljes hozzászólást!
  • Ha én ide bemásolnám az egész lapot, húúúúúúha 1442 soros.

    Az erőből így vonom ki a sebzést:

    Elsősorban kiszedem mysqlből az erőt, ami az alap, aztán kinézem az aktív karakteren lévő tárgyakból a bónuszokat, azokat hozzáadom. és aztán jön ez:


    $felhasznalo_ero_teljes_ertek = $felhasznalo_karakter_adat["ero"] + $fegyver_felszereles["felszereles_bonusz_1_ertek"] + $csizma_felszereles["felszereles_bonusz_1_ertek"] + $sisak_felszereles["felszereles_bonusz_1_ertek"] + $labszarvedo_felszereles["felszereles_bonusz_1_ertek"] + $gyuru_felszereles["felszereles_bonusz_1_ertek"] + $kesztyu_felszereles["felszereles_bonusz_1_ertek"] + $amulett_felszereles["felszereles_bonusz_1_ertek"] + $pajzs_felszereles["felszereles_bonusz_1_ertek"] + $ov_felszereles["felszereles_bonusz_1_ertek"] + $vert_felszereles["felszereles_bonusz_1_ertek"]; $sebzes_ertek_min_kiszamitas = $felhasznalo_ero_teljes_ertek * $fegyver_felszereles["felszereles_bonusz_sebzes_min_ertek"] / 10; $sebzes_ertek_max_kiszamitas = $felhasznalo_ero_teljes_ertek * $fegyver_felszereles["felszereles_bonusz_sebzes_max_ertek"] / 10; $sebzes_ertek_min = floor($sebzes_ertek_min_kiszamitas); $sebzes_ertek_max = floor($sebzes_ertek_max_kiszamitas); echo $sebzes_ertek_min ." - ".$sebzes_ertek_max;
    Mutasd a teljes hozzászólást!
  • Uh elnézést ha megbántottalak, valamivel.
    Mutasd a teljes hozzászólást!
  • Akkor dolgozd fel a több adatodat, miszter nagyszerű, nem állítalak meg benne. Találj ki egy képletet, aztán használd, én csak a módszert mutattam meg, és nem tiltottam meg, hogy mást is felhasználj...

    Ha
    egészségesen
    tudnál fogalmazni, lehet, hogy kapnál egészséges választ is.

    Szerintem ők több adattal dolgoznak mint te, sok sikert:
    Combat rating system
    Mutasd a teljes hozzászólást!
  • Nézd, honnan tudhatnánk mi, hogy nálad hogyan jön ki az 'Alkat'-ból az 'Élet', és ezeknek mi legyen a szerepe a harcban?
    Valamit alkossál, ha konkrét gond van, csak mutasd meg a kódod, megpróbálunk segíteni megtalálni a hibát.
    Mutasd a teljes hozzászólást!
  • Oh de kedves vagy! :)
    Mutasd a teljes hozzászólást!
  • Rendben, értem én a célzást.

    Még egészséges választ nem kaptam, de nem baj, sok választ kaptam, ebből ki lehet hozni azt amit szeretnék.

    Köszi azért neked is és a többieknek is!
    Mutasd a teljes hozzászólást!
  • Jó kedvem van, adok egy peszeudokódot:
    while (játékos.élet > 0 || ellenfél.élet > 0){ if játékos.szerencse > ellenfél.szerencse if random(1,100) < játékos.harcművészet sebzés = játékos.erő * játékos.ügyesség különben sebzés = játékos.erő / 3 if random(1,100) < játékos.szerencse sebzés = sebzés * 1.5 ellenfél.élet -= sebzés if ellenfél.élet <= 0 break különben ugyanez csak ellenfél - játékos vonalon } if játékos.élet <= 0 echo "meghaltál" különben echo "győztél"
    Mutasd a teljes hozzászólást!
  • Jah és az nem mondtam, hogy nem használok smarty-t. (Bocsi ezért is!)
    Csak azért mondom, hogy ne smary, objektes függvényt adjatok,ha adtok, ne hogy potyára pazarolja az időtöket.
    Mutasd a teljes hozzászólást!
  • Dolgozz fel bátran több adatot! Vagy tegyél fel egy konkrét kérdést. Vagy találd meg az Állás/munka rovatot.
    Mutasd a teljes hozzászólást!
  • Igen, nagyszerű vagy, de egy a bibi, én több adatot akarok feldolgozni :S
    Mutasd a teljes hozzászólást!
  • A felhasználónak nem kell látnia, hogy itt több kör volt.

    while($karakter1->el_meg && $karakter2->el_meg) { $sebzes = $karakter1->ut(); $karakter2->sebez($sebzes); if ( !$karakter2->el_meg ) break; $sebzes = $karakter2->ut(); $karakter1->sebez($sebzes); } if ( $karakter1->el_meg ) { "Karakter 1 győzőtt"; } else "Karakter 2 győzött";
    Mutasd a teljes hozzászólást!
  • Uh bocsi, adom is az adfatokat:

    Erő,Alkat,Ügyesség, Szerencse,Harcművészet
    És ezekből adotdó mellék tulajdonságok:
    Erő > Sebzés
    Alkat > Élet
    Ügyesség >Támadási erő
    Szerencse > Kritikus találati esély
    Harcművészet > Pontosság

    Ismét elnézést
    Mutasd a teljes hozzászólást!
  • Ezért mondtam a ciklust.
    Mutasd a teljes hozzászólást!
  • Pl: minden körben mindkét félnek van támadása (pl erő + fegyver_szakértelem + fegyver_bónusz + véletlenszám), abból levonod az ellenfél védekezését (pl ügyesség + gyorsaság + páncélzat), és megkapod, ki mennyit sebzett a másikon (HP-veszteség). A harc véget ér, ha valakinek elfogyott a HP-je.
    Mutasd a teljes hozzászólást!
  • Igen értem, de én 1 körös csatát akarok :S, ami azt jelenti rákattintok a harcra és meg is van a győztes.


    Amúgy értem én hogy te úgymond el,életi többkörös csatára céloztál.
    Mutasd a teljes hozzászólást!
  • Na ez az, amit neked kéne kitalálnod. Ez a te döntésed, hogy mi alapján számolsz, pláne, hogy nem is mondod meg, hogy milyen adatai vannak a játékosoknak.

    Feltételezve az életpont, sebzés és gyorsaság tulajdonságokat:
    ciklus, amíg valamelyik karakter meg nem hal:
    - a gyorsabb karakter üt először
    - a sebzett karakter életéből levonódik a sebzés (esetleges védelmekkel lebutított változat, pl életpont = életpont - (sebzés - védelem) )
    - a másik karakter is üt a fentiek szerint
    Mutasd a teljes hozzászólást!
  • egyszerű ha pl:

    sebzés = ügyesség + 3*erő + szint alap + faj alap + kaszt alap
    kritikus ütés = ügyesség * 4 / 100 + szint alap + faj alap + kaszt alap

    életerő= életerő + szint alap + faj alap + kaszt alap

    Először az egyik fél üt, beviszi a "sebzés"-t , kritikus ütés %-ban 150% sebzést visz be, addig mig az ellenfélnek el nem fogy az életereje. Felváltva ütnek.
    Mutasd a teljes hozzászólást!
  • Sziasztok.

    Azt szeretném megvalósítani, hogy van két adott játékos, mind két játékosnak különböző adataik, mint erő, sebzés, páncél, stb. és én ezek az adatok alapján szeretném azt kiszámítani, hogy amikor egy játékos harcra hívja a másikat, ott kiszámíthassam php-ben a győztes játékost az adataik alapján.

    Kódrészt nem tudok, mutatni, mivel ez még nincs megvalósítva, de egyéb információkkal tudok szolgálni.:

    mysqlbe mentette minden adatukat a felhasználóknak, és a harc lapon pedig minden adatot ki tudok venni, ami csak kellhet, csak nem tudom, hogyan számoljam ki a nyertes játékost, igazságosan.


    Ez én elméletem:

    Ugyebár vannak az adatok, én a kihívó adatait összeadom, és elveszem belőle az ellenfél adatit, így ha mínuszba megy a kihívó kijött eredménye akkor vesztett, de ha nem akkor győzött. Bár ebben az a baj, hogy a sebzés meg a stb akkor mit számít? :s


    Valakinek van valami ötlete? Nem muszáj kódot adni, beérem egy ötlettel, majd én megírom.
    Előre is köszi.
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd