Кто сможет перевести код? С Делфи в С# - 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; // И выводим результат
}
}