Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Vier gewinnt (https://www.delphipraxis.net/146414-vier-gewinnt.html)

VerdammtVerzweifelt 19. Jan 2010 13:23


Vier gewinnt
 
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! ;-) :gruebel:

Wir hoffen auf eure Hilfe und Antwort!

Mit freundlichen Grüßen
Sarah und Julia

Luckie 19. Jan 2010 13:27

Re: Vier gewinnt
 
Einfach merken, wer als letztes geklickt hat. Wenn das Spieler eins war, ist jetzt Spieler zwei dran und der Kreis muss blau sein. War es Spieler zwei, ist jetzt Spieler eins dran und der Kreis muss rot sein.

hoika 19. Jan 2010 13:29

Re: Vier gewinnt
 
Hallo,

falsche Rubrik.
es müßte ja heißen "Macht bitte meine Hausaufgaben".

Zeigt mal per Code, was ihr schon habt.

Das 2Merken", wer dran ist,
könnte man per Boolean

bPlayer1 = True -> Spieler 1 ist dran
bPlayer1 = False -> Spieler 2 ist dran

in FormCreate kommt

Delphi-Quellcode:
bPlayer1:= True;
Nach jedem Spielzug (gültiger Klick auf Grid)

Delphi-Quellcode:
bPlayer1:= not bPlayer1;
Das schaltet immer zwischen True und False um.

Man könnte auch schreiben

Delphi-Quellcode:
if bPlayer1 then
begin
  bPlayer1:= False;
end
else
begin
  bPlayer1:= True;
end;


Zitat:

Sinn der Informatik
Im Handy / MP3-Player / TV ist auch ein bisschen Informatik drin .. ;)


Heiko

VerdammtVerzweifelt 19. Jan 2010 13:37

Re: Vier gewinnt
 
Das ist unser bisheriger Quelltext .. wie gesagt noch ziemlich am Anfang:

Delphi-Quellcode:
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
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}
{==============================================================================}
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
begin
  // wenn in der gerade gezeichneten Zelle eine 1 steht, dann zeichne dort einen grünen Kreis
  if StringGrid1.Cells[ACol,ARow] = '1' then
    begin
      StringGrid1.Canvas.Brush.Color := clGreen;
      StringGrid1.Canvas.Ellipse (Rect);
    end;
  // wenn in der gerade gezeichneten Zelle eine 2 steht, dann zeichne dort einen blauen Kreis
  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
  //wenn spieler 1 dannn schreibe 1
  // StringGrid1.Cells[ACol,ARow] := '1';
  // sonst schreibe 2

KEINE AHNUNG WIE DIE SPIELER ABWECHSELND ZUM ZUG KOMMEN!
HELFT UNS BITTE.
end;
{==============================================================================}
end.
[edit=Luckie]Delphi-Tags gesetzt. Beim nächsten mal bitte selber machen. Mfg, Luckie[/edit]

Corpsman 19. Jan 2010 13:44

Re: Vier gewinnt
 
In Der Hoffnung, dass ihr das nicht einfach nur Kopiert, möchte ich euch mal auf dieses 4 Gewinnt ( Inclusive Source / KI ) Hinweisen.

hoika 19. Jan 2010 13:52

Re: Vier gewinnt
 
Hallo,

Delphi-Quellcode:
TForm1 ..
  private
    { Private-Deklarationen }
    bPlayer1: Boolean;
  public    
  end;
Delphi-Quellcode:
procedure TForm1.StringGrid1SelectCell(Sender: TObject; ACol,
  ARow: Integer; var CanSelect: Boolean);
begin
  if StringGrid1.Cells[ACol,ARow] <> '' then
  begin

   // es steht was drin
   // also lassen wir von dieser Zelle mal die Finder
   // und verschwinden

    Exit;
  end;

  if bPlayer1 then
  begin
   // es ist Spieler 1
    StringGrid1.Cells[ACol,ARow] := '1';
  end
  else
  begin
   // es ist Spieler 2
    StringGrid1.Cells[ACol,ARow] := '2 ';
  end;

 // Spieler umschalten
  if bPlayer1 then
  begin
    bPlayer1:= False;
  end
  else
  begin
    bPlayer1:= True;
  end;
end;
Und jetzt nur noch das "wer hat gewonnen" schreiben ...

Vergesst mein FormCeate nicht
- freie Form-Fläche suchen
- Doppelklick



Heiko

VerdammtVerzweifelt 19. Jan 2010 13:54

Re: Vier gewinnt
 
Vielen Dank, Corpsman! Wir werden mal schauen was wir damit bewerkstelligen können. :-)
Natürlich auch vielen Dank an die anderen netten "Informatiker", die bereit waren uns zu helfen! ;-)

Luckie 19. Jan 2010 13:56

Re: Vier gewinnt
 
Delphi-Quellcode:
// Spieler umschalten
  if bPlayer1 then
  begin
    bPlayer1:= False;
  end
  else
  begin
    bPlayer1:= True;
  end;
end;
Umständlicher geht es nicht oder? ;)
Wie wäre es mit:
Delphi-Quellcode:
bPlayer1 := not bPlayer1;

hoika 19. Jan 2010 13:59

Re: Vier gewinnt
 
LUCKIE !!!

Es sind Rookies !!! ;)

Wie du in #3 siehst, hatte ich das dort auch so schon gehabt,
aber es dann vereinfacht ;)


Zitat:

Natürlich auch vielen Dank an die anderen netten "Informatiker", die bereit waren uns zu helfen! Wink
Das war leider keine Hilfe,
wenn ihr den Code nicht versteht.


Heiko

p80286 19. Jan 2010 17:19

Re: Vier gewinnt
 
[OT]
@corpsman

leider komm ich an den Link nicht heran
mein Admin schickt mir so etwas:

Access Denied (content_filter_denied)


Your request was denied because of its content categorization: "Games"

Gibt es da vielleicht auch "saubere" Quellen?
ja ich will einfach abschreiben vor allem die KI, dann muß ich nicht mehr selber denken!!

[/OT]
Gruß
K-H

Corpsman 19. Jan 2010 18:26

Re: Vier gewinnt
 
@ p80286

Ich weis ja nicht was du für einen Zugang hast.

Auf meiner HP ist ein *.zip file Verlinkt.

Und Ja die KI hat es in sich, ich hab die "Idee" dafür aber auch "geklaut".

p80286 20. Jan 2010 09:16

Re: Vier gewinnt
 
@corpsman

schade da komme ich auch nicht dran "wg. Games"
was heißt schon "geklaut" letztlich schreiben wir alle voneinander ab, der eine intelligenter als der andere. Und ohne Vorbilder kommt man schließlich kaum noch weiter.

Gruß
K-H

VerdammtVerzweifelt 20. Jan 2010 11:49

Re: Vier gewinnt
 
Wir können die Lösung von Corpsman leider nicht übernehmen.
Wir können es nicht kopieren.
Kannst du es nochmal hier posten?

Wir würden es dann passend zusammen bauen.
Wir benötigen deine Oberfläche (Spielfeld) nicht.
Das sieht zu proffessionell aus ;-)

Corpsman 20. Jan 2010 12:37

Re: Vier gewinnt
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Kannst du es nochmal hier posten
Bin damit ich gemeint ?

Eigentlich hab ich ja nur den Link gesetzt : http://apache.vm-cluster.net/corpsma...rojekte/4_wins

@ p80286

hab es mal Anhang zu diesem Post mit hoch geladen, kannst du's dann laden ?

VerdammtVerzweifelt 20. Jan 2010 12:49

Re: Vier gewinnt
 
Am Pc in der Schule kann ich es öffnen, aber nicht verwenden & zuhause kann ich es leider gar nicht laden.

p80286 20. Jan 2010 12:57

Re: Vier gewinnt
 
@corpsman

Danke, es gab einen netten Menschen, der es mir rüber geschoben hat.
Sieht erst einmal ganz gut aus.
Vor allem endlich mal ein lesbarer Sourcecode!

nochmals Danke!
Gruß
K-H

Edit: Jo den Anhang kann ich auch Laden,Lesen....

Corpsman 20. Jan 2010 13:00

Re: Vier gewinnt
 
ka warum du's nicht laden kannst, dann wirst es wohl auf nem USB Stick mit heim nehmen müssen ;).

Was das "Ausführen" angeht ist's schon merkwürdig, hab gerade extra noch mal nachgesehen. Da sind nur Standartkomponenten drin, nicht mal OpenGL => du hast wohl nicht mal die Rechte um Dateien aus zu führen, auf deinem Schulrechner, was sehr merkwürdig ist.

Lad doch einfach den Source und Bau die EXE neu, ich hab damals Delphi5 Pro benutzt, Mit Lazarus gehts aber ebenfalls ( zumindest unter Linux ).

@p80286

Lesbar ?

Bist du unter Linux ?

Für Linux habe ich mir den Codeviewer neu entwickelt, seit heute sind da auch Konvertierungen zwischen ISO 8859 und UTF8 drin. Online ist die Linux Version aber noch nicht. Bei Interesse kurze PN an mich ;).

[ Edit ]
was das laden angeht, nachdem die Anderen User es ja auch laden konnten, glaube ich nicht das der Fehler bei mir liegt ..

isilive 20. Jan 2010 14:20

Re: Vier gewinnt
 
Vorschlag: Habt ihr die Möglichkeit euch ein einfacheres Projekt auszusuchen? Wenn ihr nämlich den graphischen Teil weglasst und euch darauf konzentriert etwas zu schreiben das ihr auch versteht, dann könnt ihr hier im Forum auch gern Fragen zu den einzelnen Teilproblemen stellen. Dann schreibt ihr die Geschichte selber und habt auch noch was dabei gelernt.

Von vorhandenen Projekten abzukupfern ist immer etwas schwierig, da es extrem viele unterschiedliche Lösungsmöglichkeiten gibt und diese dann auch meist nicht wirklich zu dem passen mit dem ihr angefangen habt. :stupid:

p80286 20. Jan 2010 16:25

Re: Vier gewinnt
 
@corpsman

Lesbar = Man bekommt keinen Augenkrebs, weil mal wieder Einrückung und Großkleinschreibung und .. sehr kreativ gehandhabt wurde.

Mit dem Notepad konnte ich es öffnen, unter D7 geht es wohl auch, techn. Probleme seh ich keine, und wenn ich schon "abschreibe" dann frag ich nur in Notfällen wie man's ans laufen bekommt. Ein bißchen Lerneffekt soll ja schließlich auch dabei sein!
Hab' bloß im Augenblick nicht so viel Zeit mich richtig zu kümmern.

Gruß
K-H

Edit: hab'mal schnell 2 Minuten investiert:
kompiliert unter D7 (Ressourcen-Datei neu erstellt!)
Ist so kommentiert, daß man sich gut zurechtfinden kann (wenn man ein paar Vorkenntnisse hat).

VerdammtVerzweifelt 26. Jan 2010 12:33

Re: Vier gewinnt
 
@ isilive:

Nein, das ist leider nicht möglich. Wir musstem einen Projektplan abgeben, den wir jetzt nicht einfach über den Haufen werfen können. Mal davon abgesehen fehlt uns die Zeit für eine Umdisponierung.

VerdammtVerzweifelt 26. Jan 2010 12:52

Re: Vier gewinnt
 
Wir haben eine weitere Frage bezüglich des Mainmenus.
Beispiel Highscore: Wie ist es möglich ein Fenster zu öffnen, wenn man auf "Highscore" klickt ?

DeddyH 26. Jan 2010 13:00

Re: Vier gewinnt
 
Sofern das Fenster automatisch angelegt wird (Standard), genügt der Aufruf von
Delphi-Quellcode:
Formname.Show;
//oder
Formname.ShowModal;

VerdammtVerzweifelt 26. Jan 2010 13:12

Re: Vier gewinnt
 
Wie definiere ich "Formname"? Mit integer?

Sherlock 26. Jan 2010 13:13

Re: Vier gewinnt
 
Das ist der Name, den Du Deinem Delphi-Referenz durchsuchenTForm gegeben hast.

Sherlock

VerdammtVerzweifelt 26. Jan 2010 13:29

Re: Vier gewinnt
 
Ahh.. ich glaube ich weiß, was du meinst! :D

DeddyH 26. Jan 2010 13:30

Re: Vier gewinnt
 
Wenn ich mal raten darf: Form2 :mrgreen:

VerdammtVerzweifelt 26. Jan 2010 13:41

Re: Vier gewinnt
 
Nein, Form1!
Aber irgendwie funktioniert das nicht.. :(

DeddyH 26. Jan 2010 13:42

Re: Vier gewinnt
 
Geht es noch etwas ungenauer? Was geht nicht?

VerdammtVerzweifelt 26. Jan 2010 13:45

Re: Vier gewinnt
 
Wenn ich anschließend eine Syntaxprüfung durchführe verschwindet mein Objektinspektor! Ansonsten passiert aber nichts..

DeddyH 26. Jan 2010 13:47

Re: Vier gewinnt
 
Drückst Du F11? Und was soll zur Entwicklungszeit denn auch passieren, wenn Du das Programm nicht laufen lässt?

VerdammtVerzweifelt 26. Jan 2010 13:50

Re: Vier gewinnt
 
Nein, drücke ich nicht. Ich möchte einfach, dass wenn ich auf "Highscore" klicke sich ein Fenster öffnet, in das ich später die Highscore einfüge.

DeddyH 26. Jan 2010 13:54

Re: Vier gewinnt
 
Aber doch wohl zur Laufzeit, oder? Also, den Show-Befehl in den Code einfügen, ggf. uses-Klausel erweitern (lassen) und Programm ausführen. Dann sollte das auch gehen.

VerdammtVerzweifelt 26. Jan 2010 13:56

Re: Vier gewinnt
 
Tut mir leid, aber ich versteh' nur Bahnhof,

DeddyH 26. Jan 2010 13:59

Re: Vier gewinnt
 
Delphi-Quellcode:
unit Unit1;

interface

uses ...

...

implementation

{$R *.dfm}

uses Unit2; //die Unit vom aufzurufenden Form muss in die uses-Klausel

procedure TForm1.HighscoreClick(Sender: TObject); //das soll das MenuItem sein
begin
  Form2.Show;
end;
So, nun F9 drücken und auf das MenuItem klicken.

isilive 26. Jan 2010 20:11

Re: Vier gewinnt
 
Hier ist eine kleine Anleitung wie man eine zweite Form (also ein zweites Fenster) ins Programm einbindet.

Ausserdem denke ich dass ihr dringend die Grundlagen Tutorials machen solltet. Damit nicht mehr Fragen auftauchen als ihr stellen könnt... :drunken:

VerdammtVerzweifelt 23. Feb 2010 12:38

Re: Vier gewinnt
 
Wie ist es denn möglich ein MainMenu für unser Spiel zu erzeugen ? Darin sollen Spielanleitung, Highscore, Neues Spiel usw. enthalten sein.

Danke für eure Hilfe!

Klaus01 23. Feb 2010 12:43

Re: Vier gewinnt
 
Hallo,

in Deiner Komponentenpallete wirst Du TMainMenu finden.
Diese auf Deine Oberfläche ziehen und doppelt anklicken.
Delphi-Referenz durchsuchenTMainMenu

Grüße
Klaus

Luckie 23. Feb 2010 12:49

Ein Thread pro Frage/Problem
 
Bitte eröffne für jede Frage / jedes Problem einen separaten Thread, sonst geht das hier durcheinander und mit der Suche findet man dann auch nichts. Deswegen: Geschlossen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:33 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