AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein einzelne Zellen im StringGrid vergleichen
Thema durchsuchen
Ansicht
Themen-Optionen

einzelne Zellen im StringGrid vergleichen

Ein Thema von Ischariot · begonnen am 6. Jan 2010 · letzter Beitrag vom 6. Jan 2010
Antwort Antwort
Ischariot

Registriert seit: 5. Jan 2010
2 Beiträge
 
#1

einzelne Zellen im StringGrid vergleichen

  Alt 6. Jan 2010, 01:38
Hey.
Ich habe mich dazu entschlossen mich in diesem Forum zu registrieren, da ich schon häufig bei Probleme hier Rat gefunden habe.
Jetzt ist jedoch so, dass ich keinen Beitrag finden kann, der sich mit meinem Problem befasst oder ich hab keinen gefunden...
Aber nun zu meinem Problem.
Ich bin dabei ein Spiel zu programmieren, soweit so gut.
Es geht um das vielleicht bekannte Spiel "Bewejeled" in einer vereinfachten Ausführung.
Dem Programm soll es möglich sein, den Inhalt von den einzelnen Zellen zu überprüfen und 2 Felder zu tauschen, per Mausklick, falls dadurch 3 Steine der selben Farbe nebeneinander gelangen. Diese 3 Felder sollen dann gelöscht werden und durch die oben liegenden ersetzt werden wodurch erreicht wird, dass die Steine von oben runterfallen und oben neue eingefügt werden.
Ich stecke nun jedoch fest, ich habe es schon geschafft, dass die Steine zufällig in meinem StringGrid angeordnet werden, jedoch stehe ich jetzt auf dem Schlauch sitze jetzt schon was länger davor und es will mir einfach nicht in Kopf kommen, wie ich weiter machen muss...
Zunächst würde es mir schon reichen, wenn mir jemand beantworten könnte:
Wie erklär ich meinem Programm, wenn 3 Zellen nebeneinander mit dem gleichen Image gefüllt sind, dass er diese löschen soll und die von oben übernimmt, sofern oben ein Image geladen ist.
Delphi-Quellcode:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    StringGrid1: TStringGrid;
    Image1: TImage;
    Image2: TImage;
    Image4: TImage;
    procedure FormCreate(Sender: TObject);
    procedure StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
              Rect: TRect; State: TGridDrawState);
    procedure Image4Click(Sender: TObject);
  private
  procedure bimageload;
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  Steine: array[0..6] of TBitmap;

implementation

{$R *.dfm}


procedure TForm1.bimageload;
 var x: integer;
  begin
   randomize;
   x:= random(16);
   Image1.Picture.LoadfromFile('backdrop' + InttoStr(x) + '.bmp');
  end;


procedure TForm1.FormCreate(Sender: TObject);
 begin
  bimageload;
  Image2.Picture.LoadfromFile('Play_.bmp');
  Image4.Picture.LoadFromFile('Quit_.bmp');
 end;

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
  var x,i:integer;
   begin
   randomize;
   x:=random(6);
   for i:=0 to 6 do begin
    Steine[i]:=TBitmap.Create;
    Steine[i].LoadfromFile(InttoStr(i)+'.bmp');
    end;
   stringgrid1.Canvas.Draw(rect.left, rect.top, (steine[x]));
   end;

procedure TForm1.Image4Click(Sender: TObject);
 begin
  close;
 end;
Ich wäre froh wenn mir da jemand helfen könnte.
Angehängte Dateien
Dateityp: rar bejeweled_pro_462.rar (235,2 KB, 0x aufgerufen)
  Mit Zitat antworten Zitat
Leanahtan

Registriert seit: 5. Jun 2009
62 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Spiel programmieren

  Alt 6. Jan 2010, 02:48
Willkommen im Forum.

Also erstmal als Hinweis - randomize sollte eigentlich nur einmal aufgerufen werden(z.B. bei Programmstart).

Ansonsten wäre es vielleicht hilfreich, wenn du mal genauer erläuterst, was dein Programm machen soll, und was es tatsächlich macht (eventuell auch die exe als Demo hier anhängen). Ich kenn das Spiel z.B. nicht, und kann mit deiner ersten Frage im Moment nichts anfangen.
Zur zweiten Frage - du könntest doch einfach die Bitmaps vergleichen. Im einfachsten Fall unterscheiden sich die Bitmaps in einem Eckpixel - dann würde es reichen nur jeweils die Farbe dieses einen Pixels abzufragen.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.071 Beiträge
 
Delphi 12 Athens
 
#3

Re: Spiel programmieren

  Alt 6. Jan 2010, 05:58
zum 2. kann/sollte man einen guten Rat beachten

> Logik/Daten werden nicht in der GUI/Anzeige untergebracht.

heißt, daß die Daten/Feldbelegungen im Programm gespeichert und veraltet werden
und aus diesen Daten dann jeweils die Bildbelegung/Anzeige generiert.

Also einfach ein Array nehmen und darin kannst du eigentlich recht einfach vergleichen.



Ansonten:
- bitte gib demn Thread einen ausagekräftigen Titel (das kannst einfach editieren)
du glaubst nicht, wieviele hier auch noch Spiele programmieren
- nur eine Frage pro Thread
andere suchen auch Lösungen und so werden welche vermischt und lassen sich schlecht finden
und bei mehreren Fragen kann es hier auch ein heilloses Durcheinander geben
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Ischariot

Registriert seit: 5. Jan 2010
2 Beiträge
 
#4

Re: einzelne Zellen im StringGrid vergleichen

  Alt 6. Jan 2010, 20:23
Danke für die Antworten.
Habe meinen Beitrag entsprechend editiert.
Das mit dem Vergleich der Pixel klingt ganz gut, nur wie genau stell ich das an?
  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 01:17 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