AW: Schiffe versenken programmieren
Sach ich doch die ganze Zeit :)
|
AW: Schiffe versenken programmieren
Ja das stimmt, manchmal will man es schwerer angehen als es eigentlich ist.
Jetzt im Nachhinein denk ich mir auch, wie verbissen ich in manchen Punkten war :wink: |
AW: Schiffe versenken programmieren
Zitat:
Skizze und Erläuterung wie das ermittelt werden kann (nein, immer noch nicht programmieren). Im Ablaufplan wird das nur kurz angerissen, darum skizzierst du das Verfahren (so wie das Platzieren der Schiffe auch nur skizziert worden ist). Zitat:
|
AW: Schiffe versenken programmieren
Ja darüber bin auch sehr dankbar :-D
Zitat:
Wenn auf dem Feld ein Teil des Schiffes ist -> Dann Treffer angezeigt / sonst kein Treffer -> Water |
AW: Schiffe versenken programmieren
Zitat:
|
AW: Schiffe versenken programmieren
Habe ich jetzt auch in meinem Ablauf hinzugefügt (:
Denke mal,dass es schonmal ein Anfang ist.. :thumb: |
AW: Schiffe versenken programmieren
Zitat:
Der nächste der danach sucht (auch wenn es nur um einen Projektplan geht) wird es dir danken. Schön wäre auch die Meinung des Lehrers dazu (was hat er vermisst, was fand er gut) |
AW: Schiffe versenken programmieren
Darauf müssen wir dann aber noch warten :D Wird erst im März ausgewertet ^^
Aber werde hier alles nochmal in den näcshten Tag als PDF hochladen. Desweiteren werde ich mich mit paar Programmiervorraussetzungen für dieses Spiel befassen und mich dann wieder melden, wenn das kein problem ist ^^ Nochmal ein großes Dankeschön an Alle für die tatkräftige Hilfe, sowie einen besonderen Dank an Sir Ruso :thumb: |
AW: Schiffe versenken programmieren
Zitat:
Zitat:
Man könnte es statt "Schiffe versenken" vielleicht anders nennen, z. B. "Wild Jagt". Opfer wären dann: 1 Wisent (4 Felder), 2 Hirsche (3 Felder), 2 Wildschweine (2 Felder), 2 Hasen (1 Feld). Der Wald ist dann das Feld 12x12. Der Jäger schießt blind in den Wald und hofft auf Treffer, aber keiner schießt aus dem Wald zurück. Würde das in etwa die Aufgabe beschreiben? Ok, ich halte jetzt die Klappe ;) |
AW: Schiffe versenken programmieren
Liste der Anhänge anzeigen (Anzahl: 1)
Mir hat die Idee mit der "Wild Jagt" so gut gefallen, dass das Programm gestern noch geprogt habe. Heute habe ich das noch aufgewertet, mit Sound, Statistik usw., so dass die erste Version fertig ist ;)
Die Sounds sind in einem Unterordner. Erst mit Sound macht ein Spiel richtig Spaß. |
AW: Schiffe versenken programmieren
Liste der Anhänge anzeigen (Anzahl: 3)
Ich habe mal einige Grafiken Ergoogled...
|
AW: Schiffe versenken programmieren
Tut mir Leid , dass ich mich jetzt erst wieder melde aber wir mussten noch einiges umändern.
Ich werd mich in Laufe der nächsten Tage dann mit der Programmierung beschäftigen (: Nachdem dann das Programm fertig ist, werde ich hier mal Porjektplanung und das Programm hochladen, damit sich auch andere dies angucken können. (: |
AW: Schiffe versenken programmieren
Liste der Anhänge anzeigen (Anzahl: 1)
Guten Tag, da bin ich wieder (:
Meine Projektplanung habe ich nun auch als Anhang beigefügt obwohl es nicht die vollständige ist.. Nun meine Frage, werde jetzt das Programm machen aber weiß nicht wie ich es anfangen soll /: Habe mir viele sachen durchgelesen aber ich kam zu keiner logischen Erkenntnis? MfG Leon M. |
AW: Schiffe versenken programmieren
Der Projektplan besteht gefühlt zu 80% aus Teilen, die ich dir geliefert habe.
Ich erkenne da keinen nennenswerten Eigenanteil von dir. Viel Erfolg bei der Umsetzung |
AW: Schiffe versenken programmieren
Ja die Bilder sind von dir.. (:
Ich habe noch weitere Sachen wir 2 Tabellen und ein einfaches Struktogram hinzugefügt, jedoch ist dies auf dem Rechner in der Schule.. Ichweiß jetzt jedoch nicht wie ich das umsetzten soll /: |
AW: Schiffe versenken programmieren
Zitat:
Code:
Das ist doch schon ein guter Anfang.
1. Generieren des Spielfeldes ( Imagekomponente, Array of TPanal o. StringGrid )
1.1. 12x12 Feld erstellen mithilfe ( vertikal A-L und horizontal 1-12 ) |
AW: Schiffe versenken programmieren
ja ich weiß was ich für möglichkeiten habe aber hab keine idee wie es gehen soll /:
|
AW: Schiffe versenken programmieren
Zitat:
|
AW: Schiffe versenken programmieren
Zitat:
|
AW: Schiffe versenken programmieren
Zitat:
|
AW: Schiffe versenken programmieren
Zitat:
|
AW: Schiffe versenken programmieren
Zitat:
|
AW: Schiffe versenken programmieren
Zitat:
Code:
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.
X...
X... XXXX 1... 1... 2222 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). |
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.
|
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.. :? |
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. |
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. |
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 |
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; |
AW: Schiffe versenken programmieren
Zitat:
Delphi-Quellcode:
oder
Spielfeld : array [1..12,1..12] of integer;
Delphi-Quellcode:
(was Du für dicke Eier hälst ist Wissen)
Spielfeld : array [0..11,0..11] of integer;
Gruß K-H |
AW: Schiffe versenken programmieren
|
AW: Schiffe versenken programmieren
Zitat:
|
AW: Schiffe versenken programmieren
Na klar, wahrscheinlich wäre ein Record sowieso besser, aber da es zunächst einmal um ein zweidimensionales Array ging und er Integer in seinem Beispiel genutzt hat .......
Mal schauen wie er es umsetzen will und dann kann man ja immer noch etwas konkretes sagen. Gruß K-H |
AW: Schiffe versenken programmieren
Ich habe jetzt mein statisches zweidimensionales array
Delphi-Quellcode:
dies würde doch jetzt schonmal so passen oder?
procedure TForm1.Button1Click(Sender: TObject);
var Zahlen : array of integer ; Feld : array [0..11, 0..11] of string; begin setlength(zahlen, 12); //Zahlen : array (0...11) of Integer |
AW: Schiffe versenken programmieren
Du hast jetzt ein dynamisches Integer-Array und ein statisches String-Array mit 12 * 12 Feldern deklariert. Syntaktisch ist das OK, allerdings bin ich mir nicht sicher, ob das statische Array wirklich eine lokale Variable sein sollte. Andererseits kenne ich Deine angedachte Vorgehensweise auch nicht, von daher musst Du selbst entscheiden, ob das so richtig ist.
|
AW: Schiffe versenken programmieren
Wie würde ich das mit einem statischen array nun machen?
Ich versteh bloß nicht, wie daraus dann später das feld generiert werden soll, da mir das logische denken irgendwie fehlt. Wie würdest du es jetzt aus sicht eines anfänger mache? /: |
AW: Schiffe versenken programmieren
Zitat:
und wenn Du das Spielfeld meinst, das dargestellte oder das auf dem gerechnet und die Daten vorgehalten werden? Gruß K-H |
AW: Schiffe versenken programmieren
Naja das Spielfeld...
das statiche array wird dann global und nicht lokal.. |
AW: Schiffe versenken programmieren
Also du hast ein Spielfeld
Delphi-Quellcode:
und jedes Feld kann einen Wert annehmen, der den Status des Feldes darstellt.
Spielfeld : array[0..11,0..11] of integer;
Folgende Werte sind in dem Spiel möglich
Delphi-Quellcode:
Wenn du nun ein Schuss auf ein Feld abgeben willst, dann überprüfst du, ob der aktuelle Wert des Feldes kleiner als
const
WATER = 0; NEARSHIP = 1; // Wird zum Positionieren der Schiffe benötigt SHIP = 2; HITVALUE = 10; HIT_WATER = WATER + HITVALUE; HIT_NEARSHIP = NEARSHIP + HITVALUE; HIT_SHIP = SHIP + HITVALUE;
Delphi-Quellcode:
ist. Wenn dem so ist, dann addierst du zu dem aktuellen Feldwert einfach
HITVALUE
Delphi-Quellcode:
und der neue Wert ist gesetzt.
HITVALUE
Delphi-Quellcode:
Wenn du das Spielfeld anzeigen willst, dann gibst du abhängig vom Wert eben das passende heraus (Zeichen, Bild, Farbe, whatever)
// Schuss auf 4,7
if Spielfeld[4,7] < HITVALUE then Spielfeld[4,7] := Spielfeld[4,7] + HITVALUE;
Delphi-Quellcode:
// Ausgabe des Spielfelds auf der Console
for y := 0 to 11 do for x := 0 to 11 do begin case Spielfeld[x,y] of WATER : Write( ' ' ); NEARSHIP : Write( '+' ); SHIP : Write( '#' ); HIT_WATER : Write( 'o' ); HIT_NEARSHIP : Write( '*' ); HIT_SHIP : Write( 'X' ); end; end; WriteLn; // Neue Zeile end; |
AW: Schiffe versenken programmieren
In Deinem Array speicherst Du die Schiffe und Treffer und Wasser.. auf irgendeine weise kodiert, die Anzeige läuft dann im Prinzip so ab
Delphi-Quellcode:
Wobei Ausgabevon die Zeichenroutine(n) enthält und auch die Interpretation der gespeicherten Daten (Schiff,Treffer,Wasser...)
for i:=1 to 12 do
for j:=1 to 12 do Ausgabevon(Spielfeld[i,j]); Gruß K-H (wiede zu langsam) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:22 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