• Tidak ada hasil yang ditemukan

Pembuatan Game Tebak Tentara di Pascal (Part 2)

N/A
N/A
Protected

Academic year: 2021

Membagikan "Pembuatan Game Tebak Tentara di Pascal (Part 2)"

Copied!
16
0
0

Teks penuh

(1)
(2)

Pembuatan Game Tebak Tentara di Pascal

(Part 2)

Oleh: Yudi Setiawan

Melanjutkan tutorial sebelumnya, dimana setelah membuat layoutnya.

Pada tutorial tahap kedua ini kita akan membuat algoritma dari

programnya. Algoritma program yang akan kita buat kali ini ialah tentang

cara agar computer bisa meletakkan posisi tentaranya secara benar dan

acak setiap game dimulai. Setelah itu, ...

Melanjutkan tutorial sebelumnya, dimana setelah membuat layoutnya. Pada tutorial tahap kedua ini kita akan membuat algoritma dari programnya. Algoritma program yang akan kita buat kali ini ialah tentang cara agar computer bisa meletakkan posisi tentaranya secara benar dan acak setiap game dimulai. Setelah itu, buat algoritma dari si user apakah tebakannya untuk posisi tentara musuh tepat mengenai sasaran atau tidak dan apabila tebakan si user benar maka, skor si user akan bertambah. Setelah Anda tahu apa isi dari tutorial kedua ini, mari langsung menuju intinya saja. Ikuti langkah – langkah berikut dengan benar dan pelan – pelan.

Buatlah prosedur berikut, agar si computer atau katakanlah si musuh bisa meletakkan posisi 1.

tentaranya sendiri secara acak dan benar.

{Set Posisi Tentara Musuh secara acak dan benar} procedure setPosisiTentaraMusuh;

var

a, b, c :integer; ulang :boolean; begin

(*Gunakan Randomize untuk menghasilkan random yang lebih baik*) randomize;

(*Tentara 1 Musuh*)

ComArmy_X[1] := random(4) + 1; {Random dari 0 - 3} ComArmy_Y[1] := random(4) + 1; (*Tentara 2 Musuh*) randomize; ComArmy_X[2] := random(4) + 1; ComArmy_Y[2] := random(4) + 1; (*Tentara 3 Musuh*) randomize; ComArmy_X[3] := random(4) + 1; ComArmy_Y[3] := random(4) + 1; (*Tentara 4 Musuh*)

(3)

randomize;

ComArmy_X[4] := random(4) + 1; ComArmy_Y[4] := random(4) + 1; end;

Agar posisi tentara si musuh memang berada di posisi yang benar maka, tambahkan coding 2.

berikut untuk point 1 agar, posisi tentara si musuh tidak duplikat. Ingat, edit coding pada point 1 dan tambahkan coding berikut.

{Set Posisi Tentara Musuh secara acak dan benar(update kode point 1)} procedure setPosisiTentaraMusuh;

var

a, b, c :integer; ulang :boolean; begin

(*Gunakan Randomize untuk menghasilkan random yang lebih baik*) randomize;

(*Tentara 1 Musuh*)

ComArmy_X[1] := random(4) + 1; {Random dari 0 - 3} ComArmy_Y[1] := random(4) + 1; (*Tentara 2 Musuh*) ulang := false; repeat begin randomize; ComArmy_X[2] := random(4) + 1; ComArmy_Y[2] := random(4) + 1; ulang := true;

(*Cek apakah posisi tentara 2 sudah ditempati oleh Tentara 1*)

if(ComArmy_X[2] = ComArmy_X[1]) and (ComArmy_Y[2] = ComArmy_Y[1]) then begin

randomize; ulang := false;

(*Acak secara asalan agar value yang dihasilkan oleh Random benar*) ComArmy_X[2] := random(200);

ComArmy_Y[2] := random(300); end;

end

until ulang = true; (*Tentara 3 Musuh*) ulang := false; repeat begin randomize; ComArmy_X[3] := random(4) + 1; ComArmy_Y[3] := random(4) + 1; ulang := true;

(4)

(*Cek apakah posisi tentara 3 sudah ditempati oleh Tentara 1 atau 2*)

if(ComArmy_X[3] = ComArmy_X[1]) and (ComArmy_Y[3] = ComArmy_Y[1]) then begin randomize; ulang := false; ComArmy_X[3] := random(100); ComArmy_Y[3] := random(200); end

else if(ComArmy_X[3] = ComArmy_X[2]) and (ComArmy_Y[3] = ComArmy_Y[2]) then begin randomize; ulang := false; ComArmy_X[3] := random(150); ComArmy_Y[3] := random(250); end; end

until ulang = true; (*Tentara 4 Musuh*) ulang := false; repeat begin randomize; ComArmy_X[4] := random(4) + 1; ComArmy_Y[4] := random(4) + 1; ulang := true;

if(ComArmy_X[4] = ComArmy_X[1]) and (ComArmy_Y[4] = ComArmy_Y[1]) then begin randomize; ulang := false; ComArmy_X[4] := random(300); ComArmy_Y[4] := random(100); end

else if(ComArmy_X[4] = ComArmy_X[2]) and (ComArmy_Y[4] = ComArmy_Y[2]) then begin randomize; ulang := false; ComArmy_X[4] := random(100); ComArmy_Y[4] := random(200); end

else if(ComArmy_X[4] = ComArmy_X[3]) and (ComArmy_Y[4] = ComArmy_Y[3]) then begin

randomize; ulang := false;

(5)

ComArmy_X[4] := random(200); ComArmy_Y[4] := random(500); end;

end

until ulang = true; end;

Dan coding berikut, akan mengecek inputan si user apakah tebakan si user memang benar 3.

mengenai sasaran atau salah.

(*Cek tebakan si User untuk menebak posisi tentara si Musuh*) benar := false;

if(Kondisi_ComArmy_XY[tebak_x_user, tebak_y_user] = 'buka_benar') then begin

benar := true; end

else if(ComArmy_X[1] = tebak_x_user) and (ComArmy_Y[1] = tebak_y_user) then begin

Kondisi_ComArmy_XY[tebak_x_user, tebak_y_user] := 'buka_benar'; benar := true;

inc(skor_user); end

else if(ComArmy_X[2] = tebak_x_user) and (ComArmy_Y[2] = tebak_y_user) then begin

Kondisi_ComArmy_XY[tebak_x_user, tebak_y_user] := 'buka_benar'; benar := true;

inc(skor_user); end

else if(ComArmy_X[3] = tebak_x_user) and (ComArmy_Y[3] = tebak_y_user) then begin

Kondisi_ComArmy_XY[tebak_x_user, tebak_y_user] := 'buka_benar'; benar := true;

inc(skor_user); end

else if(ComArmy_X[4] = tebak_x_user) and (ComArmy_Y[4] = tebak_y_user) then begin

Kondisi_ComArmy_XY[tebak_x_user, tebak_y_user] := 'buka_benar'; benar := true;

inc(skor_user); end;

(*Jika tebakan si user salah*) if(benar = false) then

begin

Kondisi_ComArmy_XY[tebak_x_user, tebak_y_user] := 'buka_salah'; end;

Dan bila, skor si user sudah mencapai 4 maka, si user dinyatakan menang. Letakkan coding 4.

berikut diatas coding point 3. (*Cek skor si user*)

if(skor_user = 4) then begin

user := 'win';

(6)

writeln('Selamat, Anda menang...'); readkey;

break; end;

Jadi, jika digabungin dengan coding pada tahap pertama maka, akan jadi seperti berikut.

(*

Author Yudi Setiawan *)

program TebakTentara; uses crt;

{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;

{Part 2:Set Posisi Tentara Musuh secara acak dan benar} procedure setPosisiTentaraMusuh;

var

a, b, c :integer; ulang :boolean; begin

(*Gunakan Randomize untuk menghasilkan random yang lebih baik*) randomize;

(*Tentara 1 Musuh*)

ComArmy_X[1] := random(4) + 1; {Random dari 0 - 3} ComArmy_Y[1] := random(4) + 1;

(7)

(*Tentara 2 Musuh*) ulang := false; repeat begin randomize; ComArmy_X[2] := random(4) + 1; ComArmy_Y[2] := random(4) + 1; ulang := true;

(*Cek apakah posisi tentara 2 sudah ditempati oleh Tentara 1*)

if(ComArmy_X[2] = ComArmy_X[1]) and (ComArmy_Y[2] = ComArmy_Y[1]) then

begin

randomize; ulang := false;

(*Acak secara asalan agar value yang dihasilkan oleh Random benar*)

ComArmy_X[2] := random(200); ComArmy_Y[2] := random(300); end;

end

until ulang = true; (*Tentara 3 Musuh*) ulang := false; repeat begin randomize; ComArmy_X[3] := random(4) + 1; ComArmy_Y[3] := random(4) + 1; ulang := true;

(*Cek apakah posisi tentara 3 sudah ditempati oleh Tentara 1 atau 2*)

if(ComArmy_X[3] = ComArmy_X[1]) and (ComArmy_Y[3] = ComArmy_Y[1]) then begin randomize; ulang := false; ComArmy_X[3] := random(100); ComArmy_Y[3] := random(200); end

else if(ComArmy_X[3] = ComArmy_X[2]) and (ComArmy_Y[3] = ComArmy_Y[2]) then

begin

randomize; ulang := false;

(8)

ComArmy_X[3] := random(150); ComArmy_Y[3] := random(250); end;

end

until ulang = true; (*Tentara 4 Musuh*) ulang := false; repeat begin randomize; ComArmy_X[4] := random(4) + 1; ComArmy_Y[4] := random(4) + 1; ulang := true;

if(ComArmy_X[4] = ComArmy_X[1]) and (ComArmy_Y[4] = ComArmy_Y[1]) then begin randomize; ulang := false; ComArmy_X[4] := random(300); ComArmy_Y[4] := random(100); end

else if(ComArmy_X[4] = ComArmy_X[2]) and (ComArmy_Y[4] = ComArmy_Y[2]) then begin randomize; ulang := false; ComArmy_X[4] := random(100); ComArmy_Y[4] := random(200); end

else if(ComArmy_X[4] = ComArmy_X[3]) and (ComArmy_Y[4] = ComArmy_Y[3]) then begin randomize; ulang := false; ComArmy_X[4] := random(200); ComArmy_Y[4] := random(500); end; end

until ulang = true; clrscr;

writeln('Tentara 1 X : ', ComArmy_X[1]); writeln('Tentara 1 Y : ', ComArmy_Y[1]); writeln('Tentara 2 X : ', ComArmy_X[2]);

(9)

writeln('Tentara 2 Y : ', ComArmy_Y[2]); writeln('Tentara 3 X : ', ComArmy_X[3]); writeln('Tentara 3 Y : ', ComArmy_Y[3]); writeln('Tentara 4 X : ', ComArmy_X[4]); writeln('Tentara 4 Y : ', ComArmy_Y[4]); readkey; end;

{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; setPosisiTentaraMusuh; (*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*)

(10)

(*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

(11)

(*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]);

(12)

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);

(13)

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));

(14)

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); (*Part 2 : Cek skor si user*) if(skor_user = 4) then

begin

user := 'win';

gotoxy(1, wherey+2);

writeln('Selamat, Anda menang...'); readkey;

break; end;

(15)

(*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);

(*Part 2 : Cek tebakan si User untuk menebak posisi tentara si Musuh*) benar := false; if(Kondisi_ComArmy_XY[tebak_x_user, tebak_y_user] = 'buka_benar') then begin benar := true; end

else if(ComArmy_X[1] = tebak_x_user) and (ComArmy_Y[1] = tebak_y_user) then begin Kondisi_ComArmy_XY[tebak_x_user, tebak_y_user] := 'buka_benar'; benar := true; inc(skor_user); end

else if(ComArmy_X[2] = tebak_x_user) and (ComArmy_Y[2] = tebak_y_user) then begin Kondisi_ComArmy_XY[tebak_x_user, tebak_y_user] := 'buka_benar'; benar := true; inc(skor_user); end

else if(ComArmy_X[3] = tebak_x_user) and (ComArmy_Y[3] = tebak_y_user) then begin Kondisi_ComArmy_XY[tebak_x_user, tebak_y_user] := 'buka_benar'; benar := true; inc(skor_user); end

else if(ComArmy_X[4] = tebak_x_user) and (ComArmy_Y[4] = tebak_y_user) then begin Kondisi_ComArmy_XY[tebak_x_user, tebak_y_user] := 'buka_benar'; benar := true; inc(skor_user); end;

(16)

(*Part 2 : Jika tebakan si user salah*) if(benar = false) then

begin Kondisi_ComArmy_XY[tebak_x_user, tebak_y_user] := 'buka_salah'; end; end; readln; end.

Berikut hasil dari tutorial kedua ini.

Sekian untuk tutorial tahap kedua ini. Tunggu tutorial berikutnya.

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.

Referensi

Dokumen terkait

dari hasil uji impact pada specimen dengan serat gelas didapat kekuatn impact terendah pada specimen dengan volume serat 20% sehingga didapat kekuatan

Hasil penelitian menunjukan bahwa penerapan otonomi dalam pengelolaan keuangan desa di Kecarnatan Singkep Barat - Kabupaten Lingga belwn berjalan secara optimal, karena i

Zakat yang berhasil dikumpulkan pada tahun 1972 adalah sejumlah 45% dari seluruh zakat yang terkumpul, oleh karena 55% menurut kesepakatan ditingkatkan kecamatan dan

Penelitian ini dilakukan oleh Ni Wayan Rustiarini (2016) yang berjudul “ Good Governance dalam Pengelolaan Dana Desa” Dalam penelitian ini diperoleh hasil penelitian

Ucapan terima kasih dan penghargaan yang sebesar-besarnya kepada: Bapak Rektor USU, yang telah memberikan kesempatan kepada saya untuk mengikuti Program Pendidikan Dokter Spesialis

Dalam Macromedia Flash, animasi jenis ini didapatkan dengan teknik animasi path, teknik ini menggunakan layer tersendiri yang didefinisikan sebagai lintasan

Dari rumusan tujuan pendidikan nasional kita dapat menyimpulkan bahwa manusia Dari rumusan tujuan pendidikan nasional kita dapat menyimpulkan bahwa manusia yang

(associated causes)... !asa nifas adalah masa yang dimulai setelah plasenta lahir setelah # minggu %42 hari&amp; untuk kembalinya alat &#34; alat reproduksi pada