Hogyan volna a legjobb kivitelezni, megvalósítani ezt az algoritmust c# nyelvben?
Van egy alkalmazás ami egy oldalnézetes kettő a kettő elleni verekededős játék.A problémám pedig az,hogy nemtudom milyen algoritmust használják arra,hogy számontartott a négy karakter közül azt a kettőt ammelyek legtávolabb vannak egymástól vízszintesen és függőlegesen is eggyaránt.
Arra gondoltam,hogy ezeknek a pozíciójukat egy tömbbe tárolják és frameként higgadtan volna a sort metódus de ez erőforrás igényes feladat volna szerintem,tudjátok egy igazán hatékony módszert erre?
Ilyeneket még nem csináltam, szóval nézd el, ha rossz ötlet...
De én így csinálnám:
- a 4 karakterről úgyis tudom, hol vannak (mert ki kell rajzolni őket ugye)
- tegyük fel, hogy ez 4 darab pontot jelent (2-2 koordinátával mondjuk)
- két pont távolságára meg van képlet: négyzetgyök((x1-x2)^2 + (y1-y2)^2) // ha jól emlékszem, így néz ki
- 4 pont esetén ez 6 darab távolságot jelent (ha jól számolok), és ezeken kéne akkor maximum kiválasztást (ez egy programozási tétel) végezni
Ez így szerintem nem túl nagy számításigényű megoldás...
Feltéve, hogy jó...
Mondjuk így utólag gondolkoztam csak el azon, hogy mire kellhet.
Tipp: befoglaló/köré írható téglalaphoz?
Ebben az esetben inkább külön számolnám a vízszintes (abs(x1-x2)) és függőleges távolságokat (abs(y1-y2)), és azokon keresnék maximumot.
4 karakter az (4*4-4) / 2 = 6 vizsgálat minden képkockánál.
Legyen dx = abs(x1-x2) vízszintes távolság és dy = abs(y1-y2) függőleges távolság. Sokféleképpen számolhatsz...
- Lehet elég a Manhattan távolságuk is: dM = dx + dy
- Lehet euklideszi távolság: dS = sqrt(dx^2 + dy^2), de mivel igazából csak maximumot keresel ezért nem kell gyököt vonni: dS2 = dx^2 + dy^2
- Ha oldalnézetes a játék lehet fontosabb az x távolság, így lehet: dW = dx * w + dy, ahol w (súly) egy tetszőleges skalár szám.
A sort arra való, hogy sorba rendezzen, nem azzal kell a világot megváltani. Ha nem akarod hogy valóban sorba legyenek akkor elég ha csak maximumot keresel és eltárolod az objektum referenciáját, vagy indexét ha tényleg tömbben akarod tárolni. Bár gondolom a karakterek külön osztályok és van egy Utility osztályod ami őket kezeli.
Nem akarok kételkedni, de ha maximum keresésre sort-ot akarsz használni, és nem vagy képben az euklideszi távolsággal, akkor, hogy fogsz verekedős játékot csinálni? Bár igazából az, hogy gyakorolsz nagyon sokat jelent.
"frameként"
Szerintem ezt felejtsd el, rossz hozzáállás.
Én ezt megtudom csinálni egyébjént de a kérdést csak azért írtam ki,hogy hátha tudtok rá valami hatékony módszert.
Egyébként 4 értéket fog kapni a kamera a két legtávolabbi karakter pozícióját és még két értéket azt a kettőt ami a legmagasabban és legalacsonyabbat van.Ebből a négy értékből tidni fogom azt,hogy melyik irányba fog kellenem mozgatni a kamerát ahhoz,hogy ez benfoglalja magában a pálya azon részét ahol az összes karakter van.
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!