Delphi-PRAXiS
Seite 7 von 7   « Erste     567   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Lazarus (IDE) (https://www.delphipraxis.net/81-lazarus-ide/)
-   -   Eine Projektarbeit (https://www.delphipraxis.net/182706-eine-projektarbeit.html)

Der schöne Günther 6. Mär 2015 09:53

AW: Eine Projektarbeit
 
Lasst doch den armen Kerl in Ruhe :cry:

Luckie 6. Mär 2015 22:08

AW: Eine Projektarbeit
 
Wie viele unterschiedliche Probleme werden hier eigentlich gerade in diesem einen Thread behandelt? Ich habe etwas den Überblick verloren.

Perlsau 7. Mär 2015 07:11

AW: Eine Projektarbeit
 
Zitat:

Zitat von Luckie (Beitrag 1292665)
Wie viele unterschiedliche Probleme werden hier eigentlich gerade in diesem einen Thread behandelt? Ich habe etwas den Überblick verloren.

Na alle Probleme, die beim Erstellen einer Projektarbeit aufkommen können, denke ich mal, inklusive der Projekarbeit selber, die bislang aber noch kein User hier zum Download bereitgestellt hat. Vielleicht erbarmt sich ja noch einer :duck:

Felix Stein 12. Mär 2015 14:37

AW: Eine Projektarbeit
 
ehm ich habe mir das jetzt einfach mal nicht alles durch gelesen xD. Um den im Moment offensichtlich gereizten Beitragsuser ein wenig zu beruhigen ich lade dem nächst einfach mal unsere beiden Programme hoch dann dürft ihr kritik äußern und feinarbeit leisten ^^ wenn ihr wollt. Das Rätsel um unser schweigen ist indess ziemlich simpel um die Projektarbeit zu schaffen und vor allem selber zu verstehen habe ich angefangen info Nachhilfe zu nehmen (ich ist in dem Fall Felix). Die Programme laufen zwar noch nicht aber den bisherigen aufbau habe ich verstanden (sind jetzt bei der Siegesbedingung) trotzdem danke ich noch mal allen die sich zuvor so rege am threat beteiligt haben :)

Felix Stein 16. Mär 2015 09:20

AW: Eine Projektarbeit
 
Liste der Anhänge anzeigen (Anzahl: 1)
angehangene Datei enthält Lazarus Programm für Tic Tac toe.

Achtung das spiel ist unfertig und wird euch eine Fehlermeldung bei der Prozedur "Victory" ausspucken der Rest ist korrekt. Wer das was vom Spiel fertig ist also betrachten möchte muss einfach die // vor die Prozedur machen und kann sehen wie weit ich bin. Victory ist das einzige was soweit noch fehlt also die Siegesbedingung die steht noch im Pseudocode. Hoffe jetzt habe ich alle Infos gegeben. Knobel im Moment an der Siegesbedingung habe am Donnerstag wieder Nachhilfe würde aber gerne auch sofort weiter machen^^ Problem mir fehlt die Sprachkenntnis für die Siegesbedingung von TTT

Sherlock 16. Mär 2015 11:06

AW: Eine Projektarbeit
 
Das mit der Siegbedingung ist ja eh egal, da es bei ernsthaften TTT-Runden nie zu einem Gewinner kommen wird ;)

Sherlock

Dejan Vu 16. Mär 2015 11:53

AW: Eine Projektarbeit
 
Dabei geht es in der Spieleprogrammierung nicht. Man kann anhand von TTT aber die Basistechniken der Nullsummenspielemitvollständigerinformationprogram mierung sehr gut lernen.

Ein anderes gutes und einfaches Spiel ist das Bauernspiel, bei dem auf einem NxN brett jeweils N Bauern plaziert werden. Es gibt nur zwei Züge: Ein Feld nach vorne und ein Feld schräg nach vorne zum Schlagen (wenn da einer ist). Gewonnen hat der, der zuerst einen Bauern an die gegnerische Grundlinie bringt.

Obersimpel, langweilig, aber hervorragend geeignet, um selbstlernende, genetische Programme zu schreiben, mit Spielbaum, Minimax und allem, was dazugehört.

BadenPower 16. Mär 2015 14:26

AW: Eine Projektarbeit
 
Du solltest in Zeile 37 die Procedure "Update" umbenennen, da sie nicht im geringsten etwas mit der Procedure "Update" zu tun hat, welche in der Klasse TForm deklariert ist.

Der Compiler gibt Dir auch die entsprechende Warnung aus:
Code:
unit1.pas(37,15) Warning: An inherited method is hidden by "TForm1.Update(LongInt,LongInt,TImage);"

BadenPower 16. Mär 2015 15:03

AW: Eine Projektarbeit
 
noch eine Kleinigkeit:
Delphi-Quellcode:
    for i:= 0 to 2 do begin
        for j:= 0 to 2 do begin
            Feld[x,y]:=0; // Hier ???
        end;
    end;
Was soll denn in der Button1Click-Procedure an der markierten Stelle geschehen, ausser dass das Feld[0,0] jedesmal 0 zugewiesen bekommt???

BadenPower 16. Mär 2015 15:57

AW: Eine Projektarbeit
 
Zitat:

Zitat von Felix Stein (Beitrag 1293575)
Problem mir fehlt die Sprachkenntnis für die Siegesbedingung von TTT

Du muss ja lediglich die Zeilen und Spalten auf welche geklickt wurde, prüfen, ob dort im Array die gleichen Werte stehen. Die Diagonalen nicht vergessen, wenn es notwendig ist.

Wenn man Eueren bisherigen Quellcode einmal zugrundelegt, dann könnte dies so aussehen:
Delphi-Quellcode:
unit Unit1;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,
  ExtCtrls;

type

  { TForm1 }

  TForm1 = class(TForm)
    Button1: TButton;
    Image1: TImage;
    Image2: TImage;
    Image3: TImage;
    Image4: TImage;
    Image5: TImage;
    Image6: TImage;
    Image7: TImage;
    Image8: TImage;
    Image9: TImage;
    Label1: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure Image1Click(Sender: TObject);
    procedure Image2Click(Sender: TObject);
    procedure Image3Click(Sender: TObject);
    procedure Image4Click(Sender: TObject);
    procedure Image5Click(Sender: TObject);
    procedure Image6Click(Sender: TObject);
    procedure Image7Click(Sender: TObject);
    procedure Image8Click(Sender: TObject);
    procedure Image9Click(Sender: TObject);
  private
    { private declarations }
    FSpielerX: Boolean;
    Feld: Array[0..2,0..2] of Variant;
    procedure UpdateFeld(AX,AY: Integer; AImage: TImage);
    function CheckVictory(AX,AY: Integer; ASpieler: Boolean): Boolean;
  public
    { public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.lfm}

{ TForm1 }

procedure TForm1.Button1Click(Sender: TObject);
var
  I,J: Integer;
begin
    Image1.Enabled := true;
    Image2.Enabled := true;
    Image3.Enabled := true;
    Image4.Enabled := true;
    Image5.Enabled := true;
    Image6.Enabled := true;
    Image7.Enabled := true;
    Image8.Enabled := true;
    Image9.Enabled := true;
    FSpielerX := true;

    for I:= 0 to 2 do begin
        for j:= 0 to 2 do begin
            Feld[I,J] := nil;
        end;
    end;
end;

procedure TForm1.Image1Click(Sender: TObject);
begin
  UpdateFeld(0,0,Image1);
end;

procedure TForm1.Image2Click(Sender: TObject);
begin
 UpdateFeld(1,0,Image2);
end;

procedure TForm1.Image3Click(Sender: TObject);
begin
 UpdateFeld(2,0,Image3);
end;

procedure TForm1.Image4Click(Sender: TObject);
begin
  UpdateFeld(0,1,Image4);
end;

procedure TForm1.Image5Click(Sender: TObject);
begin
  UpdateFeld(1,1,Image5);
end;

procedure TForm1.Image6Click(Sender: TObject);
begin
  UpdateFeld(2,1,Image6);
end;

procedure TForm1.Image7Click(Sender: TObject);
begin
  UpdateFeld(0,2,Image7);
end;

procedure TForm1.Image8Click(Sender: TObject);
begin
  UpdateFeld(1,2,Image8);
end;

procedure TForm1.Image9Click(Sender: TObject);
begin
  UpdateFeld(2,2,Image9);
end;


procedure TForm1.UpdateFeld(AX,AY: Integer; AImage: TImage);
begin
  if (Feld[AX,AY] = nil) then
   begin
    Feld[AX,AY] := FSpielerX;
    if (FSpielerX) then
     begin
      AImage.Picture.Loadfromfile('Unbenannt1.png');
     end
    else
     begin
      AImage.Picture.Loadfromfile('Unbenannt111.png');
     end;

    if (CheckVictory(AX,AY,FSpielerX)) then
     begin
      Label1.Caption := 'Gewonnen';
      //Victory();
     end;

    FSpielerX := not FSpielerX;
   end;
end;

function TForm1.CheckVictory(AX,AY: Integer; ASpieler: Boolean): Boolean;
begin
  Result := false;
  if (    ((Feld[AX,0] = ASpieler) and (Feld[AX,1] = ASpieler) and (Feld[AX,2] = ASpieler))
       or ((Feld[0,AY] = ASpieler) and (Feld[1,AY] = ASpieler) and (Feld[2,AY] = ASpieler))
     ) then
   begin
    Result := true;
   end;

  if (     (not Result)
       and (    ((AX = 0) and (AY = 0))
             or ((AX = 1) and (AY = 1))
             or ((AX = 2) and (AY = 2))
           )
     ) then
   begin
    if ((Feld[0,0] = ASpieler) and (Feld[1,1] = ASpieler) and (Feld[2,2] = ASpieler)) then
     begin
      Result := true;
     end;
   end;

  if (     (not Result)
       and (    ((AX = 2) and (AY = 0))
             or ((AX = 1) and (AY = 1))
             or ((AX = 0) and (AY = 2))
           )
     ) then
   begin
    if ((Feld[2,0] = ASpieler) and (Feld[1,1] = ASpieler) and (Feld[0,2] = ASpieler)) then
     begin
      Result := true;
     end;
   end;

end;

end.
Ein paar Kleinigkeiten zu Orignal habe ich auch mal geändert.


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:14 Uhr.
Seite 7 von 7   « Erste     567   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz