Zufällig Karten geben?

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

fliege

Betreff: Zufällig Karten geben?

BeitragDi, Okt 26, 2004 19:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich möchte in meinem Spiel die Möglichkeit geben, Karten zufällig neu zu verteilen. Ich habe den Code eigentlich schon fast fertig gehabt, nur als ich ihn getestet habe, lief er über 15 min und war immer noch nicht fertig Laughing
Also wollte ich bitten, das mir jemand einen kleinen Code schreibt, denn ich habe keine Ideen mehr. Es sind zwanzig Karten. Von Herz, Treff, Pik, Karo jeweils 10, Bube, Dame, König, Ass. Dabei wurden die Kartencodes folgendermasen vergeben:
Ass: 1
Bube: 2
Dame: 3
König: 4
10: 5
_______________
Treff:1x
Karo:2x
Pik:3x
Karo:4x

Also hat das Treff Ass die Nummer 11 und die Karo 10 die Nummer 45.
Es darf aber keine Karte doppelt vorkommen.
Die Kartennummern werden all im Arry Kartencodes(19) gespeichert.
Ich freue mich über jeden Code, der schneller als 5 min ist.
DANKE im Voraus
Fliege
Wer weiß was kommt.. ?
 

walski

Ehemaliger Admin

BeitragDi, Okt 26, 2004 19:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Du hast einen Fehler in deiner Überlegung!

Denn so wäre der Kreuz ( Treff ) Bube das selbe, wie das Karo Ass!

Ich bastel dir ma fix was...

nur einen Moment Geduld.

walski
buh!
 

fliege

BeitragDi, Okt 26, 2004 19:27
Antworten mit Zitat
Benutzer-Profile anzeigen
hey warte mal, ich glaube, du hast da was falsch aufgenommen!
Kartencode(0) = Kartencode_1 * 10 + Kartencode_2
Dabe ist Kartencode_1 die Angabe ob Herz,... und Kartencode_2 die Zahl!
Entschuldige, ich habe mich schlecht ausgedrückt.
Fliege
Wer weiß was kommt.. ?
 

walski

Ehemaliger Admin

BeitragDi, Okt 26, 2004 19:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Und vor allem habe ich zu ungenau gelsen, mein Fehler!

Dafür aber hier eine kleine Entschädigung:

Code: [AUSKLAPPEN]


; card colors
;Herz
Const colorHeart = 1
; Karo
Const colorDiamonds = 2
; Pik
Const colorSpades = 3
; Kreuz
Const colorClubs = 4 

; card values

; Zehn
Const cardValueTen = 1
; Bube
Const cardValueJack = 2
; Dame
Const cardValueDame = 3
; König
Const cardValueKing = 4
; Ass
Const cardValueAce = 5


Type card

   Field colorType
   Field value
   
End Type


Local currentCard.card

Local i
Local j

SeedRnd MilliSecs()

For i = 1 To 4

   For j = 1 To 5
   
      currentCard.card = New card
      
      currentCard\colorType = i
      currentCard\value = j
      
   Next
   
Next

For i = 1 To 20

   Print cardName$( picCard( i ) )
   
Next

Print "Tastendruck mischt die Karten..."
WaitKey()
FlushKeys()
Delay(10)

Cls()
Locate 1,1

mixCards()

For i = 1 To 20

   Print cardName$( picCard( i ) )
   
Next

Print "Tastendruck beendet das Programm."

WaitKey()


Function cardName$( tCard.card )

   Local tString$

   Select tCard\colorType
   
      Case colorHeart
      
         tString$ = "Herz "
         
      Case colorDiamonds
      
         tString$ = "Karo "
         
      Case colorSpades
      
         tString$ = "Pik "
         
      Case colorClubs
      
         tString$ = "Kreuz "
         
      Default
      
         tSring$ = "DEF COLOR: " + Str( tCard\colorType ) + " "
         
   End Select
   
   
   Select tCard\value
   
      Case cardValueTen
      
         tString$ = tString$ + "10"
         
         
      Case cardValueJack
      
         tString$ = tString$ + "Bube"
         
         
      Case cardValueDame
   
         tString$ = tString$ + "Dame"
         
         
      Case cardValueKing
      
         tString$ = tString$ + "König"
         

      Case cardValueAce
      
         tString$ = tString$ + "Ass"
         
      Default
      
         tString$ = tString$ + "DEF VALUE: " + Str( tCard\value )
         
   End Select
   
   
   Return tString$
   
End Function




Function picCard.card( No )
      
   Local tCard.card
   
   tCard = First card
   
   For i = 2 To No
   
      tCard = After tCard
      
   Next
   
   Return tCard
      
End Function

Function mixCards()

   Local tCard.card
   Local tMixCount
   Local tPushFactor
   Local i
   Local j
   
   tMixCount = Rand( 30,50 )
   
   For i = 0 To tMixCount
   
      tCard = picCard( Rand( 1,20 ) )
      

      tPushFactor = Rand( 3, 19 )
      
      For j = 1 To tPushFactor
      
         If tCard = Last card Then
         
            Insert tCard Before First card
            
         Else
         
            Insert tCard After After tCard
            
         EndIf
         
      Next
      
   Next
   
End Function
   


Ich habe statt Arrays direkt Types verwendet, aber Arrays mit Type-Instanzen zu füllen ist auch ohne Probleme möglich, daran soll es also nicht scheitern, ich habe nur gerade einfach keine Zeit mehr dafür.

Genauso wenig habe ich leider Zeit das ganze angemessen zu kommentieren, ich hoffe es geht auch so einigermaßen.

walski
buh!
 

fliege

BeitragDi, Okt 26, 2004 20:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke, ich brauche nur noch ein bisschen um aus deinem Code zu lernen. Dafür sollten aber meine Kentnisse reichen.
Danke noch einmal
Fliege
Wer weiß was kommt.. ?
 

fliege

BeitragDi, Okt 26, 2004 21:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Okay, wie ich sehe, reichen sie doch noch nicht! Ich sah mir den Code genauer an, und verstand schon einiges nicht...zb:
Code: [AUSKLAPPEN]

Function picCard.card( No )
       
   Local tCard.card
   
   tCard = First card
   
   For i = 2 To No
   
      tCard = After tCard
       
   Next
   
   Return tCard
       
End Function

Function mixCards()

   Local tCard.card
   Local tMixCount
   Local tPushFactor
   Local i
   Local j
   
   tMixCount = Rand( 30,50 )
   
   For i = 0 To tMixCount
   
      tCard = picCard( Rand( 1,20 ) )
       

      tPushFactor = Rand( 3, 19 )
       
      For j = 1 To tPushFactor
       
         If tCard = Last card Then
         
            Insert tCard Before First card
             
         Else
         
            Insert tCard After After tCard
             
         EndIf
         
      Next
       
   Next
   
End Function

Ich weis, das das der Hauptteil des Programms ist, aber ich versteh ihn nicht... Kann ihn vielleicht jemand kommentieren? Wäre echt toll, ich glaube, dann tu ich mir leichter das alles in einen Arry reinzupacken!
Danke schon mal im Vorraus
Fliege
Wer weiß was kommt.. ?

soli

BeitragMi, Okt 27, 2004 3:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
For y=1 to 1000
  a=rnd(0,19)
  b=rnd(0,19)
  c=kartencodes(a)
  kartencodes(a)=kartencodes(b)
  kartencodes(b)=c
next
solitaire
 

fliege

BeitragMi, Okt 27, 2004 6:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke, habe mein Problem schon gelöst! Danke Danke Danke
Wer weiß was kommt.. ?
 

walski

Ehemaliger Admin

BeitragMi, Okt 27, 2004 21:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Also brauchst du keinen Kommentar mehr?

Ich hatte nur gestern Abend keine Zeit mehr, dir einen zu schreiben... aber nagut, so erledigen sich Probleme halt von selbst Wink

walski
buh!

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group