AGB  ·  Datenschutz  ·  Impressum  







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

Labyrinth darstellen

Ein Thema von GetCool · begonnen am 8. Jan 2004 · letzter Beitrag vom 14. Jan 2004
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    
GetCool

Registriert seit: 15. Dez 2003
Ort: Kaki
91 Beiträge
 
Delphi 8 Professional
 
#1

Labyrinth darstellen

  Alt 8. Jan 2004, 17:44
Hi,
möchte probieren, ein Programm zu erstellen, welches zufällig ein Labyrinth erstellt. Es soll am Rand einen Ausgang geben und in der Mitte soll eine Maus starten und alleine den Weg nach draußen finden. So viel zur Theorie. Mein Info-Lehrer hat mir diese Aufgabe gestellt und gesagt, dass noch nie einer seiner Schüler diese Aufgabe zufriedenstellend gelöst hat. Aber jetzt komm ich

Falls ihr jetzt denkend solltet dass ich wieder so einer bin, der seine HA gemacht haben möchte, am besten noch mit Code, der irrt. Erstens ist es keine HA und zweitens möchte ich euch nur fragen, wie ihr das Labyrinth darstellen würdet. Es muss ziemlich groß sein und sollte eine 2D-Draufsicht darstellen. Wie würdet ihr das Labyrinth zeichnen lassen? mit Strichen die die Wände zeigen? Oder das Programm in kleine Felder einteilen und die Felder dann mit einem Bitmap füllen? Wie würdet ihr vorgehen? Hoffe ihr habt da mal eine gute Idee. Ich will keinen Designpreis gewinnen, sondern eher ein simples Labyrinth haben, welche leicht in den noch nicht vorhandenen Algorithmus eingefügt werden kann.

Thx!
  Mit Zitat antworten Zitat
Benutzerbild von SleepyMaster
SleepyMaster

Registriert seit: 18. Mai 2003
634 Beiträge
 
#2

Re: Labyrinth darstellen

  Alt 8. Jan 2004, 18:43
OK! Das mit dem zeichnen finde ich einfach: Hier mein Code (/Idee)
Nur das erstellen von dem Labyrith is ned so einfach! (finde ich)
Wenn du also eine Lösung gefunden hast dann poste bitte den Code

Delphi-Quellcode:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Image1: TImage;
    Button2: TButton;
    procedure Button2Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    procedure ReDraw();
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  Spielfeld: array[0..50,0..50] of integer;

implementation

{$R *.dfm}

procedure TForm1.ReDraw;
var
  x,y:longint;
  a,b:longint;
begin
for x:=0 to 50 do
  begin
  for y:=0 to 50 do
    begin
    if Spielfeld[x,y]= 1 then
      begin
      for a:=0 to 10 do
        begin
        for b:=0 to 10 do
          begin
          Image1.Canvas.Pixels[x*10+a,y*10+b]:=clred;
          end;
        end;
      end;
    if Spielfeld[x,y]= 2 then
      begin
      for a:=0 to 10 do
        begin
        for b:=0 to 10 do
          begin
          Image1.Canvas.Pixels[x*10+a,y*10+b]:=clblue;
          end;
        end;
      end;
    end;
  end;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
randomize;
Spielfeld[random(50),random(50)]:=2;
Spielfeld[random(50),random(50)]:=1;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
ReDraw;
end;

end.
  Mit Zitat antworten Zitat
GetCool

Registriert seit: 15. Dez 2003
Ort: Kaki
91 Beiträge
 
Delphi 8 Professional
 
#3

Re: Labyrinth darstellen

  Alt 8. Jan 2004, 18:50
thx, werds gleich mal ausprobieren. Das das zeichnen nicht so schwierig wird, ist mir klar, das schwierige wird der Code nachher*g* Wollte ja mal wissen wie ihr das realisieren würdet. Ich mein man kann das Problem ja sehr verschieden angehen.

Wenn ich das irgendwann fertig hab poste ich das auf jeden Fall mal.
  Mit Zitat antworten Zitat
Benutzerbild von mercanery
mercanery

Registriert seit: 26. Dez 2003
Ort: Recklinghausen
41 Beiträge
 
Delphi 5 Enterprise
 
#4

Re: Labyrinth darstellen

  Alt 8. Jan 2004, 18:56
ich würd die fläche des labyrinths kacheln (zb mit panels(nat. ohne rahmen...muss der User ja net sehen!) und dann an jeder seite n shape zeichnen...dann ne menge verschachtelter if...then bedingungen...FERTIG!
  Mit Zitat antworten Zitat
Benutzerbild von shareholder
shareholder

Registriert seit: 1. Nov 2003
Ort: Denmark, Lolland, Marielyst
280 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: Labyrinth darstellen

  Alt 8. Jan 2004, 19:00
sollte man aus performencegründen zum zeichnen nicht lieber scanlines verwenden ?
Mastdarmpapillenentzündung ist cool
  Mit Zitat antworten Zitat
Benutzerbild von SleepyMaster
SleepyMaster

Registriert seit: 18. Mai 2003
634 Beiträge
 
#6

Re: Labyrinth darstellen

  Alt 8. Jan 2004, 19:03
SleepyMaster<>Performence
  Mit Zitat antworten Zitat
GetCool

Registriert seit: 15. Dez 2003
Ort: Kaki
91 Beiträge
 
Delphi 8 Professional
 
#7

Re: Labyrinth darstellen

  Alt 8. Jan 2004, 19:31
Mit den Kacheln hatte ich auch schon vor...finde das ist einfacher zu handhaben. Vor allem für die spätere Wegfindung. Als Problem seh ich hier allerdings die Perfomance. Hatte vor das Spielfeld 50x50 zu machen. Das wären dann 2.500 Panels Ich schätz einfach mal das das Programm damit nicht so irre glücklich wäre. Eine Einteilung in Kacheln wäre aber schön. Wie könnte ich das sonst noch lösen?
  Mit Zitat antworten Zitat
Benutzerbild von SleepyMaster
SleepyMaster

Registriert seit: 18. Mai 2003
634 Beiträge
 
#8

Re: Labyrinth darstellen

  Alt 8. Jan 2004, 19:35
Ich würds ehrlich gesagt so machen:
Das gleiche wie oben (nur en bissel überarbeitet!)

Das einzige was du machen musst ist in das array Spielfeld deine Integerwerte reinspeichern
(Das array Stellt dein Spielfeld da) und dann die procedure redraw ausführen!

Delphi-Quellcode:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Image1: TImage;
    Button2: TButton;
    Button1: TButton;
    Button3: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
  private
    Spielfeld: array[0..50,0..50] of integer;
    procedure ReDraw();
    procedure Clear();
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Clear;
var
  x,y:longint;
begin
Image1.Canvas.Brush.Color:=clwhite;
Image1.Canvas.Rectangle(0,0,Image1.Width,Image1.Height);
for x:=0 to 50 do
  begin
  for y:=0 to 50 do
    begin
    SpielFeld[x,y]:=0;
    end;
  end;
end;

procedure TForm1.ReDraw;
var
  x,y:longint;
  a,b:longint;
begin
for x:=0 to 50 do
  begin
  for y:=0 to 50 do
    begin
    if Spielfeld[x,y]= 1 then
      begin
      Image1.Canvas.Brush.Color:=clred;
      Image1.Canvas.Rectangle(x*10,y*10,x*10+10,y*10+10);
      end;
    if Spielfeld[x,y]= 2 then
      begin
      Image1.Canvas.Brush.Color:=clblue;
      Image1.Canvas.Rectangle(x*10,y*10,x*10+10,y*10+10);
      end;
    end;
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
clear;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  a,b:longint;
begin
Clear;
end;

{function ran:boolean;
begin
if random(2)= 1 then
  result := true
else result:=false;
end;

procedure TForm1.Button3Click(Sender: TObject);
var
  I:longint;
  a,b:integer;
begin
randomize;

a:=Random(50);
b:=Random(50);

for i:=10 to 200 do
  begin
  if ran then
    if ran then
      b:=b+1
    else
      b:=b-1
  else
    if ran then
      a:=a+1
    else
      a:=a-1;
  SpielFeld[a,b]:=1;
  end;
SpielFeld[a,b]:=1;
Redraw;
end;}


end.
  Mit Zitat antworten Zitat
Benutzerbild von mercanery
mercanery

Registriert seit: 26. Dez 2003
Ort: Recklinghausen
41 Beiträge
 
Delphi 5 Enterprise
 
#9

Re: Labyrinth darstellen

  Alt 8. Jan 2004, 19:37
würd mich sowieso ma interessieren...:

Kann man objekte nicht in schleifen ansprechen?

Bsp: ich hab die panels 1-2500 (Panel_1,Panel_2.usw..
Delphi-Quellcode:
for <Panels 1-2500> do
begin
bla;
blubb;
bla;
end;
[edit=r_kerber]Delphi-Tags korrigiert. Mfg, r_kerber[/edit]
  Mit Zitat antworten Zitat
XeRo

Registriert seit: 23. Okt 2003
Ort: Warth
461 Beiträge
 
Delphi 7 Enterprise
 
#10

Re: Labyrinth darstellen

  Alt 8. Jan 2004, 19:40
Ich würds vermutlich mit nem Array aus Bitmap im Vormat 50*50 machen und dann später einfach mit for i:= 1 to Anzahl der Felder schauen ob der nächste zug der Maus die wand rammt.

Hab schon mal ein Labyrinth gemacht(opensource), aber ohne KI, das war mir dann doch zu ...zeitaufwendig...Naje wennst das gschaft hast, kannst ja mal den prog posten
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    


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 22:51 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