Sabtu, 22 Juni 2013

Game Snake Menggunakan Program Pascal


A. Initial State

Tujuan
            Tujuan kita dalam menggembangkan games ini  adalah untuk memberikan sedikit hiburan terhadap pemain yang memainkan games snake ini tanpa membutuhkan banyak peraturan dan kemudahan berpikir serta memberikan manfaatnya tersendiri didalamnya dan kami berdua memilih menggunakan bahasa pemograman pascal sebagai pembuatan games ini.

Pengenalan Game Snake
            Mungkin kita tidak asing dengan yang namanya permainan snake, pada hakikatnya snake hanyalah segelintir permainan sederhana dalam kehidupan sehari-hari. Untuk lebih jelasnya game snake merupakan game sederhana dimana kita memakan makanan agar kita bisa lanjut kelevel berikutnya. Games tersebut seperti permainan snake biasanya Cuma disini kita berusaha memakan makanan sebanyak-banyaknya dan berusaha menghindari  penghalang sebagai rintangannya, makin tinggi level yang kita hadapi maka penghalangnya makin banyak. Dalam permainan ini kita berusaha bagaimana menghalangi penghalang yang kita set  dari komputer, sehingga kita harus berusaha menghindari rintangan tersebut untuk lanjut ke level berikutnya.

Program Editor
Pembuatan game “Snake” menggunakan bahasa pemograman pascal. Pascal  Pascal merupakan suatu bahasa komputer tingkat tinggi yang dibuat sekitar tahun 1970 oleh Niklaus Wirth dan digunakan untuk pendidikan komputer. Nama Pascal diambil dari seorang ahli matematika yang bernama Blaise Pascal yang menemukan mesin hitung pertama. Bahasa Pascal dirancang untuk menyelesaikan masalah dari berbagai kalangan pemakai, mulai dari para mahasiswa, pendidik, dan ilmuwan.
Pascal adalah bahasa pemrogram terstruktur adalah suatu bahasa pemrograman terstruktur. Hal tersebut berarti semua program yang anda buat harus terstruktur dan teratur, dalam hal ini ada pemakaian oto dan jump.
            Disini pascal sebagai program editor. Pemilihan software ini dilakukan karena cukup mudah untuk dipahami meskipun dalam arti sebenarnya bahasanya memiliki sedikit arti abstrak di bagian kodingan. Pascal ini juga sering dipergunakan untuk membuat beberapa project yang berbasis AI (Artificial Inteligence). Disisi lain tidak dipungkiri memang bahwa bahasa pemograman ini memiliki bug sehingga mengganggu proses kerja kita.

            Rules
    Pada saat memulai game, kita memiliki rintangan yaitu berupa kecepatan disetiap waktu dan levelnya.
        Pada saat memulai game waktu yang disetting sebelumnya didalam program akan berjalan ketika dimainkan.
     Dengan menggunakan keyboard pada laptop atau pc anda, anda dapat mengatur posisi ular untuk memakan makanannya.
   Pada level pertama kita akan menemukan penghalang berupa waktu pada saat menurun pada layar permainan.
  Pada level kedua speed serta rintangan berupa kecepatan akan bertambah seiring dengan bertambahnya level dalam permainan snake yang kita mainkan.
    Dalam memainkan  permainan ini kita juga dituntut kecepatan dalam memakan makanan agar dapat melanjutkan kelevel berikutnya.
         Didalam permainan ini terdapat skor dan jumlah banyaknya makanan yang dimakan.
        Dipermainan ini jika kita akan menampilkan pesan, jika permainan yang dimainkan menang maka akan muncul pesan menang karena telah menyelsaikan permainan disetiap levelnya dan jika kalah dalam permainan maka akan muncul pesan kalah.

B.     Goal
a.       Kondisi jika user menang
Pemenangnya adalah user jika telah menyelsaikan semua level pada permainan game snake yang terdapat dalam computer serta dapat melewati rintangan-rintangan yang terdapat didalam games ini.



(Gambar ketika user menang)

b.      Kondisi jika user kalah
Pemenangnya adalah komputer berarti kita tidak bisa menyelsaikan permainan snake ini dengan ketentuan yang ada.

(Gambar ketika user kalah)

c.       Konsep AI
       Snake merupakan suatu permainan yang menggunakan konsep Artificial Inteligence atau kecerdasan buatan. Adapun kecerdasan buatan yang dimaksud dalam permainan ini adalah kita memiliki lawan yaitu komputer. Disini kita berinteraksi dengan pemain dari komputer yaitu komputer itu sendiri yang  berusaha mengalahkan kita. Permainan akan dimenangkan jika di salah satu pemain memiliki strategi yang baik dalam menyelsaikan permainan untuk melanjutkan kelevel berikutnya.
      Untuk memainkan game prolog ini kita harus memiliki kompiler pascal terlebih dahulu.Untuk memainkan game ini terlebih dahulu buka aplikasi pascalnya kemudian klik File>Open dan pilih nama game tersebut. Setelah itu untuk menjalankan double klik

Algoritma yang Digunakan
Algoritma Minmax
Untuk menentukan pilihan agar memperkecil kemungkinan kehilangan nilai maksimal. Algoritma ini diterapkan dalam permainan yang melibatkan dua pemain seperti tic tac toe, checkers, go dan permainan yang menggunakan strategi atau logika lainnya. Hal ini berarti permainan-permainan tersebut dapat dijelaskan sebagai suatu rangkaian aturan dan premis. Dengan itu, kita dapat mengetahui, pada titik tertentu permainan, langkah-langkah yang mungkin berikutnya. Permainan tersebut berbagi karakteristik yang sama, yakni “permainan dengan penuh informasi”. Setiap pemain mengetahui semua langkah-langkah yang mungkin dari pemain lawannya.

Penerapan Algoritma Minimax dalam Pemograman Snake
Penerapan algoritma Minimax dalam Snake dibuat berdasarkan prosedur Minimax untuk mendapatkan langkah terbaik dari posisi yang ada. Setiap posisi memiliki nilai yang dapat dihasilkan dari langkah terbaik, dengan berasumsi bahwa AI akan selalu mencoba memaksimalkan nilai, ketika lawan akan mencoba untuk meminimalkannya.Ketika prosedur minimax mencapai akar pada pohon pencarian (posisi saat tersebut), akan menghasilkan langkah terbaik dengan asumsi lawan akan menggunakan kriteria evaluasi yang sama. Beberapa versi program yang dibuat kebanyakan telah menerapkan algoritma pemotongan alpha-beta.Terdapat dua macam metode, yang disebut rote learning. Metode tersebut memiliki penyimpan untuk setiap posisi yang ditemui selama permainan dengan tidak menghilangkan nilai yang ditentukan oleh prosedur Minimax. Hasilnya adalah jika terdapat posisi yang pernah ditenukan sebelumnya, akan dimunculkan sebagai posisi terminal pada pohon pencarian. Sehingga, pencarian akan semakin mudah karena nilai posisi diambil dari hasil pencarian yang telah dilakukan sebelumnya. Satu masalah awal yang ditemukan adalah program tidak mendukung untuk melangkah langsung menuju kemenangan.


Algoritma Program Snake
uses crt;

label
  habis, lanjut;

const
  max_panjang = 100;
  batas_x = 80;
  batas_y = 25;
  speed   = 200;

type
  tempat = record
    x, y : integer;
  end;

var
  ekor : array[1..max_panjang] of tempat;
  ujung, makanan : tempat;
  tkn : char;
  i,pjg,skor,spd  : integer;
  mati : boolean;

procedure atur_posisi;
begin
  ujung.x := ekor[pjg].x;
  ujung.y := ekor[pjg].y;
  for i:=pjg downto 2 do begin
    ekor[i].x := ekor[i-1].x;
    ekor[i].y := ekor[i-1].y;
  end;
  gotoxy(ekor[2].x, ekor[2].y); write('@');
  gotoxy(ekor[3].x, ekor[3].y); write('&');
  gotoxy(ekor[pjg-1].x, ekor[pjg-1].y); write('#');
  gotoxy(ujung.x, ujung.y); write(' ');
  for i:=3 to pjg do if((ekor[2].x=ekor[i].x) and (ekor[2].y=ekor[i].y)) then mati:=true;
  delay(speed-spd);
end;

procedure makan;
var beda : boolean;
begin
  inc(skor,5);
  gotoxy(10,26); write('Skor = ',skor);
  repeat
    beda := true;
    makanan.x := random(batas_x-2)+2;
    makanan.y := random(batas_y-2)+2;
    for i:=1 to pjg do
      if((makanan.x=ekor[i].x) and (makanan.y=ekor[i].y)) then beda:=false;
  until beda;

gotoxy(makanan.x, makanan.y); write('o');
  inc(pjg);
  inc(spd,2);
end;

procedure bergerak(c : char);
begin
  if c = 'd' then begin
    repeat
      if((ekor[1].x = makanan.x) and (ekor[1].y = makanan.y)) then makan;
      ekor[1].x := ekor[1].x+1;
      atur_posisi;
      if (ekor[1].x = batas_x) or (ekor[1].y = batas_y) or (ekor[1].x = 1) or (ekor[1].y = 1) then mati := true;
    until keypressed or mati;
    if mati then exit;
    tkn:=readkey;
    if tkn = 'a' then tkn:='d';
  end
  else if c = 's' then begin
    repeat
      if((ekor[1].x = makanan.x) and (ekor[1].y = makanan.y)) then makan;
      ekor[1].y := ekor[1].y+1;
      atur_posisi;
      if (ekor[1].x = batas_x) or (ekor[1].y = batas_y) or (ekor[1].x = 1) or (ekor[1].y = 1) then mati := true;
    until keypressed or mati;
    if mati then exit;
    tkn:=readkey;
    if tkn = 'w' then tkn:='s';
  end
  else if c = 'w' then begin
    repeat
      if((ekor[1].x = makanan.x) and (ekor[1].y = makanan.y)) then makan;
      ekor[1].y := ekor[1].y-1;
      atur_posisi;
      if (ekor[1].x = batas_x) or (ekor[1].y = batas_y) or (ekor[1].x = 1) or (ekor[1].y = 1) then mati := true;
    until keypressed or mati;
    if mati then exit;
    tkn:=readkey;
    if tkn = 's' then tkn:='w';
  end
  else if c = 'a' then begin
    repeat
      if((ekor[1].x = makanan.x) and (ekor[1].y = makanan.y)) then makan;
      ekor[1].x := ekor[1].x-1;
      atur_posisi;
      if (ekor[1].x = batas_x) or (ekor[1].y = batas_y) or (ekor[1].x = 1) or (ekor[1].y = 1) then mati := true;
    until keypressed or mati;
    if mati then exit;
    tkn:=readkey;
    if tkn = 'd' then tkn:='a';
  end;
end;

begin
  tkn:='d';
mati := false;
  randomize;
  pjg := 10; spd := 0;
  makanan.x := random(batas_x-2)+2;
  makanan.y := random(batas_y-2)+2;
  ekor[1].x := 40;
  ekor[1].y := 3;
  for i:=2 to pjg do begin
    ekor[i].x := ekor[i-1].x;
    ekor[i].y := 3;
  end;
lanjut:
  clrscr;
  gotoxy(10,26); write('Skor = ',skor);
  for i:=1 to 80 do begin
    gotoxy(i,1); write('-');
    gotoxy(i,25); write('-');
  end;
  for i:=2 to 24 do begin
    gotoxy(1,i); write('|');
    gotoxy(80,i); write('|');
  end;
  for i:=1 to pjg do begin
    gotoxy(ekor[i].x, ekor[i].y);
    write('&');
  end;
  gotoxy(makanan.x, makanan.y); write('o');
  repeat
    if((tkn='w') or (tkn='a') or (tkn='s') or (tkn='d')) then bergerak(tkn)
    else begin
      repeat
        gotoxy(20,11); write('          Paused Game');
        repeat
          gotoxy(20,13); write('Press w, a, s or d to continue'); delay(200);
          gotoxy(20,13); write('                                '); delay(200);
        until keypressed;
        tkn:=readkey;
    until((tkn='w') or (tkn='a') or (tkn='s') or (tkn='d')); goto lanjut;
    end;
    if mati then goto habis;
  until (tkn = #27) or mati;

habis:
  gotoxy(20,10); write(' You lose');

  readln;
end

Kesimpulan
Dalam permainan game Snake ini sangat mudah sekali tidak dibutuhkan pemikiran yang keras hanya saja didalam permainan ini kita dituntut agar dapat menyelsaikan semua rintangan yang ada didalam level-level dan dapat meyelsaikan game tersebut dengan tepat.
Dengan menggunakan konsep AI(Artificial Inteligence) di dalamnya untuk menentukan pilihan agar memperkecil kemungkinan kehilangan nilai maksimal. memnudahkan kita dalam menyelesaikan game ini. Algoritma pemograman yang terdapat dalam game ini adalah Penerapan algoritma Minimax dalam snake dibuat berdasarkan prosedur Minimax untuk mendapatkan langkah terbaik dari posisi ada. setiap posisi memiliki nilai yang dihasilkan dari langkah terbaik, dengan beramsumsi bahwa AI akan selalu mencoba memaksimalkan nilai, ketika lawan mencoba memaklsimalkanya.