This is default featured slide 1 title

Go to Blogger edit html and find these sentences.Now replace these sentences with your own descriptions.

This is default featured slide 2 title

Go to Blogger edit html and find these sentences.Now replace these sentences with your own descriptions.

This is default featured slide 3 title

Go to Blogger edit html and find these sentences.Now replace these sentences with your own descriptions.

This is default featured slide 4 title

Go to Blogger edit html and find these sentences.Now replace these sentences with your own descriptions.

This is default featured slide 5 title

Go to Blogger edit html and find these sentences.Now replace these sentences with your own descriptions.

Jumat, 20 April 2012

MEMBUAT GAME TETRIS MENGGUNAKAN DELPHI

Photobucket
Hai gan...!!! pernahkah membuat sebuah game?? Mengingat ketika jaman SD (skolah dasar), game tetris itu merupakan game yang luar biasa. Sampai-sampai ane bela-belain nangis  (waduh ketahuan cengengnya ni..)  minta uang sama ortu hanya untuk nyewa game tetris tersebut.

Waah waah... berapa tahun ya kejadiannya. Nampaknya sudah lama banget, tapi baru sekarang bisa bikin gamenya. Hehee..

Tak apalah yang penting sekarang sudah tau kalau dulu dikiibulin tukang rental gamenya. Hhhahaaayy...

Bagi yang ingin tau cara bikinnya seperti apa??? Langsung saja yuk... kita tengok prosesnya dibawah ini. 

1. Langkah awal yang perlu dilakukan tentunya buka program Delphi, karena kita akan menggunakan tersebut.
Selanjutnya desain form seperti dibawah ini:

Photobucket


2. Setting Properties juga jangan dilewatkan, lihat ketentuan dibawah ini

Photobucket


3. Buatlah menu pada Object “MainMenu1”
Photobucket

Kemudian setting seperti berikut ini.

Photobucket

4. Ketikkan listing berikut ini:
    Note: *Listing ini ane ambil mulai dari “Private declaration”.

  private
    { Private declarations }
  public
    { Public declarations }
  end;

type PieceType = record
                       X         :      Byte;
                       Y         :      Byte;
                       Num       :      Byte;
                       Etat      :      Byte;
                       Forme     :      array[1..16] of Boolean;
                       FormePrec :      array[1..16] of Boolean;
                 end;

const T_piece  : array[0..27] of word = (52224,52224,52224,52224,
                                         50240,59392,35008,11776,
                                         51328,36352,17600,57856,
                                         35904,27648,35904,27648,
                                         19584,50688,19584,50688,
                                         19968,19520, 3648,17984,
                                         17476,61440,17476,61440);
      T_Speed  : array[1..10] of word = (350,320,290,260,230,200,170,140,110,80);
      T_Points : array[0..4]  of word = (0,100,300,600,1000);
      T_Clig   : array[0..1]  of Word = (100,150);

var
  Form1      : TForm1;
  Piece      : PieceType;
  PieceSuiv  : PieceType;
  anim       : byte;
  Nbsup      : byte;
  Difficult  : byte;
  NiveauDep  : byte;
  nblignes   : word;
  score      : word;
  winner     : boolean;
  EnPartie   : boolean;
  T_sup      : array[1..4] of byte;
  T_jeu      : array[0..11,0..19] of byte;
  T_anim     : array[1..4,0..10] of byte;

implementation

{$R *.DFM}
procedure TForm1.FormCreate(Sender: TObject);
          var i : byte;
          begin
               EnPartie := False;
               Application.onActivate   := berhentiClick;
               Application.onDeActivate := berhentiClick;
               Clientwidth  := 408;
               Clientheight := 408 + StatusBar1.Height;
               top          := 0;
               left         := 0;
               NiveauDep    := 1;
               Difficult    := 0;
               randomize;
               image1.canvas.draw(0,0,SpeedButton1.glyph);
               for i := 1 to 18 do T_jeu[0 ,i ] := 9;
               for i := 1 to 18 do T_jeu[11,i ] := 9;
               for i := 0 to 11 do T_jeu[i ,18] := 9;
               Timer1.Interval := T_Speed[Nblignes div 10 + NiveauDep];
               Label4.caption     := inttostr(score);
               Label6.Caption    := inttostr(nblignes div 10 + NiveauDep);
               Label5.Caption    := inttostr(nblignes);
          end;


