Кто сможет перевести код? С Делфи в С# - C#

Узнай цену своей работы

Формулировка задачи:

unit Unit1;
 
interface
 
uses
 
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls, Menus, XPMan;
 
type
  TForm1 = class(TForm)
    Fon: TImage;
    Trniz1: TImage;
    Trniz2: TImage;
    Trniz3: TImage;
    Trniz4: TImage;
    Trverh1: TImage;
    Trverh2: TImage;
    Trverh3: TImage;
    Trverh4: TImage;
    Ptisa: TImage;
    Timer1: TTimer;
    Timer2: TTimer;
    bord: TImage;
    Label1: TLabel;
    MainMenu1: TMainMenu;
    FlappyBird1: TMenuItem;
    Exit1: TMenuItem;
    XPManifest1: TXPManifest;
    Label2: TLabel;
    procedure Timer1Timer(Sender: TObject);
    procedure Timer2Timer(Sender: TObject);
    procedure FormKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure Label1Click(Sender: TObject);
    procedure Exit1Click(Sender: TObject);

  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
const
 
  zazor = 120; //зазор между трубами
  nzaz = 180; //начало зазора (по нижней трубе)
 
var
  Form1: TForm1;
 
  DestRect: TRect;
  i, j, n,t: Integer;
  Ptiniz:boolean;
  Ptish:integer;
  Ptiinc:integer;
  kol:integer;
  implementation
{$R *.dfm}
 
procedure TForm1.Timer1Timer(Sender: TObject);
begin
 
  Form1.DoubleBuffered:=true;
 
  if bord.Left * -1 = Form1.ClientWidth then
  begin
    //кончился бордюр, запустим его сначала
    bord.Left := 0;
  end;
  if Trniz1.Left + Trniz1.Width = 0 then
  begin
    Trniz1.Left := Form1.ClientWidth;
    Trniz1.Top := nzaz + Random(200); //150 это от верха начало
 
    Trverh1.Left := Form1.ClientWidth;
    Trverh1.Top := Trniz1.Top - 300 - zazor;
  end;
 
  if Trniz2.Left + Trniz2.Width = 0 then
  begin
    Trniz2.Left := Form1.ClientWidth;
    Trniz2.Top := nzaz + Random(200); //100 это от верха начало
 
    Trverh2.Left := Form1.ClientWidth;
    Trverh2.Top := Trniz2.Top - 300 - zazor;
  end;
 
  if Trniz3.Left + Trniz3.Width = 0 then
  begin
    Trniz3.Left := Form1.ClientWidth;
    Trniz3.Top := nzaz + Random(200); //100 это от верха начало
 
    Trverh3.Left := Form1.ClientWidth;
    Trverh3.Top := Trniz3.Top - 300 - zazor;
  end;
 
  if Trniz4.Left + Trniz4.Width = 0 then
  begin
    Trniz4.Left := Form1.ClientWidth;
    Trniz4.Top := nzaz + Random(200); //100 это от верха начало
 
    Trverh4.Left := Form1.ClientWidth;
    Trverh4.Top := Trniz4.Top - 300 - zazor;
  end;
 
    for i := 1 to ComponentCount - 1 do
    if Components[i] is TImage then
    begin
 
  //двигаем трубы
    if (Components[i] as TImage).Name <> 'Ptisa' then
       (Components[i] as TImage).Left := (Components[i] as TImage).Left - 2;
 
  ////////////////////////////////////////////
 
   if (Components[i] as TImage).Name <> 'Ptisa' then
   if IntersectRect(DestRect, Ptisa.BoundsRect, (Components[i] as TImage).BoundsRect) then
   begin
          Label1.Visible := True;
          Timer1.Enabled := False;
          Timer2.Enabled := False;
 
        end;
    end;
 
    //определим рекорд
    if (Ptisa.Left = Trniz1.Left) or (Ptisa.Left = Trniz2.Left) or
       (Ptisa.Left = Trniz3.Left) or (Ptisa.Left = Trniz4.Left)
    then
    inc(kol);
    label2.caption:= 'Ваш рекорд = ' + IntToStr(kol);
 
end;
 
procedure TForm1.Timer2Timer(Sender: TObject);
begin
 
 //вниз летит
  if Ptiniz = True then
  begin
    Timer2.Interval := 30; //быстрее скорость
    Inc(Ptish);
    Ptisa.Top := Ptisa.Top + Ptish;
  end;
 //вверх летит
  if Ptiniz = False then
  begin
    Timer2.Interval := 10;
    Inc(Ptiinc);
    Ptisa.Top := Ptisa.Top - 5;
 
    if Ptiinc = 10 then
    begin
      Ptiniz := True;
      Ptiinc := 0;
    end;
  end;
end;
 
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
 
 //вверхняя стрелка
  if(key = VK_SPACE) then
  begin
    Ptiniz := False; //нажали вверх летим
    Ptish := 0; //счетчик низ на ноль
  end;
 
end;
 
procedure TForm1.Label1Click(Sender: TObject);
begin
 
  Timer1.Enabled := True;
  Timer2.Enabled := True;
  Label1.visible := False;
  Label2.caption :='0';
  kol:=0;
 
  Trniz1.Left := 484;
  Trniz2.Left := 634;
  Trniz3.Left := 784;
  Trniz4.Left := 934;
 
  Trverh1.Left := 484;
  Trverh2.Left := 634;
  Trverh3.Left := 784;
  Trverh4.Left := 934;
 
  Ptisa.Left := 184;
  Ptisa.Top := 154;
  Ptisa.Width := 34; //ширина
  Ptisa.Height := 24;
 
  bord.Left := 0;
 
end;
 
procedure TForm1.Exit1Click(Sender: TObject);
begin
 
  Close;
 
end;
 
end.

Решение задачи: «Кто сможет перевести код? С Делфи в С#»

textual
Листинг программы
private void timer1_Tick(object sender, EventArgs e)
        {
            Random RandomNumber1 = new Random(DateTime.Now.Millisecond); //Задаем переменную RandomNumber1 Подробнее ниже.
            
            if (bord.Left*(-1) == this.ClientSize.Width) bord.Left = 0; // проверяем условие если Нижний бордюр переместился на величину ширины окна, то перемещаем его  в начало.
            if (Fon.Left * (-1) == this.ClientSize.Width) Fon.Left = 0;// Тоже самое и для заднего фона.
            if (Trniz1.Left + Trniz1.Width <= 0) // если при движении труба ушла за пределы окна
            {                                                 // то перемещаем её в начало и меняем положение до верха.
                Trniz1.Left = this.ClientSize.Width;
                Trniz1.Top = nzaz + RandomNumber1.Next(0, 200);
                Trverh1.Left = this.ClientSize.Width;
                Trverh1.Top = Trniz1.Top - 300 - zazor;
            }
 
            if (Trniz2.Left + Trniz2.Width <= 0) // Все то-же самое и с остальными трубами
            {
                Trniz2.Left = this.ClientSize.Width;
                Trniz2.Top = nzaz + RandomNumber1.Next(0, 200); 
 
                Trverh2.Left = this.ClientSize.Width;
                Trverh2.Top = Trniz2.Top - 300 - zazor;
            }
            if (Trniz3.Left + Trniz3.Width <= 0)
            {
                Trniz3.Left = this.ClientSize.Width;
                Trniz3.Top = nzaz + RandomNumber1.Next(0, 200); 
 
                Trverh3.Left = this.ClientSize.Width;
                Trverh3.Top = Trniz3.Top - 300 - zazor ;
            }
            if (Trniz4.Left + Trniz4.Width <= 0)
            {
                Trniz4.Left = this.ClientSize.Width;
                Trniz4.Top = nzaz + RandomNumber1.Next(0, 200); 
 
                Trverh4.Left = this.ClientSize.Width;
                Trverh4.Top = Trniz4.Top - 300 - zazor;
            }
            // Далее необходимо передвинуть все изображения(PictureBox) Кроме птицы на шаг - 2 влево.
            foreach (Control c in this.Controls)  //Перебираем все объекты на форме
            { 
                if (c.GetType() == typeof(PictureBox)) // подробнее об этой функции можно узнать из ссылки ниже.
                {
                    if (c.Name != "Ptisa") c.Left = c.Left - 2; // если имя объекта не Ptisa то перемещаем влево на 2
                    ///////
                      if (c.Name != "Ptisa" && c.Name != "Fon") // Проверяем на столкновение с трубами и бордюром
                      {
                        Rectangle r1 = c.DisplayRectangle;          // про этот код так-же можно узнать по ссылке ниже
                        Rectangle r2 = Ptisa.DisplayRectangle;
                        r1.Location = c.Location;
                        r2.Location = Ptisa.Location;
                        if (r1.IntersectsWith(r2))                 // Если произошло столкновение, то 
                        {
                            label2.Visible = true;                   // label2 делаем видимым
                            timer1.Enabled = false;                //Останавливаем таймкеры
                            timer2.Enabled = false;
                        }
                      }
                }
            }
            //определим рекорд 
            if ((Ptisa.Left == Trniz1.Left) || (Ptisa.Left == Trniz2.Left) || (Ptisa.Left ==Trniz3.Left)||(Ptisa.Left == Trniz4.Left))
            {                    //Если Птица пересекает какую-либо трубу, то 
                ++kol;         // Увеличиваем переменную на 1
                label1.Text = "Ваш рекорд: " + kol;  // И выводим результат
            }
 
        }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 4 из 5
Похожие ответы