AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Dame Spiel programmieren

Ein Thema von Rank · begonnen am 14. Feb 2007 · letzter Beitrag vom 26. Mär 2007
Antwort Antwort
Seite 2 von 3     12 3      
Benutzerbild von MrSpock
MrSpock
(Co-Admin)

Registriert seit: 7. Jun 2002
Ort: Owingen
5.865 Beiträge
 
Delphi 2010 Professional
 
#11

Re: Dame Spiel programmieren

  Alt 26. Feb 2007, 11:32
Hallo Rank,

die Aussage, dass es nur mit OOP geht ist nur in soweit richtig, dass du mit der VCL natürlich Objekte benutzt. Die Programmlogik muss jedoch nicht unbedingt mit OOP umgesetzt werden, wenn ihr das so im Detail noch nicht hattet. Du kannst auch 64 Panels benutzen, wenn du das möchtest. Auch die Bewegung könntest du über Panels darstellen, in dem du ein 65. Panel von dem Ursprungsort zum Zielort bewegst. Ob das gut aussieht ist eine andere Frage, aber funktionieren würde das.

Hab dir einfach mal ein kleines Programm angehängt, das zeigt, wie sich ein Panel über andere Panels bewegt, nur damit du siehst. Es geht!
Angehängte Dateien
Dateityp: zip project1_674.zip (207,8 KB, 39x aufgerufen)
Albert
Live long and prosper


MrSpock
  Mit Zitat antworten Zitat
Rank

Registriert seit: 14. Feb 2007
8 Beiträge
 
#12

Re: Dame Spiel programmieren

  Alt 28. Feb 2007, 12:52
vielen vielen dank für eure unterstützung. ich werde jetzt versuchen eure tipps umzusetzen.
falls ich noch weitere fragen habe, hoffe ich das ihr weiterhin ein ohr für mich habt.
also danke danke für eure tipps.
MFG Christoph
  Mit Zitat antworten Zitat
Rank

Registriert seit: 14. Feb 2007
8 Beiträge
 
#13

Re: Dame Spiel programmieren

  Alt 28. Feb 2007, 13:50
ich und meine partnerin kommen mit unserem spielfeld was wir zu beginn gewählt haben nicht ganz zurecht. wir stellen jetzt das programm mal mit rein. vielleicht könnt ihr ja wenn ihr mal drüber schaut etwas finden, was den umgang vereinfacht oder wo unser problem mit den steinen liegt denn ihr habt ja am anfang geschrieben, dass die variante mit den panels nicht so günstig ist. vielleicht findet ihr ja einen neuen ansatz
danke wäre echt super
mfg christoph
Angehängte Dateien
Dateityp: zip dame_878.zip (216,5 KB, 33x aufgerufen)
Dateityp: exe project1_125.exe (400,0 KB, 50x aufgerufen)
  Mit Zitat antworten Zitat
Cöster

Registriert seit: 6. Jun 2006
589 Beiträge
 
Turbo Delphi für Win32
 
#14

Re: Dame Spiel programmieren

  Alt 28. Feb 2007, 15:08
Was genau ist jetzt euer Problem? Wollt ihr allgemeine Tipps haben, wie ihr euren Quelltext vereinfachen könnt? Oder wie man's ohne 65 Panels und ohne 68 PaintBoxen macht?

Der Code ließe sich unglaublich vereinfachen und verkürzen, wenn ihr nur eine PaintBox benutzt. Diese hätte dann die Größe des gesamten Spielfeldes. Die 64 Felder und die Spielsteine können dann über (verschachtelte) For-Schleifen per Delphi-Referenz durchsuchenBitBlt auf diese gezeichnet werden. Die 70 Zeilen lange Button2Click-Prozedur könnte so auf ca. ein 10tel reduziert werden.
Außerdem wären eindeutigere Bezeichner nicht schlecht. Kein Mensch weiß, wo Panel49 liegt. Was Button2 ist lässt sich auch erst erahnen, wenn man sich die Implementierung seines OnClick-Ereignisses ansieht.
  Mit Zitat antworten Zitat
Mr. Pink

Registriert seit: 29. Jan 2006
72 Beiträge
 
#15

Re: Dame Spiel programmieren

  Alt 28. Feb 2007, 18:36
hallo, ich bin ebenfalls grade dabei ein spiel zu programmieren (hex), bzw. bin so gut wie fertig, habe das allerdings nicht oop gemacht, weil cih auch nicht wüsste was mir das für vorteile bringen sollte. wo z.b. spart man denn enorm viel arbeit beim adme-spiel, wenn man oop verwendet, anstatt das alles in viele proceduren/functionen von form1 aufzuteieln, also nur eine klasse zu verwenden? ist jetzt mal interessantshalber, habe das nämlich nicht mit oop gemacht, weil ich damit nicht so gut klarkomme und es so sehr viel einfacher und sogar kürzer finde.
  Mit Zitat antworten Zitat
Benutzerbild von Alexander Roth
Alexander Roth

