Кто сможет перевести код? С Делфи в С# - 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; // И выводим результат
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д