Memory Spiel

Für Dinge zum Forum, Kritik, Verbesserungsvorschläge, Umfragen und ähnliches.
Antworten
kleeneluca
Beiträge: 4
Registriert: Fr 8. Sep 2017, 12:38

Memory Spiel

Beitrag von kleeneluca »

Hallo, also wir sollten im Unterricht ein Spiel programmieren.
Ich hatte mir vorgenommen Memory zu erstellen. Dabei kam nun das Problem auf, dass ich es nur durch if then anweisungen gemacht habe. Wenn zwei Kärtchen richtig gewählt wurden klappt es eigentlich. Aber wenn es falsch ist habe ich eine else angewandt, in diese geht der PC nun aber garnicht rein. Ich saß nun circa zwei Stunden davor und bin wahrscheinlich mittlerweile betriebsblind, ich hoffe ihr könnt mir helfen.
Habe die else erst mal nur an zwei Shapes probiert. Vielleicht könnt ihr euch ja mal durchwurschteln. :cry:
Dateianhänge
u_memorie.pas
(13.33 KiB) 181-mal heruntergeladen

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2636
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: Memory Spiel

Beitrag von m.fuchs »

Kannst du mal bitte noch die .lfm und die .lpi Dateien anhängen?
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Memory Spiel

Beitrag von Mathias »

Am besten du bildest deine Karten in einer Array in dieser Art ab.

Code: Alles auswählen

type
  TKarte = record
    Wert: integer;    // Bezeichnung der Karte
    Box:TToggleBox;   // Sichtbare Karten auf dem Bildschirm.
  end;
 
  TMemoryMatrix = array[0..7, 0..7] of TKarte;
 
var
  MemoryMatrix: TMemoryMatrix;

Somit kann man rech einfach in einer For-To-Schleife die Karten abfragen, und wen 2 mit dem Gleiche Wert aufgedeckt sind, kann Box.Visible die richtigen Paare ausblenden.
Die ToggleBox müsste man dynamisch erzeugen,.somit hast du am Ende ein recht übersichtlicher Code. :wink:
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

kleeneluca
Beiträge: 4
Registriert: Fr 8. Sep 2017, 12:38

Re: Memory Spiel

Beitrag von kleeneluca »

Bei der .lpi beschwert er sich, da die Datei als möglicher Angriffsversuch identifiziert wurde.

Ja das mit den Feldern hab ich schon gelesen, jedoch hatten wir das im Unterricht noch nicht dran und sollen ausschließlich das verwenden was wir bereits hatten... deswegen ist das blöd..unser Lehrer hat auch schon versucht das Problem zu finden, doch hat das nichtmal nach zwei Stunden funktioniert.. Morgen ist allerletzte Abgabe und ich weiß mir echt nichtmehr zu helfen.. :/
Dateianhänge
u_memorie.lfm
(3.49 KiB) 165-mal heruntergeladen

Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Memory Spiel

Beitrag von Mathias »

Bei der .lpi beschwert er sich, da die Datei als möglicher Angriffsversuch identifiziert wurde.

Virenscanner deaktivieren, die exe, wen vorhanden, dbg und den Ordner lib löschen, anschliessend dein ganzes project zippen, dann müsste es gehen.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Erwin
Beiträge: 286
Registriert: Mi 16. Sep 2009, 14:15
OS, Lazarus, FPC: Xubuntu 22.04 / x86_64_linux-gtk 2 / L 2.2.0 / FPC 3.2.2

Re: Memory Spiel

Beitrag von Erwin »

kleeneluca hat geschrieben:.... Dabei kam nun das Problem auf, dass ich es nur durch if then anweisungen gemacht habe. Wenn zwei Kärtchen richtig gewählt wurden klappt es eigentlich. Aber wenn es falsch ist habe ich eine else angewandt, in diese geht der PC nun aber garnicht rein. ...

Also wenn else wirklich nicht aufgerufen wird, wäre mein Vorschlag, anstatt Else das Gegenteil von '=' zu versuchen: '<>'.

Code: Alles auswählen

 
if a=a then Button.Caption := 'Richtig';
if a<>a then Button.Caption := 'Falsch';
 

als Beispiel ... .
Lazarus 2.2.0 / FP 3.2.4

Michl
Beiträge: 2505
Registriert: Di 19. Jun 2012, 12:54

Re: Memory Spiel

Beitrag von Michl »

Ich habe das Programm eben mal gestartet (als Projekt anbei, falls es noch jemand sonst testen will). Es fehlten ein paar Klammern, da es sich sonst gar nicht kompilieren lässt.

In welches "else" Statement springt er denn nicht rein (ich konnte hier keins entdecken. Der Debugger blieb immer enstprechend am Breakpoint stehen).

Beschreibe bitte nochmal genau, was du klickst und was dann deiner Meinung nach nicht geht.
Dateianhänge
Memory.zip
(3.35 KiB) 164-mal heruntergeladen

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection; 

Antworten