Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

[TuT] Gra na telefon android/IOS w delphi (XE7) link i filmik.


Rekomendowane odpowiedzi

Opublikowano
Ostatnio dla zabicia czasu stworzyłem prostą grę w XE7. Nie jestem profesjonalistą toteż ten artykuł nie będzie idealny, chce w nim pokazać że się da. Może zainspiruje kogoś tym do jakiegoś większego projektu ;).

 

No więc zaczynamy.

Tworzymy "Multi-Device Application" i zakładamy na forme:



-3x Button
-4x Label
-1x MotionSensor
-3x Rectangle
-4x Timer
-1x StyleBook (opcjonalnie, do poprawy wyglądu)


 

Powinno to wyglądać o tak:

 

post-542086-0-02265500-1424358785_thumb.png

 

Do globalnych zmiennych dodajemy:

 

 



var
  Form1: TForm1;
  p1x,
  p1y,
  p2x,
  p2y,
  p3x,
  p3y: real;
  b: byte;


 

Klikamy dwukrotnie na Timer1 i wpisujemy:

 



  rectangle1.Position.X := p1x;
  rectangle1.Position.Y := p1Y;


  rectangle2.Position.X := p2X;
  rectangle2.Position.Y := P2Y;


  rectangle3.Position.X := p3X;
  rectangle3.Position.Y := P3Y;


  Application.ProcessMessages;


 

Klikamy dwukrotnie na Timer2 i wpisujemy:

 



var
a: integer;
begin
  if p1y < 0 then
  begin
    b := 0;
    p1y := p1y + 15;
  end;
  if ((trunc(p1y) < trunc(p3y) - rectangle1.Height)) and ((trunc(p1y) > trunc(p3y) - rectangle1.Height - 5))and (p1x > p3x - rectangle1.Width / 1.3) and (p1x < p3x + (rectangle3.Width - rectangle1.Width) + rectangle1.Width / 1.3) then
  begin
    if b = 0 then
    begin
    label4.Text := inttostr(strtoint(label4.text) + 1);
    end;
    b := 1;
  end;


  if ((trunc(p1y) < trunc(p2y) - rectangle1.Height)) and ((trunc(p1y) > trunc(p2y) - rectangle1.Height - 5))and (p1x > p2x - rectangle1.Width / 1.3) and (p1x < p2x + (rectangle2.Width - rectangle1.Width) + rectangle1.Width / 1.3) then
  begin
    if b = 0 then
    begin
    label4.Text := inttostr(strtoint(label4.text) + 1);
    end;
    b := 1;
  end;


  if p1y > form1.Height + 250  then
  begin
    b := 1;
    p1y := form1.Height - 63;
    p1x := form1.Width / 2;
    if strtoint(label4.Text) > strtoint(label2.Text) then
      label2.Text := label4.Text;
    label4.Text := '0';
  end;


  if b = 1 then
  begin
    p1y := p1y - 5;
    if (rectangle1.Position.X + 20 * motionsensor1.Sensor.AccelerationY < form1.Width) and (rectangle1.Position.X + 20 * motionsensor1.Sensor.AccelerationY > 0) then
    p1x := rectangle1.Position.X + 20 * motionsensor1.Sensor.AccelerationY;
  end;




  if b = 0 then
  begin
    p1y := p1y + 5;
    if (rectangle1.Position.X + 20 * motionsensor1.Sensor.AccelerationY < form1.Width) and (rectangle1.Position.X + 20 * motionsensor1.Sensor.AccelerationY > 0) then
    p1x := rectangle1.Position.X + 20 * motionsensor1.Sensor.AccelerationY;
  end;
end;


 

 

Klikamy dwukrotnie na Timer3 i wpisujemy:

 



  p2y := form1.Height / 1.3;
  p2x := rectangle2.Position.X - 10;
  if rectangle2.Position.X < -150 then
  begin
    p2x := form1.Width;
    timer3.Interval := Random(150)+10;
  end;


 

Klikamy dwukrotnie na Timer4 i wpisujemy:

 

 



  p3y := form1.Height / 1.3;
  p3x := rectangle3.Position.X + 10;
  if rectangle3.Position.X > form1.Width + 150 then
  begin
    p3x := - 150;
    timer4.Interval := Random(150) + 10;
  end;


 

W  Form1 we zakładce events wybieramy "OnCreate" i piszemy:

 



  Timer1.Enabled:=False;
  Timer2.Enabled:=False;
  Timer3.Enabled:=False;
  Timer4.Enabled:=False;
  p1x := form1.Width / 2;
  p1y := form1.Height;


 

Teraz zostały nam tylko buttony do wpisania kodu, kolejno dwukrotnie klikamy na:

 

-Button1

 

 



  Timer1.Enabled:=False;
  Timer2.Enabled:=False;
  Timer3.Enabled:=False;
  Timer4.Enabled:=False;
  button2.Visible:=True;
  button3.Visible:=True;


 

-Button2

 



  Timer1.Enabled:=True;
  Timer2.Enabled:=True;
  Timer3.Enabled:=True;
  Timer4.Enabled:=True;
  button2.Visible:=False;
  button3.Visible:=False;


 

-Button3

 

 



close;


 

 

 

 

To tyle jeśli chodzi o przepisywanie "surowego kodu".

Teraz zmieniamy nazwe: 



-Button1 na "Pause"
-Button2 na "Start"
-Button3 na "Exit"
-Label1 na "Best Score"
-Label2 na "0"
-Label3 na "Score"
-Label4 na "0"


 

U mnie wygłąda to o tak:

 

post-542086-0-89589000-1424358785_thumb.png

 

W ostatnim etapie Interval Timer1 ustawiamy na "1" a pozostałych timerów na "30".

MotionSensor1 ustawiamy Active na "True"

 

Teraz z górnego paska wybieramy kolejno Project --> Options --> Application i zaznaczamy "Enables custon orientation" i "Landscape home right".

 

I nasz projekt jest gotowy do działania (hura :))

 

Opcjonalnie możemy pobrać "Premium Styles" do naszego XE7 wybrać je w StyleBook1 i w Properties Form1 wybrać StyleBook: StyleBook1. "Uładni" nam to grafikę lecz nie jest niezbędne. Link do "Premium Styles" http://www.4shared.com/zip/CoQ[...]8_firemonkey_premium_style.htm

 

 

 

Tym samym doszliśmy na koniec mojego artykułu, mam nadzieje że pomoże on chociaż jednej osobie :).

Jest to mój pierwszy raz więc proszę o wyrozumiałość.

 

Na koniec jeszcze amatorski filmik z końcowym efektem:


Opublikowano

jako osoba, która nie ma pojęcia o języku programowania w którym została ta gra napisana, mogę śmiało powiedzieć, że nic z tego tutoriala się nie dowiedziałem.

Opublikowano

@NopeDotAvi

Dzięki za opinie ;)

 

 

Poradnik ten pisałem raczej dla osób które już "skubnęły' trochę delphi, na początku nawet nie miałem zamiaru go publikować na MPC no ale skoro już to zrobiłem to napiszę parę wskazówek dla tych co dopiero zaczynają ;).

 

-Gra ta została stworzona w XE7 które jest oprogramowaniem stworzonym przez firmę embarcadero, dzięki niemu nie zmieniając kodu możemy stworzyć wersję naszej aplikacji na wingroze, robocika i nadgryzione jabłko. Niestety licencja na XE7 w najbiedniejszej wersji to koszt 1000 euro, na szczęście jest też wersja demo na 30 dni, potem format albo co xD, pewnie zmiana daty też wystarczy. Piraci z łatwością  znajdą tańszą wersję, oczywiście nie popieram.

 

-Gdy już wytrzaśniemy XE7 i nie wiemy co robić dalej polecam ten filmik nie jest on mojego autorstwa ale o ile dobrze pamiętam gdy rozpoczynałem programowanie w delphi on mi najbardziej pomógł wystartować, potem to już jakoś łatwo szło. Polecam też książkę Adama Boducha (podałbym nazwę forum na którym można ją przeczytać ale nie wiem czy mogę). Po zapoznaniu się z tymi materiałami sądzę że każdy da sobie jakoś radę ;)

 

 

 

 

Dla tych co znają delphi ale chcą zrobić coś własnego zamiast kopiować te moje wypociny wrzucam linijkę kodu która może się przydać, w starych wersjach delphi tego nie było a na polskich stronach mało jest o serii od embarcadero.

p1x := rectangle1.Position.X + 20 * motionsensor1.Sensor.AccelerationY;

W ten sposób pobiera się dane od G-sensora telefonu.

  • 2 tygodnie później...
  • 3 tygodnie później...
Opublikowano

Dużo osób podziela twoje zdanie lecz ja do nich nie należę. Dla mnie powstrzymuje go przy życiu embarcadero i póki oni się nie poddadzą delphi nie padnie ;).

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...