deck's auf (Kinderspiel in der Art von Memory)
- zoidberg
- Beiträge: 219
- Registriert: 06.12.2004 23:15
- Computerausstattung: Acer 6530
Mit Ubuntu 9.04 64 Bit als Hauptsystem und
Windows Vista 32Bit Home Premium zum spielen. - Wohnort: GM
- Kontaktdaten:
deck's auf (Kinderspiel in der Art von Memory)
Hallo!
Endlich habe ich auch ein Spiel fertiggestellt.
Es gibt eine Linux und eine Windowsvariante. Wer Mac oder Amiga nutzt kann ja mal probieren den Quellcode selbst zu komplilieren.
Über Feedback würde ich mich freuen. Die Version ist eine Quasi Final Version. Ich wollte noch einen Introbildschirm vorschalten, und eine Highscoreliste einfügen. Ebenfalls werde ich die Schriftart mal irgendwann austauschen.
Geplant sind auch noch ein Computergegner und verschiedene Kartensets. Das folgt aber später sobald ich die Muße finde mich daranzubegeben.
Erste Tests haben ergeben das das Delay nach dem aufdecken der zweiten Karte zu lang ist. Das ist aber so von mir gewollt. Das Spiel habe ich für meinen 3-jährigen Sohn gemacht. Er braucht ja etwas Zeit zum Einprägen und er klickt noch nicht so genau. Sein Rekord ist 22 Versuche. Meist brauch er aber so um die 27.
Ihr könnt es unter http://www.stfm.de runterladen.
Viel Spaß!
Gruß, Steffen
Endlich habe ich auch ein Spiel fertiggestellt.
Es gibt eine Linux und eine Windowsvariante. Wer Mac oder Amiga nutzt kann ja mal probieren den Quellcode selbst zu komplilieren.
Über Feedback würde ich mich freuen. Die Version ist eine Quasi Final Version. Ich wollte noch einen Introbildschirm vorschalten, und eine Highscoreliste einfügen. Ebenfalls werde ich die Schriftart mal irgendwann austauschen.
Geplant sind auch noch ein Computergegner und verschiedene Kartensets. Das folgt aber später sobald ich die Muße finde mich daranzubegeben.
Erste Tests haben ergeben das das Delay nach dem aufdecken der zweiten Karte zu lang ist. Das ist aber so von mir gewollt. Das Spiel habe ich für meinen 3-jährigen Sohn gemacht. Er braucht ja etwas Zeit zum Einprägen und er klickt noch nicht so genau. Sein Rekord ist 22 Versuche. Meist brauch er aber so um die 27.
Ihr könnt es unter http://www.stfm.de runterladen.
Viel Spaß!
Gruß, Steffen
Hallo zoidberg,
Schön gemacht.
Ich hab zu meiner Schande beim ersten Testen 18 Versuche benötigt und es auch beim zweiten und dritten Mal nicht besser geschafft. Ich werde das auf jeden Fall meinen Mädels zu Hause mal installieren...
Ach ja, macht das Spiel keine Geräusche? Ein kleines Geräusch beim finden einer Kombination und bei einem Fehler wäre ganz nett. Und bei jedem Umdrehen so ein Geräusch wie es eine Spielkarte macht, wenn man Sie vom Tisch nimmt (*switch*). Natürlich muss man das abschalten können (Taste M oder so).
Grüsse,
Volker
Schön gemacht.

