AGB  ·  Datenschutz  ·  Impressum  







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

Mesch Ärgere dich nicht

Ein Thema von TeamBob · begonnen am 28. Jan 2008 · letzter Beitrag vom 1. Feb 2010
Antwort Antwort
Seite 3 von 3     123   
Dezipaitor

Registriert seit: 14. Apr 2003
Ort: Stuttgart
1.701 Beiträge
 
Delphi 7 Professional
 
#21

Re: Mesch Ärgere dich nicht

  Alt 29. Jan 2008, 21:46
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.
Christian
Windows, Tokens, Access Control List, Dateisicherheit, Desktop, Vista Elevation?
Goto: JEDI API LIB & Windows Security Code Library (JWSCL)
  Mit Zitat antworten Zitat
Discjoggy

Registriert seit: 29. Jan 2008
Ort: Herford
3 Beiträge
 
#22

Re: Mesch Ärgere dich nicht

  Alt 29. Jan 2008, 23:20
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:
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;
Erst einmal folgender Code (Randomverfahren)

Delphi-Quellcode:
Function Wurf: integer;
begin
randomize;
result := (random(6)+1);
end;
Nun kommt die Prozedur vom Button (Würfeln)Click

Delphi-Quellcode:
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;
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...

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.
  Mit Zitat antworten Zitat
Andy090778

Registriert seit: 13. Mai 2006
23 Beiträge
 
Delphi 5 Standard
 
#23

Re: Mesch Ärgere dich nicht

  Alt 30. Jan 2008, 00:26
Schmeiß die Bedingungen für die Spieler raus und benutze auch noch für allle Player zusammen ein Array:
p: array [1..4] of Integer; Für das Speichern der Positionen nimmst Du den Typ TPoint:
Pos: array [0..99] of TPoint; Zugriff dann so:
Delphi-Quellcode:
Pos[0].X
Pos[0].Y
hier der Code:

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
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#24

Re: Mesch Ärgere dich nicht

  Alt 30. Jan 2008, 11:26
Ui, noch nicht viel von OOP gehört?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von phXql
phXql

Registriert seit: 11. Mär 2004
Ort: Mühldorf
824 Beiträge
 
#25

Re: Mesch Ärgere dich nicht

  Alt 30. Jan 2008, 12:39
Zitat von Luckie:
Ui, noch nicht viel von OOP gehört?
Sowas wird in der Schule selten gelehrt.
"Dunkel die andere Seite ist"
"Yoda! Halts Maul und iss deinen Toast!"
  Mit Zitat antworten Zitat
Discjoggy

Registriert seit: 29. Jan 2008
Ort: Herford
3 Beiträge
 
#26

Re: Mesch Ärgere dich nicht

  Alt 30. Jan 2008, 20:00
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 ?



Kurz zurück zu Michael's Gedanken:

Zitat:
Schmeiß die Bedingungen für die Spieler raus und benutze auch noch für allle Player zusammen ein Array:
p: array [1..4] of Integer;
Wie wäre es einfach so:

p1, p2, p3, p4: array [1..4] of Integer; Also das ich [1..4] für die Figuren nehme und p1 selbst als "Spieler1" z.b.

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;
  Mit Zitat antworten Zitat
Andy090778

Registriert seit: 13. Mai 2006
23 Beiträge
 
Delphi 5 Standard
 
#27

Re: Mesch Ärgere dich nicht

  Alt 30. Jan 2008, 20:16
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
Angehängte Dateien
Dateityp: rar m_dn_857.rar (158,6 KB, 97x aufgerufen)
Andreas
  Mit Zitat antworten Zitat
Discjoggy

Registriert seit: 29. Jan 2008
Ort: Herford
3 Beiträge
 
#28

Re: Mesch Ärgere dich nicht

  Alt 30. Jan 2008, 20:46
Danke dir... damit kann ich es gut nachvollziehen !
  Mit Zitat antworten Zitat
indeed

Registriert seit: 1. Feb 2010
1 Beiträge
 
Delphi 3 Professional
 
#29

Re: Mesch Ärgere dich nicht

  Alt 1. Feb 2010, 16:03
ich hab auch n mensch ärgere dich nich geschrieben aba ohne arrays...
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 3     123   


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 05:42 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