AGB  ·  Datenschutz  ·  Impressum  







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

Schiffe versenken Delphi Hilfe!!

Ein Thema von deznutsxi · begonnen am 31. Mai 2010 · letzter Beitrag vom 1. Jun 2010
Antwort Antwort
deznutsxi

Registriert seit: 31. Mai 2010
1 Beiträge
 
#1

Schiffe versenken Delphi Hilfe!!

  Alt 31. Mai 2010, 23:36
Hallo!!
Ich habe mich mit Delphi beschäftigt und benötige Hilfe.
Wollte SChiffe versenken programmieren, stehe jedoch vor einigen Problemen.
Wenn ich mit der Button2.Click procedure die SChiffe verstecken will (maximal 5) ist es dennoch möglich
mehr als 5 Schiffe zu verstecken, obwohl dies eigentlich durch die Kopfschleife verhindert seien sollte. Beim zufälligen Verstecken werden aber immer nur 5 "versteckt".
Jetzt noch eine andere Frage, wie kann ich die angezeigten Schiffe dann "unsichtbar" machen,sodass erst bei einem Treffer deren Position wieder erkennbar ist, bzw. wie wäre das "Suchen" der Schiffe am Besten umsetzbar!?

Vielen Dank für eure Hilfe

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, jpeg, ExtCtrls, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Image1: TImage;
    Image2: TImage;
    Image3: TImage;
    Image4: TImage;
    Image5: TImage;
    Image6: TImage;
    Image7: TImage;
    Image8: TImage;
    Image9: TImage;
    Image10: TImage;
    Image11: TImage;
    Image12: TImage;
    Image13: TImage;
    Image14: TImage;
    Image15: TImage;
    Image16: TImage;
    Image17: TImage;
    Image18: TImage;
    Image19: TImage;
    Image20: TImage;
    Image21: TImage;
    Image22: TImage;
    Image23: TImage;
    Image24: TImage;
    Image25: TImage;
    Image26: TImage;
    Image27: TImage;
    Image28: TImage;
    Image29: TImage;
    Image30: TImage;
    Button2: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    Label9: TLabel;
    Label10: TLabel;
    Label11: TLabel;
    Label13: TLabel;
    Label12: TLabel;
    Label14: TLabel;
    Label15: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure anzeige();
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  i,j,k:integer;
  a:array[1..5,1..6] of integer;

implementation

{$R *.dfm}

procedure TForm1.anzeige();


begin
if a[1][1]=0 then image1.picture.LoadFromFile('wasser.jpg');
if a[1][1]=1 then image1.picture.LoadFromFile('schuss.jpg');
if a[1][1]=2 then image1.picture.LoadFromFile('schiff.jpg');
if a[1][1]=3 then image1.picture.LoadFromFile('wrack.jpg');

if a[1][2]=0 then image2.picture.LoadFromFile('wasser.jpg');
if a[1][2]=1 then image2.picture.LoadFromFile('schuss.jpg');
if a[1][2]=2 then image2.picture.LoadFromFile('schiff.jpg');
if a[1][2]=3 then image2.picture.LoadFromFile('wrack.jpg');

if a[1][3]=0 then image3.picture.LoadFromFile('wasser.jpg');
if a[1][3]=1 then image3.picture.LoadFromFile('schuss.jpg');
if a[1][3]=2 then image3.picture.LoadFromFile('schiff.jpg');
if a[1][3]=3 then image3.picture.LoadFromFile('wrack.jpg');

if a[1][4]=0 then image4.picture.LoadFromFile('wasser.jpg');
if a[1][4]=1 then image4.picture.LoadFromFile('schuss.jpg');
if a[1][4]=2 then image4.picture.LoadFromFile('schiff.jpg');
if a[1][4]=3 then image4.picture.LoadFromFile('wrack.jpg');

if a[1][5]=0 then image5.picture.LoadFromFile('wasser.jpg');
if a[1][5]=1 then image5.picture.LoadFromFile('schuss.jpg');
if a[1][5]=2 then image5.picture.LoadFromFile('schiff.jpg');
if a[1][5]=3 then image5.picture.LoadFromFile('wrack.jpg');

if a[1][6]=0 then image6.picture.LoadFromFile('wasser.jpg');
if a[1][6]=1 then image6.picture.LoadFromFile('schuss.jpg');
if a[1][6]=2 then image6.picture.LoadFromFile('schiff.jpg');
if a[1][6]=3 then image6.picture.LoadFromFile('wrack.jpg');

