15 Puzzle Programmierung

Vorstellungen von Programmen, welche mit Lazarus erstellt wurden.
mainze
Beiträge: 2
Registriert: So 18. Feb 2024, 13:17

15 Puzzle Programmierung

Beitrag von mainze »

Hallo,

ich suche eine Version von 15 Puzzle in Lazarus (muss nicht eine zu komplizierte Variante sein). Ihr kennt das Spiel sicher. Vielleicht kann mir jemand helfen oder hat so eine Programmierung zur Hand.

Ihr würdet mir sehr helfen.

Gruß, mainze

mainze
Beiträge: 2
Registriert: So 18. Feb 2024, 13:17

Re: 15 Puzzle Programmierung

Beitrag von mainze »

Schreibt mir bitte für Zuarbeiten eine private Nachricht.

Gruß, mainze

Benutzeravatar
theo
Beiträge: 10498
Registriert: Mo 11. Sep 2006, 19:01

Re: 15 Puzzle Programmierung

Beitrag von theo »

Eine PN, damit der Lehrer nichts mitkriegt?
Und wovon träumst du nachts? :lol:

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

Re: 15 Puzzle Programmierung

Beitrag von Mathias »

Und wovon träumst du nachts? :lol:
Von dem 16en Feld das fehlt. :mrgreen:
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Benutzeravatar
Niesi
Lazarusforum e. V.
Beiträge: 337
Registriert: So 26. Jun 2016, 19:44
OS, Lazarus, FPC: Linux Mint Cinnamon (Windows wenn notwendig), Lazarus 3.0 FPC 3.3.1

Re: 15 Puzzle Programmierung

Beitrag von Niesi »

mainze hat geschrieben:
So 18. Feb 2024, 13:25
Hallo,

ich suche eine Version von 15 Puzzle in Lazarus (muss nicht eine zu komplizierte Variante sein). Ihr kennt das Spiel sicher. Vielleicht kann mir jemand helfen oder hat so eine Programmierung zur Hand.

Ihr würdet mir sehr helfen.

Gruß, mainze
Als Tipp: Du wirst nie was wirklich lernen, wenn Du Dir alles machen lässt - und Suchmaschinen können nützlich sein ...
Wissen ist das einzige Gut, das sich vermehrt, wenn es geteilt wird ...

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

Re: 15 Puzzle Programmierung

Beitrag von Mathias »

und Suchmaschinen können nützlich sein ...
Ein bisschen suchen und man wird fündig.

https://wiki.lazarus.freepascal.org/15-puzzle
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Benutzeravatar
Niesi
Lazarusforum e. V.
Beiträge: 337
Registriert: So 26. Jun 2016, 19:44
OS, Lazarus, FPC: Linux Mint Cinnamon (Windows wenn notwendig), Lazarus 3.0 FPC 3.3.1

Re: 15 Puzzle Programmierung

Beitrag von Niesi »

Mathias hat geschrieben:
Mo 19. Feb 2024, 19:09
und Suchmaschinen können nützlich sein ...
Ein bisschen suchen und man wird fündig.

https://wiki.lazarus.freepascal.org/15-puzzle
Ich wollt's nicht soooo einfach machen .. :lol: .

Manche können nicht mal suchen. War schon immer so ...
Wissen ist das einzige Gut, das sich vermehrt, wenn es geteilt wird ...

Benutzeravatar
KodeZwerg
Beiträge: 94
Registriert: Mo 6. Feb 2023, 11:04

Re: 15 Puzzle Programmierung

Beitrag von KodeZwerg »

Von der Sache her finde ich dieses Puzzle spiel ist ein gutes Einsteigerprojekt um den Umgang mit der Programmiersprache zu erlernen.
Ich selbst würde gegenüber dem Wiki Beispiel, was auch sehr einfach ist, ein Bild malen und dem ein Click-Event spendieren.
Per Point kann man auslesen in welchen Bereich man geklickt hat, jetzt nur noch ein 2D array damit assoziieren und schon ist die Logik fertig :-D
Zuletzt geändert von KodeZwerg am Sa 39. Okt 6043, 29:87, insgesamt 43-mal geändert.

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

Re: 15 Puzzle Programmierung

Beitrag von Mathias »

Von der Sache her finde ich dieses Puzzle spiel ist ein gutes Einsteigerprojekt um den Umgang mit der Programmiersprache zu erlernen.
Was man auch noch machen könnte, das die Buttons/Images Pixelweise rutschen. Die Möglichkeiten sind fast Endlos.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Benutzeravatar
Niesi
Lazarusforum e. V.
Beiträge: 337
Registriert: So 26. Jun 2016, 19:44
OS, Lazarus, FPC: Linux Mint Cinnamon (Windows wenn notwendig), Lazarus 3.0 FPC 3.3.1

Re: 15 Puzzle Programmierung

Beitrag von Niesi »

Mathias hat geschrieben:
Di 20. Feb 2024, 15:34
Von der Sache her finde ich dieses Puzzle spiel ist ein gutes Einsteigerprojekt um den Umgang mit der Programmiersprache zu erlernen.
Was man auch noch machen könnte, das die Buttons/Images Pixelweise rutschen. Die Möglichkeiten sind fast Endlos.
Stimmt - allerdings ist dazu Lust am Programmieren und Lernen vonnöten.

Hier wollte doch nur wer seine Hausaufgaben gemacht bekommen ... :mrgreen:
Wissen ist das einzige Gut, das sich vermehrt, wenn es geteilt wird ...

icho2099
Beiträge: 22
Registriert: Fr 21. Feb 2020, 19:17
OS, Lazarus, FPC: Win10/64
CPU-Target: 64 Bit
Wohnort: Osterholz-Scharmbeck

Re: 15 Puzzle Programmierung

Beitrag von icho2099 »

Hier wollte doch nur wer seine Hausaufgaben gemacht bekommen ... :mrgreen:
Vielleicht ging es aber auch um die Ausbildung zur Führungskraft,
da geht es nicht um selber wissen oder selber verstehen,
da geht es darum es von anderen machen zu lassen.

Joh
Lazarusforum e. V.
Beiträge: 191
Registriert: Sa 26. Mai 2012, 17:31
OS, Lazarus, FPC: Win 10 (L 2.2.6 x64 FPC 3.2.2)
CPU-Target: 64Bit

Re: 15 Puzzle Programmierung

Beitrag von Joh »

icho2099 hat geschrieben:
Do 22. Feb 2024, 09:59
Vielleicht ging es aber auch um die Ausbildung zur Führungskraft,
...
da geht es darum es von anderen machen zu lassen.


YMMD
just my two Beer

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2640
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: 15 Puzzle Programmierung

Beitrag von m.fuchs »

icho2099 hat geschrieben:
Do 22. Feb 2024, 09:59
Vielleicht ging es aber auch um die Ausbildung zur Führungskraft,
da geht es nicht um selber wissen oder selber verstehen,
da geht es darum es von anderen machen zu lassen.
Dann vermitteln wir an dieser Stelle gleich mal den ersten Grundsatz: "Wenn man es nicht selber kann und es dringend braucht, dann muss man ordentlich zahlen."
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

kirchfritz
Beiträge: 172
Registriert: Mo 3. Jan 2011, 13:34
OS, Lazarus, FPC: Win10 (L 3.0 FPC 3.2.2)
CPU-Target: 64Bit
Wohnort: Nürnberg

Re: 15 Puzzle Programmierung

Beitrag von kirchfritz »

Immerhin liefert ChatGPT folgende Lösung für die Aufgabenstellung "program a 15-puzzle in Lazarus"

Certainly! The 15-puzzle is a classic sliding puzzle that involves arranging 15 numbered tiles in a 4x4 grid with one empty space.
Here is a simple console-based implementation in Lazarus (Free Pascal):

Code: Alles auswählen

program FifteenPuzzle;

{$mode objfpc}{$H+}

uses
  SysUtils, Crt;

const
  Size = 4;

type
  TGameBoard = array[1..Size, 1..Size] of Integer;

var
  Board: TGameBoard;

procedure InitializeBoard;
var
  i, j, k: Integer;
begin
  k := 1;
  for i := 1 to Size do
    for j := 1 to Size do
    begin
      if k < Size * Size then
        Board[i, j] := k
      else
        Board[i, j] := 0; // Empty space
      Inc(k);
    end;
end;

procedure DisplayBoard;
var
  i, j: Integer;
begin
  WriteLn('---------------------');
  for i := 1 to Size do
  begin
    for j := 1 to Size do
    begin
      if Board[i, j] = 0 then
        Write('|  ')
      else
        WriteFormat('| %2d ', [Board[i, j]]);
    end;
    WriteLn('|');
    WriteLn('---------------------');
  end;
end;

procedure ShuffleBoard;
var
  i, j, k, randI, randJ: Integer;
begin
  Randomize;
  for k := 1 to 1000 do // Shuffle 1000 times
  begin
    repeat
      randI := Random(Size) + 1;
      randJ := Random(Size) + 1;
    until Board[randI, randJ] <> 0;
    
    // Swap the empty space with a random neighboring tile
    if (randI > 1) and (Board[randI - 1, randJ] = 0) then
    begin
      Board[randI - 1, randJ] := Board[randI, randJ];
      Board[randI, randJ] := 0;
    end
    else if (randI < Size) and (Board[randI + 1, randJ] = 0) then
    begin
      Board[randI + 1, randJ] := Board[randI, randJ];
      Board[randI, randJ] := 0;
    end
    else if (randJ > 1) and (Board[randI, randJ - 1] = 0) then
    begin
      Board[randI, randJ - 1] := Board[randI, randJ];
      Board[randI, randJ] := 0;
    end
    else if (randJ < Size) and (Board[randI, randJ + 1] = 0) then
    begin
      Board[randI, randJ + 1] := Board[randI, randJ];
      Board[randI, randJ] := 0;
    end;
  end;
end;

procedure PlayGame;
var
  move: Char;
  emptyI, emptyJ: Integer;
begin
  repeat
    ClrScr;
    DisplayBoard;
    WriteLn('Use WASD to move tiles, Q to quit.');
    Write('Your move: ');
    move := UpCase(ReadKey);
    emptyI := 0;
    emptyJ := 0;

    // Find the empty space coordinates
    for emptyI := 1 to Size do
      for emptyJ := 1 to Size do
        if Board[emptyI, emptyJ] = 0 then
          break;

    // Move tile based on user input
    case move of
      'W': if emptyI < Size then
            begin
              Board[emptyI, emptyJ] := Board[emptyI + 1, emptyJ];
              Board[emptyI + 1, emptyJ] := 0;
            end;
      'S': if emptyI > 1 then
            begin
              Board[emptyI, emptyJ] := Board[emptyI - 1, emptyJ];
              Board[emptyI - 1, emptyJ] := 0;
            end;
      'A': if emptyJ < Size then
            begin
              Board[emptyI, emptyJ] := Board[emptyI, emptyJ + 1];
              Board[emptyI, emptyJ + 1] := 0;
            end;
      'D': if emptyJ > 1 then
            begin
              Board[emptyI, emptyJ] := Board[emptyI, emptyJ - 1];
              Board[emptyI, emptyJ - 1] := 0;
            end;
    end;

  until (move = 'Q') or CheckWinCondition;
end;

function CheckWinCondition: Boolean;
var
  i, j, k: Integer;
begin
  k := 1;
  for i := 1 to Size do
    for j := 1 to Size do
    begin
      if k < Size * Size then
      begin
        if Board[i, j] <> k then
          Exit(False);
      end
      else if Board[i, j] <> 0 then
        Exit(False);
      Inc(k);
    end;

  DisplayBoard;
  WriteLn('Congratulations! You solved the puzzle!');
  Result := True;
end;

begin
  InitializeBoard;
  ShuffleBoard;
  PlayGame;
end.

This program initializes the 15-puzzle, shuffles it, and allows the user to solve it by making moves using the WASD keys (W - Up, A - Left, S - Down, D - Right). The game continues until the user enters 'Q' to quit or successfully solves the puzzle.

Ob die Lösung von ChatGPT kompilierbar ist und die Fragestellung des "Lehrers" beantwortet, überlasse ich dem ursprünglichen Fragesteller.
Schon der Versuch, die ChatGPT-Lösung zu verstehen, würde den Fragesteller ein Level nach oben katapultieren auf seinem Weg zum Programmierer-Olymp.
Und damit man mich nicht falsch versteht: Ich halte nichts von ChatGPT-Lösungen, weil sie in den meisten Fällen nicht kompilierbar sind oder schlichtweg "gelogen" sind.
Ich halte auch nichts davon, wenn Schüler nach Lösungen für Ihre Informatik-Unterricht Hausaufgaben dieses Forum befragen, ohne vorher ihre eigenen Programmierversuche zu offenbaren.
Aber ChatGPT heutzutage ersetzt das google von gestern. Da muss man halt damit klar kommen.
Als Lehrer würde ich mir vom Schüler seine Lösung erklären lassen und dabei sehr schnell merken, ob die Lösung vom Schüler verstanden wurde, oder nur ein Nachplappern einer ChatGPT-Lösung ist.

Benutzeravatar
Niesi
Lazarusforum e. V.
Beiträge: 337
Registriert: So 26. Jun 2016, 19:44
OS, Lazarus, FPC: Linux Mint Cinnamon (Windows wenn notwendig), Lazarus 3.0 FPC 3.3.1

Re: 15 Puzzle Programmierung

Beitrag von Niesi »

Bislang habe ich an die 12 Versuche unternommen, von einer AI was programmiert zu bekommen. Manche Sachen waren durchaus einfach. Es ist aber noch nie was sinnvolles dabei herausgekommen.

Ich habe die Dinger NICHT korrigiert, nicht weiter nachgefragt und keinerlei Rückmeldung gegeben - das wäre dann ja Training für die AI. Das möchte ich dann sehr gut bezahlt bekommen.

AI wird absolut überschätzt, und ich glaube, wer von einer AI etwas programmiertes geliefert bekommt, was selbst nicht deutlich besser hinzubekommen wäre, sollte das Programmieren sein lassen ...
Wissen ist das einzige Gut, das sich vermehrt, wenn es geteilt wird ...

Antworten