ARRgh!!!^^ Momorie Kartenverteilung

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

Pingu_Killer

Betreff: ARRgh!!!^^ Momorie Kartenverteilung

BeitragDo, Jul 26, 2007 14:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Argh! Ich habe vor einen Monat ja an einem momorie spiel geproggt welches meine Mudda für ihren Prof braucht. Ich habe bis jetzt ja nur das Gröbste:

Es werden die karten gezeichnet und wenn man auf eine klickt wird eine zufällig ausgewählte Karte aufgedeckt welche aber erst mal immer die gleiche ist. Mehr habe ich noch nicht.

Ich weis, es ist nicht sehr kreativ immer zu fragen, anstatt sich selber ranzusetzen, aber mir fällt nicht ein wie ich weiter komme. Könnt ihr mir helfen? Es ist dringend, muss am 15. August fertig sein...

Falls es hilft, der Code: [AUSKLAPPEN]

Graphics 1024, 768, 0, 1
SetBuffer BackBuffer()
AppTitle "Memorie"
HidePointer
SeedRnd MilliSecs()


;laden der kartenimages
Global karte = LoadImage(Rand(1,5)+".bmp")

Global courser = LoadImage("courser.bmp")
   MaskImage courser, 255, 0, 255
Global backside = LoadImage("backside.bmp")

;dimensionierung des spielfeld-feldes für die karten.

Dim karten (10)
Dim spielfeld (5,3)


Restore feld
For y = 0 To 2
   For x = 0 To 4
      Read spielfeld(x,y) ;daten werden ausgelesen
   Next
Next

;hauptschleife
;-------------------------------------
Repeat
Cls

draw_spielfeld()

DrawImage courser, MouseX(), MouseY(); courser eben^^

Flip
Until KeyHit(1)
End
;-------------------------------------


Function draw_spielfeld()
mh=MouseHit(1)
For y= 0 To 2
   For x= 0 To 4
      If spielfeld(x,y) = 1 Then                    ;wenn die variable 1 ist
            DrawImage backside, x*195+40, y*245+40;wird die kartenrückseite gezeichnet
      EndIf
      If spielfeld(x,y) = 2 Then                ;wenn die variable 2 ist
            DrawImage karte, x*195+40, y*245+40;wird die zufallskarte gezeichnet
      EndIf
      
      If ImagesOverlap (courser, MouseX(), MouseY(), backside, x*195+40, y*245+40) And mh And spielfeld(x,y) = 1 Then; wenn der courser mit dem bild kollidiert die varible 1 ist und man klickt
         spielfeld(x,y) = 2
      ElseIf ImagesOverlap (courser, MouseX(), MouseY(), backside, x*195+40, y*245+40) And mh And spielfeld(x,y) = 2 Then
         spielfeld(x,y) = 1
      EndIf
   Next
Next

End Function
;-----------------------------------
;ich wusste nicht wie ich es anders machen sollte deshalb habe ich das feld so gezeichnet
.feld
Data 1,1,1,1,1
Data 1,1,1,1,1
Data 1,1,1,1,1
------------------------------------------------------

Gründer und einziges Mitglied von
"NoobTec Games"

Nooby

BeitragDo, Jul 26, 2007 15:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
Global karte = LoadImage(Rand(1,5)+".bmp")


Hm... das willst du doch hoffentlich nicht so lassen oder?

Also irgendwann sollte da stehen:
Code: [AUSKLAPPEN]
Dim Kartenbild(10)
For kartennummer = 0 to 10 ;Bei 11 verschiedenen Kartenpaaren
 Global kartenbild(kartennummer) = LoadImage("karte" + kartennummer + ".bmp")
Next


BMP ist vielleicht nicht so schön... Über Variablennamen kann man streiten - so würde ich das machen.

Code: [AUSKLAPPEN]
Dim karten (10)


Wenn das die Kartenbilder sind, dann sind es 11 verschiedene. Warum dann
Code: [AUSKLAPPEN]
Dim spielfeld (5,3)

?
Das macht 6 * 4, also 24 Felder... Zwei sind nicht belegt. Also lieber
Code: [AUSKLAPPEN]
Dim karten (11)

oder? Merke: Auch bei "Dim" wird die 0 mitgerechnet!

Das ist das, was mir bisher aufgefallen ist... Mir ist der Code - auch mit Kommentaren - ein bisschen zu unübersichtlich.
DAS PERPETUOMOBILE!!!
http://www.sax.de/~stalker/pad/199801/

SpionAtom

BeitragDo, Jul 26, 2007 15:13
Antworten mit Zitat
Benutzer-Profile anzeigen
15 Karten ist irgendwie zu ungerade für ein Memory. Confused
Um die Karten zu mischen, lese es erst ein, wie du es bereits gemacht hast.
Dann lass eine Schleife ca. 100 mal laufen, in der du zwei zufällig ausgewählte Karten vertauschst. Danach sollte das Feld gemischt sein.
os: Windows 10 Home cpu: Intel Core i7 6700K 4.00Ghz gpu: NVIDIA GeForce GTX 1080

Nooby

BeitragDo, Jul 26, 2007 15:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Oder du verwendest einen komplizierteren Code mit "Type", in dem du jeder Karte ein zufälliges Element aus Type zuweist und dieses dann löschst. So isses "ordentlicher".

@SpionAtom: JUHU! Bilderrätzel!!!
DAS PERPETUOMOBILE!!!
http://www.sax.de/~stalker/pad/199801/

Pingu_Killer

BeitragDo, Jul 26, 2007 16:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Erst mal danke für die schnellen antworten Smile

Mhm...
Verdammt Embarassed
ich verstehe bei euch beide nicht wie ihr das meint....

Könnt ihr mir das vllt erklären? Sad
------------------------------------------------------

Gründer und einziges Mitglied von
"NoobTec Games"

SpionAtom

BeitragDo, Jul 26, 2007 17:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Also ich meine das ungefähr so:

Code: [AUSKLAPPEN]
Restore feld
For y = 0 To 2
   For x = 0 To 4
      Read spielfeld(x,y) ;daten werden ausgelesen
   Next
Next

;Mischen:
For i = 1 To 100
   x1 = Rand(0, 4):    y1 = Rand(0, 2)
   x2 = Rand(0, 4):    y2 = Rand(0, 2)
   
   tmp = spielfeld(x1, y1) ;Tauschvorgang
   spielfeld(x1, y1) = spielfeld(x2, y2)
   spielfeld(x2, y2) = tmp
Next


Je größer du die Schleife machst, desto mehr Vertauschungen gibt es, desto gemischter wird das Feld.

@Nooby cool, ne?
os: Windows 10 Home cpu: Intel Core i7 6700K 4.00Ghz gpu: NVIDIA GeForce GTX 1080

Pingu_Killer

BeitragDo, Jul 26, 2007 23:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Jetzt muss ich mal nachhaken Very Happy .

was beudeutet eigendlich der Doppelpunkt?
Code: [AUSKLAPPEN]
x1 = Rand(0, 4):    y1 = Rand(0, 2)
   x2 = Rand(0, 4):    y2 = Rand(0, 2)
------------------------------------------------------

Gründer und einziges Mitglied von
"NoobTec Games"

PSY

BeitragDo, Jul 26, 2007 23:38
Antworten mit Zitat
Benutzer-Profile anzeigen
doppelpunkt bedeutet: jetzt fängt ein neuer befehl an.

a=1 : b=1

ist dasselbe wie

a=1
b=1

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group