About Me

Foto Saya
Yuki-Chan
malang, jawa timur, Indonesia
i'm just like a little bird, i'm a simple girl, n may be can be a bad girl
Lihat profil lengkapku
RSS

Algoritma pemograman Game Tetris dalam Pascal

        temen-temen ni aku ada algoritma program pascal untuk membuat Game tetris.Sebenernya Algoritma game tetris ini gue buat untuk memenuhi nilai tugas ujian semester 1 gue dulu, xixixi tapi sekarang gue mau share ke kalian. Kebetulan gue ambil TI Design Grafis. yah walaupun konsentrasinya di desain grafis tapi kebetulan di kampus gue dapet mata kuliah pemprograman dasar.

Algoritma Game Tetris dalam pascal:

 {============x = Program : Tetris 1 Player ============ Oleh : ayuki-chan ================naruto uzumaki like play the tetris game so if u like u must play tetris game by akatsuki corporation.... ===============}
program tetris_1player;
uses crt;
type _points = array [1..4] of record
x,y : longint;
 end;
tetris = record
points : _points;cshape, nshape, xmodel, xtetris, ymodel, ytetris : longint;
end;

Const template : array [1..8] of _points =
(((x:1; y:1),(x:1; y:2),(x:2; y:1),(x:2; y:2)),
 ((x:2; y:1),(x:1; y:1),(x:3; y:1),(x:4; y:1)),
 ((x:1; y:2),(x:1; y:1),(x:1; y:3),(x:2; y:3)),
 ((x:2; y:2),(x:2; y:1),(x:2; y:3),(x:1; y:3)),
 ((x:1; y:2),(x:1; y:1),(x:2; y:2),(x:2; y:3)),
 ((x:1; y:2),(x:2; y:1),(x:2; y:2),(x:1; y:3)),
 ((x:1; y:2),(x:1; y:1),(x:1; y:3),(x:2; y:2)),
((x:1; y:2),(x:2; y:1),(x:2; y:2),(x:2; y:3)));

var field : array [1..79,1..25] of boolean;
        tetris1, tetris2, ttetris : tetris;
        quit,gameover : boolean;
         answer : char;
procedure init_field;
var i : longint;
begin
 clrscr;
 fillchar(field,sizeof(field),0);
     for i := 3 to 22 do
     begin
     textcolor(yellow);
 gotoxy(20,i); write(#186);    field[20,i] := true;
 gotoxy(36,i); write(#186); field[36,i] := true;
     end;
for i := 1 to 15 do
     begin
textcolor(yellow);
 gotoxy(20+i,23); write(#205); field[20+i,23] := true;
end;
 gotoxy(20,23); write(#200);
gotoxy(36,23); write(#188);
gotoxy(6,4); write('Next:');
end;

procedure drawtetris(objek : tetris; mode : Boolean);
var i : longint;
c : char;
begin
textcolor(green);
if mode then c := #178 else c := #33;
for i := 1 to 4 do
begin
 field[objek.points[i].x,objek.points[i].y] := mode;
gotoxy(objek.points[i].x, objek.points[i].y);
        write(c);
    end;
    gotoxy(1,1);
End;
procedure dropnew(var objek : tetris);
var i : longint;
begin
    if objek.cshape <> 0 then
    begin
        for i := 1 to 4 do
        begin
            ttetris.points[i].x := template[objek.nshape,i].x + objek.xmodel;
            ttetris.points[i].y := template[objek.nshape,i].y + objek.ymodel;
        end;
        drawtetris(ttetris,false);
    end;
    objek.cshape := objek.nshape;
    objek.nshape := random(8) + 1;
    for i := 1 to 4 do
    begin
        objek.points[i].x := template[objek.cshape,i].x + objek.xtetris;
        objek.points[i].y := template[objek.cshape,i].y + objek.ytetris;
        ttetris.points[i].x := template[objek.nshape,i].x + objek.xmodel;
        ttetris.points[i].y := template[objek.nshape,i].y + objek.ymodel;
 if field[objek.points[i].x,objek.points[i].y] then
begin
            gameover := true;
            break;
        end;
    end;
    drawtetris(objek,true);
    drawtetris(ttetris,true);
end;

procedure init_tetris(var objek : tetris; id : longint);
begin
     objek.nshape := random(8) + 1;
     if id = 1 then
     begin
 objek.xmodel := 7;                                    objek.xtetris := 26;
     end else begin
        objek.xmodel := 47; objek.xtetris := 66;
     end;
 objek.ymodel := 5; objek.ytetris := 2;
     dropnew(objek);
end;

procedure eliminate(objek : tetris; y : longint);
var i,j,k : longint;
    blank : boolean;
begin
    for i := y downto 3 do
    begin
        blank := false;
        for j := objek.xmodel + 14 to objek.xmodel + 28 do
            if not field[j,i] then
            begin
                blank := true;
                break;
            end;
        if not blank then
        begin
            for k := i downto 3 do
            begin
                gotoxy(objek.xmodel + 14,k);
                for j := (objek.xmodel + 14) to (objek.xmodel + 28) do
                begin
 if field[j,k-1] then write(#178) else write(#32)   field[j,k] := field[j,k-1];
                end;
            end;
            eliminate(objek,i);
            break;
        end;
    end;
end;

procedure slide(var objek : tetris);
var i : longint;
    dropped : boolean;
begin
    drawtetris(objek,false);
    ttetris := objek;
    dropped := false;
    for i := 1 to 4 do
    begin
        inc(ttetris.points[i].y);
        if field[ttetris.points[i].x,ttetris.points[i].y] then
        begin
            dropped := true;
            break;
        end;
    end;
    if not dropped then objek := ttetris;
    drawtetris(objek,true);
    if dropped then
    begin
        eliminate(objek,22);
        dropnew(objek);
    end;
end;

procedure rotate(var objek : tetris);
var i : longint;
    collide : boolean;
begin
    drawtetris(objek,false);
    ttetris := objek;
    collide := false;
    for i := 2 to 4 do
    begin
        ttetris.points[i].y := objek.points[1].y + objek.points[i].x - objek.points[1].x;ttetris.points[i].x := objek.points[1].x - objek.points[i].y + objek.points[1].y;
 if field[ttetris.points[i].x,ttetris.points[i].y] then
        begin
            collide := true;
            break;
        end;
    end;
    if not collide then objek := ttetris;
    drawtetris(objek,true);
end;

procedure shift(var objek : tetris; x, y : longint);

 
var i : longint;
    collide : boolean;
begin
    drawtetris(objek,false);
    ttetris := objek;
    collide := false;
    for i := 1 to 4 do
    begin
        ttetris.points[i].x := objek.points[i].x + x;
        ttetris.points[i].y := objek.points[i].y + y;
        if field[ttetris.points[i].x,ttetris.points[i].y] then
        begin
            collide := true;
            break;
        end;
    end;
   if not collide then objek := ttetris;
    drawtetris(objek,true);
    if collide then eliminate(objek,22);
end;

procedure userinput;
var i : longint;
    c : char;
begin textcolor(red);
    for i := 1 to 20 do
    begin textcolor(red);
        if keypressed then
        begin  textcolor(red);
             c := upcase(readkey);
             case c of
 #72 : if tetris1.cshape <>1 then rotate(tetris1); #75 : shift(tetris1,-1,0);
#80 : shift(tetris1,0,1);
 #77 : shift(tetris1,1,0);
#27 : gameover := true;
#32 : repeat delay(50); until keypressed;
             end;
        end;
        delay(50);
    end;
end;

begin
    randomize;
    while not quit do
    begin
        init_field;
        init_tetris(tetris1,1);
        gameover := false;
        while not gameover do
        begin
            slide(tetris1);
            userinput;
        end;
        gotoxy(1,25); write('Play Again[Y/N]? ');
        repeat
            answer := upcase(readkey);
        until answer in ['Y','N',#27];
  if (answer = 'N') or (answer = #27) then break;
 end;
end.

itulah Algoritma Game Tetris semoga bisa membantu temen-temen dalam mengerjakan tugas dari pengajar. makasih n tambah pinter ya. cayou ^.^ jangan lupa coment biar blog gue makin ok.

  • Digg
  • Del.icio.us
  • StumbleUpon
  • Reddit
  • RSS

0 komentar:

Posting Komentar

IP