Think Different Contoh FP PL Laporan Game
LAPORAN TUGAS AKHIR
PEMROGRAMAN LANJUT
DANGER LPG
KELOMPOK : 1. Mohammad Halimi (0910680041) 2. M. Rizki Gus Sofwan (0910680064) 3. Gerry Wisudawan (0910683047)
LABORATORIUM SISTEM INFORMASI PROGRAM STUDI TEKNIK INFORMATIKA
FAKULTAS TEKNIK UNIVERSITAS BRAWIJAYA
MALANG 2011
(2)
A.
Deskripsi Program
Ide dasar dari pembuatan game ini adalah “membalas” kekalahan timnas Indonesia pada final piala AFF yang telah berlangsung. Namun, pembalasan yang kami maksud disini adalah pembalasan yang bersifat menghibur dan tidak ada maksud untuk menyinggung salah satu pihak. Game ini hanya bersifat just for fun. Dan kita harap semua user bias terhibur dengan yang kami buat.
Oleh karena itu game ini kita sebut “Time to Revenge”. Game ini dibentuk dengan bantuan allegro pada Dev C++. Untuk selengkapnya bias dilihat pada source code beserta screenshot yang telah kami lampirkan.
(3)
B.
Source Code
#include <allegro.h> #include <time.h> #include <stdio.h> BITMAP *ship; BITMAP *laser; BITMAP *enemy; BITMAP *misil; BITMAP *background; BITMAP *menu1; BITMAP *menu2; BITMAP *menu3; BITMAP *profil1; BITMAP *profil2; BITMAP *profil3; BITMAP *buffer; BITMAP *play; BITMAP *out;
int x=300,y=414; int a=x+15, b=y;
int laserhijau_x, laserhijau_y; int objeklaser=0;
int tahanprofil=0; int tahanplay=0; void playagain(); int nyawa=300; int misil_kiri=a; int misil_kanan=a+40; int misil_atas=b+54; int bendera_kiri=x;
int bendera_kanan=x+124; int bendera_atas=y+62; int start;
int benderahilang = 0; int hapusbendera1=0; time_t waktu1, waktu2;
float jarakwaktu, hasilwaktu=0; void file(){
FILE *folder;
(4)
fprintf(folder,"Result the Game\n"); fprintf(folder,"---\n");
fprintf(folder,"\nSisa Nyawa : %d",nyawa); //fprintf(move,"\nTime : %0.f sec",waktu); fclose(folder); } void awal(){ allegro_init(); install_keyboard(); set_color_depth(16);
set_gfx_mode( GFX_AUTODETECT_WINDOWED, 640, 480, 0, 0); buffer = create_bitmap(640, 480);
}
void load(){
ship = load_bitmap("Markustelek.bmp",NULL);
enemy = load_bitmap("bendera_malaysia1.bmp",NULL); background = load_bitmap("a.bmp",NULL);
// laser = load_bitmap("",NULL);
misil = load_bitmap("tabung+gasok.bmp",NULL); menu1 = load_bitmap("Menu1.bmp",NULL); menu2 = load_bitmap("Menu2.bmp",NULL); menu3 = load_bitmap("Menu3.bmp",NULL); profil1 = load_bitmap("profil1.bmp",NULL); profil2 = load_bitmap("profil2.bmp",NULL); profil3 = load_bitmap("profil3.bmp",NULL); play = load_bitmap("playagain.bmp",NULL); out =load_bitmap("exit.bmp",NULL); } void profil(){ int countprofil=0; while(1){ if(countprofil==0){
draw_sprite(buffer, profil1, 0, 0); }
else if(countprofil==1){
draw_sprite(buffer, profil2, 0, 0); }
else if(countprofil==2){
draw_sprite(buffer, profil3, 0, 0); } if(key[KEY_RIGHT]){ if(countprofil<=1) countprofil++; rest(400); } else if(key[KEY_LEFT]){ if(countprofil>=1) countprofil--; rest(400);
(5)
}
if(key[KEY_ESC]){ tahanprofil=0; break;
}
blit(buffer, screen, 0, 0, 0, 0, 640, 480); clear(buffer); } } void menu(){ int count=0; while(1){ if(count==0){
draw_sprite(buffer, menu1, 0, 0); }
else if(count==1){
draw_sprite(buffer, menu2, 0, 0); }
else if(count==2){
draw_sprite(buffer, menu3, 0, 0); } if(key[KEY_DOWN]){ if(count<=1) count++; rest(150); } else if(key[KEY_UP]){ if(count>=1) count--; rest(150); } if(key[KEY_ENTER]){ if(count==0) break; else if(count==1){ tahanprofil=1; if(tahanprofil==1) profil(); }
else if(count==2) exit(1); }
blit(buffer, screen, 0, 0, 0, 0, 640, 480); clear(buffer);
} }
void hint(){ static int i=0; i++;
if(i==600){
laserhijau_x=rand()%200 +205; }
(6)
if(i<=600) line(buffer, laserhijau_x, 124, laserhijau_x, 500, makecol(0, 255, 0)); if(i==1500) i=0; } int collusionLaser(){ int markuskiri=x; int markuskanan=x+65;
if(markuskanan>laserhijau_x && markuskiri<laserhijau_x) return 1; else 0;
}
int collisionEnemy(int bendera_kanan, int bendera_kiri, int misil_kanan, int misil_kiri, int misil_atas, int bendera_atas){
if(misil_kanan<bendera_kanan && misil_kiri>bendera_kiri && misil_atas<bendera_atas){ return 1;
} else return 0; } void cekCollusionEnemy(){ misil_kiri=a; misil_kanan=a+40; misil_atas=b+54; bendera_kiri=205; bendera_kanan=205+250; bendera_atas=124;
if(collisionEnemy(bendera_kanan, bendera_kiri,misil_kanan, misil_kiri,misil_atas, bendera_atas)==true){
++benderahilang; hapusbendera1=1; playagain(); }
else if(misil_kanan>bendera_kanan && misil_kiri>bendera_kiri && misil_atas<bendera_atas){
++benderahilang; hapusbendera1=1; playagain(); }
else if(misil_kanan<bendera_kanan && misil_kiri<bendera_kiri && misil_atas<bendera_atas){ ++benderahilang; hapusbendera1=1; playagain(); } } void game(){
(7)
if(key[KEY_RIGHT]){ if(x<=570){ x++;} rest(0); } else if(key[KEY_LEFT]){ if(x>=0){ x--;} rest(0); }
draw_sprite( buffer, background, 0, 0);
if(hapusbendera1==0) draw_sprite( buffer, enemy, 205, 0); /*draw_sprite( buffer, enemy, 250, 0);
draw_sprite( buffer, enemy, 312, 0); draw_sprite( buffer, enemy, 281, 125); */
draw_sprite( buffer, ship, x, y); } void playagain(){ int countp=0; while(1){ if(countp==0){
draw_sprite(buffer, play, 170, 150); }
else if(countp==1){
draw_sprite(buffer, out, 170, 150); } if(key[KEY_DOWN]){ if(countp<=1) countp++; rest(150); } else if(key[KEY_UP]){ if(countp>=1) countp--; rest(150); } if(key[KEY_ENTER]){ if(countp==0){ tahanplay=1; } else if(countp==1) { file(); exit(1); } }
blit(buffer, screen, 0, 0, 0, 0, 640, 480); clear(buffer);
} }
(8)
void timeLeft(){ waktu2=time(NULL); jarakwaktu=difftime(waktu2,waktu1); hasilwaktu=jarakwaktu; } void shoot(){ if(key[KEY_SPACE]) objeklaser=1; if(b<=-20){ objeklaser=0; b=y; a=x+15; } if(objeklaser==1){
draw_sprite(buffer, misil, a, b); b=b-4;
} } void displaylive(){
textprintf_ex(buffer, font, 20, 380, makecol(255,0,0) , -1, "LIVE : %d", nyawa); } int main(){ awal(); load(); menu(); a: waktu1=time(NULL); while(!key[KEY_ESC]){ game(); hint(); shoot(); cekCollusionEnemy(); if(collusionLaser()==true){ --nyawa; if(nyawa==0) playagain(); } displaylive(); blit(buffer,screen,0,0,0,0,640,480); clear(buffer);
if(tahanplay==1) goto a; if(benderahilang==1) break;
timeLeft(); }
(9)
return 0; }
END_OF_MAIN();
C.
Snapshot Program
a. Screenshot Menu Awal
b. Tampilan Profil
(10)
(1)
}
if(key[KEY_ESC]){ tahanprofil=0; break;
}
blit(buffer, screen, 0, 0, 0, 0, 640, 480); clear(buffer);
} }
void menu(){ int count=0; while(1){ if(count==0){
draw_sprite(buffer, menu1, 0, 0); }
else if(count==1){
draw_sprite(buffer, menu2, 0, 0); }
else if(count==2){
draw_sprite(buffer, menu3, 0, 0); }
if(key[KEY_DOWN]){
if(count<=1) count++; rest(150);
}
else if(key[KEY_UP]){ if(count>=1) count--; rest(150);
}
if(key[KEY_ENTER]){
if(count==0) break; else if(count==1){
tahanprofil=1;
if(tahanprofil==1) profil(); }
else if(count==2) exit(1); }
blit(buffer, screen, 0, 0, 0, 0, 640, 480); clear(buffer);
} }
void hint(){ static int i=0; i++;
if(i==600){
laserhijau_x=rand()%200 +205; }
(2)
if(i<=600) line(buffer, laserhijau_x, 124, laserhijau_x, 500, makecol(0, 255, 0)); if(i==1500) i=0;
}
int collusionLaser(){ int markuskiri=x; int markuskanan=x+65;
if(markuskanan>laserhijau_x && markuskiri<laserhijau_x) return 1; else 0;
}
int collisionEnemy(int bendera_kanan, int bendera_kiri, int misil_kanan, int misil_kiri, int misil_atas, int bendera_atas){
if(misil_kanan<bendera_kanan && misil_kiri>bendera_kiri && misil_atas<bendera_atas){ return 1;
} else return 0; }
void cekCollusionEnemy(){ misil_kiri=a;
misil_kanan=a+40; misil_atas=b+54; bendera_kiri=205;
bendera_kanan=205+250; bendera_atas=124;
if(collisionEnemy(bendera_kanan, bendera_kiri,misil_kanan, misil_kiri,misil_atas, bendera_atas)==true){
++benderahilang; hapusbendera1=1; playagain(); }
else if(misil_kanan>bendera_kanan && misil_kiri>bendera_kiri && misil_atas<bendera_atas){
++benderahilang; hapusbendera1=1; playagain(); }
else if(misil_kanan<bendera_kanan && misil_kiri<bendera_kiri && misil_atas<bendera_atas){
++benderahilang; hapusbendera1=1; playagain(); }
}
(3)
if(key[KEY_RIGHT]){ if(x<=570){ x++;}
rest(0); }
else if(key[KEY_LEFT]){ if(x>=0){
x--;} rest(0); }
draw_sprite( buffer, background, 0, 0);
if(hapusbendera1==0) draw_sprite( buffer, enemy, 205, 0); /*draw_sprite( buffer, enemy, 250, 0);
draw_sprite( buffer, enemy, 312, 0); draw_sprite( buffer, enemy, 281, 125); */
draw_sprite( buffer, ship, x, y);
}
void playagain(){ int countp=0; while(1){ if(countp==0){
draw_sprite(buffer, play, 170, 150); }
else if(countp==1){
draw_sprite(buffer, out, 170, 150); }
if(key[KEY_DOWN]){
if(countp<=1) countp++; rest(150);
}
else if(key[KEY_UP]){ if(countp>=1) countp--; rest(150);
}
if(key[KEY_ENTER]){ if(countp==0){ tahanplay=1; }
else if(countp==1) {
file(); exit(1); } }
blit(buffer, screen, 0, 0, 0, 0, 640, 480); clear(buffer);
} }
(4)
void timeLeft(){
waktu2=time(NULL);
jarakwaktu=difftime(waktu2,waktu1); hasilwaktu=jarakwaktu;
}
void shoot(){
if(key[KEY_SPACE]) objeklaser=1; if(b<=-20){
objeklaser=0; b=y;
a=x+15; }
if(objeklaser==1){
draw_sprite(buffer, misil, a, b); b=b-4;
} } void displaylive(){
textprintf_ex(buffer, font, 20, 380, makecol(255,0,0) , -1, "LIVE : %d", nyawa); }
int main(){ awal(); load(); menu(); a:
waktu1=time(NULL);
while(!key[KEY_ESC]){
game(); hint(); shoot();
cekCollusionEnemy(); if(collusionLaser()==true){ --nyawa; if(nyawa==0) playagain(); }
displaylive();
blit(buffer,screen,0,0,0,0,640,480); clear(buffer);
if(tahanplay==1) goto a; if(benderahilang==1) break;
timeLeft(); }
(5)
return 0; }
END_OF_MAIN();
C.
Snapshot Program
a. Screenshot Menu Awal
b. Tampilan Profil
(6)