procedure TForm1.mulperClick(Sender : TObject);
          var i, j : byte;
              w    : word;
          begin
               EnPartie := True;
               Score    := 500 * (Difficult + NiveauDep - 1);
               NbLignes := 0;
               for i := 0 to 27 do
               for j := 0 to 25 do
                   ImageList2.Draw(Canvas, 16*i, 16*j, (nblignes div 10 + NiveauDep - 1) mod 9);
               Label4.caption     := inttostr(score);
               Label6.Caption    := inttostr(nblignes div 10 + NiveauDep);
               Label5.Caption    := inttostr(nblignes);
               Timer1.Interval := T_Speed[Nblignes div 10 + NiveauDep];
               Timer1.Enabled  := true;
               for i := 1 to 10 do
               for j := 1 to 17 do
                   T_jeu[i,j] := 0;
               for i := 1 to 7 * Difficult do
                   T_jeu[Random(10) + 1, 17 - Random(Difficult)] := random(8);
               piecesuiv.num := random(7);
               piece.y := 1;
               w := T_piece[4 * piecesuiv.num];
               for i := 0 to 15 do
                   begin
                        piecesuiv.forme[16 - i] := (w mod 2 = 1);
                        w := w div 2;
                   end;
               createpiece;
          end;


procedure TForm1.berhentiClick(Sender: TObject);
          begin
               if not(EnPartie) then exit;
               berhenti.Checked     := Not(berhenti.Checked);
               Timer1.Enabled := Not(berhenti.Checked);
          end;


procedure TForm1.keluarClick(Sender: TObject);
          begin
               close;
          end;


procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
          Shift: TShiftState);
          begin
               if ((anim > 0) or (not(EnPartie) and (key <> 27))) then exit;
               {VK_Left  := 37}  {VK_Right := 39}
               {VK_Up    := 38}  {VK_Down  := 40}  {Vk_Esc   := 27}
               case key of
               {esc}    27 : close;
               {left}   37 : move(-1,0);
               {up}     38 : rotate;
               {right}  39 : move(1,0);
               {bottom} 40 : move(0,1);
               end;
          end;


procedure TForm1.Timer1Timer(Sender: TObject);
          var i, j, k : byte;
          begin
               if (anim > 0) then
                  begin
                       Timer1.Interval := T_Clig[anim mod 2];
                       if (anim mod 2 = 1) then
                          begin
                               for i := 1 to nbsup do
                               for j := 1 to 10 do
                                   T_jeu[j, T_sup[i]] := T_anim[i, j];
                          end
                       else
                          begin
                               for i := 1 to nbsup do
                               for j := 1 to 10 do
                                   T_jeu[j, T_sup[i]] := 0;
                          end;
                       dec(anim);
                       if (anim = 0) then
                          begin
                               image1.canvas.draw(0,0,SpeedButton1.glyph);
                               for k := 1 to nbsup do
                                   for j := T_sup[k] downto 2 do
                                   for i := 1 to 10 do T_jeu[i,j] := T_jeu[i,j-1];
                               inc(score, T_points[nbsup]);
                               inc(nblignes, nbsup);
                               Label4.caption     := inttostr(score);
                               Label6.Caption    := inttostr(nblignes div 10 + NiveauDep);
                               Label5.Caption    := inttostr(nblignes);
                               Timer1.Interval := T_Speed[Nblignes div 10 + NiveauDep];
                               for i := 0 to 27 do
                               for j := 0 to 25 do
                                   ImageList2.Draw(Canvas, 16*i, 16*j, (nblignes div 10 + NiveauDep - 1) mod 9);
                               CreatePiece;
                          end;
                       draw;
                       exit;
                  end;
               if not(move(0,1)) then
                  begin
                       for i := 0 to 15 do
                           if Piece.Forme[i + 1] then T_jeu[piece.x + i mod 4, piece.y + i div 4] := piece.num + 1;
                       SupprimeLigne;
                  end;
          end;


procedure TForm1.Createpiece;
          var i: byte;
              w    : word;
          begin
               if (piece.y = 0) then
                  begin
                       Timer1.enabled := false;
                       winner := true;
                       with Tdatanilai.Create(Self) do
                            try
                               ShowModal;
                            finally
                               Free;
                       end;
                       winner := false;
                       EnPartie := False;
                       piece.y := 5;
                       exit;
                  end;
               piece.Num     := piecesuiv.num;
               piecesuiv.num := random(7);
               w := T_piece[4 * piecesuiv.num];
               for i := 0 to 15 do
                   begin
                        piecesuiv.forme[16 - i] := (w mod 2 = 1);
                        w := w div 2;
                   end;
               Image2.canvas.Brush.color := clblack;
               Image2.canvas.fillrect(rect(0,0,60,80));
               for i := 0 to 15 do
                   if piecesuiv.forme[i + 1] then imagelist1.DrawOverlay(Image2.Canvas, 20 * (i mod 4), 20 * (i div 4), piecesuiv.num, 1);
               w := T_piece[4 * piece.num];
               piece.etat := 0;
               piece.x    := 4;
               piece.y    := 0;
               for i := 0 to 15 do
                   begin
                        piece.forme[16 - i] := (w mod 2 = 1);
                        w := w div 2;
                   end;
               draw;
          end;


procedure TForm1.Draw;
          var m, n : byte;
          begin
               image1.canvas.draw(0,0,SpeedButton1.glyph);
               for m := 1 to 10 do
               for n := 1 to 17 do
                   if (T_jeu[m,n] > 0) then imagelist1.DrawOverlay(Image1.Canvas, 20 * m, 20 * n , T_jeu[m,n] - 1, 1);
               for m := 0 to 15 do
                   if (piece.forme[m + 1] and (anim = 0)) then imagelist1.DrawOverlay(Image1.Canvas, 20 * (piece.x + m mod 4), 20 * (piece.y + m div 4), piece.num, 1);
          end;


function  TForm1.Rotate : boolean;
          var formesav : array[1..16] of boolean;
              i        : byte;
              w        : word;
          begin
               for i := 1 to 16 do
                   formesav[i] := piece.forme[i];
               inc(piece.etat);
               w := T_piece[4 * piece.num + piece.etat mod 4];
               for i := 0 to 15 do
                   begin
                        piece.forme[16 - i] := (w mod 2 = 1);
                        w := w div 2;
                   end;
               result := true;
               for i := 0 to 15 do
                   if (piece.forme[i+1] and  (T_jeu[piece.x + i mod 4, piece.y + i div 4] > 0)) then result := false;
               if result then
                  draw
               else
                  begin
                       dec(piece.etat);
                       for i := 1 to 16 do
                           piece.forme[i] := formesav[i];
                  end;
          end;


function  TForm1.Move(x,y : integer) : boolean;
          var i : byte;
          begin
               result := true;
               for i := 0 to 15 do
                   if (piece.forme[i + 1] and  (T_jeu[piece.x + x + i mod 4, piece.y + y + i div 4] > 0)) then result := false;
               if result then
                  begin
                       inc(piece.x, x);
                       inc(piece.y, y);
                       Draw;
                  end;
          end;


procedure Tform1.SupprimeLigne;
          var sup           : boolean;
              i, j          : byte;
          begin
               nbsup := 0;
               for i := 1 to 4 do T_sup[i] := 0;
               for j := 1 to 17 do
                  begin
                       sup := true;
                       for i := 1 to 10 do if (T_jeu[i,j] = 0) then sup := false;
                       if sup then inc(nbsup);
                       if sup then T_sup[nbsup] := j;
                  end;
               if (nbsup > 0) then
                  begin
                       anim := 6;
                       Timer1.interval := 20;
                       for i := 1 to nbsup do
                       for j := 1 to 10 do
                           T_anim[i, j] := T_jeu[j, T_sup[i]];
                  end
               else
                  createpiece;
          end;


procedure TForm1.CheckedRefresh;
          begin
               N11.checked := false; N21.checked := false; N31.checked := false;
               N41.checked := false; N51.checked := false; N61.checked := false;
               N71.checked := false; N81.checked := false; N91.checked := false;
               N02.checked := false; N12.checked := false; N22.checked := false;
               N32.checked := false; N42.checked := false; N52.checked := false;
               N62.checked := false; N72.checked := false; N82.checked := false; N92.checked := false;
               case NiveauDep of
                    1 : N11.Checked := true;
                    2 : N21.Checked := true;
                    3 : N31.Checked := true;
                    4 : N41.Checked := true;
                    5 : N51.Checked := true;
                    6 : N61.Checked := true;
                    7 : N71.Checked := true;
                    8 : N81.Checked := true;
                    9 : N91.Checked := true;
                    end;
               case Difficult of
                    0 : N02.Checked := true;
                    1 : N12.Checked := true;
                    2 : N22.Checked := true;
                    3 : N32.Checked := true;
                    4 : N42.Checked := true;
                    5 : N52.Checked := true;
                    6 : N62.Checked := true;
                    7 : N72.Checked := true;
                    8 : N82.Checked := true;
                    9 : N92.Checked := true;
                    end;
          end;


procedure TForm1.N11Click(Sender: TObject);
          begin NiveauDep := 1; CheckedRefresh; end;
procedure TForm1.N21Click(Sender: TObject);
          begin NiveauDep := 2; CheckedRefresh; end;
procedure TForm1.N31Click(Sender: TObject);
          begin NiveauDep := 3; CheckedRefresh; end;
procedure TForm1.N41Click(Sender: TObject);
          begin NiveauDep := 4; CheckedRefresh; end;
procedure TForm1.N51Click(Sender: TObject);
          begin NiveauDep := 5; CheckedRefresh; end;
procedure TForm1.N61Click(Sender: TObject);
          begin NiveauDep := 6; CheckedRefresh; end;
procedure TForm1.N71Click(Sender: TObject);
          begin NiveauDep := 7; CheckedRefresh; end;
procedure TForm1.N81Click(Sender: TObject);
          begin NiveauDep := 8; CheckedRefresh; end;
procedure TForm1.N91Click(Sender: TObject);
          begin NiveauDep := 9; CheckedRefresh; end;


procedure TForm1.N02Click(Sender: TObject);
          begin Difficult := 0; CheckedRefresh; end;
procedure TForm1.N12Click(Sender: TObject);
          begin Difficult := 1; CheckedRefresh; end;
procedure TForm1.N22Click(Sender: TObject);
          begin Difficult := 2; CheckedRefresh; end;
procedure TForm1.N32Click(Sender: TObject);
          begin Difficult := 3; CheckedRefresh; end;
procedure TForm1.N42Click(Sender: TObject);
          begin Difficult := 4; CheckedRefresh; end;
procedure TForm1.N52Click(Sender: TObject);
          begin Difficult := 5; CheckedRefresh; end;
procedure TForm1.N62Click(Sender: TObject);
          begin Difficult := 6; CheckedRefresh; end;
procedure TForm1.N72Click(Sender: TObject);
          begin Difficult := 7; CheckedRefresh; end;
procedure TForm1.N82Click(Sender: TObject);
          begin Difficult := 8; CheckedRefresh; end;
procedure TForm1.N92Click(Sender: TObject);
          begin Difficult := 9; CheckedRefresh; end;


procedure TForm1.skortinggiClick(Sender: TObject);
          var reprise : boolean;
          begin
               reprise := Timer1.Enabled;
               Timer1.Enabled := false;
               winner := false;
               with Tdatanilai.Create(Self) do
                 try
                    ShowModal;
                 finally
                    Free;
               end;
               Timer1.Enabled := reprise;
          end;


{procedure TForm1.APropos1Click(Sender: TObject);
          begin
               Pause1Click(sender);
               with TAProposDlg.Create(Self) do
                 try
                    ShowModal;
                 finally
                    Free;
               end;
               Pause1Click(sender);
          end;


procedure TForm1.AlAide1Click(Sender: TObject);
          begin
               Pause1Click(sender);
               with TReglesDlg.Create(Self) do
                 try
                    ShowModal;
                 finally
                    Free;
               end;
               Pause1Click(sender);
          end;


procedure TForm1.GameClick(Sender: TObject);
          begin
               Pause1Click(sender);
               with TLeJeuDlg.Create(Self) do
                 try
                    ShowModal;
                 finally
                    Free;
               end;
               Pause1Click(sender);
          end;          }


end.


5. Buatlah form baru untuk informasi nilai tapi pada project yang sama.
     Desain formnya seperti dibawah ini

Photobucket


6. Lakukan setting properties

Photobucket

