![]() |
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 |
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.
|
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:
Nach jedem Spielzug (gültiger Klick auf Grid)
bPlayer1:= True;
Delphi-Quellcode:
Das schaltet immer zwischen True und False um.
bPlayer1:= not bPlayer1;
Man könnte auch schreiben
Delphi-Quellcode:
if bPlayer1 then
begin bPlayer1:= False; end else begin bPlayer1:= True; end; Zitat:
Heiko |
Re: Vier gewinnt
Das ist unser bisheriger Quelltext .. wie gesagt noch ziemlich am Anfang:
Delphi-Quellcode:
[edit=Luckie]Delphi-Tags gesetzt. Beim nächsten mal bitte selber machen. Mfg, Luckie[/edit]
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. |
Re: Vier gewinnt
In Der Hoffnung, dass ihr das nicht einfach nur Kopiert, möchte ich euch mal auf dieses
![]() |
Re: Vier gewinnt
Hallo,
Delphi-Quellcode:
TForm1 ..
private { Private-Deklarationen } bPlayer1: Boolean; public end;
Delphi-Quellcode:
Und jetzt nur noch das "wer hat gewonnen" schreiben ...
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; Vergesst mein FormCeate nicht - freie Form-Fläche suchen - Doppelklick Heiko |
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! ;-) |
Re: Vier gewinnt
Delphi-Quellcode:
Umständlicher geht es nicht oder? ;)
// Spieler umschalten
if bPlayer1 then begin bPlayer1:= False; end else begin bPlayer1:= True; end; end; Wie wäre es mit:
Delphi-Quellcode:
bPlayer1 := not bPlayer1;
|
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:
wenn ihr den Code nicht versteht. Heiko |
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 |
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". |
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 |
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 ;-) |
Re: Vier gewinnt
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Eigentlich hab ich ja nur den Link gesetzt : ![]() @ p80286 hab es mal Anhang zu diesem Post mit hoch geladen, kannst du's dann laden ? |
Re: Vier gewinnt
Am Pc in der Schule kann ich es öffnen, aber nicht verwenden & zuhause kann ich es leider gar nicht laden.
|
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.... |
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 ![]() [ Edit ] was das laden angeht, nachdem die Anderen User es ja auch laden konnten, glaube ich nicht das der Fehler bei mir liegt .. |
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: |
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). |
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. |
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 ? |
Re: Vier gewinnt
Sofern das Fenster automatisch angelegt wird (Standard), genügt der Aufruf von
Delphi-Quellcode:
Formname.Show;
//oder Formname.ShowModal; |
Re: Vier gewinnt
Wie definiere ich "Formname"? Mit integer?
|
Re: Vier gewinnt
|
Re: Vier gewinnt
Ahh.. ich glaube ich weiß, was du meinst! :D
|
Re: Vier gewinnt
Wenn ich mal raten darf: Form2 :mrgreen:
|
Re: Vier gewinnt
Nein, Form1!
Aber irgendwie funktioniert das nicht.. :( |
Re: Vier gewinnt
Geht es noch etwas ungenauer? Was geht nicht?
|
Re: Vier gewinnt
Wenn ich anschließend eine Syntaxprüfung durchführe verschwindet mein Objektinspektor! Ansonsten passiert aber nichts..
|
Re: Vier gewinnt
Drückst Du F11? Und was soll zur Entwicklungszeit denn auch passieren, wenn Du das Programm nicht laufen lässt?
|
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.
|
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.
|
Re: Vier gewinnt
Tut mir leid, aber ich versteh' nur Bahnhof,
|
Re: Vier gewinnt
Delphi-Quellcode:
So, nun F9 drücken und auf das MenuItem klicken.
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; |
Re: Vier gewinnt
![]() Ausserdem denke ich dass ihr dringend die ![]() |
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! |
Re: Vier gewinnt
Hallo,
in Deiner Komponentenpallete wirst Du TMainMenu finden. Diese auf Deine Oberfläche ziehen und doppelt anklicken. ![]() Grüße Klaus |
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