Pembuatan Game Tebak Tentara di Pascal (Part 1) Oleh: Yudi Setiawan
Pada kesempatan ini, saya akan membuat tutorial tentang cara membuat game tebak tentara. Game ini berbasis console jadi, tidak ada graphics yang cantik seperti yang Anda bayangkan. Namun, pada game ini mungkin bisa melatih atau meningkatkan pola pikir algoritma pemrograman Anda. Tutorial ini lumayan...
Pada kesempatan ini, saya akan membuat tutorial tentang cara membuat game tebak tentara. Game ini berbasis console jadi, tidak ada graphics yang cantik seperti yang Anda bayangkan. Namun, pada game ini mungkin bisa melatih atau meningkatkan pola pikir algoritma pemrograman Anda. Tutorial ini lumayan panjang jadi, saya akan membuatnya secara bertahap. Untuk part 1, saya akan membuatnya sampai sebatas tampilannya saja. Dan mudah-mudahan tutorial ini bisa cepat selesai. Pada tutorial ini, saya menggunakan bahasa Pascal. Mungkin bagi Anda yang belum bisa Pascal bisa mencobanya di bahasa pemrograman lainnya yang bisa Anda kuasai. Dalam pembuatan game ini beberapa teknik yang akan kita pakai ialah, If Else, Prosedur(disebut method dalam Java), Perulangan(Looping), Array 1 dan 2 dimensi. Untuk mempersingkat waktu langsung saja ikuti tutorial berikut secara bertahap dan pelan – pelan. 1. Pertama, buat coding seperti berikut. Pada coding ini, kita hanya mendeklarasikan variable dan array yang akan kita pakai nantinya dalam pembuatan game ini. {Deklarasi Variable dan Array} var nama_user :string; MyArmy_X :array[1..4] of integer; MyArmy_Y :array[1..4] of integer; ComArmy_X :array[1..4] of integer; ComArmy_Y :array[1..4] of integer; Kondisi_MyArmy_XY :array[1..4, 1..4] of string; Kondisi_ComArmy_XY :array[1..4, 1..4] of string; user, com :string; tebak_x_user :integer; tebak_y_user :integer; tebak_x_com :integer; tebak_y_com :integer; benar :boolean; again :boolean; skor_user :integer; skor_com :integer; x, y, z :integer; 2. Setelah itu, buatlah prosedur berikut untuk menginisialisasikan nilai Array yang akan kita pakai nanti untuk mengidentifikasi apakah posisi tentara sudah dibuka atau belum.
{Prosedur Inisialisasi Kondisi MyArmy XY dan Kondisi ComArmy XY} procedure InitKondisiMyArmy; var a, b, c :integer; begin for a := 1 to 4 do begin for b := 1 to 4 do begin Kondisi_MyArmy_XY[a, b] := 'tutup'; Kondisi_ComArmy_XY[a, b] := 'tutup'; end; end; end; 3. Dan ketiga, tambahkan coding berikut ke dalam Main. Dimana, coding ini akan menampilkan interface yang akan menanyakan Nama user. (*Tanya nama si user*) write('Masukkan Nama Anda : '); readln(nama_user); 4. Keempat, tambahkan coding berikut setelah coding diatas. Dimana, coding berikut akan menanyakan si user dimana posisi tentara si user akan diletakkan. (*Buat inputan untuk menanyakan mau diposisikan dimana tentara si user*) gotoxy(1, wherey+1); write('Posisikan tentara kamu pada Koordinat berikut'); (*Posisi semua tentara tidak boleh ada yang sama*) (*Tentara 1*) again := false; repeat begin gotoxy(1, wherey+1); write('Tentara 1, Koordinat X [1..4] : '); readln(MyArmy_X[1]); write('Tentara 1, Koordinat Y [1..4] : '); readln(MyArmy_Y[1]); again := true; (*Posisi tentara harus berada diantara 1 sampai 4*) if(MyArmy_X[1] < 1) or (MyArmy_Y[1] < 1) or (MyArmy_X[1] > 4) or (MyArmy_Y[1] > 4) then begin writeln('Koordinat harus diantara 1 - 4 !!!'); again := false; end; end until again = true; (*Tentara 2*) again := false; repeat begin gotoxy(wherex, wherey+1); write('Tentara 2, Koordinat X [1..4] : '); write('Tentara 2, Koordinat Y [1..4] : ');
readln(MyArmy_X[2]); readln(MyArmy_Y[2]);
again := true; if(MyArmy_X[2] < 1) or (MyArmy_Y[2] < 1) or (MyArmy_X[2] > 4) or (MyArmy_Y[2] > 4) then begin writeln('Koordinat harus diantara 1 - 4 !!!'); again := false; end; (*Cek apakah posisi tentara 2 sudah ditempati oleh tentara 1*) if(MyArmy_X[2] = MyArmy_X[1]) and (MyArmy_Y[2] = MyArmy_Y[1]) then begin writeln('Cari tempat lain...'); writeln('Posisi telah ditempati oleh tentara sebelumnya !!!'); again := false; end; end until again = true; (*Tentara 3*) again := false; repeat begin gotoxy(wherex, wherey+1); write('Tentara 3, Koordinat X [1..4] : '); write('Tentara 3, Koordinat Y [1..4] : '); again := true;
readln(MyArmy_X[3]); readln(MyArmy_Y[3]);
if(MyArmy_X[3] < 1) or (MyArmy_Y[3] < 1) or (MyArmy_X[3] > 4) or (MyArmy_Y[3] > 4) then begin writeln('Koordinat harus diantara 1 - 4 !!!'); again := false; end; (*Cek apakah posisi tentara 3 sudah ditempati oleh tentara 1 atau 2*) if(MyArmy_X[3] = MyArmy_X[1]) and (MyArmy_Y[3] = MyArmy_Y[1]) then begin writeln('Cari tempat lain...'); writeln('Posisi telah ditempati oleh tentara sebelumnya !!!'); again := false; end else if(MyArmy_X[3] = MyArmy_X[2]) and (MyArmy_Y[3] = MyArmy_Y[2]) then begin writeln('Cari tempat lain...'); writeln('Posisi telah ditempati oleh tentara sebelumnya !!!'); again := false; end; end until again = true;
(*Tentara 4*) again := false; repeat begin gotoxy(wherex, wherey+1); write('Tentara 4, Koordinat X[1..4] : '); write('Tentara 4, Koordinat Y[1..4] : '); again := true;
readln(MyArmy_X[4]); readln(MyArmy_Y[4]);
if(MyArmy_X[4] < 1) or (MyArmy_Y[4] < 1) or (MyArmy_X[4] > 4) or (MyArmy_Y[4] > 4) then begin writeln('Koodinat harus diantara 1 - 4 !!!'); again := false; end; (*Cek apakah posisi tentara sudah ditempati oleh tentara 1, 2 atau 3*) if(MyArmy_X[4] = MyArmy_X[1]) and (MyArmy_Y[4] = MyArmy_Y[1]) then begin writeln('Cari tempat lain...'); writeln('Posisi telah ditempati oleh tentara sebelumnya !!!'); again := false; end else if(MyArmy_X[4] = MyArmy_X[2]) and (MyArmy_Y[4] = MyArmy_Y[2]) then begin writeln('Cari tempat lain...'); writeln('Posisi telah ditempati oleh tentara sebelumnya !!!'); again := false; end else if(MyArmy_X[4] = MyArmy_X[3]) and (MyArmy_Y[4] = MyArmy_Y[3]) then begin writeln('Cari tempat lain...'); writeln('Posisi telah ditempati oleh tentara sebelumnya !!!'); again := false; end; end until again = true; 5. Kelima, coding berikut akan mencetak layout Area User dan layout Area Musuh. (*Cetak layout area user dan area musuh*) while((user <> 'win') and (com <> 'win')) do begin clrscr; writeln('Tebak posisi koordinat tentara musuh yang bersembunyi'); (*Cetak Header Layout area user dan area musuh*) gotoxy(wherex, wherey+1); write('==Area User=='); gotoxy(20, wherey); write('=Area Musuh='); (*Cetak Angka Koordinat X di Area User*)
gotoxy(3, wherey+1); for x := 1 to 4 do begin write(x); gotoxy(wherex+2, wherey); end; (*Cetak Angka Koordinat X di Area Musuh*) gotoxy(22, wherey); for x := 1 to 4 do begin write(x); gotoxy(wherex+2, wherey); end; (*Cetak Angka Koordinat Y di Area User*) gotoxy(1, wherey+2); for x := 1 to 4 do begin write(x); gotoxy(1, wherey+2); end; (*Cetak Angka Koordinat Y di Area Musuh*) gotoxy(20, wherey-8); for x := 1 to 4 do begin write(x); gotoxy(20, wherey+2); end; (*Cetak Kotak Persembunyian di Area User*) gotoxy(3, wherey-8); for x := 1 to 4 do begin for y := 1 to 4 do begin (*Cek status tiap kotak persembunyian untuk Area User*) if(Kondisi_MyArmy_XY[y, x] = 'tutup') then begin write(chr(219)); end else if(Kondisi_MyArmy_XY[y, x] = 'buka_salah') then begin write('X'); end else if(Kondisi_MyArmy_XY[y, x] = 'buka_benar') then begin write(chr(258)); end; gotoxy(wherex+2, wherey);
end; gotoxy(3, wherey+2); end; (*Cetak Kotak Persembunyian di Area Musuh*) gotoxy(22, wherey-8); for x := 1 to 4 do begin for y := 1 to 4 do begin (*Cek status tiap kotak persembunyian untuk Area Musuh*) if(Kondisi_ComArmy_XY[y, x] = 'tutup') then begin write(chr(219)); end else if(Kondisi_ComArmy_XY[y, x] = 'buka_salah') then begin write('X'); end else if(Kondisi_ComArmy_XY[y, x] = 'buka_benar') then begin write(chr(258)); end; gotoxy(wherex+2, wherey); end; gotoxy(22, wherey+2); end; end; 6. Dan coding berikut, akan menampilkan skor si user dan si computer. Letakkan setelah coding diatas dan di dalam blok statement looping repeat - until. (*Cetak Skor si User*) gotoxy(1, wherey+1); write('Skor User : ', skor_user); (*Cetak Skor si Com*) gotoxy(20, wherey); write('Skor Musuh : ', skor_com); 7. Dan yang terakhir, coding ini akan menanyakan si user untuk menebak kira - kira dimana posisi tentara musuh bersembunyi. (*Masukan untuk menebak Koordinat dimana posisi tentara musuh berada*) gotoxy(1, wherey+2); write('Masukkan Koordinat X untuk Musuh [1..4] : '); readln(tebak_x_user); gotoxy(1, wherey+1); write('Masukkan Koordinat Y untuk Musuh [1..4] : '); readln(tebak_y_user);
Dan berikut ialah source code lengkapnya, untuk tahap bagian 1.
(* Author Yudi Setiawan *) program TebakTentara; uses crt; {Deklarasi Variable dan Array} var nama_user MyArmy_X MyArmy_Y ComArmy_X ComArmy_Y Kondisi_MyArmy_XY Kondisi_ComArmy_XY user, com tebak_x_user tebak_y_user tebak_x_com tebak_y_com benar again skor_user skor_com x, y, z
:string; :array[1..4] of integer; :array[1..4] of integer; :array[1..4] of integer; :array[1..4] of integer; :array[1..4, 1..4] of string; :array[1..4, 1..4] of string; :string; :integer; :integer; :integer; :integer; :boolean; :boolean; :integer; :integer; :integer;
{Prosedur Inisialisasi Kondisi MyArmy XY dan Kondisi ComArmy XY} procedure InitKondisiMyArmyComArmy; var a, b, c :integer; begin for a := 1 to 4 do begin for b := 1 to 4 do begin Kondisi_MyArmy_XY[a, b] := 'tutup'; Kondisi_ComArmy_XY[a, b] := 'tutup'; end; end; end; {Main} begin (*Panggil prosedur*) InitKondisiMyArmyComArmy; (*Clear Screen*) clrscr;
(*Set status si user dan com masih natural*) user := 'natural'; com := 'natural'; (*Set Skor user dan Skor com masih nol*) skor_user := 0; skor_com := 0; (*Tanya nama si user*) write('Masukkan Nama Anda : ');
readln(nama_user);
(*Buat inputan untuk menanyakan mau diposisikan dimana tentara si user*) gotoxy(1, wherey+1); write('Posisikan tentara kamu pada Koordinat berikut'); (*Posisi semua tentara tidak boleh ada yang sama*) (*Tentara 1*) again := false; repeat begin gotoxy(1, wherey+1); write('Tentara 1, Koordinat X [1..4] : '); readln(MyArmy_X[1]); write('Tentara 1, Koordinat Y [1..4] : '); readln(MyArmy_Y[1]); again := true; (*Posisi tentara harus berada diantara 1 sampai 4*) if(MyArmy_X[1] < 1) or (MyArmy_Y[1] < 1) or (MyArmy_X[1] > 4) or (MyArmy_Y[1] > 4) then begin writeln('Koordinat harus diantara 1 - 4 !!!'); again := false; end; end until again = true; (*Tentara 2*) again := false; repeat begin gotoxy(wherex, wherey+1); write('Tentara 2, Koordinat X [1..4] : '); readln(MyArmy_X[2]); write('Tentara 2, Koordinat Y [1..4] : '); readln(MyArmy_Y[2]); again := true; if(MyArmy_X[2] < 1) or (MyArmy_Y[2] < 1) or (MyArmy_X[2] > 4) or (MyArmy_Y[2] > 4) then
begin writeln('Koordinat harus diantara 1 - 4 !!!'); again := false; end; (*Cek apakah posisi tentara 2 sudah ditempati oleh tentara 1*) if(MyArmy_X[2] = MyArmy_X[1]) and (MyArmy_Y[2] = MyArmy_Y[1]) then begin writeln('Cari tempat lain...'); writeln('Posisi telah ditempati oleh tentara sebelumnya !!!'); again := false; end; end until again = true; (*Tentara 3*) again := false; repeat begin gotoxy(wherex, wherey+1); write('Tentara 3, Koordinat X [1..4] : '); readln(MyArmy_X[3]); write('Tentara 3, Koordinat Y [1..4] : '); readln(MyArmy_Y[3]); again := true; if(MyArmy_X[3] < 1) or (MyArmy_Y[3] < 1) or (MyArmy_X[3] > 4) or (MyArmy_Y[3] > 4) then begin writeln('Koordinat harus diantara 1 - 4 !!!'); again := false; end; (*Cek apakah posisi tentara 3 sudah ditempati oleh tentara 1 atau 2*) if(MyArmy_X[3] = MyArmy_X[1]) and (MyArmy_Y[3] = MyArmy_Y[1]) then begin writeln('Cari tempat lain...'); writeln('Posisi telah ditempati oleh tentara sebelumnya !!!'); again := false; end else if(MyArmy_X[3] = MyArmy_X[2]) and (MyArmy_Y[3] = MyArmy_Y[2]) then begin writeln('Cari tempat lain...'); writeln('Posisi telah ditempati oleh tentara
sebelumnya !!!'); again := false; end; end until again = true; (*Tentara 4*) again := false; repeat begin gotoxy(wherex, wherey+1); write('Tentara 4, Koordinat X[1..4] : '); readln(MyArmy_X[4]); write('Tentara 4, Koordinat Y[1..4] : '); readln(MyArmy_Y[4]); again := true; if(MyArmy_X[4] < 1) or (MyArmy_Y[4] < 1) or (MyArmy_X[4] > 4) or (MyArmy_Y[4] > 4) then begin writeln('Koodinat harus diantara 1 - 4 !!!'); again := false; end; (*Cek apakah posisi tentara sudah ditempati oleh tentara 1, 2 atau 3*) if(MyArmy_X[4] = MyArmy_X[1]) and (MyArmy_Y[4] = MyArmy_Y[1]) then begin writeln('Cari tempat lain...'); writeln('Posisi telah ditempati oleh tentara sebelumnya !!!'); again := false; end else if(MyArmy_X[4] = MyArmy_X[2]) and (MyArmy_Y[4] = MyArmy_Y[2]) then begin writeln('Cari tempat lain...'); writeln('Posisi telah ditempati oleh tentara sebelumnya !!!'); again := false; end else if(MyArmy_X[4] = MyArmy_X[3]) and (MyArmy_Y[4] = MyArmy_Y[3]) then begin writeln('Cari tempat lain...'); writeln('Posisi telah ditempati oleh tentara sebelumnya !!!'); again := false; end; end
until again = true; (*Cetak layout area user dan area musuh*) while((user <> 'win') and (com <> 'win')) do begin clrscr; writeln('Tebak posisi koordinat tentara musuh yang bersembunyi'); (*Cetak Header Layout area user dan area musuh*) gotoxy(wherex, wherey+1); write('==Area User=='); gotoxy(20, wherey); write('=Area Musuh='); (*Cetak Angka Koordinat X di Area User*) gotoxy(3, wherey+1); for x := 1 to 4 do begin write(x); gotoxy(wherex+2, wherey); end; (*Cetak Angka Koordinat X di Area Musuh*) gotoxy(22, wherey); for x := 1 to 4 do begin write(x); gotoxy(wherex+2, wherey); end; (*Cetak Angka Koordinat Y di Area User*) gotoxy(1, wherey+2); for x := 1 to 4 do begin write(x); gotoxy(1, wherey+2); end; (*Cetak Angka Koordinat Y di Area Musuh*) gotoxy(20, wherey-8); for x := 1 to 4 do begin write(x); gotoxy(20, wherey+2); end; (*Cetak Kotak Persembunyian di Area User*) gotoxy(3, wherey-8); for x := 1 to 4 do begin
for y := 1 to 4 do begin (*Cek status tiap kotak persembunyian untuk Area User*) if(Kondisi_MyArmy_XY[y, x] = 'tutup') then begin write(chr(219)); end else if(Kondisi_MyArmy_XY[y, x] = 'buka_salah') then begin write('X'); end else if(Kondisi_MyArmy_XY[y, x] = 'buka_benar') then begin write(chr(258)); end; gotoxy(wherex+2, wherey); end; gotoxy(3, wherey+2); end; (*Cetak Kotak Persembunyian di Area Musuh*) gotoxy(22, wherey-8); for x := 1 to 4 do begin for y := 1 to 4 do begin (*Cek status tiap kotak persembunyian untuk Area Musuh*) if(Kondisi_ComArmy_XY[y, x] = 'tutup') then begin write(chr(219)); end else if(Kondisi_ComArmy_XY[y, x] = 'buka_salah') then begin write('X'); end else if(Kondisi_ComArmy_XY[y, x] = 'buka_benar') then begin write(chr(258)); end; gotoxy(wherex+2, wherey); end; gotoxy(22, wherey+2); end;
(*Cetak Skor si User*) gotoxy(1, wherey+1); write('Skor User : ', skor_user); (*Cetak Skor si Com*) gotoxy(20, wherey); write('Skor Musuh : ', skor_com); (*Masukan untuk menebak Koordinat dimana posisi tentara musuh berada*) gotoxy(1, wherey+2); write('Masukkan Koordinat X untuk Musuh [1..4] : '); readln(tebak_x_user); gotoxy(1, wherey+1); write('Masukkan Koordinat Y untuk Musuh [1..4] : '); readln(tebak_y_user); end; readln; end.
Berikut hasil dari tahap pertama ini. Untuk latar belakangnya bisa berwarna, itu saya menggunakan textBackground. Bisa Anda cari di google. Dan mungkin untuk tahap pertama ini Anda bisa bereksperimen sendiri untuk mewarnai latar belakangnya ataupun warna teksnya.
Sekian untuk tutorial tahap pertama ini. Tunggu tutorial tahap keduanya ya.
Tentang Penulis
Yudi Setiawan Saat ini aktif sebagai Mahasiswa di salah satu Universitas di kota Medan dengan mengambil bidang Fakultas Teknik dan Ilmu Komputer. Sangat senang dengan bahasa pemrograman Java dan Android.