Autor |
Beitrag |
VerdammtVerzweifelt
      
Beiträge: 16
|
Verfasst: Di 19.01.10 15:34
Hallo ihr Computerfanatiker!
Wir (Sarah und Julia) müssen im Rahmen unseres Informatikunterrichts mit Hilfe des Delphi-Programms (Delphi5) ein Spiel programmieren. Ausgewählt haben wir "Vier gewinnt". Wir beide haben leider absolut keine Ahnung von Programmiersprache, StringGrid und Co. und werden wohl nie ganz hinter den Sinn der Informatik steigen. Deshalb hoffen wir auf eure Hilfe!
Folgendes Problem:
Mittlerweile haben wir (zugegebenermaßen nicht ganz ohne die Hilfe unseres Informatiklehrers!) es geschafft, die Zellen in die wir klicken mit einem farbigen Kreis zu füllen. Doch wie ist es möglich das 2 Spieler immer abwechselnd an der Reihe sind. Bitte antwortet im Quelltext, da es uns nicht gelingt Anweisungen in "unserer" Sprache in Programiersprache zu übersetzen!
Wir hoffen auf eure Hilfe und Antwort!
Mit freundlichen Grüßen
Sarah und Julia
P.S: Bitte spart euch Bemerkungen wie: "Falsche Rubrik. Es müßte ja heißen "Macht bitte meine Hausaufgaben."
|
|
Gausi
      
Beiträge: 8549
Erhaltene Danke: 478
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: Di 19.01.10 15:41
Hallo und  in der Entwickler-Ecke,
Dann zeigt doch am besten erst einmal, was ihr schon so habt. Dann kann man da vielleicht etwas passendes einbauen. 
_________________ We are, we were and will not be.
|
|
VerdammtVerzweifelt 
      
Beiträge: 16
|
Verfasst: Di 19.01.10 15:46
Das ist unser bisheriger Quelltext .. wie gesagt noch ziemlich am Anfang:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58:
| Unit Unit1;
interface
uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Grids;
type TForm1 = class(TForm) StringGrid1: TStringGrid; procedure StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); procedure StringGrid1SelectCell(Sender: TObject; ACol, ARow: Integer; var CanSelect: Boolean); private public end;
var Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); begin if StringGrid1.Cells[ACol,ARow] = '1' then begin StringGrid1.Canvas.Brush.Color := clGreen; StringGrid1.Canvas.Ellipse (Rect); end; if StringGrid1.Cells[ACol,ARow] = '2' then begin StringGrid1.Canvas.Brush.Color := clBlue; StringGrid1.Canvas.Ellipse (Rect); end;
end;
procedure TForm1.StringGrid1SelectCell(Sender: TObject; ACol, ARow: Integer; var CanSelect: Boolean); begin KEINE AHNUNG WIE DIE SPIELER ABWECHSELND ZUM ZUG KOMMEN! HILF UNS BITTE. end;
end. |
:'(
Erstmal ist es uns wichtig zu wissen, wie wir nun die Spieler abwechselnd zum Zuge kommen lassen können???
Moderiert von Gausi: Delphi-Tags hinzugefügt, Beiträge zusammengefasst.
|
|
Gausi
      
Beiträge: 8549
Erhaltene Danke: 478
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: Di 19.01.10 15:55
Eine Idee: Den Spieler in einer Variable merken und bei Klick umsetzen, also:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
| private Spieler: Integer;
procedure TForm1.StringGrid1SelectCell(Sender: TObject; ACol, ARow: Integer; var CanSelect: Boolean); begin if Spieler = 0 then begin Spieler := 1; end else begin Spieler := 0; end; end; |
_________________ We are, we were and will not be.
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Di 19.01.10 15:59
Soweit sind wir in der Delphipraxis auch schon: www.delphipraxis.net...1121988.html#1121988 
|
|
guinnes
      
Beiträge: 182
Erhaltene Danke: 14
|
Verfasst: Di 19.01.10 16:05
Im Delphi-Treff gibts auch schon Antworten
|
|
Nersgatt
      
Beiträge: 1581
Erhaltene Danke: 279
Delphi 10 Seattle Prof.
|
Verfasst: Di 19.01.10 16:07
Na super, dann können wir ja hier die Bemühungen einstellen.
@Mädels: Bitte nächstes Mal sofort auf Crossposts hinweisen. 
_________________ Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Di 19.01.10 16:07
@Guinnes: Warum ist der Thread bei euch noch nicht geschlossen? 
Zuletzt bearbeitet von Luckie am Di 19.01.10 16:08, insgesamt 1-mal bearbeitet
|
|
thepaine91
      
