Wednesday, May 21, 2014

Tugas softskill part 2 : Membuat Game Sederhana

Tentang Game:
Game Take Me Out v2 ini atau disingkat TMO V2 ini adalah game yang saya kembangkan dari game Strawberry Prolog yang bernama "Labyrinth". di Game ini dilakukan beberapa pengembangan diantaranya adalah GUI yang lebih menarik beserta penambahan level dan suara. untuk itu langsung saja kita melihat screenshoot game ini :

1. Tampilan Awal



ditampilan awal game ini akan ada beberapa menu, diantaranya:

A. Pilih Level : Digunakan Untuk memilih tingkat kesulitan dalam permainan.
B. Keluar : Untuk mengakhiri dan keluar dari permainan
C. Cara Bermain : Adalah panduan untuk bermain game ini
D. Informasi : Adalah informasi tentang game ini

2. Tampilan Pilih Level


ditampilan Pilih level ini kita bisa memilih level yang diinginkan, mulai dari Pemanasan,Pemula,Menengah,Sulit dan Sangat Sulit. dan juga ada menu kembali untuk kembali lagi ke halaman awal, dan menu keluar untuk mengakhiri permainan.

3. Tampilan Cara Bermain


ditampilan cara bermain ini, maka begitu menu cara bermain di klik maka secara otomatis akan keluar Notepad yang berisikan cara bermain game ini.

4. Tampilan Informasi


Ditampilan Informasi ini pengguna akan ditampilkan pada sebuah informasi tentang game ini, mulai dari sejarah, game dasar, pembuat dan juga sumber referensi yang turut membantu dalam pembuatan game ini hingga akhirnya berhasil.

5. Tampilan saat Bermain


ini adalah tampilan saat permainan dimulai, Disini kita diharuskan menemukan Timmy yang berperan sebagai AI. dan pemain disini diperankan oleh sosok laki-laki pemilik timmy. pemain diharuskan menemukan Timmy sebelum waktu 15 detik habis.

6. Tampilan saat Menang


ini adalah tampilan yang keluar, jika pemain berhasil menemukan Timmy sebelum waktu habis. dan pemain bisa mengulangi permainan dengan cara memilih menu "Coba Lagi"

7. Tampilan saat Kalah


dan ini adalah tampilan yang keluar jika pemain gagal menemukan timmy.


Cara Pembuatan

Dalam pembuatan game ini, lebih banyak ke Codingan bahasa prolog. maka disini saya akan menampilkan codingan dalam pembuatan game ini. dan dalam game ini Folder yang berisikan background,foto,suara dll harus diletakan 1 Folder dengan file akhir game ini.

Source :

1. Codingan untuk menginisialisasi file-file pendukung seperti gambar dan suara :

?-
G_waktu := 10,
G_b1 is bitmap_image("Gambar\\b1.bmp",_),
G_info is bitmap_image("Gambar\\info.bmp",_),
G_b3 is bitmap_image("Gambar\\b3.bmp",_),
G_b2 is bitmap_image("Gambar\\b2.bmp",_),
G_user is bitmap_image("Gambar\\user.bmp",_),
G_ai is bitmap_image("Gambar\\ai.bmp",_),
G_ai2 is bitmap_image("Gambar\\ai.bmp",_),
XU := 18,
YU := 13,
 X := 1,
 Y := 1,
set(posAI(X,Y)),
set(posUSR(XU,YU)),

2. Codingan Untuk menampilkan Layar utama

%Menu utama
%LAYAR PERTAMA (1)
window(G_layar1,_,win_func1(_),"TMO2 Edisi Shaun The Sheep",100,0,700,550).
win_func1(init):-
button(_,_,level(_),"Pilih Level",10,450,100,40),
button(_,_,carabermain(_),"Cara Bermain",270,450,100,40),
button(_,_,informasi(_),"Informasi",400,450,100,40),
button(_,_,keluar(_),"Keluar",140,450,100,40).

win_func1(paint):-
draw_bitmap(0,0,G_b1,_,_),
beep("sound/shaunopen.wav").

3. Codingan untuk menampilkan jendela Informasi

informasi(press):-
close_window(G_layar1),
window(G_layar6,_,win_func6(_),"TMO2 Edisi Shaun The Sheep",100,0,830, 600).

%window untuk informasi
win_func6(paint):-
draw_bitmap(0,0,G_info,_,_),
beep("sound/Shaun6.wav").

win_func6(init):-
menu(normal, _, _, kembali1(_), "Kembali"),
menu(normal, _, _, keluar3(_), "Keluar").

keluar3(press):-
close_window(_).


4. Codingan untuk menampilkan jendela Cara Bermain :

carabermain(press):-
shell_execute("tutorial.txt").


5. Codingan untuk keluar dari permainan :

keluar(press):-
message("Keluar Permainan","Terimakasih telah bermain Take Me Out shaun sheep edition", i),
close_window(G_layar1).

level(press):-
close_window(G_layar1),


6. Codingan untuk tampilan jendela Layar kedua yang berisikan Level

%LAYAR KEDUA (2)
window(G_layar2,_,win_func2(_),"TMO2 Edisi Shaun The Sheep",100,0,830, 550).

win_func2(paint):-
draw_bitmap(0,0,G_b2,_,_),
beep("sound/shaun3.wav").

win_func2(init):-
button(_,_,level1(_),"Pemanasan",680,50,110,50),
button(_,_,level2(_),"Pemula",680,120,110,50),
button(_,_,level3(_),"Menengah",680,190,110,50),
button(_,_,level4(_),"Sulit",680,260,110,50),
button(_,_,level5(_),"Sangat Sulit",680,330,110,50),
menu(normal, _, _, kembali1(_), "Kembali"),
menu(normal, _, _, keluar1(_), "Keluar").

keluar1(press):-
message("Keluar Permainan","Terimakasih telah bermain Take Me Out shaun sheep edition", i),
close_window(G_layar2).

%LAYAR KETIGA (3)
win_func3(init) :-
  menu(normal, _, _, kembali(_), "Kembali"),
  menu(normal, _, _, keluar1(_), "Keluar").

mulai(press):-
G_Waktu := set_timer(_,G_Level,tm_func),
G_timer is set_timer(_,1.3,waktu_func).


keluar1(press):-
message("Keluar Permainan","Terimakasih telah bermain Take Me Out shaun sheep edition", i),
close_window(_).

kembali(press):-
close_window(_),
     window(G_layar2,_,win_func2(_),"TMO2 Edisi Shaun The Sheep",100,0,830, 550).

kembali1(press):-
close_window(_),
     window(G_layar1,_,win_func1(_),"TMO2 Edisi Shaun The Sheep",100,0,700,550).


cara(press):-
shell_execute("Cara Bermain.txt").

level1(press):-
G_Level := 0.5,
close_window(G_layar2),
window(G_layar3,_,win_func3(_),"TMO2 Edisi Shaun The Sheep",100,0,1200,750),
beep("sound/shaun4.wav"),
G_Waktu := set_timer(_,G_Level,gerakai_func),
G_timer is set_timer(_,1.3,waktu_func).

level2(press):-
beep("sound/shaun4.wav"),
G_Level := 0.4,
close_window(G_layar2),
window(G_layar3,_,win_func3(_),"TMO2 Edisi Shaun The Sheep",100,0,1200,750),
G_Waktu := set_timer(_,G_Level,gerakai_func),
G_timer is set_timer(_,1.3,waktu_func).

level3(press):-
beep("sound/shaun4.wav"),
G_Level := 0.4,
close_window(G_layar2),
window(G_layar3,_,win_func3(_),"TMO2 Edisi Shaun The Sheep",100,0,1200,750),
G_Waktu := set_timer(_,G_Level,gerakai_func),
G_timer is set_timer(_,1.3,waktu_func).


level4(press):-
beep("sound/shaun4.wav"),
G_Level := 0.2,
close_window(G_layar2),
window(G_layar3,_,win_func3(_),"TMO2 Edisi Shaun The Sheep",100,0,1200,750),
G_Waktu := set_timer(_,G_Level,gerakai_func),
G_timer is set_timer(_,1.3,waktu_func).


level5(press):-
beep("sound/shaun4.wav"),
G_Level := 0.1,
close_window(G_layar2),
window(G_layar3,_,win_func3(_),"TMO2 Edisi Shaun The Sheep",100,0,1200,750),
G_Waktu := set_timer(_,G_Level,gerakai_func),
G_timer is set_timer(_,1.3,waktu_func).




7. Codingan untuk mendesain bentuk labirin

%Kordinat untuk membuat labirin

v(0,0).   %Baris 0
v(1,0).
v(2,0).
v(3,0).
v(4,0).
v(5,0).
v(6,0).
v(7,0).                                                  
v(8,0).
v(9,0).
v(10,0).
v(11,0).
v(12,0).
v(13,0).
v(14,0).
v(15,0).
v(16,0).
v(17,0).
v(18,0).
v(19,0).

v(0,1). %Baris 1
v(7,1).
v(10,1).
v(18,1).
v(0,0).
v(0,0).
v(19,1).


v(0,2).   %Baris 2
v(1,2).
v(2,2).
v(3,2).
v(4,2).
v(6,2).
v(7,2).
v(8,2).
v(10,2).
v(12,2).
v(13,2).
v(14,2).
v(15,2).
v(16,2).
v(19,2).

v(0,3). %Baris 3
v(12,3).
v(16,3).
v(17,3).
v(0,0).
v(0,0).
v(0,0).
v(19,3).

v(0,4). %Baris 4
v(2,4).
v(4,4).
v(5,4).
v(6,4).
v(8,4).
v(9,4).
v(10,4).
v(11,4).
v(12,4).
v(13,4).
v(14,4).
v(16,4).
v(19,4).

v(2,5). %Baris 5
v(6,5).
v(10,5).
v(14,5).
v(16,5).
v(18,5).
v(19,5).
v(0,5).

v(2,6). %Baris 6
v(3,6).
v(4,6).
v(6,6).
v(7,6).
v(8,6).
v(10,6).
v(12,6).
v(14,6).
v(19,6).
v(19,6).
v(0,6).

v(0,7). %Baris 7
v(2,7).
v(4,7).
v(6,7).
v(8,7).
v(10,7).
v(14,7).
v(16,7).
v(17,7).
v(18,7).
v(19,7).

v(0,8). %Baris 8
v(4,8).
v(6,8).
v(8,8).
v(10,8).
v(12,8).
v(18,8).
v(19,8).

v(0,9). %Baris 9
v(1,9).
v(2,9).
v(3,9).
v(4,9).
v(6,9).
v(12,9).
v(14,9).
v(15,9).
v(16,9).
v(18,9).
v(19,9).

v(0,10). %Baris 10
v(6,10).
v(8,10).
v(9,10).
v(10,10).
v(12,10).
v(14,10).
v(19,10).

v(0,11). %Baris 11
v(2,11).
v(4,11).
v(10,11).
v(12,11).
v(14,11).
v(16,11).
v(17,11).
v(19,11).

v(19,12). %Baris 12
v(2,12).
v(4,12).
v(6,12).
v(7,12).
v(8,12).
v(10,12).
v(12,12).
v(14,12).
v(16,12).
v(0,12).

v(0,13). %Baris 13
v(4,13).
v(8,13).
v(12,13).
v(16,13).
v(19,13).

v(0,14).   %Baris 14
v(1,14).
v(2,14).
v(3,14).
v(4,14).
v(5,14).
v(6,14).
v(7,14).
v(8,14).
v(9,14).
v(10,14).
v(11,14).
v(12,14).
v(13,14).
v(14,14).
v(15,14).
v(16,14).
v(17,14).
v(18,14).
v(19,14).

win_func3(paint):-
  draw_bitmap(0,0,G_b3,_,_).
  pen(7,rgb(0,0,255)),
  put_v,



%Posisi user
posUSR(XU,YU),
C1 is XU*45,
D1 is YU*45,
draw_bitmap(C1,D1,G_user,_,_),



%Posisi AI
  posAI(X,Y),
  A1 is X*45,
  B1 is Y*45,
  brush(rgb(255, 0, 0)),% no pen
  draw_bitmap(A1,B1,G_ai,_,_),
  fail.



%Fungsi untuk menggerakan AI
gerakai_func(_):-
pen(1,rgb(255,255,255)),
posAI(X,Y),
posUSR(XU,YU),
G_XU:=45*XU,
G_YU:=45*YU,
G_X:=45*X,
G_Y:=45*Y,
new(X1,Y1,X,Y),
  A1 is X*45,
  B1 is Y*45,
  C1 is X*45+45,
  D1 is Y*45+45,
  A2 is X1*45,
  B2 is Y1*45,
  brush(rgb(255,255,255)),
  rect(A1, B1,C1, D1),
  brush(rgb(255, 0, 0)),
  draw_bitmap(A2,B2,G_ai,_,_),
  set(posAI(X1,Y1)),
  set(last(X,Y)),
  (G_XU=G_X->(G_YU=G_Y-> kill_timer(_,G_Waktu),
close_window(_),
wait(1),
XU := 18,
YU := 13,
  X := 1,
Y := 1,
G_waktu := 10,
set(posAI(X,Y)),
set(posUSR(XU,YU)),
window(G_layarmenang,_,menang_func(_),"Selamat ...",100,50,470,400))).

%Fungsi ai kekanan
try(X1,Y1,X,Y):-
  X1 is X + 1 - random(3),
  X1>=1,
  X1=<18 p="">  Xmin is X1,
  v(Xmin,Y) \= v(X,Y),
  not(v(Xmin,Y)),
  not(go_back(X1,Y)),
  Y1=Y.

%Fungsi ai kebawah
try(X1,Y1,X,Y) :-
  Y1 is Y + 1 - random(3),
  Y1>=1,
  Y1=<13 p="">  Ymin is Y1,
  v(X,Ymin) \= v(X,Y),
  not(v(X,Ymin)),
  not(go_back(X,Y1)),
  X1=X.

%Fungsi ai tidak tembus tembok
new(X1, Y1, X, Y) :-
  try(X1, Y1, X, Y), !.
new(X1, Y1, X, Y) :-
new(X1, Y1, X, Y).

go_back(X, Y):- last(X, Y),0


%Fungsi untuk pemain
%Batas atas
atas(X1,Y1,XU,YU):-
  Y1 is YU - 1,
  Y1>=1,
  Y1=<13 p="">  Ymin is Y1,
  not(v(XU,Ymin)),
  X1=XU.

%Batas bawah
bawah(X1,Y1,XU,YU):-
  Y1 is YU + 1,
  Y1>=1,
  Y1=<13 p="">  Ymin is Y1,
  not(v(XU,Ymin)),
  X1=XU.

%Batas kanan
kanan(X1,Y1,XU,YU):-
  X1 is XU + 1,
  X1>=1,
  X1=<18 p="">  Xmin is X1,
  not(v(Xmin,YU)),
  Y1=YU.

%batas kiri
kiri(X1,Y1,XU,YU):-
  X1 is XU - 1,
  X1>=1,
  X1=<18 p="">  Xmin is X1,
  not(v(Xmin,YU)),
  Y1=YU.

%Fungsi untuk menggerakan objek pemain ke atas
win_func3(key_down(38,_)) :-
pen(1,rgb(255,255,255)),
posAI(X,Y),
posUSR(XU,YU),
G_X:=45*X,
G_Y:=45*Y,
G_XU:=45*XU,
G_YU:=45*YU,
atas(X1,Y1,XU,YU),
  A1 is XU*45,
  B1 is YU*45,
  C1 is XU*45+45,
  D1 is YU*45+45,
  A2 is X1*45,
  B2 is Y1*45,
  brush(rgb(255,255,255)),
  rect(A1, B1,C1, D1),
draw_bitmap(A2,B2,G_user,_,_),
  set(posUSR(X1,Y1)),
  set(last(XU,YU)).

%Fungsi untuk menggerakan objek pemain ke bawah
win_func3(key_down(40,_)) :-
pen(1,rgb(255,255,255)),
posAI(X,Y),
posUSR(XU,YU),
G_X:=45*X,
G_Y:=45*Y,
G_XU:=45*XU,
G_YU:=45*YU,
bawah(X1,Y1,XU,YU),
  A1 is XU*45,
  B1 is YU*45,
  C1 is XU*45+45,
  D1 is YU*45+45,
  A2 is X1*45,
  B2 is Y1*45,
  brush(rgb(255,255,255)),
  rect(A1, B1,C1, D1),
draw_bitmap(A2,B2,G_user,_,_),
  set(posUSR(X1,Y1)),
  set(last(XU,YU)).

%Fungsi untuk menggerakan objek pemain ke kanan
win_func3(key_down(39,_)) :-
pen(1,rgb(255,255,255)),
posAI(X,Y),
posUSR(XU,YU),
G_X:=45*X,
G_Y:=45*Y,
G_XU:=45*XU,
G_YU:=45*YU,
kanan(X1,Y1,XU,YU),
  A1 is XU*45,
  B1 is YU*45,
  C1 is XU*45+45,
  D1 is YU*45+45,
  A2 is X1*45,
  B2 is Y1*45,
  brush(rgb(255,255,255)),
  rect(A1, B1,C1, D1),
draw_bitmap(A2,B2,G_user,_,_),
  set(posUSR(X1,Y1)),
  set(last(XU,YU)).

%Fungsi untuk menggerakan objek pemain ke kiri
win_func3(key_down(37,_)) :-
pen(1,rgb(255,255,255)),
posAI(X,Y),
posUSR(XU,YU),
G_X:=45*X,
G_Y:=45*Y,
G_XU:=45*XU,
G_YU:=45*YU,
kiri(X1,Y1,XU,YU),
  A1 is XU*45,
  B1 is YU*45,
  C1 is XU*45+45,
  D1 is YU*45+45,
  A2 is X1*45,
  B2 is Y1*45,
  brush(rgb(255,255,255)),
  rect(A1, B1,C1, D1),
draw_bitmap(A2,B2,G_user,_,_),
  set(posUSR(X1,Y1)),
  set(last(XU,YU)).



%Perintah untuk membaca kordinat vertikal labirin
put_v :-
  v(Xc, Yc),
  X is 45*Xc,
  Y is 45*Xc+45,
  Y1 is 45*Yc,
  Y2 is 45*Yc+45,
  brush(rgb(0,0,0)),
  rect(X, Y1, Y, Y2),
  fail.
put_v.



%Timer
waktu_func(end):-
G_waktu:=G_waktu-1,
W:= printq(G_waktu),
font(40,70,"Calibri"),
text_out(1020,120,W),
(G_waktu=0->  kill_timer(_, G_timer),
wait(1),
close_window(_),
XU := 18,
YU := 13,
X := 1,
  Y := 1,
G_waktu := 20,
set(posAI(X,Y)),
set(posUSR(XU,YU)),
window(G_layarkalah,_,kalah_func(_),"Anda Gagal",100,50,470,400)).
fail.



%Fungsi untuk menang dan kalah
kalah_func(paint):-
beep("sound/shaun5.wav"),
color_text(_,rgb(0,0,255)),
font(10,25,"Calibri"),
text_out(110,200,"Anda gagal mengeluarkan Timmy"),
draw_bitmap(120,100,G_user1,_,_),
wait(1),
close_window(_).

menang_func(paint):-
beep("sound/shaunopen.wav"),
color_text(_,rgb(0,0,255)),
font(10,25,"Showcard Ghotic"),
text_out(50,50,"Kamu Berhasil mengeluarkan Timmy!!"),
draw_bitmap(120,100,G_ai1,_,_),
wait(1),
close_window(_).

menang_func(init):-
button(_,_,ulanglagi(_),"----Coba Lagi----",140,240,150,50).


kalah_func(init):-
button(_,_,ulanglagi(_),"----Coba Lagi----",140,240,150,50).

ulanglagi(press):-
window(G_layar2,_,win_func2(_),"Magic Maze Game",100,0,830, 550),
close_window(G_layarkalah),
close_window(G_layarmenang).


Sekian tulisan dari saya, seperti biasa, terimakasih sudah membaca, semoga bermanfaat dan mohon maaf apabila ada kesalahan.

  Saya Fajar,   caw !