Ach ja, macht das Spiel keine Geräusche? Ein kleines Geräusch beim finden einer Kombination und bei einem Fehler wäre ganz nett. Und bei jedem Umdrehen so ein Geräusch wie es eine Spielkarte macht, wenn man Sie vom Tisch nimmt (*switch*). Natürlich muss man das abschalten können (Taste M oder so).
Grüsse,
Volker
Sehr schön umgesetzt! Sind aber noch paar Bugs drin. Es fehlte zum Bsp.
vor DrawText ein StartDrawing() Habs mal für PB4 angepasst:
vor DrawText ein StartDrawing() Habs mal für PB4 angepasst:
Code: Alles auswählen
;"deck's auf" Variante des bekannten Spiels Memory (Leider ist der Name Memory geschützt)
;Es ist gar nicht leicht dafür einen anderen sinnvollen Namen zu finden. Vorschläge nehme ich gern an.
;Das Spiel habe ich für meinen Sohn Nico geschrieben. Ihr dürft es gerne zum ausprobieren für den Eigenbedarf
;verändern. Die Grafiken habe ich selbst erstellt. Wer sie wo anders einsetzen möchte sollte mich vorher
;fragen. Ich möchte hier gar nicht so viel Rechtszeug vorgeben, aber ich möchte keine Pornovarianten
;oder so davon finden. Wundert euch nicht über diesen wirren Code, ich bin Anfänger. Wundert euch nicht
;über sinnlose Variablen. Die sind für einen geplanten Computergegner.
;Viel Spaß damit! Ich habe PB 3.94 benutzt unter Linux. Geht aber auch unter Windows.
; Gruß, Steffen
;-prozeduren
Procedure variablen()
Global mausueber.b
Global counter
Global yposmaus
Global xposmaus
Global movex
Global movey
Global aufgedeckt.b
Global sichtbar.b
Global sichtbarx
Global sichtbary
Global erstekarte.b
Global zweitekarte.b
Global ersteposition.b
Global versuche.b
Global versuches.s
Global startzeit
Global gesamtzeit
Global zeit
Global zeits.s
Global gameplay.b
startzeit = ElapsedMilliseconds()
versuche = 0
gameplay = 1
movey.l = 10
movex.l = 10
mauszeiger.b
c = 1
computerzug1.b
computerzug2.b
Global scorep.b
Global scoreps.s
scorec.b
Global datei.s
Global klick1.b
Global klick2.b
Global Dim bild.b(20)
Global Dim status.b(20)
Global Dim bildanzahl.b(10)
Global Dim daistes1.b(20)
Global Dim daistes2.b(20)
Global NewList compintelligenz.b()
runde.b
Level.b
Level = 1
;-Data Bloecke hier hinein
DataSection
;bilddaten:
;Data.s "anker","insel","schiff","truhe","pirat","kanone","flaschenpost","flagge","messer","hai","karte","hintergrund","kreuz","kreuz2","neustart","ende"
anker: IncludeBinary "anker.jpg"
insel: IncludeBinary "insel.jpg"
schiff: IncludeBinary "schiff.jpg"
truhe: IncludeBinary "truhe.jpg"
pirat: IncludeBinary "pirat.jpg"
kanone: IncludeBinary "kanone.jpg"
flaschenpost: IncludeBinary "flaschenpost.jpg"
flagge: IncludeBinary "flagge.jpg"
messer: IncludeBinary "messer.jpg"
hai: IncludeBinary "hai.jpg"
karte: IncludeBinary "karte.jpg"
hintergrund: IncludeBinary "hintergrund.jpg"
kreuz: IncludeBinary "kreuz.png"
kreuz2: IncludeBinary "kreuz2.png"
neustart: IncludeBinary "neustart.jpg"
ende: IncludeBinary "ende.jpg"
EndDataSection
EndProcedure
Procedure vollbild()
;Initialisieren des Vollbildes und der Peripherie
If InitSprite() = 0 ; spritefunktionen initialisieren
MessageRequester("Fehler","Konnte dx nicht finden",0) ; falls es nicht klappt meldung zeigen
EndIf ; ende der prüfung
If InitKeyboard()=0 ; keyboard initialisieren
MessageRequester("Fehler","Konnte dx nicht finden",0) ; falls es nicht klappt meldung zeigen
EndIf
If InitMouse()=0 ; keyboard initialisieren
MessageRequester("Fehler","Konnte dx nicht finden",0) ; falls es nicht klappt meldung zeigen
EndIf ; ende der prüfung
OpenWindow(0, 0, 0, 800, 600, "", #WS_OVERLAPPEDWINDOW )
If OpenWindowedScreen(WindowID(0), 0, 0, 800,600, 0,0, 0) = 0 ; vollbild öffnen
MessageRequester("Fehler","Konnte kein Vollbild erstellen ",0) ; falls es nicht klappt
EndIf
EndProcedure
Procedure bilderladen()
;Restore bilddaten
; For q.b = 1 To 16
; Read datei.s
; ;datei = "?"+datei
; If CatchSprite(q,datei) = 0
; MessageRequester("Bild Problem","Mist",0)
; End
; EndIf
; Next q
UseJPEGImageDecoder()
CatchSprite(1,?anker)
CatchSprite(2,?insel)
CatchSprite(3,?schiff)
CatchSprite(4,?truhe)
CatchSprite(5,?pirat)
CatchSprite(6,?kanone)
CatchSprite(7,?flaschenpost)
CatchSprite(8,?flagge)
CatchSprite(9,?messer)
CatchSprite(10,?hai)
CatchSprite(11,?karte)
CatchSprite(12,?hintergrund)
CatchSprite(15,?neustart)
CatchSprite(16,?Ende)
UsePNGImageDecoder()
CatchSprite(13,?kreuz)
CatchSprite(14,?kreuz2)
EndProcedure
Procedure kartenmischen() ;Karten mischen und verteilen
For q = 1 To 20
Repeat
c = Random(9)+1
Until bildanzahl(c) < 2
bildanzahl(c) +1
bild(q) = c
If daistes1(c)=0
Debug daistes1(c) = q
Else
Debug daistes2(c) = q
EndIf
status(q) = 1
Next q
EndProcedure
Procedure mausabfrage()
mausueber = 0
movex = 70
movey = 50
counter = 0
For q = 1 To 4
For w = 1 To 5
counter = counter +1
If xposmaus > movex And xposmaus < movex+100 And yposmaus > movey And yposmaus < movey+100
mausueber = counter
EndIf
movex=movex +110
Next w
movex = 70
movey = movey +110
Next q
EndProcedure
Procedure karteaufdecken()
movex = 70
movey = 50
counter = 0
For q = 1 To 4
For w = 1 To 5
counter = counter + 1
If counter = mausueber
DisplaySprite(bild(counter),movex,movey)
sichtbar = counter
sichtbarx = movex
sichtbary = movey
If aufgedeckt > 0
zweitekarte = bild(sichtbar)
StartDrawing(ScreenOutput())
DrawingMode(1)
If erstekarte = zweitekarte
DrawText(70,570, "Super!")
status(zweitekarte)=0
scorep = scorep + 1
Else
DrawText(70,570, "Das war nix!")
EndIf
StopDrawing()
Else
erstekarte = bild(sichtbar)
ersteposition = sichtbar
EndIf
EndIf
movex=movex +110
Next w
movex = 70
movey = movey +110
Next q
aufgedeckt = aufgedeckt + 1
If aufgedeckt >1
aufgedeckt = 0
sichtbar = 0
sichtbarx = 0
sichtbary = 0
erstekarte = 99
zweitekarte = 98
ersteposition = 0
versuche = versuche +1
EndIf
EndProcedure
variablen()
vollbild()
bilderladen()
kartenmischen()
scorep = 10
;----------------------------
;-Hauptschleife des Programms
;----------------------------
Repeat
Select gameplay
Case 1 ;Wenn das Spiel beendet wurde (also alle Karten aufgedeckt wurden).
FlipBuffers() ; Den Buffer wechseln
ClearScreen(0) ; Bildschirm saeubern
ExamineKeyboard() ; Tastatur aktivieren
ExamineMouse() ; Maus aktivieren
DisplaySprite(12,0,0) ; Hintergrundbild anzeigen
DisplaySprite(15,50,150)
DisplaySprite(16,450,150)
If MouseButton(1) And mousestatus = 0
mousestatus = 1
EndIf
If yposmaus > 150 And yposmaus < 450 And xposmaus > 50 And xposmaus < 350
mauszeiger = 14
If MouseButton(1) And mousestatus = 1
versuche = 0
scorep = 0
aufgedeckt = 0
sichtbar = 0
sichtbarx = 0
sichtbary = 0
erstekarte = 99
zweitekarte = 98
ersteposition = 0
variablen ()
kartenmischen()
Delay (100)
MouseLocate(270,300)
gameplay = 2
EndIf
Else
mauszeiger = 13
EndIf
If yposmaus > 150 And yposmaus < 450 And xposmaus > 450 And xposmaus < 750
mauszeiger = 14
If MouseButton(1) And mousestatus = 1
End
EndIf
EndIf
Case 2 ;Normales Gameplay
movex = 70 ; Die jeweils links liegende Karte ist 70 Pixel vom Rand entfernt
movey = 50 ; Von oben ist die erste Reihe 50 Pixel entfernt.
FlipBuffers() ; Den Buffer wechseln
ClearScreen(0) ; Bildschirm saeubern
ExamineKeyboard() ; Tastatur aktivieren
ExamineMouse() ; Maus aktivieren
DisplaySprite(12,0,0) ; Hintergrundbild anzeigen
counters = 0 ; Zähler auf Null setzen
For q = 1 To 4 ; vier Karten uebereinander
For w = 1 To 5 ; und fuenf Karten nebeneinander anordnen
counters = counters +1
If status(bild(counters))=1
DisplaySprite(11,movex,movey) ; vorerst ueberall die Kartenrueckseite zeigen (Sprite Nr. 1)
EndIf
movex=movex +110 ; der Abstand der Karten 110 Pixel = 100 fuer die Karte und 10 Pixel fuer den Zwischenraum
Next w
movex = 70
movey = movey +110
Next q
If aufgedeckt > 0 ; Es wird geprüft ob schon eine Karte aufgedeckt ist
DisplaySprite(bild(sichtbar),sichtbarx,sichtbary) ;Die bereits aufgedeckte Karte wird angezeigt.
EndIf
mausabfrage() ; Die Prozedur Mausabfrage wird ausgeführt.
If status(bild(mausueber))=1 ;Zunächst wird geprüft ob das Bild über dem die Maus gerade wäre noch sichtbar ist.
If mausueber<>0 ; Wenn der Mauszeiger sich über einer Karte befindet die angezeigt wird
mauszeiger = 14 ; wird der Zeiger als Pfeil angezeigt
Else
mauszeiger = 13 ; an sonsten wird er als Kreuz dargestellt
EndIf
Else
mauszeiger = 13 ; So wird der Zeiger auch auf der Position einer Karte als Kreuz gezeigt wenn die Karte nicht mehr zu sehen ist.
EndIf
If MouseButton(1) And mousestatus = 0
mousestatus = 1
EndIf
If MouseButton(1) And mousestatus = 1 And ersteposition <> mausueber And status(bild(mausueber)) > 0
karteaufdecken()
FlipBuffers()
If aufgedeckt = 0 ;Wenn die Zweite Karte aufgedeckt wird
Delay(2000) ;Bleiben beide eine Weile zum besseren Einprägen sichtbar
Else
Delay(20) ;Ansonsten gibt es keine spürbare Verzögerung
EndIf
EndIf
EndSelect
StartDrawing(ScreenOutput())
DrawingMode(1)
gesamtzeit=ElapsedMilliseconds()
zeit=(gesamtzeit-startzeit)/1000
If scorep < 10
zeits=Str(zeit)
Else
gameplay=1
EndIf
DrawText(70,550, "Abgelaufene Sekunden: "+zeits)
versuches=Str(versuche)
DrawText(300,550, "Versuche: "+versuches)
StopDrawing()
yposmaus = MouseY()+13 ; Die Mausposition + 13 Pixel fuer die mitte des Kreuzes wird gesichert
xposmaus = MouseX()+13 ; hier ist es auch wie eine Zeile drueber.
TransparentSpriteColor(mauszeiger, $FF00FF)
DisplayTransparentSprite(mauszeiger,MouseX(),MouseY())
If KeyboardPushed(#PB_Key_Escape) ; escape taste gedrückt
End ; dann programmende
EndIf; ende der prüfung
If WindowEvent() = #PB_Event_CloseWindow
End
EndIf
ForEver
"Papa, ich laufe schneller - dann ist es nicht so weit."
- zoidberg
- Beiträge: 219
- Registriert: 06.12.2004 23:15
- Computerausstattung: Acer 6530
Mit Ubuntu 9.04 64 Bit als Hauptsystem und
Windows Vista 32Bit Home Premium zum spielen. - Wohnort: GM
- Kontaktdaten:
Hallo!
Freut mich, daß es euch gefällt. Das mit den Tönen ist eine schöne Idee. Ich muss mal sehen wo ich die am besten herbekomme. Vielleicht kann ich sie ja auch selbst aufnehmen. Die Grafiken habe ich ja auch selbst gemacht.
Was das StartDrawing() angeht, das habe ich gar nicht bemerkt das es irgendwo fehlt. An welcher Stelle war das genau?
Ich habe in der Linuxversion festgestellt, daß es auf dem Laptop meiner Frau nicht geht. Mag es sein das ich bestimmte Voraussetzungen erfüllen muß? So wie Direct X unter Windows zum Beispiel bei Linux SDL oder so benötigt wird? Was mir auch aufgefallen ist, ist das unter Linux keine Fehlermeldung kommt, sondern nur ein schwarzer Bildschirm der sich auch nicht beenden läßt außer durch "strg,alt und backspace".
Schön das es sich auch mit Version 4 kompilieren läßt. So kann jeder interessierte ein wenig experimentieren.
Als nächstes wollte ich mich mal an Schiffeversenken oder Mau Mau versuchen. Hat jemand noch Ideen welche einfachen Spiele eine schöne Aufgabe zum erlernen von Purebasic sind? Vier gewinnt ist mir KI mäßig noch zu anspruchsvoll.
Der Titel "deck's auf" gefällt mir auch noch nicht so recht. Deshalb erscheint er auch nicht im Spiel.
Sobald ich auch unter Linux den Pfad der exe vernünftig weitergeben kann werde ich die Grafiken auch wieder aus der exe rausnehmen. Ich habe mir auch ausgedacht man könnte einen Zusatz machen bei dem man eigene Bilder auswählen kann, und dann einen Quadratischen Ausschnitt daraus wählt. Diese eigenen Bilder könnte man dann als Kartenthema auswählen. Das ist mir aber noch zu schwer.
Vielen Dank für euer Feedback!
Gruß, Steffen
Freut mich, daß es euch gefällt. Das mit den Tönen ist eine schöne Idee. Ich muss mal sehen wo ich die am besten herbekomme. Vielleicht kann ich sie ja auch selbst aufnehmen. Die Grafiken habe ich ja auch selbst gemacht.
Was das StartDrawing() angeht, das habe ich gar nicht bemerkt das es irgendwo fehlt. An welcher Stelle war das genau?
Ich habe in der Linuxversion festgestellt, daß es auf dem Laptop meiner Frau nicht geht. Mag es sein das ich bestimmte Voraussetzungen erfüllen muß? So wie Direct X unter Windows zum Beispiel bei Linux SDL oder so benötigt wird? Was mir auch aufgefallen ist, ist das unter Linux keine Fehlermeldung kommt, sondern nur ein schwarzer Bildschirm der sich auch nicht beenden läßt außer durch "strg,alt und backspace".
Schön das es sich auch mit Version 4 kompilieren läßt. So kann jeder interessierte ein wenig experimentieren.
Als nächstes wollte ich mich mal an Schiffeversenken oder Mau Mau versuchen. Hat jemand noch Ideen welche einfachen Spiele eine schöne Aufgabe zum erlernen von Purebasic sind? Vier gewinnt ist mir KI mäßig noch zu anspruchsvoll.
Der Titel "deck's auf" gefällt mir auch noch nicht so recht. Deshalb erscheint er auch nicht im Spiel.
Sobald ich auch unter Linux den Pfad der exe vernünftig weitergeben kann werde ich die Grafiken auch wieder aus der exe rausnehmen. Ich habe mir auch ausgedacht man könnte einen Zusatz machen bei dem man eigene Bilder auswählen kann, und dann einen Quadratischen Ausschnitt daraus wählt. Diese eigenen Bilder könnte man dann als Kartenthema auswählen. Das ist mir aber noch zu schwer.
Vielen Dank für euer Feedback!
Gruß, Steffen
- vonTurnundTaxis
- Beiträge: 2130
- Registriert: 06.10.2004 20:38
- Wohnort: Bayreuth
- Kontaktdaten:
wow, ist echt super! schicks doch an gamestar, da gibts ne Rubrik Leserspiele. Leider funktioniert Alt+Tab und wieder zurück ins SPiel bei mir nicht... Auch eine Highscroe wäre schön!
Super! Weiter so!
gruß oNNy
Super! Weiter so!
gruß oNNy
gruß oNNy
http://www.onnsoft.de
http://www.onnsoft.de
- vonTurnundTaxis
- Beiträge: 2130
- Registriert: 06.10.2004 20:38
- Wohnort: Bayreuth
- Kontaktdaten: