/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
Specifikt Problem Med Betingelser I Funkti~
Fra : Tobias


Dato : 15-03-06 19:09

Hej....

Jeg er igang med at programmere et spil Black Jack i php.
Desværre opstår der en fejl i forbindelse med en af mine funktioner.
Hvis jeg kalder funktionen "værdi($bunke)" bliver tallet "$sum" 10 højere
end hvad den burde,
men kun hvis betingelsen "$sum<12" er opfyldt. Tilgengæld ser det ud som om,
at den ser bort fra den anden betingelse,
altså at "korttal($i)==1".

Er der nogen der, ud fra disse tre funktioner, kan se hvordan hvorfor
den lægger 10 til, selvom "korttal($i)==1" ikke er opfyldt??

VH Tobias


function korttal($kort) {
return $kort % 13 + 1;
}

function KortTalværdi($tal) {
if ($tal<=10) { return $tal; }
else { return 10; }
}

function værdi($bunke) {
$sum=0;
for ($i=0;$i<=51;$i++)
if ($bunke{$i}==1) { $sum=$sum+KortTalværdi(korttal($i)); }
for ($i=0;$i<=51;$i++)
if (korttal($i)==1 && $sum<12) { $sum=$sum+10; }
return $sum;
}




 
 
Simon Rasch 9640 (15-03-2006)
Kommentar
Fra : Simon Rasch 9640


Dato : 15-03-06 22:19


Du løkker gennem 51 kort, og de kort der er med i bunken får deres tal
omregnet til en værdi, som lægges til sum. er det korrekt forstået ?

Mener du ikke "$bunke[$i]" istedet for "$bunke{$i}" ?

Jeg forstår ikke denne del:
for ($i=0;$i<=51;$i++)
if (korttal($i)==1 && $sum<12) { $sum=$sum+10; }
, men det kan sagtens skyldes manglende evner fra min side. Men forklar det
venligst hvad og hvorfor.


Mvh
Simon Rasch


"Tobias" <xtobias@xkraes.dk> skrev i en meddelelse
news:44185858$0$67262$157c6196@dreader2.cybercity.dk...
> Hej....
>
> Jeg er igang med at programmere et spil Black Jack i php.
> Desværre opstår der en fejl i forbindelse med en af mine funktioner.
> Hvis jeg kalder funktionen "værdi($bunke)" bliver tallet "$sum" 10 højere
> end hvad den burde,
> men kun hvis betingelsen "$sum<12" er opfyldt. Tilgengæld ser det ud som
> om, at den ser bort fra den anden betingelse,
> altså at "korttal($i)==1".
>
> Er der nogen der, ud fra disse tre funktioner, kan se hvordan hvorfor
> den lægger 10 til, selvom "korttal($i)==1" ikke er opfyldt??
>
> VH Tobias
>
>
> function korttal($kort) {
> return $kort % 13 + 1;
> }
>
> function KortTalværdi($tal) {
> if ($tal<=10) { return $tal; }
> else { return 10; }
> }
>
> function værdi($bunke) {
> $sum=0;
> for ($i=0;$i<=51;$i++)
> if ($bunke{$i}==1) { $sum=$sum+KortTalværdi(korttal($i)); }
> for ($i=0;$i<=51;$i++)
> if (korttal($i)==1 && $sum<12) { $sum=$sum+10; }
> return $sum;
> }
>
>
>



Tobias (15-03-2006)
Kommentar
Fra : Tobias


Dato : 15-03-06 23:02

Hej igen....

Har ikke rigtig beskrevet hvad funktionerne gør, da jeg håbede på at
problemet kunne løses uden videre forklaring.
Men gør det naturligvis lidt lettere med et større overblik.

> Du løkker gennem 51 kort, og de kort der er med i bunken får deres tal
> omregnet til en værdi, som lægges til sum. er det korrekt forstået ?
Løber 52 kort igennem (fra 0 til 51).

> Mener du ikke "$bunke[$i]" istedet for "$bunke{$i}" ?
nope. har gemt kort bunken som en streng bestående af 52 1'taller.
Når et kort har været brugt, ændres kortets dens tilhørende placerings tal
(fra 0 til 51) fra 1 til 0 - således at det samme tal ikke bruges to gange.
Tilbage til dit spørgsmål er det altså en placering og ikke et array der her
er tale om....



> Jeg forstår ikke denne del:
> for ($i=0;$i<=51;$i++)
> if (korttal($i)==1 && $sum<12) { $sum=$sum+10; }

