Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.05.2019, 14:30   #1
Pholano
 
Регистрация: 02.05.2019
Сообщений: 3
По умолчанию Как можно описать массив и переменные в классе?

Добрый день. Можно описать массив и переменные внутри класса?

Код программы:
Код:
var
  Form1: TForm1;
 
 
implementation
 
{$R *.DFM}
 
const
   MR = 10; 
   MC = 10; 
   NM = 10; 
   W    = 40;  
   H    = 40;  
 
var
   Pole: array[0..MR+1, 0.. MC+1] of integer;
   nMin  : integer; 
   nFlag : integer; 
   status : integer; 
Procedure NewGame(); forward;
Procedure ShowPole(Canvas : TCanvas; status : integer); forward;
Procedure Kletka(Canvas : TCanvas; row, col, status : integer); forward; 
Procedure Open( row, col : integer); forward;
Procedure Mina(Canvas : TCanvas; x, y : integer); forward; 
Procedure Flag( Canvas : TCanvas; x, y : integer); forward;
 
 
Procedure Kletka(Canvas : TCanvas; row, col, status : integer);
var
  x,y : integer; 
begin
  x := (col-1)* W + 1;
  y := (row-1)* H + 1;
  if status = 0  then
    begin
      Canvas.Brush.Color := clLtGray;
      Canvas.Rectangle(x-1,y-1,x+W,y+H);
      exit;
    end;
  if Pole[row,col] < 100  then
    begin
     Canvas.Brush.Color := clLtGray;  
     Canvas.Rectangle(x-1,y-1,x+W,y+H);
     if (status = 2) and (Pole[row,col] = 9)
     then Mina(Canvas, x, y);
     exit;
    end;
Canvas.Brush.Color := clWhite;     
Canvas.Rectangle(x-1,y-1,x+W,y+H);
if  ( Pole[row,col] = 100 ) then exit; 
if ( Pole[row,col] >= 101) and (Pole[row,col] <= 108 ) then
  begin
   Canvas.Font.Size := 14;
   Canvas.Font.Color := clBlue;
   Canvas.TextOut(x+3,y+2,IntToStr(Pole[row,col] -100 ));
   exit;
  end;
if ( Pole[row,col] >= 200 ) then Flag(Canvas, x, y);
if (Pole[row,col] = 109 ) then 
  begin
   Canvas.Brush.Color := clRed;
   Canvas.Rectangle(x-1,y-1,x+W,y+H);
  end;
if ( (Pole[row,col] mod 10) = 9)  and  (status = 2) then Mina(Canvas, x, y);
end;
 
 
Procedure ShowPole(Canvas : TCanvas; status : integer);
var
  row,col : integer;
begin
 for row := 1 to MR do
 for col := 1 to MC do
 Kletka(Canvas, row, col, status);
end;
 
 
Procedure Open( row, col : integer);
begin
 if Pole[row,col] = 0 then
   begin
    Pole[row,col] := 100;
    Kletka(Form1.Canvas, row,col, 1);
    Open(row,col-1);
    Open(row-1,col);
    Open(row,col+1);
    Open(row+1,col);
    Open(row-1,col-1);
    Open(row-1,col+1);
    Open(row+1,col-1);
    Open(row+1,col+1);
   end
 else if (Pole[row,col] < 100) and ( Pole[row,col] <> -3 ) then
   begin
    Pole[row,col] := Pole[row,col] + 100;
    Kletka(Form1.Canvas, row, col, 1);
   end;
end;
 
procedure NewGame();
var
 row,col : integer; 
 n : integer;     
 k : integer;      
begin
 for row :=1 to MR do
 for col :=1 to MC do
 Pole[row,col] := 0;
 
 Randomize();  
 n := 0; 
 repeat
  row := Random(MR) + 1;
  col := Random(MC) + 1;
  if ( Pole[row,col] <> 9) then
   begin
    Pole[row,col] := 9;
    n := n+1;
   end;
 until ( n = NM );
 
 for row := 1 to MR do
 for col := 1 to MC do
 if ( Pole[row,col] <> 9 ) then
   begin
    k :=0 ;
    if Pole[row-1,col-1] = 9 then k := k + 1;
        if Pole[row-1,col]   = 9 then k := k + 1;
        if Pole[row-1,col+1] = 9 then k := k + 1;
        if Pole[row,col-1]   = 9 then k := k + 1;
        if Pole[row,col+1]   = 9 then k := k + 1;
        if Pole[row+1,col-1] = 9 then k := k + 1;
        if Pole[row+1,col]   = 9 then k := k + 1;
        if Pole[row+1,col+1] = 9 then k := k + 1;
        Pole[row,col] := k;
   end;
 status := 0;  
 nMin   := 0;  
 nFlag  := 0;  
end;
 
 
Procedure Mina(Canvas : TCanvas; x, y : integer);
begin
    with Canvas do
        begin
           Brush.Color := clGreen;
           Pen.Color := clBlack;
             Rectangle(x+16,y+26,x+24,y+30);
           Rectangle(x+8,y+30,x+16,y+34);
           Rectangle(x+24,y+30,x+32,y+34);
           Pie(x+6,y+28,x+34,y+44,x+34,y+36,x+6,y+36);
           MoveTo(x+12,y+32); LineTo(x+26,y+32);
           MoveTo(x+8,y+36);  LineTo(x+32,y+36);
           MoveTo(x+20,y+22); LineTo(x+20,y+26);
           MoveTo(x+8, y+30); LineTo(x+6,y+28);
           MoveTo(x+32,y+30); LineTo(x+34,y+28);
         end;
end;
 
 
Procedure Flag( Canvas : TCanvas; x, y : integer);
var
   p : array [0..3] of TPoint;  
   m : array [0..4] of TPoint;  
begin
    p[0].x:=x+4;   p[0].y:=y+4;
    p[1].x:=x+30;  p[1].y:=y+12;
    p[2].x:=x+4;   p[2].y:=y+20;
    p[3].x:=x+4;     p[3].y:=y+36; 
  m[0].x:=x+8; m[0].y:=y+14;
    m[1].x:=x+8; m[1].y:=y+8;
    m[2].x:=x+10; m[2].y:=y+10;
    m[3].x:=x+12; m[3].y:=y+8;
    m[4].x:=x+12; m[4].y:=y+14;
with Canvas do
 begin
  Brush.Color := clRed;
  Pen.Color := clRed;
  Polygon(p);  
 
  Pen.Color := clBlack;
  MoveTo(p[0].x, p[0].y);
  LineTo(p[3].x, p[3].y);
 
  Pen.Color := clWhite;
  Polyline(m);
  Pen.Color := clBlack;
 end;
end;
 
procedure TForm1.Form1Create(Sender: TObject);
var
  row,col : integer;
begin
   for row :=0 to MR+1 do
   for col :=0 to MC+1 do
     Pole[row,col] := -3;
   NewGame(); 
   Form1.ClientHeight := H*MR + 1;
   Form1.ClientWidth := W*MC + 1;
end;
 
 
procedure TForm1.Form1MouseDown(Sender: TObject; Button: TMouseButton;
                                Shift: TShiftState; X, Y: Integer);
var
  row, col : integer;
begin
 if status = 2 then exit;
 if status = 0 then status := 1;
 
 row := Trunc(y/H) + 1;
 col := Trunc(x/W) + 1;
if Button = mbLeft then
  begin
   if Pole[row,col] = 9 then
     begin 
      Pole[row,col] := Pole[row,col] + 100;
      status := 2; 
      ShowPole(Form1.Canvas, status);
     end
   else if  Pole[row,col] < 9 then Open(row,col);
  end
else if Button = mbRight then
 if Pole[row,col] > 200 then
  begin
 
   nFlag := nFlag - 1;
   Pole[row,col] := Pole[row,col] - 200; 
   x := (col-1)* W + 1;
   y := (row-1)* H + 1;
   Canvas.Brush.Color := clLtGray;
   Canvas.Rectangle(x-1,y-1,x+W,y+H);
  end
 else
  begin 
   nFlag := nFlag + 1;
   if  Pole[row,col] = 9 then nMin := nMin + 1;
   Pole[row,col] := Pole[row,col]+ 200;  
   if (nMin = NM) and (nFlag = NM) then
    begin
     status := 2;  
     ShowPole(Form1.Canvas, status);
    end
   else Kletka(Form1.Canvas, row, col, status);
  end;
end;
 
 
procedure TForm1.N1Click(Sender: TObject);
begin
  NewGame();
  ShowPole(Form1.Canvas,status);
end;
 
procedure TForm1.Form1Paint(Sender: TObject);
begin
        ShowPole(Form1.Canvas, status);
end;
 
 
end.
______________________
Используйте тег [CODE] (кнопка [CODE] в форме сообщения) при вставке кода на форум. Подробнее в FAQ

Последний раз редактировалось Alex11223; 02.05.2019 в 15:00.
Pholano вне форума Ответить с цитированием
Старый 02.05.2019, 15:03   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

А кто мешает?


Цитата:
Сообщение от Pholano Посмотреть сообщение
Pole
Field
Цитата:
Сообщение от Pholano Посмотреть сообщение
Kletka
Cell
Цитата:
Сообщение от Pholano Посмотреть сообщение
Mina
Mine, Bomb
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Можно ли как то в классе принимать любой тип? - C++ SadiQ228 Общие вопросы C/C++ 9 23.07.2018 00:51
Как описать константу в классе Delphi? иванлеон Общие вопросы Delphi 2 01.05.2012 11:05
Чем отличается, если объявлять в классе переменные сразу после скобки и после public? TwiX Общие вопросы C/C++ 2 09.12.2009 16:11
Как в базовом классе описать указатель на объект производного класса? MasterGH Общие вопросы C/C++ 3 16.11.2009 02:55
можно ли в одном классе реализовать несколько интерфейсов Galinka08 Общие вопросы по Java, Java SE, Kotlin 2 08.03.2008 21:33