wildcard

Status
Niet open voor verdere reacties.

That Guy

Meubilair
Lid geworden
28 nov 2006
Berichten
5.010
Okay, ben ik weer

Ik wilde dus een php functie maken (op een forum dat ik gescript had) welke het simuleren van verschillende dobbelstenen deed. Ik was dus heel leuk op weg:

PHP:
Function D($dice){
	return rand(1, $dice);
}

$rep1 = array("[4]", "[6]", "[8]", "[10]", "[12]", "[20]", "[100]");
$rep2 = array("D(4), D(6), D(8), D(10), D(12), D(20), D(100));

$message = $_POST['message'];  // voorbeeldje ;)
$Dmes = str_replace($rep1, $rep2,$message);

Dat werke allemaal perfect. Maar ik wilde dus ook toevoegen, dat je meerdere keren kan gooien. Bijvoorbeeld:
PHP:
Function D($x, $dice){
	return $x *rand(1, $dice);
}

het probleem is dus dat er dus dat er een wildcard in de 1e array moet zitten:
PHP:
$rep1 = array("[?,4]", "[?,6]", "[?,8]", "[?,10]", "[?,12]", "[?,20]", "[?,100]");
$rep2 = array("D(?,4), D(?,6), D(?,8), D(?,10), D(?,12), D(?,20), D(?,100));

(? = dan het aantal keer gegooid)


iemand een idee? Op .net en google kon ik niets vinden....


V.:thumb:
 
Toevallig net nog een recursieve dobbelsteen-functie gemaakt in een andere thread. Wellicht kun je er iets mee :)

PHP:
<?php
function dice($i_totaal) {
  $i_getal = rand(1,6);  
  $i_totaal = $i_totaal + $i_getal;
  echo 'Worp: '. $i_getal .'<br />';
  if($i_getal == 6) {
    dice($i_totaal);
  } else {
    echo 'Totaal: '. $i_totaal;
  }
}
?>
<html>
<head>
 <title>test</title>
</head>
<body>
<?
dice(0);
?>
</body>
</html>
 
Hey,

alvast bedankt voor de reactie! maar wat ik eigenlijk bedoelde was dit:

*Persoon Y zet op het forum dit neer:*
Ik gooi met 10 keer met een 20 kantige dobbelsteen:

D[10,20]
*Persoon Y drukt op de stuur-bericht-knop*

*de index-file pakt het bericht op en parse-ed het*
index.php
PHP:
Function D($x,$dice){ 
    return $x * rand(1, $dice); 
} 

$rep1 = array("[?,4]", "[?,6]"); 
$rep2 = array("Y gooide ".?." keer met een D4, en er kwam uit: ".D(?,4), "Y gooide ".?." keer met een D6, en er kwam uit: ".D(?,6));

$message = $_POST['message'];  // voorbeeldje ;) 
$Dmes = str_replace($rep1, $rep2,$message);


het "?" is dus de wildcard, maar een ? werkt niet (dooh? :confused::p)
 
Laatst bewerkt:
Dus dan krijg je een functie met 2 parameters...
PHP:
function($i_aantalWorpen, $i_maxGetal)
Dan nog even een FOR-lus je maken die $i_aantalWorpen gaat doen...

Tenminste zo denk ik.

Wat moet het resultaat eigenlijk zijn? Het totaal aantal ogen?
 
het aantal ogen totaal, maar dat had de functie al:
PHP:
Function D($x,$dice){ 
    return $x * rand(1, $dice); 
}
dus bv.
PHP:
echo D(10, 6)   // levert 10 keer een 1d6 op, dus tussen de 10 en 60

Het gaat erom dat in de 'returning' de variabele meegegeven word

even versimpeld:

PHP:
$message = "Ik ga nu 3 keer met een 20-kantige dobbelsteen gooien: [3,20]"

$rep1 = "[?,20]"; 
$rep2 = "Y gooide ".?." keer met een D20, en er kwam uit: ".D(?,20);
$Dmes = str_replace($rep1, $rep2,$message);

echo $Dmes; // dus er moet komen te staan: "Y gooide 3 keer met een D20, en er kwam uit: 30" (30 = iets tussen de 10 en 60)
 
Kromme uitleg maar volgens mij bedoel je dit:
PHP:
function D($x,$dice){ 
  $totaal = 0;
  for($i=1; $i <= $x; $i++) {
    $getal = rand(1, $dice);
    $totaal += $getal;
    // Tussenresultaten weergeven?
    // echo $i .'e worp: '. $getal .' || Totaal: '. $totaal .'<br />';
  }
  return $totaal;
}

Wat je vorige functie deed was $x * de uitkomst van rand(1,$dice)
Als uit rand dus 3 komt dan krijg je $x * 3...
 
Laatst bewerkt:
hmm, dit lost 1 deel van de vraag op, maar niet degene waar de titel over ging (wildcard)

Ik wil dus een wildcard in deze array hebben:
PHP:
$rep1 = array("[?,4]", "[?,6]"); 
$rep2 = array(D(?,4), D(?,6));

want anders moet ik het zo doen:
PHP:
$rep1 = array("[1,4]", "[2,4]", "[3,4]", "[...x,4]", "[1,6]","[2,6]","[...x,6]", "[1,8]", "[...x,8]", ect, ect);
en dat zijn er teveel (nl. 7 ^ x keer, dus als ik max. 9 keer een roll wil doen, 7^9 array items...)

Begrijpen jullie? :p:p:p:p
 
Laatst bewerkt:
Nee ik begrijp het inderdaad niet...

Mijn functie doet hetgeen je eerst stelde: "Ik ga nu 3 keer met een 20-kantige dobbelsteen gooien"

Dat wordt dus D(3,20)
Vervolgens gaat de functie 3x een getal tussen de 1 en de 20 genereren en het totaal optellen en teruggeven...

Ik snap het principe van de hele wildcard niet.
 
okay, anders gesteld dan:

ik wil in plaats van dit:
PHP:
$arr1 = array( "[1,4]", "[2,4]", "[3,4]", "[4,4]", "[5,4]", "[6,4]", "[7,4]","[8,4]","[9,4]",  "[1,6]", "[2,6]", "[3,6]", "[4,6]", "[5,6]", "[6,6]", "[7,6]","[8,6]","[9,6]" );
dit (zoiets):
PHP:
$arr1 = array("[?,4]","[?,6]");


is dat mogelijk? want in plaats van (de 1e $arr1) met alleen maar 4 en 6, moet het ook met 7 andere soorten 9en wss met meer - dit word anders een heel lange array...
 
Laatst bewerkt:
Als jij de eerste waarde van zo'n array altijd tot een maximum hebt dan hoef je geen eens 2 argumenten in een array te stoppen.

Als hij altijd tot 9 gaat dan zet je toch gewoon alleen 4 in de array en doe je het 9-gedeelte in de functie...
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan