Aplikasi Game sederhana


(by Ichsan 2011)














Sebelum kita mulai tutorial dasar membuat game ini, kami menganggap bahwa kalian telah mengerti dasar2 programming pada Delphi.
Ok langsung saja kita mulai teori dasarnya yaitu membuat bola pantul sederhana..G usah Mikir Macem-macem,gampang sekaliiiiii….ikuti aja
  1. Pertama kali buka borland delphi 7.
  2. letakkan sebuah shape (letak komponen ini ada di tab additional) pada posisi sembarang pada form dan beri nama pada property “name : ‘bola’”, lalu ubah property “shape : ‘circle’”. Lalu beri ukuran pada property height dan width masing2 beri ukuran yang sama yaitu ‘25’.













  1. Setelah itu create juga timer ( komponen ada di tab system ), ubah property sbb :

















  1. Ok cukup 2 komponen itu saja yang kita butuhkan selanjutnya kita hanya akan bermain main pada coding program..Dasar teori dari game ini ialah kita pelajari collotion detection atau deteksi tumbukan atau tabrakan..karena bola memantul bila ada titik pantul..
  2. Langkah berikutnya kita masuk ke window coding, pertama kali buat variable global letakkan dibawah ‘implementation’ >> ‘var atas,bawah,kiri,kanan : boolean;’















  1. Lalu pada event formcreate inisialisasikan variable td sebagai berikut :
procedure TForm1.FormCreate(Sender: TObject);
begin
atas := false;
bawah := false;
kiri := false;
kanan := false;
end;

Penjelasan : Pada saat program dijalankan mula-mula kondisi bola diam sebelum diberi perintah untuk bergerak ke atas,bawah,kiri,ataupun kanan.

  1. Selanjutnya kita beri perintah pada bola tadi untuk bergerak dengan perjanjian sebagai berikut : apabila keyboard ‘left’ ditekan maka bola bergerak ke kiri, sehingga diperoleh listing program pada event ‘TForm1.FormKeyDown’ sbb
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
if key = 37 then {37 merupakan key ascii untuk keyboard left}
begin
atas := false;
bawah := false;
kiri := true; { variable kiri di beri value ‘true’ }
kanan := false;
end;
 
end;

Selanjutnya apabila keyboard ‘right’ ditekan maka bola akan bergerak ke kanan dengan listing program lengkap pada event ‘TForm1.FormKeyDown’ sebagai berikut :

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
 
if key = 37 then { key ascii kiri }
begin
atas := false;
bawah := false;
kiri := true;
kanan := false;
end;

if key = 38 then { key ascii atas }
begin
atas := true;
bawah := false;
kiri := false;
kanan := false;
end;

if key = 39 then { key ascii kanan }
begin
atas := false;
bawah := false;
kiri := false;
kanan := true;
end;

if key = 40 then { key ascii bawah }
begin
atas := false;
bawah := true;
kiri := false;
kanan := false;
end;
timer1.Enabled := true;
end;

Pada akhir listing program di event ‘TForm1.FormKeyDown’ di atas terdapat  timer1.enabled := true; maksudnya ialah ketika tombol pada keyboard ditekan, maka timer dijalankan. Fungsi timer itu sendiri yaitu sebagai clock yang dijelaskan pada point 8.
  1. Sekarang masuk pada bagian yang perlu sedikit konsentrasi untuk newbe. Kita masuk pada pembahasan timer. Timer pada Delphi memiliki karakteristik yaitu gampangannya sebagai clock untuk  mengerjakan perintah pada interval tertentu yang terdapat pada property timer yang telah kita inisialisasikan pada awal tadi. Pada ‘timer1’ yang kita create pada form saat awal kita buat tadi, pada  bagian property terdapat ‘interval’.maksudnya adalah setiap berapa millisecond perintah pada timer di eksekusi..pada Delphi 7, interval timer menggunakan satuan millisecond,jadi apabila kita isi interval = 1000 maka timer mengeksekusi perintah tiap 1 detik. Nah tadi di awal kita meberi interval 10 pada timer sehingga tiap 10ms akan mengeksekusi perintah pada event ontimer, mengapa kita pakai 10 ms?karena kalau bola bergerak tiap 1000ms akan cukup lambat perpindahan antar pikselnya.OK kita langsung pada pembahasan selanjutnya..
  1. Click komponen timer1 yang telah kita letakkan pada form tadi, dan pada object inspector tab ‘events’ double click event ‘ontimer’ , lalu pada listing program di event ‘TForm1.Timer1Timer’ ketik      listing sebagai berikut :

procedure 
TForm1.Timer1Timer (Sender: TObject);
begin

if 
atas then
begin
bola.Top := bola.Top - 5;
end;
end;

Penjelasan : INGAT Apabila tombol atas ditekan, maka variable atas akan bernilai true dan yang lain bernilai false, sehingga pada saat event ontimer di eksekusi akan menjalankan perintah ‘bola.top := bola.top – 5’. Maksudnya yaitu posisi bola pada sumbu y (top) akan bergeser keatas sebanyak 5 piksel ( karena di minus 5 maka bergerak ke atas, apabila ditambah 5 berarti ke bawah ). Nah karena event ontimer dieksekusi tiap 10ms maka akan mengerjakan perintah perpindahan posisi bola ke atas setiap 10ms,jadi seolah2 bola bergerak mulus ke atas.






Listing lengkap untuk pergerakan atas bawah kiri kanan sbb:

procedure TForm1.Timer1Timer (Sender: TObject);
begin

if atas then
begin
bola.Top := bola.Top - 5;
end;

if bawah then
begin
bola.Top := bola.Top + 5;
end;

if kiri then
begin
bola.Left := bola.Left - 5;
end;

if kanan then
begin
bola.Left := bola.Left + 5;
end;

end;

Sekarang Coba ‘Run’ Program dengan tekan tombol ‘F9’ coba dengan menekan keyboard kanan kiri atas bawah..( bukan di tahan, cukup ditekan tombol lalu lepaskan )…OK ada yang kurang bukaaannn??yaitu apabila bola membentur dinding form,kok bablas aja hilang..?
  1. Cek tumbukan..perhatikan gambar berikut :      






Bola memiliki left yaitu posisi dari titik paling kiri dari bola terhadap form, misal bola.left := 100; maka bola ada pada posisi 100 piksel pada form dari kiri seperti gambar berikut








Nah sekarang logikanya, bola apabila membentur dinding sebelah kiri dari form berarti pada saat ‘bola.left <= 0’ benar kan??lalu apa yang terjadi apabila bola saat bergerak ke kiri lalu kondisi ‘bola.left <= 0’, maka bola akan memantul ke kanan, yaitu nilai kiri menjadi false dan kanan menjadi true..nah pertanyaannya dimana kita meletakkan coding pengecekan bola pantul kiri ke kanan?apabila bola memantul ke kanan berarti sebelumnya bola bergerak ke kiri,jadi sisipkan di listing saat bola bergerak ke kiri :

procedure TForm1.Timer1Timer (Sender: TObject);
begin
if atas then
begin
bola.Top := bola.Top - 5;
end;

if bawah then
begin
bola.Top := bola.Top + 5;
end;

if kiri then
begin
bola.Left := bola.Left - 5;
if  bola.left <= 0 then
begin
                atas := false;
                bawah := false;
                kiri := false;
                kanan := true;
end;
end;

if 
kanan then
begin
bola.Left := bola.Left + 5;
end;
end;
Begitu pula pada saat bola bergerak ke atas dan memantul ke bawah maka saat kondisi ‘bola.top <= 0’ maka memantul ke bawah.
procedure TForm1.Timer1Timer (Sender: TObject);
begin
if atas then
begin
bola.Top := bola.Top - 5;
if  bola.Top <= 0 then
begin
                atas := false;
                bawah := true;
                kiri := false;
                kanan := false;
end;

end;

if bawah then
begin
bola.Top := bola.Top + 5;
end;

if 
kiri then
begin
bola.Left := bola.Left - 5;

if  bola.left <= 0 then
begin
                atas := false;
                bawah := false;
                kiri := false;
                kanan := true;
end;
end;
 
if kanan then
begin
bola.Left := bola.Left + 5;
end;
 
end;
Nah agak berbeda apabila bola memantul kanan dan bawah, perhatikan gambar berikut :







Ingat bola memiliki top,left,width,dan height.begitu juga dengan form.sekarang pertanyaan lagi, bola membentur form bagian kanan pada saat kondisi bagaimana???apabila kita menganggap ‘bola.left >= form.clientwidth’ maka salah, karena yang memantul berarti titik sebelah kiri bola terhadap form sebelah kanan,seharusnya titik sebelah kanan bola yang memantul dinding form sebelah kanan(form.clientwidth).







Jadi pengecekannya yaitu ‘bola.left + bola.width >= form1.clientwidth’.begitu pula pada bola membentur dinding bawah yaitu ‘bola.top + bola.height >= form1.clientheight’.listing lengkap program keseluruhan :

unit Unit1;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls;
type
  TForm1 = class(TForm)
    Timer1: TTimer;
    Shape1: TShape;
    procedure FormKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure FormCreate(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

var atas,bawah,kiri,kanan : boolean;

procedure TForm1.FormCreate(Sender: TObject);
begin
atas := false;
bawah := false;
kiri := false;
kanan := false;
end;

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin

if key = 37 then
begin
atas := false;
bawah := false;
kiri := true;
kanan := false;
end;

if key = 38 then
begin
atas := true;
bawah := false;
kiri := false;
kanan := false;
end;

if key = 39 then
begin
atas := false;
bawah := false;
kiri := false;
kanan := true;
end;

if key = 40 then
begin
atas := false;
bawah := true;
kiri := false;
kanan := false;
end;
timer1.Enabled := true;
end;


procedure TForm1.Timer1Timer (Sender: TObject);
begin

if atas then
begin
bola.Top := bola.Top - 5;

if  bola.Top <= 0 then
begin
                atas := falsee;
                bawah := true;
                kiri := false;
                kanan := false;
end;
end;

if bawah then
begin
bola.Top := bola.Top + 5;

if  bola.Top + bola.width >=form1.clientwidth then
begin
                atas := true;
                bawah := false;
                kiri := false;
                kanan := false;
end;
end;

if kiri then
begin
bola.Left := bola.Left - 5;

if  bola.left <= 0 then
begin
                atas := false;
                bawah := false;
                kiri := false;
                kanan := true;
end;
end;

if kanan then
begin
bola.Left := bola.Left + 5;

if  bola.left + bola.height >= form1.clientheight then
begin
                atas := false;
                bawah := false;
                kiri := kiri;
                kanan := false;
end;
end;
end;
end.
Tambahan : Jangan lupa pada form property ‘autoscroll’ di ‘disable’.
Sebenarnya coding bisa jauh lebih singkat, namun untuk memudahkan pemahaman sementara agak boros dulu yang penting faham dulu..mohon maaf bila bahasa agak gak karu2an dalam menjelaskan,harap maklum..
Agar anda mencoba,tambahkan apabila tombol enter ditekan maka bola berhenti..selamat mencoba… to be continue…
download... 

2 komentar: