Memo Tutorial
Übersicht

![]() |
RallimenSieger des 30-EUR-WettbewerbsBetreff: Memo Tutorial |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich will auch mal einen kleinen Beitrag hier posten,
hoffe das es einige auch gebrauchen können ![]() Code: [AUSKLAPPEN] AppTitle "Memo Tutorial by Rallimen"
Graphics 800,600,16,2; kleiner Beispielcode für Memo-Spiel SetBuffer BackBuffer() SeedRnd MilliSecs() ;zufall einstellen Const ESC = 1, Bildwiederholung = 60 Global Mausklick,Maus_Pos_X,Maus_Pos_Y ; für Mausabfrage Function Global Offene_Tueren, Offene_Karte1, Offene_Karte2, PauseVariable frameTimer = CreateTimer(Bildwiederholung); speedbremse einbauen ;erst mal ermitteln wo denn die Memo_Karten später gezeichnet werden sollen Dim Bildposition(15,1); in 0 die X-Position und in 1 die Y-Position speichern ;function zum berechnen aufrufen Bild_Positionen_ermitteln(); die Positionen berechnen und speichern ; jetzt werden die Bilder geladen, die nachher gebraucht werden für die Memo-Karten Dim Einzelbild(7) ;= 8 Bilder Bilderladen() ; und in der Function laden ; jetzt werden die Memorykarten erstellt ; für jede Karte brauchen wir verschiedene Variablen in denen sich das Programm merkt ; -welches Bild auf der Karte klebt ; -ob es Aktiv ist , also sichtbar oder nicht ; -Identifizierungscode für gleiche Bilder ; -Zufallszahl zum Mischen ; so speichern wir diese Dim MemoryKarte(15,3) ;in 0 das aktuelle Bild , ;in 1 Bild aktiv = 1 oder 0 ;in 2 Partnerbild code 1-1 oder 4-4 ; ;in 3 zufalls Zahl zum mischen Karten_erstellen() ; diese function erstellt das Kartenwerk ;jetzt können wir die Karten mischen Memo_mischen(); in dieser Function erledigen wir das ;################################################################# While Not KeyDown(ESC) ; ############################Hauptschleife ;mausabfragen Maus_abfrage() ;alle MemoryKarten malen Memo_malen() ; Rückseiten drübermalen Memo_rueckseiten_malen() ;jetzt kommt das eigendliche wichtigste ; 2 sachen ; welche karte angeklickt wurde sollte gedreht werden ; und wenn 2 offen liegen dann ; der Vergleich ob diese richtig sind ; jetzt noch Pausevariablen setzten damit man auch sieht das es falsche Bilder waren, die angeklickt wurden ; werde das hier mal über die Bildwiederholungrate FPS machen ,hier 60 Bilder/Sek wie es eingestellt ist in frametimer ; jedesmal wenn die Bilder verglichen wurden und nicht richtig waren, setzen wir die PauseVariable = 60 ; und solange wie diese nicht auf Null runtergezählt wurde, ca.1Sekunde, einfach das Programm laufen lassen ohne diese 2 Functionen ;auszuführen >>>Memo_Karte_umdrehen() & Memo_Karten_vergleichen()<<<< If PauseVariable > 0 Then ;solange diePauseVariable Aktiv ist keine karte umdrehen PauseVariable = PauseVariable -1; bei jedem Durchlauf verkleinern If PauseVariable = 0 Then ; wenn diese auf 0 ist drehen wir die Karten wieder um, die falsch waren MemoryKarte(Offene_Karte1,1) = 1 ; aktiviert die Karte MemoryKarte(Offene_Karte2,1) = 1 ; bzw End If Else ; wenn die PauseVariable = 0 ist öffnen und vergleichen wieder Memo_Karte_umdrehen() ;hier der Aufruf der Funktion zum drehen einer Karte Memo_Karten_vergleichen(); das erklärt sich schon am Namen der Function End If ; wenn das im Vollbild ausgeführt, wird muß hier noch ein Mauszeiger gemalt werden! WaitTimer(frameTimer) Flip Cls Wend;################################# Hauptschleife ENDE ;########################################################## End Function Memo_Mischen() ; karten sortieren nach zufallzahl mit bubbleSort For z = 0 To 15 For Bildzaehler = 0 To 15 -1;diese schleife schiebt das feld runter bis es ;-1 weil wir das letzte nicht mit dem allerletzten vertauschen können, da es nicht exestiert If MemoryKarte(Bildzaehler,3) < MemoryKarte(Bildzaehler+1,3) tempZufall = MemoryKarte(Bildzaehler,3) ; hier die einzelnen MemoryKarte(Bildzaehler,3) = MemoryKarte(Bildzaehler+1,3);Werte Zufall tauschen MemoryKarte(Bildzaehler+1,3) =tempZufall; bilder mit tauschen tempBild = MemoryKarte(Bildzaehler,0) ; hier die einzelnen Bilder MemoryKarte(Bildzaehler,0) = MemoryKarte(Bildzaehler+1,0);tauschen MemoryKarte(Bildzaehler+1,0) =tempBild tempIdent = MemoryKarte(Bildzaehler,2) ;IdentNr tauschen MemoryKarte(Bildzaehler,2) = MemoryKarte(Bildzaehler+1,2);tauschen MemoryKarte(Bildzaehler+1,2) =tempIdent EndIf Next Next End Function Function Karten_erstellen() ;in 0 das aktuelle Bild , ;in 1 Bild aktiv = 1 oder 0 ;in 2 Partnerbild code 1-1 oder 4-4 ; ;in 3 zufalls Zahl zum mischen For t= 0 To 7 MemoryKarte(t,0) = Einzelbild(t) ; die Karte auf das Bild setzten MemoryKarte(t+8,0) = Einzelbild(t) ; hier das gleiche bild nur eben versetzt MemoryKarte(t,1) = 1 ; die Karten aktivieren MemoryKarte(t+8,1) = 1 ; die Karten aktivieren MemoryKarte(t,2) = t; den gleichen Code zuweisen MemoryKarte(t+8,2) = t; wegen der späteren Übereinstimmung MemoryKarte(t,3) = Rand (1,255) ; die Zufallszahl MemoryKarte(t+8,3) = Rand (1,255) ; die Zufallszahl Next End Function Function Bild_Positionen_ermitteln() ; 16 Stück (2 x 8 Karten) ;Spielfeld = 4 Breit und 4 hoch Bildzaehler = 0 ; eigendlich über da es beim Aufruf der Function die Variable Bildzaehler = 0 ist ; die Bilder sind 90 x 90 Pixel gross For y = 0 To 3 For x= 0 To 3 ;Dim Bildposition(15,1); in 0 die X-Position und in 1 die Y-Position speichern ; was hier passiert ;beim ersten durchlauf der schleife ist x und y = 0 , da 0 * 95 ja 0 ist ; +90 habe ich gemacht um alle Bilder weiter auf das Feld zubekommen , ;da sonst die Bilder direkt oben am Rand gemalt werden Bildposition (Bildzaehler,0) = x*95 +90 ; X-Position berechnen Bildposition (Bildzaehler,1) = y*95 +90 ;Y-Position berechnen Bildzaehler = Bildzaehler +1; für das nächste Bild Position ermitteln Next Next ;die positionen sind jetzt ermittelt und gespeichert End Function Function Bilderladen() ; je nachdem wie die Bilder abgespeichert sind ist es wichtig das ; in jedem Einzelbild(7) ein Bild von 90x90 Pix groß geladen wird ;################Beispielcode zum laden der Bilder ;For t= 0 To 7 ; hier sind die bilder in einer Datei ;Einzelbild(t) = LoadAnimImage("dateiname.bmp",90,90,t,1) ;Next ;################ ; hier erstell ich jetzt Bilder aus verschiedenen Farben ;damit der Code auch überall functioniert ;wenn ihr eure Blilder nutzt dann volgenden Code Löschen font = LoadFont("Arial",80,0,0,0) SetFont font For t= 0 To 7 Color Rnd (10,230),Rnd (10,200),Rnd (10,200) Rect 0,0,90,90,1 Color 0,0,0 Text 45,45,Rand(1,99),1,1 ;eine Zufallszahl mittig draufmalen Einzelbild(t) = CreateImage (90,90) GrabImage Einzelbild(t) ,0,0; Grafik erstellen Next Cls ;aber nur bis hier löschen End Function Function Maus_abfrage() Mausklick = MouseHit(1) Maus_Pos_X = MouseX() Maus_Pos_Y = MouseY() End Function Function Memo_malen() For z1 = 0 To 15 DrawBlock MemoryKarte(z1,0),Bildposition(z1,0),Bildposition(z1,1) Next End Function Function Memo_rueckseiten_malen() ;Alle Rückseiten drübermalen mit Rect,( kann aber auch ein bild sein) ; Allerdings nur die die nicht aufgedeckt sind ;bzw die Karten die Aktiv oder nicht Aktiv sind Color 0,0,255 ; Farbe Blau einstellen, weil es mit Rect übermalt wird For z1 = 0 To 15 ; diese malen wir aber nur wenn das Bild noch aktiv ist also noch im Spiel ist übermalt If MemoryKarte(z1,1) = 1 Then Rect Bildposition(z1,0),Bildposition(z1,1),90,90,1; blaue kästchen drübermalen Next End Function Function Memo_Karte_umdrehen() If Mausklick = 1 Then ; also nur den code abarbeiten wenn die Maustaste gedrückt wurde For t = 0 To 15 ; wieder alle karten abfragen , ; allerdings dürfen wir nur die umdrehen die noch nicht umgedreht sind ; bzw die die Aktiv sind If MemoryKarte(t,1) = 1 Then ; wenn dies zutrifft ist die Karte aktiv ;und wir fragen ob diese karte angeklickt wurde mit der Mausspitze mit ; und nehmen jetzt aber nicht das Bild sondern vergleichen auf 2 rechtecke ; das eine mit 90x90 Pixel und für die Maus 1 x 1 Pixeln If RectsOverlap (Bildposition (t,0),Bildposition (t,1),90,90,Maus_Pos_X,Maus_Pos_Y,1,1) Then ; wenn diese Karte geklickt wurde dann ändern wir den status der Karte und deaktivieren diese MemoryKarte(t,1) =0 ;jetzt wird diese nicht mehr gezeichnet und bleibt offen liegen Offene_Tueren = Offene_Tueren +1; und merken uns das wir eine geöfnet haben ;wir merken uns welche wir geöffnet haben um sie nachher zu vergleichen ;allerdings brauchen wir 2 Variablen eine für die 1. die wir öffnen und eine für die 2. If Offene_Tueren = 1 Then Offene_Karte1 = t ; hier steht jetzt die karten nummer der 1. Karte drinn die wir geöffnet haben If Offene_Tueren = 2 Then Offene_Karte2 = t ; hier steht jetzt die karten nummer der 2. Karte drinn die wir geöffnet haben ;man kann diese Schleife jetzt verlassen da wir eine geöffnet haben ;oder auch durchlaufen lassen, er findet eh keine andere mehr an diesem Platz End If End If Next End If End Function Function Memo_Karten_vergleichen() If Offene_Tueren = 2 Then ;vergleichen können wir nur wenn 2 Karten aufgedeckt ;hier sind die nummern der Karten gespeichert die geöffnet sind ;Offene_Karte1, Offene_Karte2 ; hier werden die Karten veglichen If MemoryKarte(Offene_Karte1,2) = MemoryKarte(Offene_Karte2,2) Then ; super ein Paar gefunden, hier dann zählen oder Music spielen Else ; wenn nicht gleich dann die karten wieder Aktivieren ; diese Beiden Zeilen werden duch die PauseVariable ersetzt und erst ausgeführt wenn die Pause beendet wurde ;da man sonst die 2. geöffnete Karte nicht angezeigt bekommt weil diese sofort wieder geschlossen wird ; MemoryKarte(Offene_Karte1,1) = 1 ; MemoryKarte(Offene_Karte2,1) = 1 PauseVariable = 60 ;PlaySound Fehlerton End If ;wenn die Türen abgefragt worden Sind die Variable dann zurücksetzten Offene_Tueren = 0 ; wichtig damit es gleich weitergeht End If End Function Mit vielen Erklärungen!! Natürlich voll funktionsfähig , aber nicht ganz fertig was auch beabsichtigt ist ! Es kann nur einmal gespielt werden und muss dann neu gestartet werden! Würde auch den Rahmen sprengen! dann viel Spass und viel Erfolg! Kopieren>>>>> Probieren!!! |
||
[BB2D | BB3D | BB+]
|
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group