Facebook


Senin, 29 April 2013

Membuat Game sederhana dengan menggunakan Pascal

Abstrak
            Game magic number merupakan hal yang sudah terbiasa kita dengar, dan mungkin sering melihat atau bahkan memainkan yang namanya magic number. Pada kenyataannya biasanya kita memainkan permainan ini secara manual yaitu menuliskan angka-angka yang akan ditebak hingga 7 langkah, sehingga kemungkinan untuk menebak angka yang dipikirkan oleh penonton semakin besar. Tanpa disadari sebenarnya permainan ini cukup klasik dan mudah untuk dipahami oleh siapa saja. Prinsip yang paling sederhana yang ditanamkan disini adalah prinsip langkah demi langkah yang digunakan memperbesar peluang penebak dengan mengurangi angka yang akan ditebak. Nah, pada saat ini kami mencoba merealisasikan permainan yang kita mainkan secara manual ke dalam bentuk sebuah program komputer, sehingga kita tidak perlu menuliskan angka-angka tersebut sebagaimana langkah yang telah dibuat secara manual. Prinsik kerjanya juga sama pada manual, di pemograman yang kita buat, kita cukup mengetikkan “Y” jika angka yang kita pikirkan ada dalam deretan bilangan dan “T” jika angka yang kita pikirkan tidak ada dalam deret bilangan. Jika sudah menentukan pilihan, kita cukup menekan tombol enter hingga tebakan angka nantinya akan muncul di tahap akhir.
Pendahuluan
            Tahap yang terpenting dalam game magic number ini adalah kita tahu bagaimana logika permainan, sehingga untuk menginplementasikan ke bahasa pemograman lebih mudah.
Di permainan ini kita menggunakan algoritma backtracking yaitu kita tidak perlu memeriksa semua kemungkinan solusi yang ada. Kita hanya melakukan pencarian yang mengarak ke solusi saja yang dipertimbangkan. Akibatnya, waktu pencarian dapat dihemat. Algoritma ini berbasis DFS untuk mencari solusi persoalan yang lebih efisien dan merupakan perbaikan dari brute force.
ALGORITMA SECARA ABSTRAK
1.    Cetak semua angka yang salah satunya nantinya akan ditebak. Dalam hal ini kita menggunakan angka [1-50].
2.    Cetak apakah angka angka yang dipikirkan ada pada deret bilangan.
3.    Selanjutnya cetak bilangan ganjil dari [1-50].
4.    Cetak apakah angka angka yang dipikirkan ada pada deret bilangan.
5.    Selanjutnya cetak bilangan berurutan dimulai angka 2 hingga 50 dengan syarat setiap dua deretan bilangan ditambah 3.
6.    Cetak apakah angka angka yang dipikirkan ada pada deret bilangan.
7.    Cetak bilangan berurutan dimulai angka 4 hingga 50 dengan syarat setiap 4 deretan bilangan berurutan ditambah 5.
8.    Cetak apakah angka angka yang dipikirkan ada pada deret bilangan.
9.    Selanjutnya cetak bilangan berurutan dimulai angka 8 hingga 50 dengan syarat setiap 8 deretan bilangan berurutan ditambah 9.
10.    Cetak apakah angka angka yang dipikirkan ada pada deret bilangan.
11.    Selanjutnya cetak bilangan berurutan dimulai angka 16 hingga 50 dengan syarat setiap 16 deretan bilangan berurutan ditambah 17.
12.    Cetak apakah angka angka yang dipikirkan ada pada deret bilangan.
13.    Selanjutnya cetak bilangan berurutan dimulai angka 32 hingga 50 dengan syarat setiap 32 deretan bilangan berurutan ditambah 33.
14.    Cetak apakah angka angka yang dipikirkan ada pada deret bilangan.
15.    Tampilkan hasil tebakan.

Logika yang kita berikan diatas bertujuan untuk memperkecil deretan angka yang akan ditebak dan memperbesar peluang untuk menebak angka yang dipilih oleh user.
Penerapan Algoritma Backtracking Pada Magic Number
        Algotima backtracking adalah algorima yang berbasis pada DFS untuk mencari solusi persoalan secara lebih efisien. Backtracking merupakan perbaikan dari algotitma brute force, seara sistematis mencari solusi persoalan di antara semua kemungkinan solusi yang ada. Dengan metode runut-balik, kita tidak perlu memeriksa semua kemungkinan solusi yang ada. Hanya pencarian yang mengarah ke solusi saja yang selalu dipertimbangkan. Akibatnya, waktu pencarian dapat dihemat.


        Pada “Game Magic Number” ini untuk mencari solusi cukuplah simpel, dimana semua solusi depertimbangkan, tapi deretan angka antara langkah yang satu dengan deretan angka pada langkah selanjutnya dikurangkan.

Listing Program

PROGRAM SULAPANGKA;
USES CRT;
VAR I, J, K, L: INTEGER;
YT: CHAR;
NILAI:INTEGER;
FUNCTION CSTR(I: INTEGER): STRING;
VAR
S: STRING[11];
BEGIN
GOTOXY(30,1);
WRITE('WELCOME IN MAGIC NUMBER');
STR(I, S);
CSTR := S;
END;
PROCEDURE TULIS(POSISI:INTEGER; TEKS:STRING);
VAR A, B, C: INTEGER;
BEGIN
A := POSISI;
B := POSISI MOD 10;
C := 1;
IF B = 0 THEN
BEGIN B := 10;C := 0; END;
GOTOXY(B * 8 - 5,
(A DIV 10 + C) * 3 + 1);
WRITE(TEKS);
END;
PROCEDURE BIKIN_KOTAK(KOLOM, BARIS: INTEGER);
BEGIN
CLRSCR;
FOR I:= 1 TO KOLOM DO
BEGIN
FOR J := 1 TO BARIS DO
BEGIN
GOTOXY (J * 8 - 7, (I * 3));
WRITE('____');
GOTOXY (J * 8 - 7, (I * 3 + 1));
WRITE('|        |');
GOTOXY (J * 8 - 7, (I * 3 + 2));
WRITE('____');
END;
END;
END;
PROCEDURE WIZARD7;
BEGIN
CLRSCR;
WRITELN('ANGKA YANG ANDA PILIH = ', NILAI);
WRITELN;
WRITE('INGIN MENGULANG (Y/ESC.)? ');READKEY;
YT := READKEY;
END;
PROCEDURE WIZARD6;
BEGIN
BIKIN_KOTAK(2, 10);
FOR I := 1 TO 19 DO
TULIS(I, CSTR(I + 31));
GOTOXY (5, 15);
WRITE('APAKAH ANGKA YANG ANDA PILIH',
' ADA PADA DERETAN ANGKA DI ATAS (Y/T) ');
REPEAT
YT := READKEY;
UNTIL YT IN ['y', 'Y', 't', 'T', #27];
IF UPCASE(YT) = 'Y' THEN
NILAI := NILAI + 32;
WIZARD7;
{===============================}
END;
PROCEDURE WIZARD5;
BEGIN
BIKIN_KOTAK(2, 10);
FOR I := 1 TO 16 DO
TULIS(I, CSTR(I + 15));
FOR J := 17 TO 19 DO
TULIS (J, CSTR(J + 31));
GOTOXY (5, 15);
WRITE('APAKAH ANGKA YANG ANDA PILIH',
' ADA PADA DERETAN ANGKA DI ATAS (Y/T) ');
REPEAT
YT := READKEY;
UNTIL YT IN ['y', 'Y', 't', 'T', #27];
{===============================}
IF UPCASE(YT) = 'Y' THEN
NILAI := NILAI + 16;
WIZARD6;
END;
PROCEDURE WIZARD4;
BEGIN
BIKIN_KOTAK(3, 10);
FOR J := 0 TO 2 DO
FOR I := 1 TO 8 DO
TULIS(J * 8 + I, CSTR(J * 16 + I + 7));
GOTOXY (5, 15);
WRITE('APAKAH ANGKA YANG ANDA PILIH',
' ADA PADA DERETAN ANGKA DI ATAS (Y/T) ');
REPEAT
YT := READKEY;
UNTIL YT IN ['y', 'Y', 't', 'T', #27];
IF UPCASE(YT) = 'Y' THEN
NILAI := NILAI + 8;
WIZARD5;
 {===============================}
END;
PROCEDURE WIZARD3;
BEGIN
BIKIN_KOTAK(3, 10);
FOR J := 0 TO 5 DO
FOR I := 1 TO 4 DO
TULIS(J * 4 + I, CSTR(J * 8 + I + 3));
GOTOXY (5, 15);
WRITE('APAKAH ANGKA YANG ANDA PILIH',
' ADA PADA DERETAN ANGKA DI ATAS (Y/T) ');
REPEAT
YT := READKEY;
UNTIL YT IN ['y', 'Y', 't', 'T'];
IF UPCASE(YT) = 'Y' THEN
NILAI := NILAI + 4;
WIZARD4;
{===============================}
END;
PROCEDURE WIZARD2;
BEGIN
BIKIN_KOTAK(3, 10);
J:=0;
FOR J := 0 TO 12 DO
FOR I := 1 TO 2 DO
TULIS(J * 2 + I, CSTR(J * 4 + I + 1));
GOTOXY (5, 15);
WRITE('APAKAH ANGKA YANG ANDA PILIH',
' ADA PADA DERETAN ANGKA DI ATAS (Y/T) ');
REPEAT
YT := READKEY;
UNTIL YT IN ['y', 'Y', 't', 'T', #27];
IF UPCASE(YT) = 'Y' THEN
NILAI := NILAI + 2;
WIZARD3;
{===============================}
END;
PROCEDURE WIZARD1;
BEGIN
BIKIN_KOTAK(3, 10);
L:= 1;
REPEAT
TULIS ((L + 1) DIV 2,CSTR(L));
L:= L + 2;
UNTIL L > 50;
GOTOXY (5, 15);
WRITE('APAKAH ANGKA YANG ANDA PILIH',
' ADA PADA DERETAN ANGKA DI ATAS (Y/T) ');
REPEAT
YT := READKEY;
UNTIL YT IN ['y', 'Y', 't', 'T', #27];
IF UPCASE(YT) = 'Y' THEN
NILAI := 1;
WIZARD2;
{===============================}
END;
PROCEDURE TULIS_NOMOR;
BEGIN
BIKIN_KOTAK(5, 10);
FOR K:= 1 TO 50 DO
TULIS(K, CSTR(K));
GOTOXY(1, 20);
WRITE ('PILIH SEBUAH ANGKA, ',
'TEKAN: Y, KALO MAU TERUS! ');
WRITE ('TEKAN ESC UNTUK KELUAR ');
REPEAT
YT := READKEY;
IF UPCASE(YT) = 'Y' THEN
BEGIN
NILAI := 0;
WIZARD1;
END;
UNTIL YT IN ['y', 'Y', 't', 'T', #27];
{===============================}
END;
(* Program Utama *)
BEGIN
CLRSCR;
TEXTATTR := $1F;
REPEAT
TULIS_NOMOR;
UNTIL YT = #27;
END.


Output Program
Gambar 1. Tampilan Langkah Pertama
Gambar 1. Tampilan Akhir Setelah Angka Ditebak


2 komentar:

Poskan Komentar