Avatar billede nokiza Nybegynder
02. november 2005 - 14:04 Der er 9 kommentarer og
3 løsninger

Hjælp til noget svært php.

Hejsa jeg kunne rigtig godt tænke mig at lave,
et manager spil,
men skal bruge noget hjælp til et script..
Hvordan kan man udføre et tilfældigt resultat udfra nogle karakterer? altså spillernes karaktere og alt hvad der gælder på et hold.
og jo højre karaktererne er jo - større chance er der for at de vinder..

Mange tak hvis i hjælper!
Avatar billede nielle Nybegynder
02. november 2005 - 14:24 #1
Du kan jo starte med at kigge på rand()-funktionen:

http://us3.php.net/manual/en/function.rand.php

Hvis dine spillere hver har en karakter i et vist interval (f.eks. 0-10), kan deres bidrag til kampen simuleres ved:

$samletResultat = 0;

$randInt = rand(1, 10);
if ($randInt <= $spillerKarakterSpiller1) $samletResultat++;

$randInt = rand(1, 10);
if ($randInt <= $spillerKarakterSpiller2) $samletResultat++;

$randInt = rand(1, 10);
if ($randInt <= $spillerKarakterSpiller3) $samletResultat++;

osv...

Til sidst ender du med en samlet sum med bidrag fra samtlige spillere. Disse kunne du så sammenligne med et tilsvarende resultat fra modstanderne. Det hold som har flest point vinder.

Modellen kan laves bedre hvis du opdeler spillerne i forskellige typer: Angribere og forsvarer. Angriberne kunne så bidrage med positive resultater til holdet selv, mens at forsvarene kunne trække fra på modstandernes resultat (de gode forsvarere sikre at modstanderne ikke score så meget som de kunne).

Endeligt kunne du overveje om du ville vægte de enkelte spillere sådan at nogle bidrager med mere end 1 point hvis de klare deres sandsynlighedstjek.
Avatar billede nokiza Nybegynder
02. november 2005 - 16:08 #2
"Det ser lækkert ud, og det vil jeg straks gå i krig med.

I mellemtiden har jeg spekuleret over hvordan man kunne angive hvilke spillere der scorede i den pågældende kamp."

.. Har du en idé til dette?
Avatar billede nokiza Nybegynder
02. november 2005 - 16:45 #3
Jeg vil forresten lige spørge om hvordan du havde forestillet dig at lave det med forsvar og angreb. Og smid lige et svar med det samme ; )
Avatar billede nielle Nybegynder
02. november 2005 - 16:58 #4
Efterhånden som du afgøre hvilke angrebs-spillere som bidrager positivt til den totale sum, kan du jo f.eks. samle dem dem op i et array:

$muligeScorer = array();
$samletResultat = 0;

$randInt = rand(1, 10);
if ($randInt <= $spillerKarakterSpiller1)
{
    $samletResultat++;
    $muligeScorer[] = "epiller1";
}

$randInt = rand(1, 10);
if ($randInt <= $spillerKarakterSpiller2)
{
    $samletResultat++;
    $muligeScorer[] = "epiller2";
}

$randInt = rand(1, 10);
if ($randInt <= $spillerKarakterSpiller3)
{
    $samletResultat++;
    $muligeScorer[] = "epiller3";
}

Derefter kan du, når du har besluttet dig til hvad den endelige målscorer bliver, trække lod blandt spillerne fra dette array. Hver post er så at sige et lod. Hvis du gerne vil have at visse spillere skal have en større sandsynlighed end andre kan du smide flere lodder i for dem:

$randInt = rand(1, 10);
if ($randInt <= $spillerKarakterSpiller1)
{
    $samletResultat++;
    $muligeScorer[] = "epiller1";
    $muligeScorer[] = "epiller1";
    $muligeScorer[] = "epiller1";
}
Avatar billede nielle Nybegynder
02. november 2005 - 17:08 #5
Forsvar og angreb - en spillere er enten angriber eller forsvarer (herunder målmand). Dette skal du have angivet for dine spillere på en eller anden måde. Enhver spiller kan måske oven i købet have både en angreb- og en forsvarskarakter – så ville angrebsspillerne bare være dem som har en større karakter i angreb end i forsvar.

Holdets egne angribere bidrager positivt til holdets score, mens modstanderenes forsvarer bidrager negativt (det forhindre at angriberene score):

$samletResultatHold1 = 0;

$randInt = rand(1, 10);
if ($randInt <= $Hold1_Spiller1_AngrebKarakter)
{
    $samletResultatHold1++;
    $muligeScorer[] = "spiller1";
}

$randInt = rand(1, 10);
if ($randInt <= $Hold1_Spiller2_AngrebKarakter)
{
    $samletResultatHold1++;
    $muligeScorer[] = "spiller2";
}

...

$randInt = rand(1, 10);
if ($randInt <= $Hold2_Spiller1_ForsvarKarakter)
{
    $samletResultatHold1--;
}

$randInt = rand(1, 10);
if ($randInt <= $Hold2_Spiller2_ForsvarKarakter)
{
    $samletResultatHold1--;
}

...
Avatar billede nielle Nybegynder
02. november 2005 - 17:09 #6
... og et svar :^)
Avatar billede nokiza Nybegynder
02. november 2005 - 18:09 #7
Tak for hjælpen der,
Har lige et spørgsmål mere..

Jeg har en tabel med en masse spillere, som alle har et hold_id. Men når jeg skal spille en kamp, vil jeg gerne ha' at den tjekker om der findes 11 spillere i databasen med et angivent hold_id, og hvis der ikke er det - skal den selv generere nogle spillere, som kan have et tilfældigt navn (og de navne den kan vælge imellem, står i et array i filen), og personens karakter skal være imellem 5-12..
Og den skal ikke tilføje de nye spillere til Databasen,
spillerne skal bare spille kampen!
Avatar billede nielle Nybegynder
02. november 2005 - 20:02 #8
Du tæller antallet af spillere i databasem ved denne lille SQL:

SELECT count(*) AS antal FROM dinSpillerTabel WHERE hold_id=42

- hvis det altså er hold_id=42 det drejer sig om.
Avatar billede nokiza Nybegynder
02. november 2005 - 21:07 #9
Men hvordan skal jeg sørge for at generere præcis de manglende spillere fra et array. ???
Avatar billede nielle Nybegynder
02. november 2005 - 21:25 #10
Når du har udtrukket antallet af dem som allerede eksistere, så ved du jo også hvor mange der mangler. Derefter laver du en for-løkke som opretter et array med netop dette antal. Nu ved jeg jo ikke hvordan dine spiller ser ud (sådan rent data-mæssigt), men de skal da i hvert fald hver især have en (eller flere) karaktere. Denne kan du lave med rand():

$supplerendeSpillerKarakter = array();

for ($SpillerNr=1; $SpillerNr<=$AntalManglendeSpillere; $SpillerNr++)
{
    $supplerendeSpillerKarakter[] = rand(0, 4);
}

- hvis de f.eks. skal have karaktere i intervallet 0-4.
Avatar billede nielle Nybegynder
21. november 2005 - 18:44 #11
Har du fået det til at fungere?
Avatar billede nielle Nybegynder
10. december 2005 - 13:41 #12
Bom-be-di-bom... Hvorfor afviste du mit svar? Jeg gætter på at det var ved en fejl, eller hvad?
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester