webForumDet fria alternativet

Yatzy

7 svar · 462 visningar · startad av Niclas Ohlsson

Niclas OhlssonMedlem sedan juli 200068 inlägg
#1

Jag håller på och bygger ett yatzy-spel men jag vet inte hur jag ska skriva koden för om man har "två par"

Programmet ser ut:
Man klickar på en knapp för att slumpa tal och om man har fått t.ex "ett par" så klickar man på knappen som det står "ett par" på!

HELPHELPHELP!!!
/NICKE

SanttoMedlem sedan aug. 200022 inlägg
#2

Hej!

Principen är enkel. De tal du slumpar fram är "tärningarna". Så det du behöver göra är att jämföra tärningarna med varandra för att se om "ett par" hittats eller man fått kåk etc.

När användaren t ex trycker på knappen "ett par" så lägger du in en kontrollrutin som kollar om det finns några tärningar som har samma värde. Om det finns så finns ett par och det värdet registreras i poängtabellen eller vad man nu vill kalla den.

Behöver du mer tips så skicka in en ny fråga till detta forum.

/Santto

Niclas OhlssonMedlem sedan juli 200068 inlägg
#3

Det där kan jag redan för jag har gjort färdigt allt utom två par nu och jag vet inte hur jag ska göra för att programmet ska fatta att det är två par

PhOrPhErMedlem sedan feb. 20002 300 inlägg
#4

Uhmm...

Om man typ har alla tärningarnas värden i en vektor så kan du juh leta igenom vektorn efter ett par. Om du hittar ett så lagrar du positionerna för just det paret och letar i vektorn en gång till men exkluderar positionerna för det första paret för att hitta ytterligare ett par...

Kanske är krångligt.. Vad vet jag?
------------------
- Erik Hellström -
http://3d.burken.nu

[Redigerat av PhOrPhEr den 11 aug 2000]

SanttoMedlem sedan aug. 200022 inlägg
#5

Jag vet inte hur din programkod ser ut, men lösningen till ditt problem att få datorn att förstå hur den ska hitta två par bör finnas i din lösning för "kåk". Där finns samma problematik att datorn ska kunna se att kåken består av ett par och en triss så att säga. Två par består ju av två enkla par. Så modifiera din programkod för kåk och applicera det på två par så finner du nog en lösning.

Om du inte får det att fungera, bifoga med en del av programkoden du försökt få att fungera, så blir det lättare att ge mer specifik hjälp.

/Santto

WiNNeMedlem sedan maj 2000192 inlägg
#6

Jag gör så här i mitt Yatzy spel.
Finns att ladda hem på: www.winne.net

------------------------------------

function count(varde : integer) : integer;
begin
result:=0;
With MainForm do
begin
If Dice1.tag=varde then Result:=Result+1;
If Dice2.tag=varde then Result:=Result+1;
If Dice3.tag=varde then Result:=Result+1;
If Dice4.tag=varde then Result:=Result+1;
If Dice5.tag=varde then Result:=Result+1;
end;
end;

[snip]
// TVÅ PAR
For x:=1 to 6 do
begin
for y:=1 to x-1 do
begin
If (Count(x)>1) and (count(y)>1) then panel1.caption:=inttostr( x*2 + y*2 );
end;
end;
[snip]

-------------------------------------
Två loopar i varandra som anropar en rutin som räknar ut antalet tärningar av en viss siffra. Loopen börjar på 1 och går uppåt för att ta det största 2 paren. Kåken görs på samma sätt, man bara ökar (Count(x)>1) till (Count(x)>2).

-------------------------------------

winne.net

[Redigerat av WiNNe den 15 aug 2000]

SanttoMedlem sedan aug. 200022 inlägg
#7

Här kommer en lösning till hur kontrollen av "två par" kan se ut. Jag har inte haft någon tid de senaste dagarna att titta på detta. Ikväll och natt har jag haft en del tid. Jag är för trött för att bifoga kommentarer till koden. Om du vill ha detta kan du väl meddela mig, så fixar jag det så snart jag får tid.

Koden här nedan får du anpassa till ditt program och dina funktioner/procedurer. Variabeln RESULTAT innehåller summan av de två paren, om det hittats några.
Vektorn Tarningar ska innehålla de slumtal som symboliserar tärningarna från ett kast.

var Tarningar : array[1..5] of byte;
AntalVarv : byte;
TarningsPar1 : variant;
TarningsPar2 : variant;
JamforTarningar : byte;
Resultat : byte;
Raknare : byte;
Raknare2 : byte;
Raknare3 : byte;
begin
Tarningar[1] := // Här sparas värdet från slumptalet för tärning 1;
Tarningar[2] := // Här sparas värdet från slumptalet för tärning 2;
Tarningar[3] := // Här sparas värdet från slumptalet för tärning 3;
Tarningar[4] := // Här sparas värdet från slumptalet för tärning 4;
Tarningar[5] := // Här sparas värdet från slumptalet för tärning 5;

Raknare := 0;
Raknare2 := 0;
Raknare3 := 0;
TarningsPar1 := 0;
TarningsPar2 := 0;
for JamforTarningar := 1 to 6 do
for AntalVarv := JamforTarningar to 4 do begin
if (TarningsPar1 > 0) and (Tarningar[JamforTarningar] = Tarningar[AntalVarv+1]) then begin
Tarningspar2 := Tarningar[AntalVarv+1];
inc(Raknare);
inc(Raknare2);
inc(Raknare3);
end;
if (Tarningar[JamforTarningar] = Tarningar[AntalVarv+1]) and not (TarningsPar1 > 0) then begin
TarningsPar1 := Tarningar[AntalVarv+1];
inc(Raknare);
inc(Raknare2);
inc(Raknare3);
end;
end;
// If-satsen nedan sparar summan av de två paren BARA om det finns två par av något slag.
if (TarningsPar2 > 0) and ((Raknare3 = 4) or (Raknare2 > 4) or (Raknare <3 )) then
Resultat := (TarningsPar1*2) + (TarningsPar2*2);

end;

Hoppas detta är till belåtenhet. Nu ska jag lägga mig och sova gott.

/Santto

WiNNeMedlem sedan maj 2000192 inlägg
#8

Hmmm, är lite undrande varför du postar en SÄMRE lösning än min ...
... en massa onödiga räknare ...

jag föreslår att Niclas försöker med den som känns bäst för honom men jag vet att min fungerar och det är en snyggare lösning...

------------------
winne.net

127 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
124 ms — hämta tråd, inlägg och bilagor (db)