Leichtes memoryspiel in lazerus programmieren
Leichtes memoryspiel in lazerus programmieren
Hallo, ich kenn mich selber noch gar nicht so gut aus mit dem programmieren in Lazarus, also ich bin quasi ein richtiger Anfänger. Ich brauch unbedingt Hilfe um ein Memoryspiel mit acht Spielkarten zu programmieren, da ich es einfach nicht schaffe. Ich freue mich über antworten, danke im Voraus!
- af0815
- Lazarusforum e. V.
- Beiträge: 6770
- Registriert: So 7. Jan 2007, 10:20
- OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
- CPU-Target: 32Bit (64Bit)
- Wohnort: Burgenland
- Kontaktdaten:
Re: Leichtes memoryspiel in lazerus programmieren
Aha, gibt es wieder Hausübungen ?!
Ich würde sagen du fängst an und schreibst dann wo dein genaues Problem ist.
Ich würde sagen du fängst an und schreibst dann wo dein genaues Problem ist.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
Re: Leichtes memoryspiel in lazerus programmieren
ich habe schon angefangen, ich habe Probleme, beim functions geben, also ich habe die Karten schon alle eingefügt als timages. und die Bilder eingefügt, bei dem Quelltext ist mein Problem.
Re: Leichtes memoryspiel in lazerus programmieren
Das geht mir genauso! Mein Problem ist auch meistens beim Quelltext wenn ich programmiere.yuke hat geschrieben: Do 26. Okt 2023, 14:59 ich habe schon angefangen, ich habe Probleme, beim functions geben, also ich habe die Karten schon alle eingefügt als timages. und die Bilder eingefügt, bei dem Quelltext ist mein Problem.

Wie kann man dir jetzt genau helfen, ohne die ganze Arbeit für dich zu machen?
Re: Leichtes memoryspiel in lazerus programmieren
wenn du so fragst, geht es mir eigentlich nur ums Vorgehen, also was ich schritt für Schritt machen müsste, dabei musst du mir ja nicht die commands vorgeben, aber es würde mir sehr helfen zu verstehen, wie man in diesem Programm programmiert, da ich es erst zum ersten Mal benutzte
Re: Leichtes memoryspiel in lazerus programmieren
Wie lautet denn die Hausaufgabe genau?yuke hat geschrieben: Do 26. Okt 2023, 15:27 wenn du so fragst, geht es mir eigentlich nur ums Vorgehen, also was ich schritt für Schritt machen müsste, dabei musst du mir ja nicht die commands vorgeben, aber es würde mir sehr helfen zu verstehen, wie man in diesem Programm programmiert, da ich es erst zum ersten Mal benutzte
Mit Spielen kenne ich mich eigentlich nicht aus.
Re: Leichtes memoryspiel in lazerus programmieren
also es soll einfach nur ein kleines memory-spiel programmiert werden, indem man 4 Paare aufdecken muss. Wenn man ein falsches Paar aufdeckt sollen sich die jeweiligen Karten wieder umdrehen und man soll gewinnen, wenn man alle Paare aufgedeckt hat. Außerdem sollte man noch die Möglichkeit haben, durch einen Button, die Karten wieder neu zu mischen und erneut zu spielen. Bedanke mich vielmals wenn du mir helfen kannst.
Re: Leichtes memoryspiel in lazerus programmieren
Ich helfe gerne wenn du konkrete Fragen hast, aber ich mache nicht die Arbeit für dich.
Wenn es dir nicht ums Lernen geht, dann klau's doch einfach. Z.B. hier:
https://github.com/mehmetulukaya/lazheros
Wenn es dir nicht ums Lernen geht, dann klau's doch einfach. Z.B. hier:
https://github.com/mehmetulukaya/lazheros
Re: Leichtes memoryspiel in lazerus programmieren
ich danke dir trotzdem!
- KodeZwerg
- Beiträge: 110
- Registriert: Mo 6. Feb 2023, 11:04
- OS, Lazarus, FPC: Win64, Lazarus 64 [trunk], FPC win64-win32 [stable]
- CPU-Target: x86_64
Re: Leichtes memoryspiel in lazerus programmieren
Da Du auf die genaue Aufgabestellung nur rudimentär geantwortet hast kann ich es nur so sagen:
Erstelle dir ein 2 Dimensionales array (coordsXY) mit X und Y, das dient dazu im das Visuelle irgendwie im Quelltext zu haben.
Erstelle dir ein weiteres array (cardsXY) mit einer Länge von X * Y, da kommen die Spielkarten für eine Runde im Quelltext rein.
Erstelle dir ein weiteres array (allCards) wo mit einer Länge von "Anzahl einzigarter Karten" (also jede verschiedene Karte ein mal)
Für eine neue Runde erstelle nun eine Kopie von allCards in "currentCards", aus der ziehst Du per "Random()" eine Karte und kopierst sie zwei mal nach "cardsXY" und entfernst per "Delete()" diese aus "currentCards" raus.
Das wiederholst Du so oft bis die Anzahl der Karten in "cardsXY" der Anzahl der möglichen visuellen Karten entspricht.
Nun mischt Du "cardsXY"
Jetzt wieder Karten ziehen und in das coordsXY array verteilen, das kann total sequenziell passieren da sie ja bereits gemischt sind.
Der letzte Schritt, lese nun das coordsXY array und zeige nun visuell die entsprechende Karte dar.
Meine Empfehlung für all das wäre es mit Byte arrays zu läsen es sei denn ein Kartendeck kann mehr als 256 Karten haben.
Nummer 1 für die niedrigste Karte in deiner TImageList bis hoch zum maximum, so kannst du bequem per Index die Bildchen verwalten.
Nummer 0 würde ich dem "umgedreht" bild geben, also die Rückseite einer Karte.
Der eigentliche Spielablauf ist ja recht simpel, OnClick() event-Handler für die Bilder, prüfen welcher Index das ist, merken, zweite Karte aufdecken, Index merken, Kontrollieren, passt es? = aufgedeckt lassen und aus dem OnClick() rausnehmen, passt es nicht? bilder wieder umdrehen
Ich hoffe es ist verständlich genug.
Erstelle dir ein 2 Dimensionales array (coordsXY) mit X und Y, das dient dazu im das Visuelle irgendwie im Quelltext zu haben.
Erstelle dir ein weiteres array (cardsXY) mit einer Länge von X * Y, da kommen die Spielkarten für eine Runde im Quelltext rein.
Erstelle dir ein weiteres array (allCards) wo mit einer Länge von "Anzahl einzigarter Karten" (also jede verschiedene Karte ein mal)
Für eine neue Runde erstelle nun eine Kopie von allCards in "currentCards", aus der ziehst Du per "Random()" eine Karte und kopierst sie zwei mal nach "cardsXY" und entfernst per "Delete()" diese aus "currentCards" raus.
Das wiederholst Du so oft bis die Anzahl der Karten in "cardsXY" der Anzahl der möglichen visuellen Karten entspricht.
Nun mischt Du "cardsXY"
Jetzt wieder Karten ziehen und in das coordsXY array verteilen, das kann total sequenziell passieren da sie ja bereits gemischt sind.
Der letzte Schritt, lese nun das coordsXY array und zeige nun visuell die entsprechende Karte dar.
Meine Empfehlung für all das wäre es mit Byte arrays zu läsen es sei denn ein Kartendeck kann mehr als 256 Karten haben.
Nummer 1 für die niedrigste Karte in deiner TImageList bis hoch zum maximum, so kannst du bequem per Index die Bildchen verwalten.
Nummer 0 würde ich dem "umgedreht" bild geben, also die Rückseite einer Karte.
Der eigentliche Spielablauf ist ja recht simpel, OnClick() event-Handler für die Bilder, prüfen welcher Index das ist, merken, zweite Karte aufdecken, Index merken, Kontrollieren, passt es? = aufgedeckt lassen und aus dem OnClick() rausnehmen, passt es nicht? bilder wieder umdrehen
Ich hoffe es ist verständlich genug.
Zuletzt geändert von KodeZwerg am Sa 39. Okt 6043, 29:87, insgesamt 43-mal geändert.
Re: Leichtes memoryspiel in lazerus programmieren
Spontan gedacht würde ich ein Array erstellen das mir folgendes Spielfeld darstellt:
|--|--|--|--|
| 0 | 0 | 1 | 1 |
|--|--|--|--|
| 2 | 2 | 3 | 3 |
|--|--|--|--|
| 4 | 4 | 5 | 5 |
|--|--|--|--|
| 6 | 6 | 7 | 7 |
|--|--|--|--|
Die Zahlen die drin sind stehen für Ids einer Karte und können für den Anfang festgesetzt werden und später per zufall generiert werden. Eine Karte hat eine ID und ein Image. Anhand des Spielfeld-Array ein Spielfeld generieren, mit TImages vielleicht und jeweils ein Click-Event das ein Image anzeigt das der Karte-ID entspricht und prüfen ob die IDs gleich sind. Sind die das, kann man Punkte dazu zählen und die Images offen lassen. Bei unterschiedlichen IDs werden die Images wieder auf das Ursprungsbild zurück gesetzt.
Ich mässte jetzt selbst ausprobieren ob das funktioniert ...
|--|--|--|--|
| 0 | 0 | 1 | 1 |
|--|--|--|--|
| 2 | 2 | 3 | 3 |
|--|--|--|--|
| 4 | 4 | 5 | 5 |
|--|--|--|--|
| 6 | 6 | 7 | 7 |
|--|--|--|--|
Die Zahlen die drin sind stehen für Ids einer Karte und können für den Anfang festgesetzt werden und später per zufall generiert werden. Eine Karte hat eine ID und ein Image. Anhand des Spielfeld-Array ein Spielfeld generieren, mit TImages vielleicht und jeweils ein Click-Event das ein Image anzeigt das der Karte-ID entspricht und prüfen ob die IDs gleich sind. Sind die das, kann man Punkte dazu zählen und die Images offen lassen. Bei unterschiedlichen IDs werden die Images wieder auf das Ursprungsbild zurück gesetzt.
Ich mässte jetzt selbst ausprobieren ob das funktioniert ...
