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, ...

Pembuatan Game Tebak Tentara di Pascal (Part 2)

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.

  1. Buatlah prosedur berikut, agar si computer atau katakanlah si musuh bisa meletakkan posisi 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*)
    	randomize;
    	ComArmy_X[4] := random(4) + 1;
    	ComArmy_Y[4] := random(4) + 1;
    	
    end;
  2. Agar posisi tentara si musuh memang berada di posisi yang benar maka, tambahkan coding 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;
    		
    		(*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;
    			
    			ComArmy_X[4] := random(200);
    			ComArmy_Y[4] := random(500);
    		end;
    	end
    	until ulang = true;
    end;
  3. Dan coding berikut, akan mengecek inputan si user apakah tebakan si user memang benar 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;
  4. Dan bila, skor si user sudah mencapai 4 maka, si user dinyatakan menang. Letakkan coding berikut diatas coding point 3.
    (*Cek skor si user*)
    if(skor_user = 4) then
    begin
    	user := 'win';
    	gotoxy(1, wherey+2);
    	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;
	
	(*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;
			
			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]);
	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*)
	(*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);
		
		(*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;
		
		(*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;
		
		(*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.

 


About Author

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.


Comment & Discussions

    Please LOGIN before if you want to give the comment.