Delphi-PRAXiS
Seite 11 von 19   « Erste     91011 1213     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Schiffe versenken programmieren (https://www.delphipraxis.net/178499-schiffe-versenken-programmieren.html)

Mavarik 27. Feb 2014 13:20

AW: Schiffe versenken programmieren
 
Zitat:

Zitat von Sir Rufo (Beitrag 1249800)
Zitat:

Zitat von Mavarik (Beitrag 1249798)
Zitat:

Zitat von Perlsau (Beitrag 1249777)
Mit anderen Worten: du kannst nicht programmieren, möchtest aber ein Ergebnis vorweisen. Da gibt's eigentlich nur eine einzige Methode: Programmieren lernen.

Autsch! :stupid:

Nun zieh dir doch nicht gleich jeden Schuh an :mrgreen:

Sehr witzig... Danke... Hab dich auch lieb...:lol:

Perlsau 27. Feb 2014 13:48

AW: Schiffe versenken programmieren
 
Zitat:

Zitat von Mavarik (Beitrag 1249863)
Sehr witzig... Danke... Hab dich auch lieb...:lol:

Du warst doch gar nicht gemeint :kiss:

Popov 27. Feb 2014 14:20

AW: Schiffe versenken programmieren
 
Zitat:

Zitat von leodinho (Beitrag 1249773)
ja ich weiß was ich für möglichkeiten habe aber hab keine idee wie es gehen soll /:

Ist eigentlich das was ich am Anfang gemeint habe und was du nicht hören wolltest: Projektplanung ist schön und gut, aber man sollte vorher einen groben Plan haben wie man es später macht. Du hast einfach drauflos geplant ohne groß zu überlegen und hast dir nun paar Aufgaben aufgehalst die meiner Meinung nicht nötig gewesen wären, bzw. in der Projektplanung nicht hätten erwähnt werden müssen. Nun müssen sie umgesetzt werden. Als Beispiel wäre da die Regel, wonach die Schiffe nicht aneinander stoßen dürfen. Das hat bei der Papiervariante einen Sinn, ist bei der EDV-Variante nicht unbedingt nötig:
Code:
X...
X...
XXXX

1...
1...
2222
In der Papier-Variante (oben) weiß man nicht zu welchem Schiff das Feld unten links gehört, in der EDV-Variante schon. Deshalb befolgen viele EDV-Spiele diese Regel nicht. Du hast sie in deine Planung aufgenommen, nun mußt du sie umsetzten. Ich denke mal das ist das absolut komplizierteste an der Aufgabe, alles andere ist eher simpel.

Nun beginnt bekanntlich jede lange Reise mit dem ersten Schritt. Im Beitrag #96 habe ich dir einen Tipp gegeben: ein Feld erstellen. Hast du das bereits gemacht? Zeig mal wie es aussieht. Wenn der Teil ok ist, kann man sich an den nächsten Schritt wagen - Schiffe automatisch platzieren lassen (natürlich nach deinen Regeln aus deiner Projektplanung).

Romiox 27. Feb 2014 14:51

AW: Schiffe versenken programmieren
 
Aber auch die zufällige Platzierung ist ein Teil, der sich dem Spiel ja vielleicht erstmal unterordnet. Man könte auch sagen ich habe 4 Layouts und wähle davon eins zufällig. Dann kann man hinterher immernoch einen Algorithmus implementieren der Layouts generiert, und sich erstmal auf die Logik konzentrieren, die das Spiel spielbar macht. Das heißt, erst mal machen wir das ganze spielbar, und dann kümmern wir uns um eigentlich nebensächliche Logik. Deine Arbeit befasst sich schließlich nicht mit dem generieren der Spielfelder, sondern mit dem Spiel selbst. Klar gehört das dazu, aber ich würde, grade in anbtracht der Tatsache, dass Du anscheinend noch eine ganze Menge lernen musst bis zur Umsetzung, eindeutige Prioritäten setzenm und zwar dahin gehend, dass zum Abgabetermin eine Runde Schiffe versenken spielbar ist.

leodinho 27. Feb 2014 19:35

AW: Schiffe versenken programmieren
 
Ich werde es einfach lassen.. es hat keinen sinn.. Danke für die Hilfe aber wenn ich davon Ahnung hätte, würde ich hier nicht fragen und warum dann einige meinen hier auf dicke eier zu machen und sich nur drüber lustig zu machen.. respekt.. danke an die, die es wenigstens versucht haben..
ich weiß weder wie ich n feld noch den rest programmiere.. :?

Popov 27. Feb 2014 20:17

AW: Schiffe versenken programmieren
 
Liste der Anhänge anzeigen (Anzahl: 1)
Was hast du dann in der Schule gelernt? Wieso übernimmst du die Aufgabe ein Programm wie Schiffe versenken zu programmieren, wenn du nicht mal die Kenntnisse hast wie man ein Feld erstellt, bzw. mit dem Feld ist ein Array gemeint. Dicke Eier? Du hast schon Tipps bekommen, auch gute, aber du hast irgendwann den Weg des kleinsten Wiederstandes gewählt und das akzeptiert was dir die Lösung liefert, ohne zu hinterfragen wieso und weshalb.

Also wenn du nicht mal in der Lage bist ein Array-Feld zu erstellen, dann hat das evtl. tatsächlich keinen Sinn.

Ich könne dir nun zeigen wie du das Array erstellst, denn erstens ist es nur eine Zeile und zweitens mag ich im Grunde ich den Spruch von wegen - Lerneffekt - nicht. Trotzdem, wenn du es vorgesagt bekommst, dann verstehst du es nicht was das eigentlich soll und verstehst den Rest nicht.

Wie ich schon sagte, im Beitrag #96 steht der erste Schritt.

Willst du ein Tipp? Ok, hier ist ein Link zu einem Tutorial: http://de.wikibooks.org/wiki/Program...Pascal:_Arrays

Lerne zuerst was Array sind (siehe Tutorial). Es ist nicht so schwer. Du benötigst ein Zweidimensionales Array, wg. Spielfeld 12x12. Wenn du das grob verstanden hast, kannst du den Rest hier fragen.

Ich hab das das Programm (bzw. das Platzieren der Schiffe) zum Teil programmiert (siehe Anhang). Das kannst du auch. Ist im Grunde nicht wirklich schwer. Ich hab dazu folgende Prozeduren und Funktionen benötigt:

Prozedur FeldLeeren
Funktion IstZelleGueltig
Funktion IstZelleFrei
Funktion IstGueltigeZelleFrei
Funktion IstZelleUndRandZoneFrei
Funktion SchiffPositionHorizontal
Funktion SchiffPositionVertikal
Funktion EinSchiffPositionieren
Funktion AlleSchiffePositionieren

Ich hab die Berechnung in kleine Stücke zerteilt, wobei einige Funktion gerade mal eine Zeile groß sind.

Der erste Schritt ist ein Feld generieren.

leodinho 27. Feb 2014 20:35

AW: Schiffe versenken programmieren
 
Ich habe mir das Thema leider nicht selber ausgesucht /:
Danke, dass du dir wirklich die Zeit für einen hoffnungslosen fall machst /:
Natürlich weiß ich was ein array ist aber es fehlt mir am logischen denkvermögen, dies umzusetzen..

Wie erstelle ich nun ein zeidimensionales array?

var my2DIntArray : Array of Array of Integer;
SetLength(my2DIntArray, 12);
SetLength(my2DIntArray[0], 12);
SetLength(my2DIntArray[1], 12);
SetLength(my2DIntArray[2], 12);

oder :

var my2DIntArray : Array of Array of Integer;
SetLength(mySecond2DIntArray, 12, 12);

... Wäre das eine Option?

Ich werde mich dann morgen wieder melden, da ich es heute zeitlich nicht mehr schaffe.

Popov 27. Feb 2014 20:59

AW: Schiffe versenken programmieren
 
Hier eine Info an dich als Anfänger. Es gibt

- Statische Arrays (und)
- Dynamische Arrays

Vergiss mal die Dynamischen Arrays ganz schnell (als Anfänger). Sie sind nicht kompliziert, aber nach meiner Meinung sollte man erst die Statischen Arrays rauf und runter beherrschen. Erst dann sollte man sich an die an die Dynamischen wagen.

Was du hier im letzten Beitrag geliefert hast sind Dynamische Arrays. Die brauchst du nicht. Du benötigst ein zweidimensionales Statisches Array.

Wie gesagt, guck dir das Tutorial an, zusätzlich in Delphi die Hilfe aufrufen und im Register "Index" den Text "Statische Arrays" eingeben. Unter YouTube findet sich auch etwas: http://www.youtube.com/watch?v=1feCYnwB5DI

Bjoerk 27. Feb 2014 23:13

AW: Schiffe versenken programmieren
 
Laß dich nicht von dir selbst entmutigen. Wenn die Einstellung stimmt wirst du hier immer Leute finden die dir gern weiterhelfen.

Weiteres kleines Array Beispiel: :)

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
const
  MaxRowCount = 2;
  MaxColCount = 2;
type
  TIntegerArray = array [0..MaxRowCount - 1, 0..MaxColCount - 1] of integer;
  TFloatArray = array [0..MaxRowCount - 1, 0..MaxColCount - 1] of double;
  TStringArray = array [0..MaxRowCount - 1, 0..MaxColCount - 1] of string;
var
  IntegerArray: TIntegerArray;
  FloatArray: TFloatArray;
  StringArray: TStringArray;
  Row, Col: integer;
begin
  for Row := 0 to MaxRowCount - 1 do
    for Col := 0 to MaxColCount - 1 do
    begin
      IntegerArray[Row, Col] := 10 * Row + Col;
      FloatArray[Row, Col] := IntegerArray[Row, Col] / 3;
      StringArray[Row, Col] := 'Text ' + IntToStr(Row) + ' / ' + IntToStr(Col);
    end;
  for Row := 0 to MaxRowCount - 1 do
    for Col := 0 to MaxColCount - 1 do
      ShowMessage(Format('IntegerArray(%d %d) = %d', [Row, Col, IntegerArray[Row, Col]]));
  for Row := 0 to MaxRowCount - 1 do
    for Col := 0 to MaxColCount - 1 do
      ShowMessage(Format('FloatArray(%d %d) = %.4f', [Row, Col, FloatArray[Row, Col]]));
  for Row := 0 to MaxRowCount - 1 do
    for Col := 0 to MaxColCount - 1 do
      ShowMessage(Format('StringArray(%d %d) = %s', [Row, Col, StringArray[Row, Col]]));
end;

p80286 28. Feb 2014 10:20

AW: Schiffe versenken programmieren
 
Zitat:

Zitat von leodinho (Beitrag 1249940)
Natürlich weiß ich was ein array ist aber es fehlt mir am logischen denkvermögen, dies umzusetzen..

Delphi-Quellcode:
Spielfeld : array [1..12,1..12] of integer;
oder
Delphi-Quellcode:
Spielfeld : array [0..11,0..11] of integer;
(was Du für dicke Eier hälst ist Wissen)

Gruß
K-H


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:51 Uhr.
Seite 11 von 19   « Erste     91011 1213     Letzte »    

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