Her kommer lige hele konteksten :
>> function værdi($bunke) {
>> $sum=0;
>> for ($i=0;$i<=51;$i++)
>> if ($bunke{$i}==1) { $sum=$sum+KortTalværdi(korttal($i)); }
>> for ($i=0;$i<=51;$i++)
>> if (korttal($i)==1 && $sum<12) { $sum=$sum+10; }
>> return $sum;
>> }

I denne funktion er jeg ved at omregne de trukne kort (som til at starte med
kun har værdier mellem 0 og 51) til en blackjack-værdi (f.eks. konge=10).
Den gennemgår derfor f.eks. spillerens bunke (de kort han har trukket).
Alle de kort-placerings-tal der har værdien 1 er blevet trukket og skal
derfor regnes med i den samlede sum.
I det konkrete stykke kode du spurgte til testes der om et af de trukne kort
er et es ( korttal($i)==1 ) samt om summen er under 12.
Hvis disse to er opfyldt skal den nemlig lægge 10 til, da esset i dette
tilfælde skal gælde for 11 (og der allerede er lagt en til summet for
esset).

Tilbage til det egentlige problem.
Helt fra start hvor der ikke er trukket kort, tæller den Spillerens bunke
til værdien 20, hvilket også volder problemer når der gives kort.
Jeg prøvede at ændre lidt i koden således :
if (korttal($i)==1 && $sum<12) { $sum=$sum+10; }
if (korttal($i)==1 && $sum<12) { $sum=$sum; }
Og så er der starter den på 0 som den skal, men så lægger den jo ikke 10 til
ved et es - men det viser altså at problemer er her !

VH Tobias



"Simon Rasch 9640" <simon.rasch_NEJ_TIL_SPAM@tdcadsl.dk> skrev i en
meddelelse news:441884b4$0$113$edfadb0f@dread16.news.tele.dk...
>
> Du løkker gennem 51 kort, og de kort der er med i bunken får deres tal
> omregnet til en værdi, som lægges til sum. er det korrekt forstået ?
>
> Mener du ikke "$bunke[$i]" istedet for "$bunke{$i}" ?
>
> Jeg forstår ikke denne del:
> for ($i=0;$i<=51;$i++)
> if (korttal($i)==1 && $sum<12) { $sum=$sum+10; }
> , men det kan sagtens skyldes manglende evner fra min side. Men forklar
> det venligst hvad og hvorfor.
>
>
> Mvh
> Simon Rasch
>
>
> "Tobias" <xtobias@xkraes.dk> skrev i en meddelelse
> news:44185858$0$67262$157c6196@dreader2.cybercity.dk...
>> Hej....
>>
>> Jeg er igang med at programmere et spil Black Jack i php.
>> Desværre opstår der en fejl i forbindelse med en af mine funktioner.
>> Hvis jeg kalder funktionen "værdi($bunke)" bliver tallet "$sum" 10 højere
>> end hvad den burde,
>> men kun hvis betingelsen "$sum<12" er opfyldt. Tilgengæld ser det ud som
>> om, at den ser bort fra den anden betingelse,
>> altså at "korttal($i)==1".
>>
>> Er der nogen der, ud fra disse tre funktioner, kan se hvordan hvorfor
>> den lægger 10 til, selvom "korttal($i)==1" ikke er opfyldt??
>>
>> VH Tobias
>>
>>
>> function korttal($kort) {
>> return $kort % 13 + 1;
>> }
>>
>> function KortTalværdi($tal) {
>> if ($tal<=10) { return $tal; }
>> else { return 10; }
>> }
>>
>> function værdi($bunke) {
>> $sum=0;
>> for ($i=0;$i<=51;$i++)
>> if ($bunke{$i}==1) { $sum=$sum+KortTalværdi(korttal($i)); }
>> for ($i=0;$i<=51;$i++)
>> if (korttal($i)==1 && $sum<12) { $sum=$sum+10; }
>> return $sum;
>> }
>>
>>
>>
>
>



Simon Rasch 9640 (16-03-2006)
Kommentar
Fra : Simon Rasch 9640


Dato : 16-03-06 23:00

Jeg kan se at du har fået løst dit problem med hjælp fra Dan Storm.

Over and out.
Simon Rasch

"Tobias" <xtobias@xkraes.dk> skrev i en meddelelse
news:44188eef$0$67260$157c6196@dreader2.cybercity.dk...
> Hej igen....
>
> Har ikke rigtig beskrevet hvad funktionerne gør, da jeg håbede på at
> problemet kunne løses uden videre forklaring.
> Men gør det naturligvis lidt lettere med et større overblik.
>
>> Du løkker gennem 51 kort, og de kort der er med i bunken får deres tal
>> omregnet til en værdi, som lægges til sum. er det korrekt forstået ?
> Løber 52 kort igennem (fra 0 til 51).
>
>> Mener du ikke "$bunke[$i]" istedet for "$bunke{$i}" ?
> nope. har gemt kort bunken som en streng bestående af 52 1'taller.
> Når et kort har været brugt, ændres kortets dens tilhørende placerings tal
> (fra 0 til 51) fra 1 til 0 - således at det samme tal ikke bruges to
> gange.
> Tilbage til dit spørgsmål er det altså en placering og ikke et array der
> her er tale om....
>
>
>
>> Jeg forstår ikke denne del:
>> for ($i=0;$i<=51;$i++)
>> if (korttal($i)==1 && $sum<12) { $sum=$sum+10; }
>
> Her kommer lige hele konteksten :
>>> function værdi($bunke) {
>>> $sum=0;
>>> for ($i=0;$i<=51;$i++)
>>> if ($bunke{$i}==1) { $sum=$sum+KortTalværdi(korttal($i)); }
>>> for ($i=0;$i<=51;$i++)
>>> if (korttal($i)==1 && $sum<12) { $sum=$sum+10; }
>>> return $sum;
>>> }
>
> I denne funktion er jeg ved at omregne de trukne kort (som til at starte
> med kun har værdier mellem 0 og 51) til en blackjack-værdi (f.eks.
> konge=10).
> Den gennemgår derfor f.eks. spillerens bunke (de kort han har trukket).
> Alle de kort-placerings-tal der har værdien 1 er blevet trukket og skal
> derfor regnes med i den samlede sum.
> I det konkrete stykke kode du spurgte til testes der om et af de trukne
> kort er et es ( korttal($i)==1 ) samt om summen er under 12.
> Hvis disse to er opfyldt skal den nemlig lægge 10 til, da esset i dette
> tilfælde skal gælde for 11 (og der allerede er lagt en til summet for
> esset).
>
> Tilbage til det egentlige problem.
> Helt fra start hvor der ikke er trukket kort, tæller den Spillerens bunke
> til værdien 20, hvilket også volder problemer når der gives kort.
> Jeg prøvede at ændre lidt i koden således :
> if (korttal($i)==1 && $sum<12) { $sum=$sum+10; }
> if (korttal($i)==1 && $sum<12) { $sum=$sum; }
> Og så er der starter den på 0 som den skal, men så lægger den jo ikke 10
> til ved et es - men det viser altså at problemer er her !
>
> VH Tobias
>
>
>
> "Simon Rasch 9640" <simon.rasch_NEJ_TIL_SPAM@tdcadsl.dk> skrev i en
> meddelelse news:441884b4$0$113$edfadb0f@dread16.news.tele.dk...
>>
>> Du løkker gennem 51 kort, og de kort der er med i bunken får deres tal
>> omregnet til en værdi, som lægges til sum. er det korrekt forstået ?
>>
>> Mener du ikke "$bunke[$i]" istedet for "$bunke{$i}" ?
>>
>> Jeg forstår ikke denne del:
>> for ($i=0;$i<=51;$i++)
>> if (korttal($i)==1 && $sum<12) { $sum=$sum+10; }
>> , men det kan sagtens skyldes manglende evner fra min side. Men forklar
>> det venligst hvad og hvorfor.
>>
>>
>> Mvh
>> Simon Rasch
>>
>>
>> "Tobias" <xtobias@xkraes.dk> skrev i en meddelelse
>> news:44185858$0$67262$157c6196@dreader2.cybercity.dk...
>>> Hej....
>>>
>>> Jeg er igang med at programmere et spil Black Jack i php.
>>> Desværre opstår der en fejl i forbindelse med en af mine funktioner.
>>> Hvis jeg kalder funktionen "værdi($bunke)" bliver tallet "$sum" 10
>>> højere end hvad den burde,
>>> men kun hvis betingelsen "$sum<12" er opfyldt. Tilgengæld ser det ud som
>>> om, at den ser bort fra den anden betingelse,
>>> altså at "korttal($i)==1".
>>>
>>> Er der nogen der, ud fra disse tre funktioner, kan se hvordan hvorfor
>>> den lægger 10 til, selvom "korttal($i)==1" ikke er opfyldt??
>>>
>>> VH Tobias
>>>
>>>
>>> function korttal($kort) {
>>> return $kort % 13 + 1;
>>> }
>>>
>>> function KortTalværdi($tal) {
>>> if ($tal<=10) { return $tal; }
>>> else { return 10; }
>>> }
>>>
>>> function værdi($bunke) {
>>> $sum=0;
>>> for ($i=0;$i<=51;$i++)
>>> if ($bunke{$i}==1) { $sum=$sum+KortTalværdi(korttal($i)); }
>>> for ($i=0;$i<=51;$i++)
>>> if (korttal($i)==1 && $sum<12) { $sum=$sum+10; }
>>> return $sum;
>>> }
>>>
>>>
>>>
>>
>>
>
>



Dan Storm (16-03-2006)
Kommentar
Fra : Dan Storm


Dato : 16-03-06 10:43

Tobias skrev:
> Er der nogen der, ud fra disse tre funktioner, kan se hvordan hvorfor
> den lægger 10 til, selvom "korttal($i)==1" ikke er opfyldt??
Ikke umiddelbart, men hvis jeg har luret dit script rigtigt, så burde
nedenstående virke (bemærk at jeg har ændret dine æ'er til ae)

   function korttal($kort) {
    return $kort % 13 + 1;
   }

   function KortTalvaerdi($tal) {
    if ($tal<=10) { return $tal; }
    else { return 10; }
   }

   
   function vaerdi($bunke)
   {
      $sum = 0;
      for($i=0;$i<=51;$i++)
      {
       if(korttal($i) == 1 && $sum<12 && $bunke{$i} == 1)
       {
          $sum = $sum + KortTalvaerdi(korttal($i)) + 10;
       }
       elseif($bunke{$i} == 1) {
          $sum = $sum + KortTalvaerdi(korttal($i));
       }
      }
      
      return $sum;
   
   }



--
Dan Storm - storm at err0r dot dk / http://err0r.dk

Tro ikke brugerne vil gøre noget for at undgå dit killfilter
- Så vigtig er du heller ikke!

Dan Storm (16-03-2006)
Kommentar
Fra : Dan Storm


Dato : 16-03-06 10:49

Kan så lige se at du har uddybet dit problem til Tobias, så jeg bør nok
nævne at jeg har byttet om på dine 1 taller og 0'er!

Scriptet er testet således:

   for($i=0;$i<51;$i++){
      $kort[$i] = 0;
   }
   
   //de tre funktioner fra før

   $kort[13] = 1;
   $kort[12] = 1;

   echo vaerdi($kort);
   //output : 21

--
Dan Storm - storm at err0r dot dk / http://err0r.dk

Tro ikke brugerne vil gøre noget for at undgå dit killfilter
- Så vigtig er du heller ikke!

Tobias (16-03-2006)
Kommentar
Fra : Tobias


Dato : 16-03-06 15:44

Jeg takker for hjælpen !

Inspireret af din løsning kom jeg frem til følgende løsning :

function værdi($bunke) {
$sum=0;
for ($i=0;$i<=51;$i++)
{
if ($bunke{$i}==1) { $sum=$sum+KortTalværdi(korttal($i)); }
if ($bunke{$i}==1 && korttal($i)==1 && $sum<12) { $sum=$sum+10; }
}
return $sum;
}


VH Tobias


"Dan Storm" <shadyz@_REMOVETHIS_err0r.dk> skrev i en meddelelse
news:4419346d$0$195$edfadb0f@dread16.news.tele.dk...
> Kan så lige se at du har uddybet dit problem til Tobias, så jeg bør nok
> nævne at jeg har byttet om på dine 1 taller og 0'er!
>
> Scriptet er testet således:
>
> for($i=0;$i<51;$i++){
> $kort[$i] = 0;
> }
>
> //de tre funktioner fra før
>
> $kort[13] = 1;
> $kort[12] = 1;
>
> echo vaerdi($kort);
> //output : 21
>
> --
> Dan Storm - storm at err0r dot dk / http://err0r.dk
>
> Tro ikke brugerne vil gøre noget for at undgå dit killfilter
> - Så vigtig er du heller ikke!



Søg
Reklame
Statistik
Spørgsmål : 177552
Tips : 31968
Nyheder : 719565
Indlæg : 6408849
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste