Minggu, 16 Januari 2011
5
[Pascal] Membuat Game Multiplayer Tetris
Tetris? jadul banget!!!. Jika kata itulah yang terlontar dari mulut sobat, sekarang saya tanya, apa kamu bisa membuatnya dengan bahasa pemrograman pascal??? Hahaha. Itulah manfaatnya kita belajar pemrograman, kita bisa tahu bagaimana suatu program dibuat, walaupun program itu amatlah sederhana!. Langsung saja copas listening code di bawah pada Free Pascal atau TPW (Turbo Pascal for Windows) kamu. Happy coding!
{===================================================x = Program : Tetris 2 Player ======================= = Oleh : Ahmad Priatama ======================= =================================================== Kode sumber dapat dimodifikasi dan dipublikasikan Dengan bebas, tidak ada larangan dalam bentuk apapun ===================================================} program tetris_2player; 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 gotoxy(20,i); write(#186); field[20,i] := true; gotoxy(36,i); write(#186); field[36,i] := true; gotoxy(60,i); write(#186); field[60,i] := true; gotoxy(76,i); write(#186); field[76,i] := true; end; for i := 1 to 15 do begin gotoxy(20+i,23); write(#205); field[20+i,23] := true; gotoxy(60+i,23); write(#205); field[60+i,23] := true; end; gotoxy(20,23); write(#200); gotoxy(60,23); write(#200); gotoxy(36,23); write(#188); gotoxy(76,23); write(#188); gotoxy(6,4); write('Next:'); gotoxy(46,4); write('Next:'); end; procedure drawtetris(objek : tetris; mode : Boolean); var i : longint; c : char; begin if mode then c := #178 else c := #32; 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 for i := 1 to 20 do begin if keypressed then begin c := upcase(readkey); case c of 'W' : if tetris1.cshape <> 1 then rotate(tetris1); #72 : if tetris2.cshape <> 1 then rotate(tetris2); 'A' : shift(tetris1,-1,0); #75 : shift(tetris2,-1,0); 'S' : shift(tetris1,0,1); #80 : shift(tetris2,0,1); 'D' : shift(tetris1,1,0); #77 : shift(tetris2,1,0); #27 : gameover := true; #32 : repeat delay(10); until keypressed; end; end; delay(10); end; end; begin randomize; while not quit do begin init_field; init_tetris(tetris1,1); init_tetris(tetris2,2); gameover := false; while not gameover do begin slide(tetris1); slide(tetris2); 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.
Langganan:
Posting Komentar (Atom)
5 Komentar Untuk “[Pascal] Membuat Game Multiplayer Tetris”
Kamis, 20 Januari 2011 pukul 18.55.00 WIB
wow keren gan.... ^__^
please visit my blog : www.adeilhamfajri.blogspot.com
masih newbi..... ^__^"
Kamis, 20 Januari 2011 pukul 19.10.00 WIB
@Ade Ilham Fajri sip, langsung ke tkp..
Minggu, 06 Maret 2011 pukul 16.04.00 WIB
Thx bt programnya
membantu bgt dalam pembuatan tgs :)
Minggu, 06 Maret 2011 pukul 16.34.00 WIB
@Anonim matama,, senang bs mmbantu ^_^
Kamis, 20 Juli 2017 pukul 12.04.00 WIB
Gak jalaan pas di akhir error 3 knapa yqh padal scrift nya udah sama
Posting Komentar
Berikan komentar positif tentang artikel yang sederhana ini niscaya sobat akan mendapatkan balasannya. Hehehe