Think Different Contoh FP PL Laporan Game

(1)

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)