if a[2][1]=0 then image7.picture.LoadFromFile('wasser.jpg');
if a[2][1]=1 then image7.picture.LoadFromFile('schuss.jpg');
if a[2][1]=2 then image7.picture.LoadFromFile('schiff.jpg');
if a[2][1]=3 then image7.picture.LoadFromFile('wrack.jpg');

if a[2][2]=0 then image8.picture.LoadFromFile('wasser.jpg');
if a[2][2]=1 then image8.picture.LoadFromFile('schuss.jpg');
if a[2][2]=2 then image8.picture.LoadFromFile('schiff.jpg');
if a[2][2]=3 then image8.picture.LoadFromFile('wrack.jpg');

if a[2][3]=0 then image9.picture.LoadFromFile('wasser.jpg');
if a[2][3]=1 then image9.picture.LoadFromFile('schuss.jpg');
if a[2][3]=2 then image9.picture.LoadFromFile('schiff.jpg');
if a[2][3]=3 then image9.picture.LoadFromFile('wrack.jpg');

if a[2][4]=0 then image10.picture.LoadFromFile('wasser.jpg');
if a[2][4]=1 then image10.picture.LoadFromFile('schuss.jpg');
if a[2][4]=2 then image10.picture.LoadFromFile('schiff.jpg');
if a[2][4]=3 then image10.picture.LoadFromFile('wrack.jpg');

if a[2][5]=0 then image11.picture.LoadFromFile('wasser.jpg');
if a[2][5]=1 then image11.picture.LoadFromFile('schuss.jpg');
if a[2][5]=2 then image11.picture.LoadFromFile('schiff.jpg');
if a[2][5]=3 then image11.picture.LoadFromFile('wrack.jpg');

if a[2][6]=0 then image12.picture.LoadFromFile('wasser.jpg');
if a[2][6]=1 then image12.picture.LoadFromFile('schuss.jpg');
if a[2][6]=2 then image12.picture.LoadFromFile('schiff.jpg');
if a[2][6]=3 then image12.picture.LoadFromFile('wrack.jpg');

if a[3][1]=0 then image13.picture.LoadFromFile('wasser.jpg');
if a[3][1]=1 then image13.picture.LoadFromFile('schuss.jpg');
if a[3][1]=2 then image13.picture.LoadFromFile('schiff.jpg');
if a[3][1]=3 then image13.picture.LoadFromFile('wrack.jpg');

if a[3][2]=0 then image14.picture.LoadFromFile('wasser.jpg');
if a[3][2]=1 then image14.picture.LoadFromFile('schuss.jpg');
if a[3][2]=2 then image14.picture.LoadFromFile('schiff.jpg');
if a[3][2]=3 then image14.picture.LoadFromFile('wrack.jpg');

if a[3][3]=0 then image15.picture.LoadFromFile('wasser.jpg');
if a[3][3]=1 then image15.picture.LoadFromFile('schuss.jpg');
if a[3][3]=2 then image15.picture.LoadFromFile('schiff.jpg');
if a[3][3]=3 then image15.picture.LoadFromFile('wrack.jpg');

if a[3][4]=0 then image16.picture.LoadFromFile('wasser.jpg');
if a[3][4]=1 then image16.picture.LoadFromFile('schuss.jpg');
if a[3][4]=2 then image16.picture.LoadFromFile('schiff.jpg');
if a[3][4]=3 then image16.picture.LoadFromFile('wrack.jpg');

if a[3][5]=0 then image17.picture.LoadFromFile('wasser.jpg');
if a[3][5]=1 then image17.picture.LoadFromFile('schuss.jpg');
if a[3][5]=2 then image17.picture.LoadFromFile('schiff.jpg');
if a[3][5]=3 then image17.picture.LoadFromFile('wrack.jpg');

if a[3][6]=0 then image18.picture.LoadFromFile('wasser.jpg');
if a[3][6]=1 then image18.picture.LoadFromFile('schuss.jpg');
if a[3][6]=2 then image18.picture.LoadFromFile('schiff.jpg');
if a[3][6]=3 then image18.picture.LoadFromFile('wrack.jpg');

if a[4][1]=0 then image19.picture.LoadFromFile('wasser.jpg');
if a[4][1]=1 then image19.picture.LoadFromFile('schuss.jpg');
if a[4][1]=2 then image19.picture.LoadFromFile('schiff.jpg');
if a[4][1]=3 then image19.picture.LoadFromFile('wrack.jpg');

if a[4][2]=0 then image20.picture.LoadFromFile('wasser.jpg');
if a[4][2]=1 then image20.picture.LoadFromFile('schuss.jpg');
if a[4][2]=2 then image20.picture.LoadFromFile('schiff.jpg');
if a[4][2]=3 then image20.picture.LoadFromFile('wrack.jpg');

