![]() |
Re: Mesch Ärgere dich nicht
Man könnte jedes aktuelle Spiel auch in Delphi schreiben, sofern es von Delphi erzeugt werden kann (kein DOS, kein 64bit...).
Ich würde sogar behaupten, dass Crysis auch in Delphi hätte funktioniert. :firejump: |
Re: Mesch Ärgere dich nicht
Hallo, ich bin Abiturient und besuche dort auch mein Fach Informatik... nun ist es so, dass es nicht wirklich anspruchsvoll ist für mich und einem Freund und haben uns so ein Projekt vorgenommen: "Mensch ärgere Dich Nicht!"
Als erstes haben wir alles in verschiedene Parts geteilt... einmal der Würfel (Random verfahren), Spieler Array (1- max.4) und den schwersten teil das bewegen der Figuren über die "Spielfläche" folgende Var's sind deklariert:
Delphi-Quellcode:
Erst einmal folgender Code (Randomverfahren)
var
Form1: TForm1; // Positionen posX, posY: array [0..99] of integer; // player1-4 = Zahlen bis max. 43 p1,p2,p3,p4, player, Auge, cubes, i: integer;
Delphi-Quellcode:
Nun kommt die Prozedur vom Button (Würfeln)Click
Function Wurf: integer;
begin randomize; result := (random(6)+1); end;
Delphi-Quellcode:
Zu Beachten ist das z.B. s1f1 oder s2f4 die kürzel für "Spieler 1 Figur 1" oder Spieler 2 Figur 4" sind und nun kann man sehen das ich ausschließlich mit Image's gearbeitet habe...
procedure TForm1.btn_wuerfelClick(Sender: TObject);
begin player := player+1; // Postion LEFT posx[00] := 192; posx[01] := 248; posx[02] := 304; posx[03] := 360; posx[04] := 416; posx[05] := 440; posx[06] := 440; posx[07] := 440; posx[08] := 440; posx[09] := 496; posx[10] := 552; posx[11] := 552; posx[12] := 552; posx[13] := 552; posx[14] := 576; posx[15] := 632; posx[16] := 688; posx[17] := 744; posx[18] := 800; posx[19] := 800; posx[20] := 800; posx[21] := 744; posx[22] := 688; posx[23] := 632; posx[24] := 576; posx[25] := 552; posx[26] := 552; posx[27] := 552; posx[28] := 552; posx[29] := 496; posx[30] := 440; posx[31] := 440; posx[32] := 440; posx[33] := 440; posx[34] := 416; posx[35] := 360; posx[36] := 304; posx[37] := 248; posx[38] := 192; posx[39] := 192; posx[40] := 248; // Player 1 Haus Feld 1 posx[41] := 304; // Player 1 Haus Feld 2 posx[42] := 360; // Player 1 Haus Feld 3 posx[43] := 416; // Player 1 Haus Feld 4 // Position TOP posy[00] := 272; posy[01] := 272; posy[02] := 272; posy[03] := 272; posy[04] := 248; posy[05] := 192; posy[06] := 136; posy[07] := 080; posy[08] := 024; posy[09] := 024; posy[10] := 024; posy[11] := 080; posy[12] := 136; posy[13] := 192; posy[14] := 248; posy[15] := 280; posy[16] := 280; posy[17] := 280; posy[18] := 280; posy[19] := 336; posy[20] := 392; posy[21] := 392; posy[22] := 392; posy[23] := 392; posy[24] := 416; posy[25] := 472; posy[26] := 528; posy[27] := 584; posy[28] := 640; posy[29] := 640; posy[30] := 640; posy[31] := 584; posy[32] := 528; posy[33] := 472; posy[34] := 418; posy[35] := 384; posy[36] := 384; posy[37] := 384; posy[38] := 384; posy[39] := 328; posy[40] := 328; // Player 1 Haus Feld 1 posy[41] := 328; // Player 1 Haus Feld 2 posy[42] := 328; // Player 1 Haus Feld 3 posy[43] := 328; // Player 1 Haus Feld 4 // Mache Würfel Images Unsichtbar cube_1.Visible := false; cube_2.Visible := false; cube_3.Visible := false; cube_4.Visible := false; cube_5.Visible := false; cube_6.Visible := false; // In die Funktion Wurf mit ausgangswert 0 setzen statusbar.SimpleText := IntToStr(Wurf()); Auge := StrToInt(statusbar.SimpleText); cubes := StrToInt(statusbar.SimpleText); // Bedingungen für den Wurf deklarieren: case Auge of 0..5: statusbar.SimpleText := statusbar.SimpleText + ' Der nächste Spieler ist an der Reihe!'; 6: statusbar.SimpleText := statusbar.SimpleText + ' Du darfst noch einmal!' end; case cubes of 1: cube_1.Visible := true; 2: cube_2.Visible := true; 3: cube_3.Visible := true; 4: cube_4.Visible := true; 5: cube_5.Visible := true; 6: cube_6.Visible := true; end; //BEDINGUNGEN FÜR SPIELER 1 begin if (p1 < 43) and (player = 1) then begin p1 := p1+wurf; edt_points.text := IntToStr(p1); s1f1.Left := posx[p1]; s1f1.top := posy[p1]; end end; //BEDINGUNGEN FÜR SPIELER 2 begin if (p2 < 43+10) and (player = 2) then begin p2:= p2+Wurf(); edt_points2.text := IntToStr(p2); s2f1.Left := posx[p2+10]; s2f1.top := posy[p2+10]; end end; //BEDINGUNGEN FÜR SPIELER 3 begin if (p3 < 43+20) and (player = 3) then begin p3:= p3+Wurf(); edt_points3.text := IntToStr(p3); s3f1.Left := posx[p3+20]; s3f1.top := posy[p3+20]; end end; //BEDINGUNGEN FÜR SPIELER 4 begin if (p4 < 43+30) and (player = 4) then begin player := 0; // Setze player wieder 0, damit es mit player 1 wieder losgeht. p4:= p4+Wurf(); edt_points4.text := IntToStr(p4); s4f1.Left := posx[p4+30]; s4f1.top := posy[p4+30]; end end; end; auf jeden fall läuft der Spieler 1 Figur 1 sehr gut dem Wege entlang, jedoch habe ich ein Problem mit den anderen Spielern... diese Fangen ja erst bei +10/+20/+30 Feldern an und wissen am ende nicht wohin... Hat eventuell einer eine Idee dieses Problem anders zu lösen ? Kurze Anmerkung noch: Ich habe dieses Spiel soweit nur mit Grundkenntnissen und etwas Internetrecherche (Arrays zb) zusammengestellt, also beklagt Euch bitte nicht über diesen makaberen Quelltext. Bin aber gerne über "Korrekte Schreibweisen" erfreut. Danke im Vorraus. |
Re: Mesch Ärgere dich nicht
Schmeiß die Bedingungen für die Spieler raus und benutze auch noch für allle Player zusammen ein Array:
Delphi-Quellcode:
Für das Speichern der Positionen nimmst Du den Typ TPoint:
p: array [1..4] of Integer;
Delphi-Quellcode:
Zugriff dann so:
Pos: array [0..99] of TPoint;
Delphi-Quellcode:
hier der Code:
Pos[0].X
Pos[0].Y
Delphi-Quellcode:
// aktuelle position
p[player] := p[player] + wurf; if p[player] > 40 then p[player] := p[player] - 40; // anzeigen edt_points.text := IntToStr( p[player] ); // spielfiguren bewegen TImage(FindComponent('s'+IntToStr(player)+'f1') ).Left := Pos[ p[player] ].x; TImage(FindComponent('s'+IntToStr(player)+'f1') ).Top := Pos[ p[player] ].y; end; Jetzt bist Du dran :-) ToDo: - Animieren der Züge - Verbesserung init Andreas |
Re: Mesch Ärgere dich nicht
Ui, noch nicht viel von OOP gehört?
|
Re: Mesch Ärgere dich nicht
Zitat:
|
Re: Mesch Ärgere dich nicht
Blöd ist nur, wie ich das jetz herauslese, dass ich von jedem Spieler eine Figur bewegen kann :) Glücklicherweise gibt es ja 4x4 Figuren unter 4 Spielern unterteilt :)
Aber an sich funktioniert die ganze sache. Danke Dir auch vielmals dafür ! und nein, sry ich habe noch nicht die größte Ehrfahrung von Objekt Orientierte Programmierung gemacht :( aber was meinste warum ich so aus spaß ein MÄDN -Spiel mit eigenen Regeln programmieren möchte ? :P Kurz zurück zu Michael's Gedanken: Zitat:
Delphi-Quellcode:
Also das ich [1..4] für die Figuren nehme und p1 selbst als "Spieler1" z.b.
p1, p2, p3, p4: array [1..4] of Integer;
Als Beispiel dann noch eine "Var player, figure: byte;"
Delphi-Quellcode:
TImage(FindComponent('s'+IntToStr(player)+'f'+IntToStr(figure)) ).Left := Pos[ p2[player] ].x; TImage(FindComponent('s'+IntToStr(player)+'f'+IntToStr(figure)) ).Top := Pos[ p2[player] ].y; |
Re: Mesch Ärgere dich nicht
Liste der Anhänge anzeigen (Anzahl: 1)
ich hab doch tatsächlich mal was gemacht. Is schon ewig her und sicher nicht die beste Lösung, auch nicht in Sachen OOP. Aber es tut :-)
|
Re: Mesch Ärgere dich nicht
Danke dir... damit kann ich es gut nachvollziehen !
|
Re: Mesch Ärgere dich nicht
ich hab auch n mensch ärgere dich nich geschrieben aba ohne arrays...
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:29 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz