Gå til innhold

Kjøre ferdig loop, kjøre resten av koden rett etterpå


Anbefalte innlegg

Hei,

 

driver og programmerer blackjack.

Har et lite problem her. Når man trykker stå, kaller jeg funksjonen under. Hvis dealeren har 15 eller mindre skal den trekke kort til den får 16 eller mer som total sum.

 

Koden fungerer, bare at jeg må trykke 1 gang på knappen for hver kort som blir trekt.

Hvordan skal jeg få alt inni if($dealerTotal >= 16) { til å kjøre automatisk når dealeren har trekt seg til 16 eller mer? (altså, alt skjer med et trykk på knappen. trekker nye kort hvis tilfelle, og viser kortene etterpå)

 

	public static function Sta($kortSpiller, $kortDealer, $belop) {

	$a = explode('|', $kortSpiller);
	$b = explode('|', $kortDealer);

	$c = count($a);
	$d = count($b);

	$spillerTotal = 0;
	$dealerTotal = 0;

	/** spiller total sum kort **/
	for($i = 0; $i <= ($c-1); $i++) {
		$spillerTotal = self::KortVerdi($a[$i]) + $spillerTotal;
	}

	/** dealer total sum kort **/
	for($i = 0; $i <= ($d-1); $i++) {
		$dealerTotal = self::KortVerdi($b[$i]) + $dealerTotal;
	}	

	/** dealern må trekke hvis han har under 16 **/
	do {
		if($dealerTotal <= 15) {
			$randDealerKort = mt_rand(1, 52);
			$dealerKortNy = $kortDealer . '|' . $randDealerKort;
			DB::getInstance()->query('UPDATE blackjack SET dealer_kort = \'' . $dealerKortNy . '\' WHERE spiller = \'' . $_SERVER['REMOTE_ADDR'] . '\'');
			$dealerTotal++;
			header('Location: blackjack.php');
		}
	} while($dealerTotal <= 15);

	/** dealern står hvis han har 16 eller mer **/
	if($dealerTotal >= 16) {

		if($spillerTotal == $dealerTotal) {
			self::$TapMld[] = '';
		} else {
			if(($spillerTotal > $dealerTotal) || ($dealerTotal > 21)) {
				self::$VinnMld[] = '';
			} else {
				if($spillerTotal < $dealerTotal) {
					self::$TapMld[] = '';
					}
			}

		}

		#DB::getInstance()->query('DELETE FROM blackjack WHERE spiller = \'' . $_SERVER['REMOTE_ADDR'] . '\'');
		#self::$KnappDisable = 1;
		self::$Sta = 1;
		self::$HvisDealerKort = 1;
		self::$DealerKortSta = $dealerTotal;

		#if(count(self::$VinnMld))
		#	return self::VinnMeldingVis();

		#if(count(self::$TapMld))
		#	return self::TapMeldingVis();

	}

}

Lenke til kommentar
Videoannonse
Annonse

Slik jeg ser det vil den loppen kjøre x antall ganger ettersom hva utgangspunktet til dealeren er.

 

f.eks. dersom

 

dealeren har 10, vil den loopen kjøre 5 ganger.

 

Du assigner totalVerdien til en ny variable, og oppdaterer den i DB. Slik jeg ser det så oppdaterer ikke du dealerTotal, men øker den med 1 hvor vær loop.

 

Derfor vis utgangspunktet er 10, vil den bli 11 etter en loop og 12 etter loop to, osv.

 

$dealerTotal++; 

 

Du oppdaterer DB med dealerKortNy her, men ser ikke hvor du henter ut igjen denne verdien.

 

DB::getInstance()->query('UPDATE blackjack SET dealer_kort = \'' . $dealerKortNy . '\' WHERE spiller = \'' . $_SERVER['REMOTE_ADDR'] . '\'');

 

Denne gir deg et kort mellom 1 og 52. Hvor gjør du om denne verdien til f.eks spar 2?

 

       $randDealerKort = mt_rand(1,52);

 

Dersom du er under 16 antar jeg at du ønsker å trekke 1 nytt kort fram til den er 16.

Logiken burde da være: ( Har ikke testet denne, kan være feil i den)

 

do {
   if ($dealerTotal <= 15) {

       $randDealerKort = mt_rand(1,52);
       //Funksjon for å sjekke verdi på kortet du trakk.
       $newCardValue = checkCard($randDealerKort);
       $dealerTotal = $newCardValue + $dealerTotal;
    }
}while ($dealerTotal <= 15);

 

Mulig jeg har oversett noe i koden din. Correct me if im wrong :)

Lenke til kommentar

Takk for svar :) Skal se på det etterpå.

 

Hvordan jeg finner ut av verdien til kortet? Jo, med KortVerdi() funksjonen som ser slik ut:

 

	public static function KortVerdi($kort) {

	if($kort >= 1 && $kort <= 4) $value = 2;
	if($kort >= 5 && $kort <= 8) $value = 3;
	if($kort >= 9 && $kort <= 12) $value = 4;
	if($kort >= 13 && $kort <= 16) $value = 5;
	if($kort >= 17 && $kort <= 20) $value = 6;
	if($kort >= 21 && $kort <= 24) $value = 7;
	if($kort >= 25 && $kort <= 28) $value = 8;
	if($kort >= 29 && $kort <= 32) $value = 9;
	if($kort >= 33 && $kort <= 36) $value = 1;
	if($kort >= 37 && $kort <= 40) $value = 10;
	if($kort >= 41 && $kort <= 44) $value = 10;
	if($kort >= 45 && $kort <= 48) $value = 10;
	if($kort >= 49 && $kort <= 52) $value = 10;
	if($kort >= 53 && $kort <= 56) $value = 11;

	return $value;

}

 

Og i databasen lagrer seg det som f.eks 4|15|33, noe som da vil si at kortene til sammen har summen 8.

 

Og her regner jeg ut hva dealeren har totalt:

/** dealer total sum kort **/
for($i = 0; $i <= ($d-1); $i++) {
$dealerTotal = self::KortVerdi($b[$i]) + $dealerTotal;
} 

 

Og skulle da fått kjørt do-loopen helt ferdig :) Nå trekker den bare 1 og 1 kort (må trykke stå fler ganger) inntill han har 16 eller mer. Jeg vil at han skal trekke alt han trenger med en gang med et trykk på knappen. :)

 

 

/** query som sjekker om man har en eksisterende bj runde **/
$sql = DB::getInstance()->query('SELECT * FROM blackjack WHERE spiller = \'' . $_SERVER['REMOTE_ADDR'] . '\'');
$row = DB::Rows();

if($row == 1) {
foreach($sql as $row) {
	$dineKort = $row['dine_kort'];
	$dealerKort = $row['dealer_kort'];
	$belop = $row['belop'];
}
$q = 1;
}

else {
$q = 0;
}

/** stå **/
if(isset($_POST['sta']) == 'Stå!') {
if($q == 1) {
	Blackjack::Sta($dineKort, $dealerKort, $belop);
}
}

 

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...