if a[4][3]=0 then image21.picture.LoadFromFile('wasser.jpg');
if a[4][3]=1 then image21.picture.LoadFromFile('schuss.jpg');
if a[4][3]=2 then image21.picture.LoadFromFile('schiff.jpg');
if a[4][3]=3 then image21.picture.LoadFromFile('wrack.jpg');

if a[4][4]=0 then image22.picture.LoadFromFile('wasser.jpg');
if a[4][4]=1 then image22.picture.LoadFromFile('schuss.jpg');
if a[4][4]=2 then image22.picture.LoadFromFile('schiff.jpg');
if a[4][4]=3 then image22.picture.LoadFromFile('wrack.jpg');

if a[4][5]=0 then image23.picture.LoadFromFile('wasser.jpg');
if a[4][5]=1 then image23.picture.LoadFromFile('schuss.jpg');
if a[4][5]=2 then image23.picture.LoadFromFile('schiff.jpg');
if a[4][5]=3 then image23.picture.LoadFromFile('wrack.jpg');

if a[4][6]=0 then image24.picture.LoadFromFile('wasser.jpg');
if a[4][6]=1 then image24.picture.LoadFromFile('schuss.jpg');
if a[4][6]=2 then image24.picture.LoadFromFile('schiff.jpg');
if a[4][6]=3 then image24.picture.LoadFromFile('wrack.jpg');

if a[5][1]=0 then image25.picture.LoadFromFile('wasser.jpg');
if a[5][1]=1 then image25.picture.LoadFromFile('schuss.jpg');
if a[5][1]=2 then image25.picture.LoadFromFile('schiff.jpg');
if a[5][1]=3 then image25.picture.LoadFromFile('wrack.jpg');

if a[5][2]=0 then image26.picture.LoadFromFile('wasser.jpg');
if a[5][2]=1 then image26.picture.LoadFromFile('schuss.jpg');
if a[5][2]=2 then image26.picture.LoadFromFile('schiff.jpg');
if a[5][2]=3 then image26.picture.LoadFromFile('wrack.jpg');

if a[5][3]=0 then image27.picture.LoadFromFile('wasser.jpg');
if a[5][3]=1 then image27.picture.LoadFromFile('schuss.jpg');
if a[5][3]=2 then image27.picture.LoadFromFile('schiff.jpg');
if a[5][3]=3 then image27.picture.LoadFromFile('wrack.jpg');

if a[5][4]=0 then image28.picture.LoadFromFile('wasser.jpg');
if a[5][4]=1 then image28.picture.LoadFromFile('schuss.jpg');
if a[5][4]=2 then image28.picture.LoadFromFile('schiff.jpg');
if a[5][4]=3 then image28.picture.LoadFromFile('wrack.jpg');

if a[5][5]=0 then image29.picture.LoadFromFile('wasser.jpg');
if a[5][5]=1 then image29.picture.LoadFromFile('schuss.jpg');
if a[5][5]=2 then image29.picture.LoadFromFile('schiff.jpg');
if a[5][5]=3 then image29.picture.LoadFromFile('wrack.jpg');

if a[5][6]=0 then image30.picture.LoadFromFile('wasser.jpg');
if a[5][6]=1 then image30.picture.LoadFromFile('schuss.jpg');
if a[5][6]=2 then image30.picture.LoadFromFile('schiff.jpg');
if a[5][6]=3 then image30.picture.LoadFromFile('wrack.jpg');


end;

procedure TForm1.Button1Click(Sender: TObject);

begin
randomize;

for i:=1 to 5 do
  for j:=1 to 6 do
      a[i][j]:=0;

k:=1;
while (k<=5) do
begin
i:=random(5)+1;
j:=random(6)+1;
  if a[i][j]=0 then
  begin
  a[i][j]:=2;
  k:=k+1;
  end;

anzeige();

  end;
  end;



procedure TForm1.Button2Click(Sender: TObject);

begin
k:=1;
i:=strtoint(edit1.Text);
j:=strtoint(edit2.text);
if a[i][j]=0 then
while (k<=5) do
  begin
  a[i][j]:=2;
  k:=k+1;
  end;

anzeige();

  end;


end.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.537 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Schiffe versenken Delphi Hilfe!!

  Alt 1. Jun 2010, 08:19
Zitat:
Delphi-Quellcode:
while (k<=5) do
  begin
  a[i][j]:=2;
  k:=k+1;
  end;
Überleg einmal, was Du hier tust: Du weist demselben Feld 5 mal nacheinander denselben Wert zu.

