AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Schiffe versenken programmieren

Ein Thema von leodinho · begonnen am 11. Jan 2014 · letzter Beitrag vom 4. Mär 2014
Antwort Antwort
Seite 1 von 2  1 2      
leodinho

Registriert seit: 9. Dez 2013
58 Beiträge
 
#1

AW: Schiffe versenken programmieren

  Alt 28. Feb 2014, 12:05

Ich bekomme es aber nicht auf meine Form übertragen /:
  Mit Zitat antworten Zitat
leodinho

Registriert seit: 9. Dez 2013
58 Beiträge
 
#2

AW: Schiffe versenken programmieren

  Alt 28. Feb 2014, 12:11
Zitat:
Wenn du das Spielfeld anzeigen willst, dann gibst du abhängig vom Wert eben das passende heraus
Wie bekomm ich das Spieldfeld nun ausgegeben? syntaktisch habe ich keine fehler aber sobald ich auf den button klicke habe ich ein error /:
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.160 Beiträge
 
Delphi 10.3 Rio
 
#3

AW: Schiffe versenken programmieren

  Alt 28. Feb 2014, 12:13
Zitat:
Wenn du das Spielfeld anzeigen willst, dann gibst du abhängig vom Wert eben das passende heraus
Wie bekomm ich das Spieldfeld nun ausgegeben? syntaktisch habe ich keine fehler aber sobald ich auf den button klicke habe ich ein error /:
Welchen error? Welchen sourcecode? Meine Glaskugel will gerade nicht so richtig...
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.160 Beiträge
 
Delphi 10.3 Rio
 
#4

AW: Schiffe versenken programmieren

  Alt 28. Feb 2014, 12:11

Ich bekomme es aber nicht auf meine Form übertragen /:
Hä?

Was von wo nach wo? Kannst du bitte deine Frange etwas ausführlicher stellen?
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.784 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Schiffe versenken programmieren

  Alt 28. Feb 2014, 12:13
.. das kommt ja auch erst später...

Ein Array ist ein nicht visuelles Element.

Ein StringGrid/DrawGrid kannst Du zum anzeigen verwenden.

Das Array ist zur Datenhaltung gedacht.
Das StringGrid/DrawGrid zur Anzeige der Daten.

Im Prinzip musst Du nach jeder Aktion ducht das Array wandern
und anhand der Daten das StringGrid/DrawGrid füllen.

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
leodinho

Registriert seit: 9. Dez 2013
58 Beiträge
 
#6

AW: Schiffe versenken programmieren

  Alt 28. Feb 2014, 12:15
@Sir Rufo

Ok , bis zur Ausgabe habe ich es jetzt..
Wie könnte ich jetzt weitermachen?

Geändert von leodinho (28. Feb 2014 um 12:32 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#7

AW: Schiffe versenken programmieren

  Alt 28. Feb 2014, 12:40
@Sir Rufo

Ok , bis zur Ausgabe habe ich es jetzt..
Wie könnte ich jetzt weitermachen?
Dann zeig doch mal was du bis jetzt hast
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
leodinho

Registriert seit: 9. Dez 2013
58 Beiträge
 
#8

AW: Schiffe versenken programmieren

  Alt 28. Feb 2014, 12:46
@Sir Rufo

Ok , bis zur Ausgabe habe ich es jetzt..
Wie könnte ich jetzt weitermachen?
Dann zeig doch mal was du bis jetzt hast
Delphi-Quellcode:
var
  Form1: TForm1;
  Spielfeld : array[0..11,0..11] of integer;

const
  wasser = 0 ;
  nahschiff = 1; //zur Positionierung der schiffe
  schiff = 2;

  twert = 10;

  T_wasser = wasser + twert;
  T_nahschiff = nahschiff + twert;
  T_schiff = schiff + twert;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var x, y : integer;
begin

// Ausgabe des Spielfeldes
for y := 0 to 11 do
  for x := 0 to 11 do
  begin
    case Spielfeld[x,y] of
      wasser : Write( ' ' );
      nahschiff : Write( '+' );
      schiff : Write( '#' );
      T_wasser : Write( 'o' );
      T_nahwasser : Write( '*' );
      T_schiff : Write( 'X' );
    end;
  end;
  WriteLn; // Neue Zeile
end;

end.
Ist jetzt nach deiner Idee und etwas andere Begriffe..
Wäre das soweit erstmal richtig?
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#9

AW: Schiffe versenken programmieren

  Alt 28. Feb 2014, 14:43
@leodinho

Kopiere nicht wieder, verstehe es. Wähl nicht wieder den Weg des kleinsten Widerstandes. Das wichtigste ist zuerst zu verstehen was ein Array ist, und was ich bisher gelesen habe, ist es noch nicht so 100% drin.

Eine Variable kann ein Wert aufnehmen:
Zitat:
a := 1;
Ein Array - z. B. array[1..3] of Integer kann drei Werte aufnehmen
Code:
a[1] := 4;
a[2] := 3;
2[3] := 9;
Wobei man auch statt Integer auch ein zweites Array nehmen kann - z. B. array[1..3] of array[1..3] of Integer; - abgekürzt array[1..3, 1..3] of Integer - aber im Grunde genommen gleich. Das Array kann dann 3 x 3 = 9 Werte aufnehmen. Stellt man sich das nun zweidimensional vor, ergibt das ein Feld:

Zitat:
0 0 0
0 0 0
0 0 0
Kommen wir zu deinem Beispiel:
Delphi-Quellcode:
var
  Form1: TForm1;
  Spielfeld : array[0..11,0..11] of integer;
Wieso hast du das so gemacht, und nicht anders? Ich hoffe du hast es nicht nur angeschrieben.

Als erstes, es spielt nicht wirklich eine große Rolle, aber man sollte stets den kleinsten Variablentyp nehmen den man benötigt (auch wenn himitsu vermutlich gleich korrekterweise einwenden wird, dass Integer für die Verarbeitung trotz dem günstiger ist, trotzdem...). Ein ShortInt als Typ ist vermutlich ausreichend. Der geht von -128 bis 127. Das reicht.

Zweitens solltest du die 11 über eine Konstante zuweisen. Du wirst die 11 noch als Zahl öfters brauchen. Somit ist eine Konstante zu empfehlen.
Delphi-Quellcode:
const
  MaxFeld = 11;

var
  Form1: TForm1;
  Spielfeld : array[0..MaxFeld, 0..MaxFeld] of ShortInt;
Was den Code angeht:
Delphi-Quellcode:
const
  wasser = 0 ;
  nahschiff = 1; //zur Positionierung der schiffe
  schiff = 2;
da ist nichts verkehrtes dran, aber das ist zu einfach. Was du dir hier an Arbeit sparst, mußt du später intelligent programmieren. Denn wenn du es dir jetzt einfach machst und Wasser 0 wählst und allen Schiffen dann eine 2, mußt du später einen Algorithmus programmieren der erkennt welche Schiffe untergegangen sind. Wenn dein Schiff von Länge 1 und Schiff von Länge 4 die gleiche Zahl hat, wie erkennst du, dass alle Bereiche von Schiff der Länge 4 getroffen wurden?

Bedenke, die Regeln in Wikipedia beschrieben die Papiervariante des Spiels. Da erkennt der Mensch ob alle Teile getroffen wurden. Bei einem Programm musst du es anders machen. Vorschlag: Wasser bekommt den Wert 0, dann bekommt jedes Schiff eine Zahl - Schiff 1 die 1, Schiff 2 die 2, Schiff 3 die 3, usw. Gehen wir davon aus, dass Schiff 3 vier Zellen lang ist, haben alle Zellen den Wert 3. Wurde eine Zelle getroffen, wird aus der positiven Zahl 3 die negative Zahl -3. Hat Schiff 3 alle Zahlen negativ, ist er versunken. Da braucht man keinen intelligenten Code um das zu prüfen.

Dieses Konzept ist für ein Programm und vor allem für dich einfacher zu händeln. Du musst nur das Array nur nach positiven 3'er durchsuchen um zu prüfen ob das Schiff versunken ist. Teilst du allen Schiffen die gleiche Zahl zu, was am Anfang einfacher ist, musst du später komplizierter prüfen ob ein Schiff versunken ist.

Geändert von Popov (28. Feb 2014 um 14:48 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#10

AW: Schiffe versenken programmieren

  Alt 28. Feb 2014, 15:21
Wäre das soweit erstmal richtig?
Nein, denn Du hast ein wichtiges Detail übersehen:
Zitat:
Delphi-Quellcode:
// Ausgabe des Spielfelds auf der Console
 for y := 0 to 11 do
   for x := 0 to 11 do ....
Wenn Du mit einem Form hantierst, kannst du nicht Write/Writeln für die Ausgabe nutzen.
Da kommt das weiter oben bereits angesprochene Stringgrid ins Spiel. eine andere Möglichkeit wäre es z.B. Form1.Canvas.Output zu nutzen oder gleich eine gans andere Komponente....

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:30 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