SoulGodMedlem sedan aug. 20051 200 inlägg Jag undrar hur man gör ett enkelt randomscript i PHP,
säg att jag har följande saker:
A1 - A2 - A3 - A4 - B1 - B2 - B3 - B4
Och vill att scriptet ska ge mig ett "random" av detta alternativ.
Hur gör jag detta?
Och sedan, om jag vill ge varje sak av detta ett värde,
t.ex A1 = 1 // A2 = 2 , för att kunna utnyttja detta senare i en matematisk uträkning, hur gör jag detta?
Kan ingenting om PHP, och vill därför ha hjälp med en grund till detta,
så jag kan lära mig & leka med detta senare.
Ev. länkar till sidor om random-uppbyggnad + matematiska uträkningar uppskattas också!
/M
ZaimanMedlem sedan dec. 20014 239 inlägg http://se2.php.net/rand
Kanske hjälper på vägen..
SoulGodMedlem sedan aug. 20051 200 inlägg Kör Följande:
<?php
echo rand(1, 13) . "\n";
echo rand(1, 13) . "\n";
echo rand(1, 13);
?>
Hur gör jag för att ha 4 olika grupper av dessa? T.ex A B C D ?
Det som skall kunna komma ut ur random är alltså:
A1 - A13 , B1 - B13 , C1-C13 , D1-D13
Och för att undvika krångel senare,
är det bättre att ge värdet A01 istället för A1 , i framtida matematiska uträkningar?
* EDIT *
Och för att förstå koden, vad gör . "\n" ?
bassebhuMedlem sedan nov. 20016 480 inlägg Det ska alltid vara samma bokstav för varje grupp och en högre andra siffra? Alltså inte t.ex. B3-A1? :)
\n är radbrytning
SoulGodMedlem sedan aug. 20051 200 inlägg Det kan vara B3-A1 ..
Alltså - för att förklara enklare.. Det ska vara en kortlek..
A - B - C - D är alltså (H)järter - (R)uter - (K)löver - (S)pader
Och 1-13 är ju korten då :)
tydalMedlem sedan juni 20034 013 inlägg Det enklaste är att du ger dem nummer från 0 till 51. Då blir det både enklare att välja slumpmässigt och göra beräkningar.
I praktiken har du då alltså A1-A13 från 0 till 12, B1-B13 från 13 till 25, C1-C13 från 26-38 och D1-D13 från 39-51.
För att få fram färgen så gör du en heltalsdivision med 13:
$farg = (int) ($kort / 13);
Då får du fram A som 0, B som 1, C som 2 och D som 3.
För att få fram valören så räknar du ut resten:
$valor = $kort % 13;
Då får du ut ett värde mellan 0 och 12. Föredrar du att få ess som 1 och kung som 13 är det bara att du tar plus ett.
$valor = ($kort % 13) + 1;
SoulGodMedlem sedan aug. 20051 200 inlägg Okej. För mig som nu är totalt lost... Va??? :P
Hur använder jag det där? Alltså hur sätter jag in det i mitt script? (se längre upp)
* EDIT *
Och hur gör jag för att lägga ihop dom?
Om jag vill ha en ruta som visar "summan" t.ex?
tydalMedlem sedan juni 20034 013 inlägg Vi kan göra en enkel funktion som talar om vad kortet heter i klartext:
<?
function visaKort($kort)
{
$farger = array('hjärter', 'ruter', 'spader', 'klöver');
$valorer = array('ess', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'knekt', 'dam', 'kung');
$farg = (int) ($kort / 13);
$valor = ($kort % 13);
return $farger[$farg] . ' ' . $valorer[$valor];
}
?>
Nu kan vi använda tal mellan 0 och 51 för att representera alla kort i kortleken och för att få reda på vad exempelvis 33 är för kort så använder vi funktionen visaKort().
<?
echo visaKort(33); // Skriver ut vilket kort som är nummer 33.
?>
För att använda ditt skript ovan ska vi alltså i stället välja tal mellan 0 och 51 (i stället för 1 och 13) och så skickar vi dem till visaKort() för att visa vilket kortet är:
<?
echo visaKort(rand(0, 51)) . "\n";
echo visaKort(rand(0, 51)) . "\n";
echo visaKort(rand(0, 51)) . "\n";
?>
SoulGodMedlem sedan aug. 20051 200 inlägg Okej - min sista frågor innan jag ska ta (just nu 8 olika php skol-länkar) och försöka faktiskt lyckas med någonting här .. hehe
1. Om jag vill ha en egen rad med "Summa" på... Hur gör jag det? Alltså ett värde på korten. (2 är värt 2, knekt är värt 11 o.s.v.)
tydalMedlem sedan juni 20034 013 inlägg
SoulGod skrev:
ch hur gör jag för att lägga ihop dom?
Om jag vill ha en ruta som visar "summan" t.ex?
Jag antar att du menar att bara lägga ihop valörerna då...
Till att börja med får du spara de valda korten i variabler:
<?
$kort1 = rand(0, 51);
$kort2 = rand(0, 51);
$kort3 = rand(0, 51);
?>
Och sen som jag skrev ovan så får du fram valören med ($kort % 13), och så plussar man bara ihop:
<?
$summa = ($kort1 % 13) + ($kort2 % 13) + ($kort3 % 13);
?>
Just ja, du måste ju ta plus 3 också eftersom varje korts valör kommer att vara ett mindre.
Egentligen borde man väl göra det här objektorienterat, men men...
Egentligen borde man också ha en kortlek i en array så att du kan ta bort kortet som blivit valt så det inte kan väljas igen, men det är väl kanske överkurs i nuläget...
SoulGodMedlem sedan aug. 20051 200 inlägg Jag kör just nu
<?
function visaKort($kort)
{
$farger = array('hjärter', 'ruter', 'spader', 'klöver');
$valorer = array('ess','2','3','4','5','6','7','8','9','10','knekt','dam','kung');
$farg = (int) ($kort / 13);
$valor = ($kort % 13);
return $farger[$farg] . ' ' . $valorer[$valor];
}
?>
<?
echo visaKort(rand(0, 51)) . "\n";
echo visaKort(rand(0, 51)) . "\n";
echo visaKort(rand(0, 51)) . "\n";
?>
Ska jag ersätta echo visaKort med $kort1 koden?
NOTIS: Jag skall bygga en "Blackjack-variant", så korten skall kunna väljas igen.
tydalMedlem sedan juni 20034 013 inlägg
soulgod skrev:
Ska jag ersätta echo visaKort med $kort1 koden?
Ja, du ska ersätta det, annars kommer det bli olika kort som visas på skärmen och som summeras. Varje gång rand() körs blir det ju ett nytt kort. I stället kan du skriva ut $kort1 och de andra på skärmen genom att lägga till:
echo visaKort($kort1) . "\n";
echo visaKort($kort2) . "\n";
echo visaKort($kort3) . "\n";
För att sammanfatta... Med rand() väljer du ett kort slumpmässigt. Med visaKort() kan du skriva ut på skärmen vad kortet heter. Med ($kort % 13) får du ut kortets valör... Eller vänta nu, gör så här i stället:
<?
function valor($kort)
{
return ($kort % 13) + 1;
}
?>
Om du lägger in den koden kan du skriva så här istället:
$summa = valor($kort1) + valor($kort2) + valor($kort3);
SoulGodMedlem sedan aug. 20051 200 inlägg Hm - nu ändrar vi fram och tillbaka här ..
Vart ska jag lägga function?
Summan lägger jag längst ner , så mycket har jag förstått.
Vilka koder ska jag ha kvar, och vilka ska bort :P
Mitt förra inlägg visar koden jag har nu - peka gärna vad ska ändras,
så jag inte ändrar något fel( försökte nyss och fick typ 5 fel heh )
tydalMedlem sedan juni 20034 013 inlägg Funktionsblocken kan du lägga var du vill, men det är snyggare om man lägger dem ihop, eller i en separat fil som men sedan inkluderar överst: include "funktioner.php";
Kör med den här koden:
<?
$antalkort = 3;
$summa = 0;
for ($i = 0; $i < $antalkort; $i++)
{
$kort = rand(0, 51);
$summa += valor($kort);
echo visaKort($kort) . "\n";
}
echo "Summa: " . $summa . "\n";
function valor($kort)
{
return ($kort % 13) + 1;
}
function visaKort($kort)
{
$farger = array('hjärter', 'ruter', 'spader', 'klöver');
$valorer = array('ess', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'knekt', 'dam', 'kung');
$farg = (int) ($kort / 13);
$valor = ($kort % 13);
return $farger[$farg] . ' ' . $valorer[$valor];
}
?>
SoulGodMedlem sedan aug. 20051 200 inlägg Tack! Funkar klockrent.
Ska bara få till mina radbrytningar, och sedan försöka lära mig lite av alla dessa sidor.
Varför kan det inte vara lika lätt som excel nu för?
if $summa = 1< Then bla bla
if $summa = 5 Then bla bla
haha
Tackar så länge , kommer nog mer frågor under kvällen när jag försöker :P
* NOTIS *
Drog det även i ett PM till dig...
Är det sjukt svårt att bygga ett blackjack / 21 script?
Kanske ett för stort projekt att starta när man inte kan PHP?
SoulGodMedlem sedan aug. 20051 200 inlägg Har bytt ut bilder nu, (ritade mina egna kort) så nu är det grafiskt :P
Även (med hjälp av tydal) fått till summa till mitt script.
Min nästa fråga är egentligen hur jag använder "if" eller liknande.
if $summa = olika saker.. och hur jag "printar" ett svar isåfall?
Exempel:
Om $summa = <20 Then Print("Hej")
Om $summa = 20 Then Print ("på")
Om $summa = >20 Then Print ("dig")
tydalMedlem sedan juni 20034 013 inlägg <?
if ($summa < 20)
{
print "Hej";
}
elseif ($summa == 20)
{
print "på";
}
elseif ($summa > 20)
{
print "dig";
}
?>
SoulGodMedlem sedan aug. 20051 200 inlägg Nu kom jag på ett fel i min fina plan här ...
I BlackJack / 21 så är Knekt / Dam / Kung värda 10...
Finns det något enkelt sätt att med denna kod
"rätta till" den matematiken?
tydalMedlem sedan juni 20034 013 inlägg Ändra:
function valor($kort)
{
return ($kort % 13) + 1;
}
till:
function valor($kort)
{
$valor = ($kort % 13) + 1;
if ($valor > 10)
$valor = 10;
return $valor;
}
CompusaMedlem sedan jan. 20023 327 inlägg SoulGod: Tänk även på att ess räknas som 1 eller 11, beroende på situationen.
An ace's value is 11 unless this would cause the player to bust, in which case it is worth 1