19. januar 2008 - 11:24Der er
26 kommentarer og 1 løsning
Hjælp til angrebs script til Browser Based Game
Hej eksperter.
Jeg er igang med et Online Browser Based Game g er nu nået til den del hvor folk skal kunne angribe hinanden, jeg har prøvet mig lidt frem men det ser ikke ud til at jeg kan få noget som helst til at lykkedes. Det jeg gerne vil have er at når en bruger angriber en anden skal der så komme en liste som følgende eksempel:
Bruger A ramte Bruger B for 123 skade. Bruger B ramte Bruger A for 456 skade. osv osv. indtil en af brugerne har 0 liv.
Scriptet vil nok være noget i stil med: ########################################################### Do until Bruger_A_Life = 0 OR Bruger_B_Life = 0 Randomize Bruger_A_Life = Bruger_A_Life Bruger_A_MinDmg = 1 Bruger_A_MaxDmg = 100 Bruger_A_Dmg = Bruger_A_MaxDmg - Bruger_A_MinDmg + 1 Bruger_A_DmgRnd = Bruger_A_Dmg * Rnd() Bruger_A_DmgRnd = Bruger_A_DmgRnd + Bruger_A_MinDmg Bruger_A_DmgFinal = int(Bruger_A_DmgRnd) Bruger_B_Life = int(Bruger_A_DmgFinal) - int(Bruger_B_Life) Response.Write "Du skadede Bruger B for " & Bruger_A_DmgFinal & "<br>"
Brug kun randomize én gang! Har erfaret, at det ellers rent faktisk kan gøre dine tilfældige tal forudsigelige. :) Det skal kun sættes ind øverst i koden for at undgå, at tilfældige tal på denne side ikke minder om tilfældige tal på forrige side.
Ikke andet end at der ikke står noget på siden, har prøvet og gå koden igennem tonsvis af gange for at se hvad der kunne være galt og har byttet lidt rundt på variablerne/skrevet mere kode til og fjernet lidt og ligemeget hjælper det :)
Har du sat Bruger_A_Life og Bruger_B_Life til noget, inden du kører Do Until, for ellers vil de jo være 0 til at begynde med. Prøv evt. at udskrive Bruger_A_Life og Bruger_B_Life lige inden Do Until for at se, om de er sat rigtigt eller er lig med nul.
Ser du heller ikke teksten: Du skadede Bruger B for Du skadede Bruger A for
Prøv evt. også at response.write etellerandet lige i begyndelsen af Do Until, så vi kan se, om den kører. Eller du kan måske bruge Response.Redirect "http://www.google.com"... Hvis den går til google, ved vi, at den er inde i løkken.
Du kan jo evt. tjekke det ud nu, har lige poleret koden lidt med nogle IF sætninger og sådan. http://flex.servegame.org/AH/Test.asp Det virker vidst fint nu :)
Jeg ville nok også vælge at putte koden for "BrugerX angeriber BrugerY" ud i en funktion. På den msåde slipper man for at gentage angrebs-koden for "BrugerA angriber BrugerB" i tilfældet "BrugerB angriber BrugerA".
Prøv at kigge på din kode igen - du gentager stort set bare den samme blok kode to gange - først for bruger A og dernæst for bruger B. Ved at flytte den ud i en funktion som du kalder 2 gange så får du en mere simpel løsning ud af det.
Ja det er selvfølgelig rigtigt nok, men det gør mig sku ik så meget så længe det virker :D det vil bare blive lidt mere indviklet at kode videre på når jeg skal til at tage hensyn til hvilket udstyr brugerne har på osv.
Som din kode ser ud lige nu er der sådan set ikke noget som hedder første slag: Du kunne lige så godt butte de to blokke kode om - og resultatet ville væare arkurat det samme. Dine to spillere angriber faktisk "på samme tid" - ikke "den ene og så den anden (hvis han i øvrigt stadig er i live)".
Bruger B behøver ikke nødvendigvis at være online for at man kan angribe ham/hende, den der angriber slår først og har taget hensyn til at det ikke ender uafgjort:
Response.Write "Bruger B skadede dig for " & Bruger_B_DmgFinal & "<br>" Session("Bruger_A_Life") = int(Session("Bruger_A_Life")) - int(Bruger_B_DmgFinal) End If
Hvis Bruger B allerede er død angriber han/hun ikke mere og Bruger A har vundet.
Men det er ikke kun brugerne der kan angribe hinanden individuelt, der er også en 2D verden man kan rende rundt i og dræbe monstre for at finde udstyr o.l
Do until Bruger_A_Life <= 0 Or Bruger_B_Life <= 0 ' A angriber DmgFinal = Angrib(1, 100) Bruger_B_Life = Bruger_B_Life - DmgFinal Response.Write "Du skadede Bruger B for " & DmgFinal & "<br>"
If Bruger_B_Life > 0 Then ' B forsvare DmgFinal = Angrib(1, 100) Bruger_A_Life = Bruger_A_Life - DmgFinal Response.Write "Du skadede Bruger A for " & DmgFinal & "<br>" End If Loop
Det ville godt nok gøre koden lidt mere kompakt og gøre det nemmere at implementere den bonus man får fra sit udstyr, men for mig betyder det ikke det store så længe det virker i længden :)
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.