AGB  ·  Datenschutz  ·  Impressum  







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

Minesweeper

Ein Thema von saii · begonnen am 21. Mär 2015 · letzter Beitrag vom 29. Mär 2015
 
saii

Registriert seit: 20. Feb 2015
22 Beiträge
 
#13

AW: Minesweeper

  Alt 22. Mär 2015, 17:47
Kleines Update:

Hab es erstmal so gemacht, dass wenn man ein Panel anklickt, dass keine angrenzenden Minen hat, alle Panels "aufgedeckt" werden, die ebenfalls keine angrenzenden Minen haben und wiederum deren bnachbarten Panels, sodass die zuvor erwähnten Ringe aus Zahlen entstehen.
Im Original werden nur die aufgedeckt, die benachbart sind, aber das reicht mir so erstmal.

Mein Problem ist nun, dass in 7 von 10 Versuchen, eine Zahl auf einem Panel erscheint, die unmöglich ist (zB -1, 227, 981256). Diese erscheint NICHT immer dem gleichen Panel!
Ich komme nicht drauf, warum solch eine Zahl entsteht.

Falls ihr möchtet könntet ihr ja mal kurz einsehen. Ich wäre euch sehr dankbar!
Relevanter Quellcode + Screenshot des gemeinten Falles anbei.
(das StringGrid benutze ich, um sehen zu können wo die Minen sind)


*Edit: Hab das Problem gefunden (glaube Ich) Könnte sein, dass ich die Panels nicht in der Reihenfolge
gesetzt habe, in der sie da sind. Funktioniert die ganze Component-Aktion dadurch nicht richtig?
Krieg ich das nur durch das neu platzieren von 225 Panels wieder hin?





Form1

Delphi-Quellcode:
procedure TForm1.CannonFire(var A,B,m:integer); //Procedure für Linksklick
var h,j:integer;
begin
if mf[A,B]<>9 then //Falls keine Minen...
  begin
   m:=mf[A,B];
   if mf[A,B]=0 then
     begin
       h:=A;
       j:=B;
       for h:= 0 to 14 do
         begin
           for j:=0 to 14 do
             begin
               if mf[h,j]=0 then
                 begin
                   g := 'P_'+IntToStr(j)+'_'+IntToStr(h);
                   for i := 0 to Self.ComponentCount - 1 do
                     begin
                       if Self.Components[i].Name = g then
                       Panel:=TPanel(Self.Components[i]);
                     end;
                   Panel.Caption:='_';

                   if (h+1>=0) and (h+1<=14) and (j>=0) and (j<=14) then
                     begin
                       g := 'P_'+IntToStr(j)+'_'+IntToStr(h+1);
                       for i := 0 to Self.ComponentCount - 1 do
                         begin
                           if Self.Components[i].Name = g then
                             Panel:=TPanel(Self.Components[i]);
                         end;
                     Panel.Caption:=IntToStr(mf[h+1,j]);
                     if Panel.Caption='0then Panel.Caption:='_';
                     end;

                   if (h+1>=0) and (h+1<=14) and (j+1>=0) and (j+1<=14) then
                     begin
                       g := 'P_'+IntToStr(j+1)+'_'+IntToStr(h+1);
                       for i := 0 to Self.ComponentCount - 1 do
                         begin
                           if Self.Components[i].Name = g then
                             Panel:=TPanel(Self.Components[i]);
                         end;
                     Panel.Caption:=IntToStr(mf[h+1,j+1]);
                     if Panel.Caption='0then Panel.Caption:='_';
                     end;

                   if (h>=0) and (h<=14) and (j+1>=0) and (j+1<=14) then
                     begin
                       g := 'P_'+IntToStr(j+1)+'_'+IntToStr(h);
                       for i := 0 to Self.ComponentCount - 1 do
                         begin
                           if Self.Components[i].Name = g then
                             Panel:=TPanel(Self.Components[i]);
                         end;
                     Panel.Caption:=IntToStr(mf[h,j+1]);
                     if Panel.Caption='0then Panel.Caption:='_';
                     end;

                   if (h-1>=0) and (h-1<=14) and (j+1>=0) and (j+1<=14) then
                     begin
                       g := 'P_'+IntToStr(j+1)+'_'+IntToStr(h-1);
                       for i := 0 to Self.ComponentCount - 1 do
                         begin
                           if Self.Components[i].Name = g then
                             Panel:=TPanel(Self.Components[i]);
                         end;
                     Panel.Caption:=IntToStr(mf[h-1,j+1]);
                     if Panel.Caption='0then Panel.Caption:='_';
                     end;

                   if (h-1>=0) and (h-1<=14) and (j>=0) and (j<=14) then
                     begin
                       g := 'P_'+IntToStr(j)+'_'+IntToStr(h-1);
                       for i := 0 to Self.ComponentCount - 1 do
                         begin
                           if Self.Components[i].Name = g then
                             Panel:=TPanel(Self.Components[i]);
                         end;
                     Panel.Caption:=IntToStr(mf[h+1,j]);
                     if Panel.Caption='0then Panel.Caption:='_';
                     end;

                   if (h-1>=0) and (h-1<=14) and (j-1>=0) and (j-1<=14) then
                     begin
                       g := 'P_'+IntToStr(j-1)+'_'+IntToStr(h-1);
                       for i := 0 to Self.ComponentCount - 1 do
                         begin
                           if Self.Components[i].Name = g then
                             Panel:=TPanel(Self.Components[i]);
                         end;
                     Panel.Caption:=IntToStr(mf[h-1,j-1]);
                     if Panel.Caption='0then Panel.Caption:='_';
                     end;

                   if (h>=0) and (h<=14) and (j-1>=0) and (j-1<=14) then
                     begin
                       g := 'P_'+IntToStr(j-1)+'_'+IntToStr(h);
                       for i := 0 to Self.ComponentCount - 1 do
                         begin
                           if Self.Components[i].Name = g then
                             Panel:=TPanel(Self.Components[i]);
                         end;
                     Panel.Caption:=IntToStr(mf[h,j-1]);
                     if Panel.Caption='0then Panel.Caption:='_';
                     end;

                   if (h+1>=0) and (h+1<=14) and (j-1>=0) and (j-1<=14) then
                     begin
                       g := 'P_'+IntToStr(j-1)+'_'+IntToStr(h+1);
                       for i := 0 to Self.ComponentCount - 1 do
                         begin
                           if Self.Components[i].Name = g then
                             Panel:=TPanel(Self.Components[i]);
                         end;
                     Panel.Caption:=IntToStr(mf[h+1,j-1]);
                     if Panel.Caption='0then Panel.Caption:='_';
                     end;

                 end;
             end;
         end;
     end;


  end;
 if mf[A,B]=9 then //Falls Mine getroffen wurde..
  begin
   ShowMessage('Du hast Verloren!');
   close;
  end;
end;

Geändert von saii (22. Mär 2015 um 17:55 Uhr)
  Mit Zitat antworten Zitat
 


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 08:55 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