Autor Beitrag
Linuxguru
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Fr 12.07.02 22:53 
Hallo...

Ich bin an sonem Spiel Bomberman. Die Spielfläche ist fertig, und ein Bild 30x30 kann ich darauf auch schon mit der Tastatur steuern. Jetzt soll dieses Logo aber nicht überall langlaufen dürfen. Gibt es eine Möglichkeit mit Arrays diesen nur auf bestimmten Wegen laufen zu lassen??? und wie verwendet man diese arrays und delphix.

Danke schon mal im Voraus
Tino
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Veteran
Beiträge: 9839
Erhaltene Danke: 45

Windows 8.1
Delphi XE4
BeitragVerfasst: Fr 12.07.02 23:17 
Du baust doch irgendwie die Spielfläche auf, oder? Dann hast Du doch schon ein Array (Matrix) von z. B. 30 x 30 Elementen. Jedes Element hat dann halt einen Status oder eine Eigenschaft die besagt: hier befindet sich ein Stein, hier befindet sich Spieler A, hier befindet sich ein...

Wenn Du jetzt die Spieler auf ein Element navigieren willst wo sich z. B. ein Stein befindet dann ist die Sach doch klar: geht nicht :-D

Hilft Dir das? Wenn nicht dann erkläre bitte genau wie Du das Spielfeld aufbaust und wie Du die Daten intern merkst (also Stein dort, Spieler hier,...) etc.

Gruß
TINO
Linuxguru Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Fr 12.07.02 23:26 
danke erst mal für die antwort.

also das spielfeld ist ein bitmap, was sich auf einer dximagelist befindet. das ist 800x600 pixel gross. die figur, die da rumrennt, ist zur zeit auch nur eine. (bitmap 30 x 30)... das problem ist jetzt, das sich noch keine steine auf dem Bitmap befinden, sodass der spieler noch überall lang kommt.

Hier mal mein Quelltext zur Zeit

ausblenden volle Höhe Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
unit BombU;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  DXDraws, Grids, StdCtrls, DXClass, ExtCtrls, DXInput, ImgList, DXSprite;

type
  TForm1 = class(TForm)
    DXDraw1: TDXDraw;
    DXInput1: TDXInput;
    DXTimer1: TDXTimer;
    DXImageList1: TDXImageList;
    DXSpriteEngine1: TDXSpriteEngine;
    procedure DXTimer1Timer(Sender: TObject; LagCount: Integer);
    procedure DXDraw1Initialize(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;
  TUnserLogo = class(TImageSprite);
  TGeist = class(TImageSprite);
  TBack = class(TBackgroundSprite);

var
  Form1: TForm1;
  Xpos :integer=0;
  Ypos : Integer=0;
  Xv : integer=1;
  Yv : integer=1;
  UnserLogo : TUnserLogo;
  UnserBack : TBack;
  Geist : array [1..4] of TGeist;
  j : integer=0;
implementation

{$R *.DFM}

procedure TForm1.DXTimer1Timer(Sender: TObject; LagCount: Integer);
begin

  DXInput1.Update;   // Abfrage DXInput

    if isUp in DXInput1.states then ypos:=ypos-10;
    if isDown in form1.DXInput1.states then ypos:=ypos+10;
    if isLeft in form1.DXInput1.states then xpos:=xpos-10;
    if isRight in form1.DXInput1.states then xpos:=xpos+10;
    if isButton1 in form1.DXInput1.states then
      begin
        xpos:=dxdraw1.surfacewidth div 2-(DXImageList1.Items[0].Width div 2+22);
        ypos:=dxdraw1.surfaceheight div 2-(DXImageList1.Items[0].height div 2-50);
      end;

// Bewegungsroutinen zuende

  UnserLogo.X:=xpos;
  UnserLogo.Y:=Ypos;

  if not DXDraw1.CanDraw then Exit;  // Zeichenroutinene
    DXSpriteEngine1.Move(1);
    DXDraw1.Surface.Fill(0);
    DXSpriteEngine1.Draw;
    DXDraw1.Flip;

  if xpos <= 0 then xpos:=0;
  if xpos >= 760 then xpos:=760;
  if ypos <= 0 then ypos:=0;
  if ypos >= 560 then ypos:=560;

end;

procedure TForm1.DXDraw1Initialize(Sender: TObject);
begin
  screen.Cursor := crNone;
  UnserLogo := TUnserLogo.Create(DXSpriteEngine1.Engine);  //logo erstellen
  UnserLogo.Image := Form1.DXImageList1.Items.Find('logo');
  UnserLogo.X := 0;
  UnserLogo.Y := 0;
  UnserLogo.Width := UnserLogo.Image.Width;
  UnserLogo.Height := UnserLogo.Image.Height;

  UnserBack := Tback.create(dxSpriteEngine1.Engine);  // background erstellen
  UnserBack.setmapsize(1, 1);
  UnserBack.image:= Form1.DXImagelist1.items.Find('erde');
  UnserBack.x:= -5;
  UnserBack.y:= -5;


end;

end.

Das Spielfeld besteht nicht wie von dir vermutet aus steinen(30x30), sonder ein komplettes bmp. Ich möchte praktisch so ne art gitter mit einer gittergrösse von 30x30 drüberlegen und in diesem gitter dem spieler erlauben, wo er langlaufen darf und wo nicht