[edit] P.S: Willkommen in der DP
P.P.S: Bist Du sicher, dass es sich um .NET handelt? [/edit]
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: Schiffe versenken Delphi Hilfe!!

  Alt 1. Jun 2010, 08:28
Zitat:
P.P.S: Bist Du sicher, dass es sich um .NET handelt?
Ich bin mir sicher, dass es sich nicht um .Net handelt
Markus Kinzler
  Mit Zitat antworten Zitat
idefix2

Registriert seit: 17. Mär 2010
Ort: Wien
1.027 Beiträge
 
RAD-Studio 2009 Pro
 
#4

Re: Schiffe versenken Delphi Hilfe!!

  Alt 1. Jun 2010, 08:33
Nur nebenbei: Schleifen mit einer festen Anzahl von Durchläufen sollte man immer mit einer for Schleife und nicht mit einer while Schleife programmieren. Damit wäre dir dann vielleicht noch eher aufgefallen, dass du in der schleife 5 mal genau dasselbe machst:

Delphi-Quellcode:
for k:=1 to 5 do
    a[i][j]:=2;
  Mit Zitat antworten Zitat
Jürgen Thomas

Registriert seit: 13. Jul 2006
Ort: Berlin
750 Beiträge
 
#5

Re: Schiffe versenken Delphi Hilfe!!

  Alt 1. Jun 2010, 08:59
Hallo und ebenfalls willkommen,

Meine Hinweise stehen unter Vorbehalt: Ich habe mir dein Vorgehen "von der Sachlogik" her nicht durchdacht.

Noch etwas zur Verbesserung: Die 1000 if-then-Konstruktionen sind nicht schön, weil in allen Fällen alle Prüfungen durchlaufen werden müssen, aber in jedem Abschnitt genau eine Variante zutreffen kann. Besser ist eine verschachtelte Konstruktion (kein wirklicher Delphi-Code) etwa so:
Delphi-Quellcode:
var Current_Image;
case (erster Index) of
  1: case (zweiter Index) of
       1: Current_Image = image1;
// usw.
case a[i][j] of

  0: Current_Image.picture.LoadFromFile('wasser.jpg');
// usw.
Damit zusammenhängend könnte die Anzeige-Prozedur geändert werden: Entweder es werden alle Bilder neu angezeigt, dann ist die o.g. Verschachtelung sinnvollerweise in eine doppelte Schleife umzusetzen. Oder es wird ein Bild neu angezeigt, dann sollten die Indizes als Parameter an die Anzeige-Prozedur übergeben und genutzt werden.

Wie gesagt: unter Vorbehalt, aber als Anregung auf jeden Fall nützlich.

Gruß Jürgen

[edit=mkinzler]Code-Tag durch Delphi-Tag ersetzt Mfg, mkinzler[/edit]
#D mit C# für NET, dazu Firebird
früher: Delphi 5 Pro, Delphi 2005 Pro mit C# (also NET 1.1)
Bitte nicht sauer sein, wenn ich mich bei Delphi-Schreibweisen verhaue; ich bin inzwischen an C# gewöhnt.
  Mit Zitat antworten Zitat
idefix2

Registriert seit: 17. Mär 2010
Ort: Wien
1.027 Beiträge
 
RAD-Studio 2009 Pro
 
#6

Re: Schiffe versenken Delphi Hilfe!!

  Alt 1. Jun 2010, 09:32
Die ganzen Abfagen kann man sich sparen mit:

Delphi-Quellcode:
const bildname: array[0..3] of string = ('wasser.jpg', 'schuss.jpg', 'schiff.jpg', 'wrack.jpg');
....

image1.picture.loadfromfile(bildname[a[1][1]]);
image2.picture.loadfromfile(bildname[a[1][2]]);
....
Und auf die Komponenten kann man in einer Schleife über den Namen zugreifen
'image'+intoToStr(i)


Nachdem Windows den Dateizugriff wohl im Cache halten wird, ist es vielleicht egal, trotzdem würde ich eher ein Feld mit 4 TImage Variablen anlegen und in die nur einmal die Bilder einlesen, unzählige Male die Dateien öffnen und lesen ist sicher nicht sinnvoll:

Delphi-Quellcode:
var bild: array [0..3] of timage;
bild[0].loadfromfile ('wasser.jpg');
bild[1].loadfromfile ('schuss.jpg');
und dann
Delphi-Quellcode:
image1.picture := bild[a[1][1]];
image2.picture := bild[a[1][2]];
...

[edit=mkinzler]Delphi-Tag eingefügt Mfg, mkinzler[/edit]

Geändert von mkinzler ( 6. Jun 2010 um 19:35 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


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 05:38 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