Pembuatan Game Tebak Tentara di Pascal (Part 1)

Pembuatan Game Tebak Tentara di Pascal (Part 1)

35

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] : ");  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;

  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.

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;

     

{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

Keywords: game pascal, cara buat game pascal

Share: