Jag håller på med ett litet program som slumpar sju stycken kort. Varje kort har en egen kontrollsiffra. Samt en bokstav före som kännetecknar kortets typ i form av Hjärter, Ruter, spader och klöver. Jag skulle gjort så här istället (pseudo): Jag förstod att någon skulle komma med något sådant. men jag har ingen lust att göra om hela programmet. Jag ar mina 52 kort. Där A00 - A12 Är hjärter, B13 - B25 är Ruter, C26 - C38 är Spader och D39 - D51 är klöver. Det måste finnas något enklare sätt att gemföra dessa Färdiga koder. Att dela upp t.ex. så att A00, A01, A02 osv... Står under samlingsnamnet A och om 5 av de sju korten visar tal i A gruppen så har man färg.... Ser inte att du skulle behöva göra om hela programmet, det är ren pseudokod. Principen är bara att räkna förekomsten av varje kort, respektive förekomsten av varje färg. Jag förstår inte riktigt hur dina "koder" ser ut eller fungerar, men metoden jag har angivet är nog den vedertaget bästa och enklaste att förstå. Det finns ett enkelt sätt att kolla om man har stege. Det är att använda en liten matematisk formel. En massa ifsatser? När jag läser denna intressanta tråd slår det mig att det kanske går att Då skulle man få 4 spännvidder att trolla med Peter, Jag är själv inne på att göra något liknande. Det stämmer Johan, tydligen har man stege då :-p <b>Men frågan är ju om man kan skilja bort Bokstaven i värdena och bara kontrollera siffran.</b> Det jag skulle vilja ha lite hjälp med nu är hur jag lyckas omvandla talen: 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51 Ok får se om detta hjälper dig. Varför inte ta steget fullt ut och kalla korten för deras riktiga namn Hejsan! Inte för att på något sätt klanka ner på nuvarande lösning, men jag tycker att du angriper problemet på fel sätt. Ok Niklas nu har han börjat så här så låt oss se vart det bär hän. Förresten hur är ordningen på färgerna. ? Nu är det på detta viset att jag tror på det här system och det passar mig bra =). Problemet är bara hur jag skall få 4 tvåor eller 3 sjuor att visas efter varandra i en sorterad listbox. Tack så mycket för hjälpen. Då fungerade det presic sim jag hade tänkt mig. Nu skall jag sätta mig ner och försöka få ordning på allt. Jag kan säga att det blev ca 100 rader mindre kod nu än det var från början =). Men man lär sig väl någon gång... Har du provkört mitt exempel ! ? Ändra Form_Load koden enl nedan. <b>Förresten hur är ordningen på färgerna. ? Jag anser att det är Hjä Spa Rut Klö ! ?</b> Tack Johan för ditt svar. Men för helv.... det finns en <Enter> knapp. Varför kan jag inte skriva: <b>Men för helv.... det finns en <Enter> knapp. Avstava så det blir aptiligt att läsa !!!</b> Efter många försök att försöka fixa detta ser det ut som om jag kommer ge upp. Och nu när du börjar inse att det här inte är ett vettigt tilvägagångssätt, kanske du är intresserad av att lyssna på mitt förslag istället? =) Hejsan Nicklas... <b>>Nicklas</b> stavas visserligen Niklas... "Ger dig en bra start". Jag har en bra start. Frågan är bara hur den skall användas för att jag skall få det resultat jag vill ha... <b>>"Get dig en bra start". Jag har en bra start. Frågan är bara hur den skall användas för att jag skall få det resultat jag vill ha...</b> Morgan, Usch världen är full av inkastade handukar. Hejsan! Både Sven och Niklas. Hejsan! Satt och kolade igenom lite böcker hemma i hyllan och fan boken Tackar där har Vi lösningen på hur det skall angripas.Kontrollera sju stycken kort…
Jag viste inte hur jag skulle få dem sorterade i rätt ordning men så kom jag på iden att sortera dem i en ”listbox” och därefter sätta dom åter igen i en (Array). Och fick på så vis dem ordnade i följd.
Problemet är nu hur man skall räkna ut alla dessa olika händer man kan få. Det bästa vore ju att börja med att försöka kontrollera om man har färg på fem kort.
Jag har sju stycken Label’er med följande kort: A00, A03, B15, A06, A10, D48, A11
A00 = Hjärter Ess
A03 = Hjärter Fyra
A06 = Hjärter Sju
A10 = Hjärter Nio
A12 = Hjärter Kung
B15 = Ruter Tre
D48 = Klöver Tio
Jag har försökt att skriva följande kod:
If Player(0,1,2,3,4) = A00 > A12 Then
lblHand.Caption = ”Färg i Hjärter”
ElseIf Player(1,2,3,4,5) = A00 > A12 Then
lblHand.Caption = ”Färg i Hjärter”
Player(2,3,4,5,6) = A00 > A12 Then
lblHand.Caption = ”Färg i Hjärter”
end if
Jag tror att detta är nära en lösning. För man måste ju vara optimist =). Men om det finns någon som håller inne med lite hämlig information angående lösning på detta problem så vore jag tacksam för lite hjälp.
Det som oroar mig mest är nog hur man sedan skall kunna räkna ut om man har en stege.
Tack på Förhand // MorganSv: Kontrollera sju stycken kort…
int antalkort[13]=0;
for(i=1; i<7; i++);
antalkort[dittkort[i]]++;
//Fyrtal?
if(antalkort[i]=4)
fyrtal=true;
//Triss?
if(antalkort[i]=3)
triss=true;
//par?
if(antalkort[i]=3)
par=true;
(Du får också räkna antalet av varje ovan för att få reda på om du har kåk eller tvåpar)
low=min(antalkort);
high=max(antalkort);
if(high-low)=5
stege=true;
int farg[4];
for(i=2; i<7; i++)
farg[dinfarg[i]]++;
if max(farg)>=5
farg=true;
Sv:Kontrollera sju stycken kort…
Jag vet inte om det är det ända settet som angivits ovan. Så ber jag om en lite mer utförlig förklaring om hur jag skall göra för att sätta dessa värden på korten osv.
Tack för tipset // Morgan
Ps. Korten ligger i en PictuteClip Control och inte en och en. Ds.Sv: Kontrollera sju stycken kort…
Sv: Kontrollera sju stycken kort…
Om summan av kortens "värde" = ((högsta+minsta)*antalet kort)/2 så är det en stege.
Anta att du har korten 4,5,6,7,8 i olika färger då blir detta så här med matteformeln. pseodo-kod
a=4+5+6+7+8 (a=30)
b=((8+4)*5)/2 (b=30)
Alltås stege eftersom a=b
kanske ett tips bara! så slipper man massa IF-Satser
[Peter.H]Sv:Kontrollera sju stycken kort…
Med min kod ovan så är i princip den enda ifsatsen något i stil med:
if stege and färg then
elseif fyrtal then
elseif triss and par then
elseif färg then
elseif stege then
elseif triss then
elseif tvåpar then
elseif par then
end ifSv: Kontrollera sju stycken kort…
komma till en smart lösning om man betraktar korten hexadecimalt.
A00, A03, B15, A06, A10, D48, A11 .
A00 - A12 B00 - B12 C00 - C12 D00 - D12 .
Jag vet inte i skrivande stund hur,men jag klurar på problemmet.
Någon som vill ta upp ideen ?Sv:Kontrollera sju stycken kort…
A00 - A12 B00 - B12 C00 - C12 D00 - D12 .
2560-2578
2816-2834
3072-3090
3328-3346Sv:Kontrollera sju stycken kort…
Så om man har 4,4,6,8,8 så har man stege? Summan är ju fortfarande 30...
// JohanSv: Kontrollera sju stycken kort…
A00 - A12 B00 - B12 C00 - C12 D00 - D12 .
Men frågan är ju om man kan skilja bort Bokstaven i värdena och bara kontrollera siffran.
Då blir det lätt att både kolla efter stege färg och färgstege. Problemet är väl hur man skall kunna plocka fram 2 par t.ex. Men jag jobbar ständigt med detta problem och är tacksam för all hjälp jag kan få.
// MorganSv: Kontrollera sju stycken kort…
haha! well well, det var ett felaktigt antagande av mig att man kunde kolla detta på det viset...Sv:Kontrollera sju stycken kort…
Ja det går bra med hexadecimala systemet
Tex HjärterDam skulle då heta A11 som i hex betyder 2577 A12 = 2578 osv.Sv: Kontrollera sju stycken kort…
Så att det ser ut som följande:
A00, A01, A02, A03 osv. > A12
B00, B01, B02, B03 osv. > B12
C00, C01, C02, C03 osv. > C12
D00, D01, D02, D03 osv. > D12
Detta eftersom jag behöver talen 0 – 51 för att hämta ut mina kort ut PictureClip Controllen.
Och när jag sedan lägger kortets kontrollnummer i dess kontroll Label så skall det vara det andra systemet.
Anledningen till detta är att jag inte lyckats Slumpats med att försöka slumpa fram 01 utan att alla ental i Array’n blir Enkel: (1) och inte 01, 02,03, 04 som jag vill ja det. Då ahde det hela varit en annan historia.
// Morgan Sv: Kontrollera sju stycken kort…
I Form_Load laddar du in dina A01 - D13 i CardArray(51)
Nu kan du översätta alla dina kort som ex. B09 (Spader 9) för den ligger i facket CardArray(21)
som också förhoppningsvis korresponderar med PickClip(21)
Slumpar du fram 21 skall det bli Clip 21 och B09 som ligger i CardArry(21)
Tycker du skall kalla dom för A01 A02 ..... A13 så korresponderar dom mot kortets valör
Jag har gjort det här genom att göra i + 1
<code>
Option Explicit
Dim CardArray(51) As String
Private Sub Form_Load()
Dim i As Long
For i = 0 To 8
CardArray(i) = "A0" & CStr(i + 1)
CardArray(i + 13) = "B0" & CStr(i + 1)
CardArray(i + 26) = "C0" & CStr(i + 1)
CardArray(i + 39) = "D0" & CStr(i + 1)
Next 'i
For i = 9 To 12
CardArray(i) = "A" & CStr(i + 1)
CardArray(i + 13) = "B" & CStr(i + 1)
CardArray(i + 26) = "C" & CStr(i + 1)
CardArray(i + 39) = "D" & CStr(i + 1)
Next 'i
'Här testrader om du vill kolla hur det blir
For i = 0 To 51
List1.AddItem CStr(i) & " = " & CardArray(i)
Next ' i
End Sub
</code>Sv:Kontrollera sju stycken kort…
Ditt A00 blir då Hj01 D12 blir Kl13
<code>
Option Explicit
Dim CardArray(51) As String
Private Sub Form_Load()
Dim i As Long
For i = 0 To 8
CardArray(i) = "Hj0" & CStr(i + 1)
CardArray(i + 13) = "Sp0" & CStr(i + 1)
CardArray(i + 26) = "Ru0" & CStr(i + 1)
CardArray(i + 39) = "Kl0" & CStr(i + 1)
Next 'i
For i = 9 To 12
CardArray(i) = "Hj" & CStr(i + 1)
CardArray(i + 13) = "Sp" & CStr(i + 1)
CardArray(i + 26) = "Ru" & CStr(i + 1)
CardArray(i + 39) = "Kl" & CStr(i + 1)
Next 'i
'Här testrader om du vill kolla hur det blir
For i = 0 To 51
List1.AddItem CStr(i) & " = " & CardArray(i)
Next ' i
End Sub
</code>Sv: Kontrollera sju stycken kort…
Såg inlägget och blev väldigt nyfiken. Frågan är nu bara hur jag skall få det att fungera med den kod som jag laggt dit. Den kod som slumpar fram korten för att sedan sätta en bild på motsvarande kort i en "image"
Private Sub cmdPlay_Click()
Dim i As Long
For i = 0 To 8
CardArray(i) = "Hj0" & CStr(i + 1)
CardArray(i + 13) = "Sp0" & CStr(i + 1)
CardArray(i + 26) = "Ru0" & CStr(i + 1)
CardArray(i + 39) = "Kl0" & CStr(i + 1)
Next 'i
For i = 9 To 12
CardArray(i) = "Hj" & CStr(i + 1)
CardArray(i + 13) = "Sp" & CStr(i + 1)
CardArray(i + 26) = "Ru" & CStr(i + 1)
CardArray(i + 39) = "Kl" & CStr(i + 1)
Next 'i
'Här testrader om du vill kolla hur det blir
For i = 0 To 51
lstCardCheck.AddItem CStr(i) & " = " & CardArray(i)
Next ' i
Const AntalValbara As Integer = 52
Const AntalVal As Integer = 7
Dim Vald() As Boolean
Dim SlumpArr(7) As Integer
ReDim Vald(AntalValbara)
Dim Slump As Integer
Dim a As Integer
For a = 1 To AntalVal
Do
Slump = Int(Rnd() * AntalValbara)
Loop Until Not Vald(Slump)
Vald(Slump) = True
SlumpArr(a) = Slump
Randomize
Next
imgPlay0101.Picture = PiCl1.GraphicCell(SlumpArr(1))
imgPlay0102.Picture = PiCl1.GraphicCell(SlumpArr(2))
imgFlop01.Picture = PiCl1.GraphicCell(SlumpArr(3))
imgFlop02.Picture = PiCl1.GraphicCell(SlumpArr(4))
imgFlop03.Picture = PiCl1.GraphicCell(SlumpArr(5))
imgTurn.Picture = PiCl1.GraphicCell(SlumpArr(6))
imgRiver.Picture = PiCl1.GraphicCell(SlumpArr(7))
End Sub
Som koden är nu så fungerar hämtandet av korten på det gamla sättet. Det vore kanske bra om korten man får upp hamnar i en listbox för att där bli sorterade då blir det änkelt att avgöra handen också. Tror jag =)...
Jag vore tacksam om du även har något tankesätt runt det där med att räkna ut de olika händerna.
// MorganSv:Kontrollera sju stycken kort…
Det första du bör göra är inte en massa bilder och döpa dem till saker, utan snarare något i stil med:
1. Välj hur korten skall representeras i datorn. Jag skulle föreslå en egen typ (Färg + Valör), men du kan också ha strängar som du har nu, eller bara heltal. Båda sistnämnda ger onödiga beräkningar.
2. Dela upp dessa kort på olika ställen (högar, händer, etc.). Gör en funktion som kan beräkna vad det bästa man kan få på sju kort är.
3. Sen börjar du koppla detta till filnamn, presentation, osv. Det är först då du har någon aning om hur du bör hantera den biten. Tänk inte på listboxar och pictureboxar förrän i det här läget. Du kan även konvertera till din första lite skumma notation.
Kort förslag på hur din korttyp och omvandlingen av den till en sträng kan se ut:
<code>
Public Type Card
Color As Long
Value As Long
End Type
Public Function CardToString(C as Card) As String
Select Case C.Color
Case 1: CardToString="Hj"
Case 2: CardToString="Kl"
Case 3: CardToString="Ru"
Case 4: CardToString="Sp"
End Select
CardToString = CardToString & CStr(C.Value)
End Function
</code>Sv: Kontrollera sju stycken kort…
Om jag skall engagera mig så vill jag börja enl detta koncept,för att fortsätta i ditt spår.
<code>
Option Explicit
Dim CardArray(51) As String
Dim Vald() As Boolean
Const AntalVal = 7
Private Sub Form_Load()
Dim i As Long
Randomize
For i = 0 To 8
CardArray(i) = "Hjä" & Chr(9) & "0" & CStr(i + 1)
CardArray(i + 13) = "Spa" & Chr(9) & "0" & CStr(i + 1)
CardArray(i + 26) = "Rut" & Chr(9) & "0" & CStr(i + 1)
CardArray(i + 39) = "Klö" & Chr(9) & "0" & CStr(i + 1)
Next 'i
For i = 9 To 12
CardArray(i) = "Hjä" & Chr(9) & CStr(i + 1)
CardArray(i + 13) = "Spa" & Chr(9) & CStr(i + 1)
CardArray(i + 26) = "Rut" & Chr(9) & CStr(i + 1)
CardArray(i + 39) = "Klö" & Chr(9) & CStr(i + 1)
Next 'i
'Här testrader om du vill kolla hur det blir
'For i = 0 To 51
' lstCardCheck.AddItem CStr(i) & " = " & CardArray(i)
'Next ' i
End Sub
Private Sub cmdPlay_Click()
Dim SlumpArr(7) As Long
Dim slump As Long, i As Long
ReDim Vald(51)
lstCardCheck.Clear
Do Until i >= AntalVal
slump = Int(Rnd * 52)
If Vald(slump) = False Then
SlumpArr(i + 1) = slump
Vald(slump) = True
i = i + 1
End If
Loop
For i = 0 To 51
If Vald(i) Then lstCardCheck.AddItem CardArray(i)
Next 'i
'imgPlay0101.Picture = PiCl1.GraphicCell(SlumpArr(1))
'imgPlay0102.Picture = PiCl1.GraphicCell(SlumpArr(2))
'imgFlop01.Picture = PiCl1.GraphicCell(SlumpArr(3))
'imgFlop02.Picture = PiCl1.GraphicCell(SlumpArr(4))
'imgFlop03.Picture = PiCl1.GraphicCell(SlumpArr(5))
'imgTurn.Picture = PiCl1.GraphicCell(SlumpArr(6))
'imgRiver.Picture = PiCl1.GraphicCell(SlumpArr(7))
'End Sub
End Sub
</code>Sv:Kontrollera sju stycken kort…
Jag anser att det är Hjä Spa Rut Klö ! ?Sv: Kontrollera sju stycken kort…
00
01 - Två
01 - Två
01 - Två
01 - Två
12
13
När detta sedan är gjort är det bara att söka igenom listboxen efter olika händer. Därför vore jag tacksam om någon kunde ge mig lösningen på detta.
// MorganSv:Kontrollera sju stycken kort…
Inlägget får väl stå öppet tills jag är färdig med uträknandet av händer. utifall det dyker upp problem =).
// MorganSv:Kontrollera sju stycken kort…
Det är nu en baggis att vända på sorteringen enl mitt koncept
så att det blir ex.
02 Hjä
02 Spa
02 Klö
08 Rut
08 Spa
osv.Sv: Kontrollera sju stycken kort…
lstCardCheck.Sorted = True
<code>
Private Sub Form_Load()
Dim i As Long
Randomize
For i = 0 To 8
CardArray(i) = "0" & CStr(i + 1) & Chr(9) & "Hjä"
CardArray(i + 13) = "0" & CStr(i + 1) & Chr(9) & "Spa"
CardArray(i + 26) = "0" & CStr(i + 1) & Chr(9) & "Rut"
CardArray(i + 39) = "0" & CStr(i + 1) & Chr(9) & "Klö"
Next 'i
For i = 9 To 12
CardArray(i) = CStr(i + 1) & Chr(9) & "Hjä"
CardArray(i + 13) = CStr(i + 1) & Chr(9) & "Spa"
CardArray(i + 26) = CStr(i + 1) & Chr(9) & "Rut"
CardArray(i + 39) = CStr(i + 1) & Chr(9) & "Klö"
Next 'i
End Sub
</code>Sv: Kontrollera sju stycken kort…
Det beror helt på vad det är för kortspel vi talar om. Eftersom det antyds poker i tråden här så finns det i poker INGEN rangordning av färgerna. Det finns en svensk kortbok från femtiotalet (eller om det var setxtiotalet) som är framtagen från en amerikansk förlaga där man missförstått orginalet och föreslagit den färgordning som SvenPon anger. Detta är dock som sagt fel av den författaren.
Däremot kan man i vissa pokerformer ha någon form av lottning i vissa sammanhang, t.ex. lottning av bordsplacering, och då har färgerna betydelse. Dock så är då ordningen inte den som anges ovan utan det som anses vara värt mest (och i fallande ordning) är spader, hjärter, ruter, klöver.
Men som sagt i själva spelet så har färgerna ingen betydelse för rangordningen, varför t.ex. färgstege i hjärter är värt lika mycke som en färgstege i klöver. På samma sätt så är par i knektar sama oavsett vilka knektar jag har respektive min motspelare har.
// JohanSv:Kontrollera sju stycken kort…
Avstava så det blir aptiligt att läsa !!!
Detta gäller även Niklas.
Tänk på oss synsvaga.
När raderna försvinner ut till höger så skiter Jag i att läsa.
Märkligt att Ni inte förstår att budskapet skall vara väl formaterat med ny rad mm.Sv: Kontrollera sju stycken kort…
If Player01(0 - 4) <= "A12" Then
lblYouHave.Caption = "Flush"
End If
Måste Jag sitta och skriva på detta viset för att det skall fungera:
If Player01(0) <= "A12" And Player01(1) <= "A12" And Player01(2) <= "A12" _
And Player01(3) <= "A12" And Player01(4) <= "A12" Then
lblYouHave.Caption = "Flush"
End If
När jag gör det sistnämnda så fungerar det bra. Men när jag sedAn skall göra det samma
på B nivån så tar den också med A eftersom A är lägre än B. Försökte då med:
If Player01(0) <= "A13" And Player01(1) <= "A13" And Player01(2) <= "A13" _
And Player01(3) <= "A13" And Player01(4) <= "A13" Then
lblYouHave.Caption = "Flush"
ElseIf Player01(0) >= "B00" <= "B13" And Player01(1) >= "B00" <= "B13" And Player01(2) >= "B00" <= "B13" _
And Player01(3) >= "B00" <= "B13" And Player01(4) >= "B00" <= "B13" Then
lblYouHave.Caption = "Flush"
ElseIf Player01(1) >= "B00" <= "B13" And Player01(2) >= "B00" <= "B13" And Player01(3) >= "B00" <= "B13" _
And Player01(4) >= "B00" <= "B13" And Player01(5) >= "B00" <= "B13" Then
lblYouHave.Caption = "Flush"
ElseIf Player01(2) >= "B00" <= "B13" And Player01(3) >= "B00" <= "B13" And Player01(4) >= "B00" <= "B13" _
And Player01(5) >= "B00" <= "B13" And Player01(6) >= "B00" <= "B13" Then
lblYouHave.Caption = "Flush"
End If
Om du undrar så har jag laggt tillbaka Numren i listboxen i en ny Array "Plauer01()" Det som inte fungerar är då:
>= "B00" <= "B13" som den inte förstår.
// MorganSv: Kontrollera sju stycken kort…
:-)
Där satte du fingret på min svagaste punkt...
Jag är tyvärr i vissa kretsar ökänd för att skriva så stora textmassor
att det blir svårt att ta till sig. Jag jobbar ständigt på att bli bättre
på det området.
Tack för din feedback!
// JohanSv:Kontrollera sju stycken kort…
Att det skulle vara ett sådant jäkla jobba att kunna plocka ut händer i ett kortspel.
Jag Tänker inte ge upp riktigt än. Men funderar på om det inte skulle vara enklare
om man la upp korten i var sin listbox.
lstHjärter
01
03
lstRuter
03
lstSpader
01
03
lstKlöver
09
12
Men jag vet inte om det skulle bli lättare. Om det finns någon vänlig själ som har
någon teori om hur detta skall gå till på enklast möjliga vis så vore jag tacksam
för hjälpen. Sen skall vi ju veta att först skall den kolla 2 kort sedan 5 kort sedan
6 kort och tillsist 7 kort...
// MorganSv: Kontrollera sju stycken kort…
Börja med representationen av dina kort. Dina bilder osv. kan du behålla. En "Type" är ett lämpligt alternativ. En klass hade på många sätt kunnat vara bättre, men det är lite jobbigare. En type använder du precis som en String eller Long, men du separerar olika delar av den med punkt.
<code>
Public Type Card
Color As Long
Value As Long
End Type
'Används så här:
Dim MyCard As Card
MyCard.Color = 3
MyCard.Value = 11
</code>
Okej?
Det första du ska göra i programmet är att generera alla 52 korten. Vi kan ha en global variabel för kortleken:
<code>
Public Deck(1 to 52) As Card
Public Sub Init()
Dim Color As Long, Value As Long
For Color=0 To 3
For Value=1 to 13
With Deck(Value+Color*13)
.Value=Value
.Color=Color
End With
Next Value
Next Color
End Sub
</code>
Efter detta skapar du funktioner för att till exempel omvandla ett Card till en sträng, skriva ut en array med Card, osv. Sen skapar du en funktion som givet en godtyckligt stor hand räknar ut den bästa handen med fem kort. Sen borde du komma igång i rätt riktning.
Sven: Jag vet inte hur många gånger vi har diskuterat detta. Problemet ligger inte hos oss som inte bryter raderna, problemet ligger i hur pelle har gjort sidan. Tryck på CTRL + "+" ett par gånger så ökar storleken. Dels blir raderna kortare, dels blir texten större. Då kan ni som har svårt att läsa mycket enklare. <b>Enter är för styckesbrytning!</b> (Åtminstone i löpande text som är tänkt att läsas. I kompilerad text såsom LaTeX så spelar de ingen roll)Sv:Kontrollera sju stycken kort…
Eftersom jag nu har suttit med detta i snart en vecka och inte lyckats något vidare. Vore jag överlycklig om du då kunde ge mig ett stycke kod som när man klickar på knappen ”cmdDelaKort”. Slumpar kort och skriver ut deras beteckningar i sju olika textbox (txtKort01 till txtKort07). Samt när man har Fyrtal skriver ut det i en Label ”lblDinHand”.
Då kan man även lägga koden i en ”timer” och se hur många gånger man får fyrtal. Inträffar ju inte så ofta och då blir det jobbigt att klicka på knappen =).
Tack på förhand
// MorganSv: Kontrollera sju stycken kort…
<b>>...du då kunde ge mig ett stycke kod som när man...</b>
Jag kommer inte "ge dig ett stycke kod". Programmerandet får du sköta själv. Däremot har jag gett dig en bra start, och jag svarar gärna på frågor.
Hur som helst tänker du fortfarande på helt fel sätt. Tänk inte på att du vill ha textboxar och att de ska heta si och så. Eftersom det besvärliga i det här fallet är representationen av kort och beräkningen av händer, så är där du får börja. Jag har redan gett dig representationen i ren kod, och du har fått en hyfsad start på beräkningen av kort, som du bara måste omvandla till faktisk kod.
Är problemet att räkna ut antalet sätt att få fyrtal på given är problemet enklare. Det är ren matematik.Sv:Kontrollera sju stycken kort…
Eftersom jag inte ser något annat sätt än att ge upp allt för denna gång så får det väl bli så. Att detta skulle vara så svårt hade jag ingen aning om. Jag lyckades i all fall få korten slumpade och dess värden placerade i en listbox.
Får väl vara bra med Kort Spel på ett tag då. Tack för att ni tog er tid att försöka komma på en lösning på problemet. Närmast kom jag nog tack vare Sven.
// Morgan
PS.
Du säger att det handlar om mattematiska uträkningar. Nämen ojdå… Jag blir alldeles häpen.
DS.Sv: Kontrollera sju stycken kort…
Nej, det är det som är grejen. Du hade ingen bra start. Du utgick från vad dina kort skulle heta, inte från problemställningen och representationen. Är du en nybörjare så förstår jag verkligen att det inte är lätt att hitta rätt väg direkt, och därför tyckte jag det var bättre att gå den logiska vägen.
<b>>Eftersom jag inte ser något annat sätt än att ge upp allt för denna gång så får det väl bli så.</b>
Det väljer du själv.
<b>>Att detta skulle vara så svårt hade jag ingen aning om.</b>
Det är inte så svårt, du har bara börjat i fel ände. Låt säga att du bygger en bil. Du börjar med navkapslar och cigaretttändare. Sen fixar du en växellåda och en kaross. Till sist frågar du hur man gör en motor, för sen är det klart.
Du måste börja underifrån för att det ska funka bra och vara hyfsat lätt. Du börjar med karossen (representation), det är runt denna allt måste funka. Sen fortsätter du med motorn (funktioner som kollar diverse grejer, slumpar, osv.); utan denna kan du glömma hela grejen. Sen kan du börja koda på resten, lägga ut listboxar, bilder, välja namn, whatever.
<b>>PS.
Du säger att det handlar om mattematiska uträkningar. Nämen ojdå… Jag blir alldeles häpen.
DS. </b>
Öh?
Att kalla beräkningarna som krävs för att avgöra hur man får reda på om en hand har färg för matematiska är lite att ta i. Det jag pratar om är att om du vill veta i hur många procent av fallen du får fyrtal, så är det en lite mer komplicerad matematisk formel du är ute efter, inte ett program.Sv: Kontrollera sju stycken kort…
Jag tror du får slipa lite på din attityd. Vad jag kan förstå av tråden så har Niklas varit oerhört hjälpsam och ansträngt sig för att hjälpa dig på rätt väg.
Naturligtvis är det frustrerande när man kör fast, men det gör alla programmerare ibland. Och det är just därför som Pellesoft finns, för att lösa upp knutarna när man kör fast.
Om man trots detta inte kommer vidare så kan det vara en klok idé att lägga ned projektet, åtminstone för en tid. Vem vet det kanske klarnar längre fram.
Oavsett vad man väljer att göra så är det alltid trevligt med lite hyfs i forumet och inga spydiga kommentarer som "nämen ojdå" eller "jag blir häpen". Dock är det ett säkert sätt att göra sig impopulär och att inte få hjälp från någon här i forumet framöver.
Lycka till med ditt projekt när du väljer att ta upp det igen.
// JohanSv:Kontrollera sju stycken kort…
Jag ger mig aldrig kommer som ren hobby fortsätta där du slutade.
Tar det som en utmaning.
Något tips var jag kan hitta de 52 korten till min PicClip kontroll.
Det finns ju en massa Yatsy(hur fae.. det stavas) kod därute på nätet
borde vara något att kolla på.Sv: Kontrollera sju stycken kort…
Givetvis så ger jag inte upp. Jag var lite grinig sist det håller jag med om. Men jag har ett litet problem och det är att sömnen får lida när jag inte kan lösa mina VB problem. Även när man sover programmerar man. Ni förstår säkert =).
Nu skall jag hålla mig borta från detta över helgen så jag blir någorlunda återställt. Men på måndag blir det nya tag igen…
Ha en bra helg
// Morgan
PS.
Förlåt för min spydiga kommentar. Inget illa menat.
DS.Sv:Kontrollera sju stycken kort…
”Lär dig spelprogrammering med VB”. Där i fanns ett Kortspel som heter
Poker Squares. Problemet är att det bygger bara på att man skall lägga upp
totalt 25 kort på bordet 5 x 5. Sedan räknar programmet ut vilka händer
som finns rad för rad och kolumn för kolumn och anger detta med poäng.
Nu är det så att detta system bygger på att man kontrollerar ett kort med
klasserna clsCard och clsDeck. Som blandar och hanterar kortleken.
Om jag har förstått det hela rätt när jag har läst igenom kapitlet gång på
gång. Så har jag fått den uppfattningen av att korten läggs in i en (hand)
– matris och sedan anropas GetBestHand som sedan analyserar korten.
Nu är det ju så att värdet på korten i klassen clsDeck beräknas 0 – 51 vilka.
Vilket även den slumpgenerator som jag använder mig av:
----------------------------------------------------------
Const AntalValbara As Integer = 52
Const AntalVal As Integer = 7
Dim Vald() As Boolean
Dim SlumpArr(7) As Integer
ReDim Vald(AntalValbara)
Dim Slump As Integer
Dim a As Integer
For a = 1 To AntalVal
Do
Slump = Int(Rnd() * AntalValbara)
Loop Until Not Vald(Slump)
Vald(Slump) = True
SlumpArr(a) = Slump
Next
----------------------------------------------------------
Nedan har jag skrivit in den kod som behandlar de olika händerna. Kan
förekomma saker som inte skall vara med. Bl. vissa konstanter. Nu är
det ju så att denna är gjord för att analysera fem stycken kort. Men det
behöver väl inte vara något problem att ändra till sju kort. Tror jag =).
---------------------------------------------------------
Option Explicit
'==================================================
' Constants.
'==================================================
Const EMPTYCELL = -1
Const NOCARD = -1
Const MINX = 28
Const MAXX = 332
Const MINY = 28
Const MAXY = 450
Const CELLWIDTH = 62
Const CELLHEIGHT = 86
Const COLUMNCOUNT = 5
Const ROWCOUNT = 5
Const DISPENSERX = 369
Const DISPENSERY = 151
Const LINESPACING = 12
Const ROWSCORESX = 441
Const PLAYERSCOREX = 535
Const PLAYERSCOREY = 182
Const CARDBACK = 52
Const MAXHIGHSCORES = 15
Const CELLCOUNT = 25
Const COLSCORESX = 553
Const SCOREOFFSETY = 281
Const TOTALSCOREX = 430
Const TOTALSCOREY = 365
Public Enum PokerHandsEnum
NoHand
Pair
TwoPair
ThreeOfAKind
Straight
Flush
FullHouse
FourOfAKind
StraightFlush
End Enum
Public Enum PlayerEnum
FirstPlayer
SecondPlayer
End Enum
'==================================================
' General Game Variables.
'==================================================
Dim Player As Integer
Dim CardCount As Integer
Dim Grid(24) As Integer
Dim PlayerScores(2)
Dim Deck As clsDeck
Dim NumPlayers As Integer
Sub SortCards(cards() As Integer, hand() As Integer)
Dim i As Integer
For i = 0 To 13
cards(i) = 0
Next i
cards(13) = 1
For i = 0 To 4
If hand(i) <> NOCARD Then
Dim val As Integer
val = hand(i) Mod 13
cards(val) = cards(val) + 1
End If
Next i
End Sub
Function GetBestHand(hand() As Integer) As Integer
Dim FlushFlag As Boolean
Dim StraightFlag As Boolean
Dim PairFlag As Boolean
Dim TwoPairFlag As Boolean
Dim ThreeOfAKindFlag As Boolean
Dim FourOfAKindFlag As Boolean
Dim cards(13) As Integer
FlushFlag = CheckForFlush(hand)
SortCards cards, hand
StraightFlag = CheckForStraight(cards, hand)
PairFlag = CheckForPair(cards)
TwoPairFlag = CheckForTwoPair(cards)
ThreeOfAKindFlag = CheckForThreeOfAKind(cards)
FourOfAKindFlag = CheckForFourOfAKind(cards)
If (StraightFlag) And (FlushFlag) Then
GetBestHand = StraightFlush
ElseIf FourOfAKindFlag Then
GetBestHand = FourOfAKind
ElseIf (PairFlag) And (ThreeOfAKindFlag) Then
GetBestHand = FullHouse
ElseIf FlushFlag Then
GetBestHand = Flush
ElseIf StraightFlag Then
GetBestHand = Straight
ElseIf ThreeOfAKindFlag Then
GetBestHand = ThreeOfAKind
ElseIf TwoPairFlag Then
GetBestHand = TwoPair
ElseIf PairFlag Then
GetBestHand = Pair
Else
GetBestHand = NoHand
End If
End Function
Function CheckForTwoPair(cards() As Integer)
Dim i As Integer
Dim PairFlag As Boolean
CheckForTwoPair = False
PairFlag = False
For i = Ace To King
If cards(i) = 2 And PairFlag Then
CheckForTwoPair = True
ElseIf cards(i) = 2 Then
PairFlag = True
End If
Next i
End Function
Function CheckForThreeOfAKind(cards() As Integer) As Boolean
Dim i As Integer
CheckForThreeOfAKind = False
For i = Ace To King
If cards(i) = 3 Then CheckForThreeOfAKind = True
Next i
End Function
Function CheckForFourOfAKind(cards() As Integer) As Boolean
Dim i As Integer
CheckForFourOfAKind = False
For i = Ace To King
If cards(i) = 4 Then CheckForFourOfAKind = True
Next i
End Function
Function CheckForPair(cards() As Integer) As Boolean
Dim i As Integer
CheckForPair = False
For i = Ace To King
If cards(i) = 2 Then CheckForPair = True
Next i
End Function
Function CheckForFlush(hand() As Integer) As Boolean
Dim i As Integer
Dim Suit As Integer
Suit = hand(0) \ 13
CheckForFlush = True
For i = 1 To 4
If hand(i) \ 13 <> Suit Or hand(i) = NOCARD Then _
CheckForFlush = False
Next i
End Function
Function CheckForStraight(cards() As Integer, _
hand() As Integer) As Boolean
Dim First As Integer
Dim i As Integer
First = -1
i = Ace
Do
If ((cards(i)) And (i <> Ace Or cards(Two))) Then First = i
i = i + 1
Loop While (First = -1)
If (First > Ten) Then
CheckForStraight = False
Else
CheckForStraight = True
For i = First To First + 4
If (cards(i) = 0) Then CheckForStraight = False
Next i
End If
End Function
---------------------------------------------------------
Om det finns någon med förslag på hur denna kod kan komma till
användning så är jag väldigt tacksam för lite tipps och trix.
Källkoden och befintligt Project följde med boken. Och kan skickas via
E-mail om ni inte förstår vad jag menar med ovanstående =). Eller om ni är
nyfikna på des uppbyggnad.
// MorganSv: Kontrollera sju stycken kort…
En fråga ? Varför slumpar du 7 kort,nån typ av poker som jag inte känner till ?
En annan fråga i sammanhanget "Död mans hand" hur såg den ut ? och hur
går historien kring den handen ?
Jag anser att jag sitter inne med rätt svar.Man hör ofta felaktigheter kring denna fråga.