Beiträge: 763
Erhaltene Danke: 27
Win XP, Windows 7, (Linux)
D6, D2010, C#, PHP, Java(Android), HTML/Js
|
Verfasst: Di 19.01.10 16:08
Ich wollt erst frage wo sie copy paste gemacht haben, da dies bei Codeabschnitten nicht so funktioniert und daher gleich zu sehen war. ^^
Mein Tipp versucht erstmal die bisherigen Tipps zu verstehen und dann Fragen zu stellen.
Und egal in wieviele Foren ihr geht es sind dort zum groß Teil die selben Leute wie in anderen und daher braucht ihr das nicht in jedes Forum das ihr findet zu posten.
|
|
guinnes
      
Beiträge: 182
Erhaltene Danke: 14
|
Verfasst: Di 19.01.10 16:22
|
|
VerdammtVerzweifelt 
      
Beiträge: 16
|
Verfasst: Mi 20.01.10 14:06
Keine Ahnung was ihr hier für Informatikerspecials und Verknüpfung zu anderen Foren habt.
Wir wollten einfach nur Hilfe von möglichst vielen Leuten, damit wir dahinter steigen und unser eigenen Spiel zusammen basteln können.
|
|
JoelH
      
Beiträge: 806
Erhaltene Danke: 17
Win10
Delphi Alexandria 11.2 Patch 1
|
Verfasst: Mi 20.01.10 14:28
habt ihr ds von gausi denn schon umgesetzt?
_________________ mfg. Joel
|
|
VerdammtVerzweifelt 
      
Beiträge: 16
|
Verfasst: Mi 20.01.10 14:51
Wir arbeiten nur jeden Dienstag an unserem Projekt und zuhause haben wir das Programm nicht auf dem Rechner.
Weitere Frage werden sich sicherlich nächsten Dienstag ergeben.
Aber wir werden erstmal versuchen das so umzusetzen.
Also es funktioniert auch im Delphi5?
|
|
Gausi
      
Beiträge: 8549
Erhaltene Danke: 478
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: Mi 20.01.10 14:55
Ja, das sollte auch in Delphi 5 gehen. Das sind absolute Basis-Elemente der Sprache. 
_________________ We are, we were and will not be.
|
|
VerdammtVerzweifelt 
      
Beiträge: 16
|
Verfasst: Mi 20.01.10 15:45
Vielen Lieben Dank.
Weitere spannende Aufgaben erwarten euch nächsten Dienstag 
|
|
VerdammtVerzweifelt 
      
Beiträge: 16
|
Verfasst: Di 09.02.10 14:40
Soooo, nun sind wir soweit & wollen unsere Spielsteine fallen lassen.
Egal in welches Feld der Spieler klickt: der Stein soll in dieser Spalte soweit runter fallen wie es geht.
4gewinnt eben 
|
|
Nersgatt
      
Beiträge: 1581
Erhaltene Danke: 279
Delphi 10 Seattle Prof.
|
Verfasst: Di 09.02.10 14:44
_________________ Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)
|
|
VerdammtVerzweifelt 
      
Beiträge: 16
|
Verfasst: Di 09.02.10 14:49
Äääähm wir würden uns sehr über Hilfe freuen!!
--- Moderiert von Narses: Beiträge zusammengefasst---
Unsere Idee ist Folgende:
if y ungleich ymaximal
solange (zelle[x,y+1]=leer) and y-1 < ymaximal
zelle [x,y+1]=1
zelle [x,y]='' (leer)
soooo & wie kriegt man das nun in einen vernünftgen Algorithmus?
|
|
Webo
      
Beiträge: 577
Erhaltene Danke: 14
Win 7, Debian
C# (Visual Studio 2013), PHP, C, C++ (Eclipse, KDevelop)
|
Verfasst: Di 09.02.10 16:04
"Wenn y ungleich dem maximalen y ist, dann soll, solange die Zelle [x, y+1] leer ist und y-1 kleiner als dem maximalen y ist, in die Zelle [x, y + 1] eine 1 reingeschrieben werden und die Zelle [x,y] leer sein" ... Aber x und y ändert ihr nicht, oder ?
Ich weiss ja nicht, wie genau ihr das gedacht hattet, aber wenn das so ist, würde ja die "solange"-Bedingung (unter Delphi auch while genannt) immer "aktiv" bleiben, wenn sie denn einmal erfüllt ist, also würde ewig die gleiche Zelle 1 beinhalten. Außer ihr ändert irgendwo noch x und y ... (Kann auch sein, dass ich etwas überlesen hab)
Für weitere Überlegungen wäre Euer PseudoCode mal ganz schnell übersetzt:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| if y <> ymaximal then begin while ( StringGrid.Cells[x, y + 1] = '' ) and ( y - 1 < ymaximal ) do begin StringGrid.Cells[x, y + 1] := '1'; StringGrid.Cells[x, y] := ''; end; end; |
_________________ Man kann nur das aus dem Ärmel schütteln, was man auch vorher reingesteckt hat.
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Di 09.02.10 17:13
Ich frage mich gerade, wer hier eigentlich das Programm schreibt. 
|
|