Registriert seit: 17. Mai 2004
Ort: Kenn
574 Beiträge
 
Turbo Delphi für Win32
 
#16

Re: Dame Spiel programmieren

  Alt 28. Feb 2007, 18:57
hi,

also ich glaube die eleganz von OOP wird hier ein bisschen unterschätzt.
Denn gerade größere Spiele sind ohne OOP unmöglich und auch nur eine simple Erwiterung eines vorhandenen Spiels wie Dame ist mit OOp viel einfacher.
Doch wenn natürlich Rank kein OOP beherrscht, finde ich Cöster's Methode noch die Beste. Da es graphisch wohl am schnellsten gehen sollte.

Gruß Alexander
Alexander Roth
Ich bin umgestiegen auf: Lazarus und Ubuntu! Alles OpenSource!

Besuch doch mal: www.roth.us.ms
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#17

Re: Dame Spiel programmieren

  Alt 1. Mär 2007, 12:54
Also hier das Kochrezept:
man nehme ein TDrawGrid mit:
ColCount = 9
RowCount = 9
DefaultColWidth = 34
DefaultRowHeight = 34
Dann eine TImagelist auf das Formular mit Height und Width auf 32 setzen.
Dann diverse schwarze und weisse Spielfigueren in die Imageliste einfügen.
PS: falls jemand alle Schachfiguren in Schwarz und Weiss als 32*32 Bitmap hat, dann her damit.

Sodann diesen Code einbasteln:
Delphi-Quellcode:
type
  TForm1 = class(TForm)
    DrawGrid1: TDrawGrid;
    ImageList1: TImageList;
    Button1: TButton;
    procedure DrawGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
      Rect: TRect; State: TGridDrawState);
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

type
   TChessField = array[1..8, 1..8] of Smallint;
var
   chessField : TChessField;

implementation

{$R *.DFM}


procedure TForm1.DrawGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
var
   figur : Smallint;
   bkcolor : TColor;
begin
   if ACol = 0 then
   begin
      // Beschriftung vertikal
      if ARow <> 0 then
         DrawGrid1.Canvas.TextRect(Rect, Rect.Left+2, Rect.Top+2, IntToStr(ARow));
   end
   else if ARow = 0 then
   begin
      // Beschriftung horizontal
      DrawGrid1.Canvas.TextRect(Rect, Rect.Left+2, Rect.Top+2, chr(Ord('A')+ACol-1));
   end
   else
   begin
      // "eigentliches" Schachbrett

      // Hintergrund Farbe ermitteln
      if Odd(ACol+ARow) then
         bkcolor := clLime
      else
         bkcolor := clWhite;

      // Hintergrund zeichnen
      DrawGrid1.Canvas.brush.Color := bkcolor;
      DrawGrid1.Canvas.FillRect(rect);

      // Spielfigur zeichen
      figur := chessField[ACol, ARow];
      ImageList1.Draw(DrawGrid1.Canvas, Rect.Left, Rect.Top, figur);
   end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
   chessField[4,3] := 1;
   chessField[3,4] := 2;
   chessField[5,4] := 3;
   DrawGrid1.Invalidate;
end;

end.
Andreas
  Mit Zitat antworten Zitat
Rank

Registriert seit: 14. Feb 2007
8 Beiträge
 
#18

Re: Dame Spiel programmieren

  Alt 5. Mär 2007, 11:15
hallo und danke noch mal für die tips!
Mr. Pink wir haben mal eine bitte! wäre es vielleicht möglich das du uns das programm mal schickst? das problem ist nämlich, dass wir nur noch3 wochen zeit haben und dieses spiel die gesamtnote für dieses halbjahr ausmacht und wir nicht weiter kommen. es wäre uns eine echte hilfe.
MFG Christoph
  Mit Zitat antworten Zitat
Rank

Registriert seit: 14. Feb 2007
8 Beiträge
 
#19

Re: Dame Spiel programmieren

  Alt 19. Mär 2007, 12:13
danke shmia, wir haben dein Programm eingegeben und es funktioniert.
in die Imagelist haben wir scwarze und rote punkte eingesetzt,. welche wir selber im paint gezeichnet haben.
wenn wir nun das programm starten können wir zwar die einzelnen Felder im Drawgrid erfassen, jedoch werden keine punkte gezeichnet. was für einen Fehler haben wir gemacht? wir stellen dir unser Programm mal rein, wäre ganz nett wenn du nochmal einen blick darüber werfen könntest.
MFG Christoph
Angehängte Dateien
Dateityp: zip test4_753.zip (236,4 KB, 17x aufgerufen)
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#20

Re: Dame Spiel programmieren

  Alt 19. Mär 2007, 12:46
Zitat von Rank:
jedoch werden keine punkte gezeichnet
Weil das Event OnDrawCell nicht verbunden ist.
DrawGrid auswählen, im Objektinspektor auf Seite Ereignisse, OnDrawCell auswählen, aufklappen und DrawGrid1DrawCell eintragen.
Andreas
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:21 Uhr.
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