7. Ketikkan listing beikut ini
Note: *Listing ini ane ambil mulai dari “Private declaration”.

private
    { Private declarations }
  public
    { Public declarations }
  end;

type scor = record
             Name : String[15];
             Scor : Word;
             end;

var
  datanilai : Tdatanilai;
  ABest       : array[1..3] of Scor;
  F           : textFile;

implementation

uses UTetris;
{$R *.DFM}

procedure Tdatanilai.FormCreate(Sender: TObject);
          var i, j : Byte;
          begin
               for i := 1 to  3 do ABest[i].Name := 'Nilai Minimal__';
               for i := 1 to  3 do ABest[i].Scor := 500;
               {$I-}
               assignFile(F, 'BestScor');
               FileMode := 0;
               Reset(F);
               if (IOResult = 0) then
                 for i := 1 to 3 do
                   begin
                     readln(F, ABest[i].Name, ABest[i].Scor);
                     j := 0;
                     repeat inc(j) until (ABest[i].Name[j] <> ' ');
                     ABest[i].Name := copy(ABest[i].Name, j, length(ABest[i].Name) - j + 1);
                   end;
               CloseFile(F);
               {$I+}
               if Winner then
                 begin
                   i := 1;
                   while ((ABest[i].Scor > Score) and (i < 5)) do inc(i);
                   if (i > 3) then exit;
                   case i of
                        1 : begin
                              ABest[3].Name  := ABest[2].Name;
                              ABest[2].Name  := ABest[1].Name;
                              ABest[1].Name  := 'Nilai';
                              ABest[3].Scor  := ABest[2].Scor;
                              ABest[2].Scor  := ABest[1].Scor;
                              Edit1.ReadOnly := False;
                              ABest[1].Scor  := Score;
                              ActiveControl  := Edit1;
                            end;
                        2 : begin
                              ABest[3].Name  := ABest[2].Name;
                              ABest[2].Name  := 'Nilai';
                              ABest[3].Scor  := ABest[2].Scor;
                              Edit2.ReadOnly := False;
                              ABest[2].Scor  := Score;
                              ActiveControl  := Edit2;
                            end;
                        3 : begin
                              ABest[3].Name  := 'Nilai';
                              Edit3.ReadOnly := False;
                              ABest[3].Scor  := Score;
                              ActiveControl  := Edit3;
                            end;
                        end;
                  end;
               Edit1.Text     := ABest[1].Name;
               Edit2.Text     := ABest[2].Name;
               Edit3.Text     := ABest[3].Name;
               Label4.Caption := inttostr(ABest[1].Scor);
               Label5.Caption := inttostr(ABest[2].Scor);
               Label6.Caption := inttostr(ABest[3].Scor);
          end;

procedure Tdatanilai.FormClose(Sender: TObject;
          var Action: TCloseAction);
          var i : Byte;
          begin
               ABest[1].Name := Edit1.Text;
               ABest[2].Name := Edit2.Text;
               ABest[3].Name := Edit3.Text;
               {$I-}
               AssignFile(F, 'BestScor');
               FileMode := 1;
               reWrite(F);
               for i := 1 to 3 do Writeln(F, ABest[i].Name:15, ABest[i].Scor:3);
               CloseFile(F);
               {$I+}
          end;

procedure Tdatanilai.Button1Click(Sender: TObject);
          var i : Byte;
          begin
               for i := 1 to  3 do ABest[i].Name := 'Nilai Minimal';
               for i := 1 to  3 do ABest[i].Scor := 500;
               Edit1.Text     := ABest[1].Name;
               Edit2.Text     := ABest[2].Name;
               Edit3.Text     := ABest[3].Name;
               Label4.Caption := inttostr(ABest[1].Scor);
               Label5.Caption := inttostr(ABest[2].Scor);
               Label6.Caption := inttostr(ABest[3].Scor);
          end;

end.


8. Tinggal save all, dan nikmati gamenya
    ^_^ Smoga bermanfaat.

Ingin mendapatkan aplikasinya, silahkan download disini

English French German Spain Italian Dutch Russian Portuguese Japanese Korean Arabic Chinese Simplified
Hubungi kami

Nama Anda*
Email Anda*
Judul*
Pesan*
Image Verification
captcha
Please enter the text from the image:
[Refresh Image][What's This?]
Powered byEMF Web Forms