Pembuatan Game Tebak Tentara di Pascal (Part 2)

Pembuatan Game Tebak Tentara di Pascal (Part 2)

71

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.

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

Keywords: game pascal, cara buat game pascal

Share: