[Hilfe] Card Game

Übersicht BlitzBasic Beginners-Corner

Gehe zu Seite Zurück  1, 2, 3

Neue Antwort erstellen

Eingeproggt

BeitragFr, Jun 27, 2014 14:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Kurz:
Die Abfrage in der While-Schleife sollte auf =False lauten, nicht auf =True.

Lang:
Alle Einträge werden am Anfang auf True gesetzt.
Mit dem ersten ziehen setzt du einen Eintrag auf False.
In weiterer Folge suchst du solange eine Zufallszahl, bis du den Eintrag findest der False ist. Sprich der erste, daher immer dieselbe Zahl.

EDIT:
Nach mehrmaligem Durchlesen finde ich meine Erklärung verwirrend Laughing
Also du hast
Code: [AUSKLAPPEN]
While Kartenziehen(Handkarte2) = True

Das heißt, du suchst so lange eine neue Zufallszahl, solange da True steht. Das ist bei jedem Eintrag der Fall, außer bei dem, der als erste Karte gewählt wurde. (vorhin als bis er false ist beschrieben). Die beiden fett markierten Wörter dürften für deine Verwirrung gesorgt haben Wink
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9

BladeRunner

Moderator

BeitragFr, Jun 27, 2014 15:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich würde einen komplett anderen Ansatz wählen:
Nimm alle Karten die es geben soll und pack sie in ein Array. Dann mischst du das Array indem du per Rand für eine genügend große Anzahl an Iterationen immer zwei Karten austauschst.
Danach kannst Du einfach dem Spieler die ersten 5 Karten aus dem Array zuweisen. (und wenn später nachgezogen werden kann, setze eine Variable auf den ersten Spot der noch nicht gezogen wurde und teile die aus, erhöhe dann die Variable)
Damit siehst Du dann auch wenn alle Karten aus dem Spiel sind.

Also:
(Pseudo)
Code: [AUSKLAPPEN]
dim karten(40)
;befülle das array mit deinen Karten

For i = 0 to 1000
    karte1 = rand (0,39)
    karte2= rand(0,39)
    temp = karten(karte1)
    karten(karte1)=karten(karte2)
    karten(karte2)=temp
next

;und danach noch karten(0) bis karten(4) dem Spieler zuweisen.




Damit ist es wie im echten Leben, die Karten werden zufällig untereinander ausgetauscht.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92
 

Snowdragon

BeitragFr, Jun 27, 2014 17:08
Antworten mit Zitat
Benutzer-Profile anzeigen
@Blade

Ich hab die Methode ausprobiert und läuft soweit alles. Allerdings sind es immer wieder die 5 gleichen Karten die ich ziehe, wenn ich das Spiel starte.
Das heißt untereinander wurden sie zwar gemischt, doch wenn ich sie ziehe erhalte ich immer:
Die 3 Karte die ich definiert habe,
Die 1 Karte ""
Die 4 Karte ""
Die 2 Karte ""

Wenn ich
SeedRnd MilliSecs()
verwende dann geht es aber - hat doch was damit zu tun wie lange es her ist, bis das Programm das letzte Mal ausgeführt wurde oder?

Xeres

Moderator

BeitragFr, Jun 27, 2014 17:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja, Millisecs gibt die Zeit seit dem letzten Systemstart zurück.
Das ist die beste Quelle für Zufall, die einem zur Verfügung steht - wenn du nicht einen Service wie random.org benutzen willst um Blöcke an Zufallsdaten zwischen zu speichern.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)
 

Snowdragon

BeitragFr, Jun 27, 2014 18:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Okay!

Dann hätte ich da noch eine kleine Frage. Ich habe ja mal nach verschiedenen Kartenspielen gefragt. Bei einigen war es so, wenn ich mit der Maus über die Karten gehe, dass die entsprechende Person quasi hervorgehoben wird indem ihre y-Koordinate erhöht/verringert wird.

Hat da jemand vlt. ein guten Ansatz weil ich die Idee schon cool finde aber keine Ahnung wie ich eine solche Abfrage realisieren kann (quasi das Rollover mit der Maus).

BladeRunner

Moderator

BeitragFr, Jun 27, 2014 18:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Mauskoordinaten vergleichen mit Kartenkoordinatn (simples point-in-box) und ggf. Bild anders zeichnen lassen. Ich verstehe das Problem daran nicht wirklich?
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92
 

Hangman

BeitragSa, Jun 28, 2014 3:21
Antworten mit Zitat
Benutzer-Profile anzeigen
BlitzMax: [AUSKLAPPEN]
Rem
bbdoc:Prüft, ob ein Punkt in einem Rechteck liegt.
End Rem

Function pointInRect:Byte(x:Int, y:Int, rectX:Int, rectY:Int, rectWidth:Int, rectHeight:Int)
If x >= rectX And x <= rectX + rectWidth Then
If y >= rectY And y <= rectY + rectHeight Then Return True
End If
Return False
End Function


Ist zwar BMax, sollte sich aber jeder selbst übersetzen können.

Aufruf:
BlitzMax: [AUSKLAPPEN]
If pointInRect(mausX, mausY, karteX, karteY, karteBreite, karteHoehe) Then karteY = 42
Ich habe Berthold gebrochen.

count-doku

BeitragSa, Jun 28, 2014 17:52
Antworten mit Zitat
Benutzer-Profile anzeigen
In BlitzBasic kann man doch auch einfach RectsOverlap nehmen, das dürfte exakt das gleiche machen wie die Funktion von Hangman...

Dann halt da Mauskoords und die Bildposition/größe reinpacken.

Gehe zu Seite Zurück  1, 2, 3

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group