Lampiran Berikut ini adalah Source Code Program Game Serangga Nakal: // mfcDlg.cpp : implementation file // #include #include #include #include #include #include #include #include
"stdafx.h" "mfc.h" "mfcDlg.h" <windows.h> <stdio.h> <string.h>
<MMSystem.h> //library untuk load wav audio
//
#ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif
int int int int int int int int int int
R,G,B; height, width, step, channels; height1, width1, step1, channels1; kiri, kanan, atas, bawah; dx, dy, tpk=0; inc; // jarak perpindahan serangga lvl, jml_srg, tampung=0; // jumlah serangga status[50], nyawaraja=9; //status nyawa serangga dan nyawa raja poin=0, limit=10; waktu_awal, waktu_akhir, waktu;
uchar *data, *data1; CvPoint pt1, pt2, pt3, pt4; CvPoint p11, p12, p21 ,p22, p31, p32, p41, p42; CvPoint pos[50]; CvCapture *capture; IplImage *cam, *cam_seg, *fin_img, *ImgGray, *bg;
int keluar=0;
xiv
void CMfcDlg::Onbtnexit() { CDialog::OnCancel(); // TODO: Add your control notification handler code here cvReleaseCapture( &capture ); cvDestroyWindow( "Serangga Nakal" ); cvDestroyWindow( "Color Segmentation" ); cvDestroyWindow( "Edge Detection" ); cvDestroyWindow( "Capture Gambar" ); } void
CMfcDlg::prog(IplImage *img){ ///////%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%5
/*
//inisialisasi kamera capture = cvCaptureFromCAM(CV_CAP_ANY); if( !capture ) { fprintf( stderr, "ERROR: capture is NULL \n" ); }
//inisialisasi window cvNamedWindow("Edge Detection",0.3); cvNamedWindow("Color Segmentation",0.3); cvNamedWindow("Capture Gambar",0.3); cvNamedWindow("Serangga Nakal",1); level();
//close program utama dimatikan cvReleaseCapture( &capture ); cvDestroyWindow("Serangga Nakal..");*/ } CvPoint CMfcDlg::rnd(CvPoint pos) //fungsi random arah { int x0=rand()%8; //8 kemungkinan arah gerakan if(x0==0)
xv
window
jika
{ pos.y=pos.y+inc; //gerakan ke atas } else if(x0==1) { pos.x=pos.x+inc; //gerakan ke kanan atas pos.y=pos.y+inc; } else if(x0==2) { pos.x=pos.x+inc; //gerakan ke kanan } else if(x0==3) { pos.x=pos.x+inc; //gerakan ke kanan bawah pos.y=pos.y-inc; } else if(x0==4) { pos.y=pos.y-inc; //gerakan ke bawah } else if(x0==5) { pos.x=pos.x-inc; //gerakan ke kiri bawah pos.y=pos.y-inc; } else if(x0==6) { pos.x=pos.x-inc; //gerakan ke kiri } else if(x0==7) { pos.x=pos.x-inc; //gerakan ke kiri atas pos.y=pos.y+inc; } return pos; }
void CMfcDlg::awal() // fungsi acak posisi awal serangga { for(int i=0;i<jml_srg;i++)
xvi
{ status[i]=1; pos[i].x=(rand()%630);
//random
pos[i].y=(rand()%470);
//random
posisi x posisi y } } void CMfcDlg::serangga() //fungsi menggambar serangga { for(int i=0;i<jml_srg;i++) { CvPoint kanan1, kanan2, kiri1, kiri2; //menggambar sayap kanan1.x=(pos[i].x)+5; kanan1.y=(pos[i].y)+5; kanan2.x=(pos[i].x)+10; kanan2.y=(pos[i].y)+10; kiri1.x=(pos[i].x)-5; kiri1.y=(pos[i].y)+5; kiri2.x=(pos[i].x)-10; kiri2.y=(pos[i].y)+10;
printf("pos.x=%d\n", pos[i].x); if(status[i]==1) //status serangga masih hidup { pos[i]=rnd(pos[i]); if (lvl==0) { // cvEllipse (bg, kanan1, (20, 3), 45, 0, 360, CV_RGB(0,0,0), 2, 8, 0); cvLine(bg,pos[i],kiri2,CV_RGB(255,0,0),2,0,0); cvLine(bg,pos[i],kanan2,CV_RGB(255,0,0),2,0,0); cvCircle(bg,pos[i],3,CV_RGB(0,0,0),3,0,0); } else if (lvl==1) { cvLine(bg,pos[i],kiri2,CV_RGB(255,0,0),2,0,0); cvLine(bg,pos[i],kanan2,CV_RGB(255,0,0),2,0,0); cvCircle(bg,pos[i],3,CV_RGB(0,0,0),3,0,0); //serangga warna hijau
xvii
cvSize
} else if (lvl==2) { cvLine(bg,pos[i],kiri2,CV_RGB(255,0,0),2,0,0); cvLine(bg,pos[i],kanan2,CV_RGB(255,0,0),2,0,0); cvCircle(bg,pos[i],3,CV_RGB(0,0,0),3,0,0); //serangga warna biru } else if (lvl==3) { cvLine(bg,pos[i],kiri2,CV_RGB(255,0,0),2,0,0); cvLine(bg,pos[i],kanan2,CV_RGB(255,0,0),2,0,0); cvCircle(bg,pos[i],3,CV_RGB(0,0,0),3,0,0); } else if (lvl==4) {
cvLine(bg,pos[i],kiri2,CV_RGB(255,0,0),2,0,0); cvLine(bg,pos[i],kanan2,CV_RGB(255,0,0),2,0,0); cvCircle(bg,pos[i],3,CV_RGB(0,0,0),3,0,0); } else if (lvl==5) { cvLine(bg,pos[i],kiri2,CV_RGB(255,0,0),5,0,0); //FINAL LEVEL (KING) cvLine(bg,pos[i],kanan2,CV_RGB(255,0,0),5,0,0); cvCircle(bg,pos[i],20,CV_RGB(0,0,0),10,0,0); } else if (lvl==6) //BONUS level { cvCircle(bg,pos[i],5,CV_RGB(0,0,0),3,0,0); cvCircle(bg,kanan1,5,CV_RGB(255,0,0),3,0,0);
xviii
cvCircle(bg,kanan2,5,CV_RGB(255,0,0),3,0,0); }
//fungsi
agar
serangga
tidak
melewati batas if(pos[i].x>=630) { pos[i].x=10; kanan2.x=0; } else if(pos[i].x<=10) { pos[i].x=630; kanan2.x=640; } else if(pos[i].y>=470)pos[i].y=10; else if(pos[i].y<=10)pos[i].y=470;
//
//
} } } void CMfcDlg::mati() // fungsi untuk membunuh serangga { for(int i=0;i<jml_srg;i++) { if(lvl!=5){ if (pos[i].x<=kiri && pos[i].x>=kanan ||//cek jika serangga berada didalam bounding box pos[i].y<=bawah && pos[i].y>=atas) { status[i]=0; //jika ya, "bunuh" serangga poin++; //poin bertambah pos[i].x=10000; //load serangga diluar frame int rnd_audio=rand()%3; //random suara saat serangga mati if(rnd_audio==0) {
xix
PlaySound("audio/cepret1.wav", NULL, SND_FILENAME| SND_SYNC); //load suara } else if (rnd_audio==1) { PlaySound("audio/cepret2.wav", NULL, SND_FILENAME| SND_SYNC); //load suara } else if (rnd_audio==1) { PlaySound("audio/cepret3.wav", NULL, SND_FILENAME| SND_SYNC); //load suara } } } else if (pos[i].x<=kiri && pos[i].x>=kanan ||//cek jika serangga berada didalam bounding box pos[i].y<=bawah && pos[i].y>=atas) { //load serangga diluar frame int rnd_audio=rand()%3; //random suara saat serangga mati if(rnd_audio==0) { PlaySound("audio/cepret1.wav", NULL, SND_FILENAME| SND_SYNC); //load suara } else if (rnd_audio==1) { PlaySound("audio/cepret2.wav", NULL, SND_FILENAME| SND_SYNC); //load suara } else if (rnd_audio==1) { PlaySound("audio/cepret3.wav", NULL, SND_FILENAME| SND_SYNC); //load suara } status[i]=0; //jika ya, "bunuh" serangga
xx
poin++; //poin bertambah pos[i].x=10000; } } } void CMfcDlg::level() // fungsi mengecek adanya tepukan { if (lvl==0) { bg = cvLoadImage("gbr/intro.jpg", CV_LOAD_IMAGE_COLOR );//load tulisan "LEVEL 1" pada awal level cvShowImage("Serangga Nakal", bg); cvWaitKey(500); PlaySound("audio/intro.wav", NULL, SND_FILENAME| SND_SYNC); //load suara
bg = cvLoadImage("gbr/1.jpg", CV_LOAD_IMAGE_COLOR ); cvShowImage("Serangga Nakal", bg); int rnd_audio2=rand()%3; //random suara saat serangga mati if(rnd_audio2==0) { PlaySound("audio/tepuk1.wav", NULL, SND_FILENAME| SND_SYNC); //load suara } else if (rnd_audio2==1) { PlaySound("audio/tepuk2.wav", NULL, SND_FILENAME| SND_SYNC); //load suara } else if (rnd_audio2==1) { PlaySound("audio/tepuk3.wav", NULL, SND_FILENAME| SND_SYNC); //load suara } cvWaitKey(3000); //delay dengan satuan mili detik jml_srg=10; //jumlah serangga yang dimunculkan awal(); inc=5; //kecepatan gerakan serangga
xxi
game(); //memanggil fungsi game() } else if (lvl==1) { bg = cvLoadImage("gbr/2.jpg", CV_LOAD_IMAGE_COLOR ); cvShowImage("Serangga Nakal", bg); int rnd_audio2=rand()%3; //random suara saat serangga mati if(rnd_audio2==0) { PlaySound("audio/tepuk1.wav", NULL, SND_FILENAME| SND_SYNC); //load suara } else if (rnd_audio2==1) { PlaySound("audio/tepuk2.wav", NULL, SND_FILENAME| SND_SYNC); //load suara } else if (rnd_audio2==1) { PlaySound("audio/tepuk3.wav", NULL, SND_FILENAME| SND_SYNC); //load suara } cvWaitKey(3000); jml_srg=10; awal(); inc=10; game(); } else if (lvl==2) { bg = cvLoadImage("gbr/3.jpg", CV_LOAD_IMAGE_COLOR ); cvShowImage("Serangga Nakal", bg); int rnd_audio2=rand()%3; //random suara saat serangga mati if(rnd_audio2==0) { PlaySound("audio/tepuk1.wav", NULL, SND_FILENAME| SND_SYNC); //load suara } else if (rnd_audio2==1) { PlaySound("audio/tepuk2.wav", NULL, SND_FILENAME| SND_SYNC); //load suara } else if (rnd_audio2==1)
xxii
{ PlaySound("audio/tepuk3.wav", NULL, SND_FILENAME| SND_SYNC); //load suara } cvWaitKey(3000); jml_srg=10; awal(); inc=20; game(); } else if (lvl==3) //BONUS level { bg = cvLoadImage("gbr/4.jpg", CV_LOAD_IMAGE_COLOR ); cvShowImage("Serangga Nakal", bg); int rnd_audio2=rand()%3; //random suara saat serangga mati if(rnd_audio2==0) { PlaySound("audio/tepuk1.wav", NULL, SND_FILENAME| SND_SYNC); //load suara } else if (rnd_audio2==1) { PlaySound("audio/tepuk2.wav", NULL, SND_FILENAME| SND_SYNC); //load suara } else if (rnd_audio2==1) { PlaySound("audio/tepuk3.wav", SND_SYNC); //load suara } cvWaitKey(3000); jml_srg=10; awal(); inc=30; game(); } else if (lvl==4) {
NULL,
SND_FILENAME|
bg = cvLoadImage("gbr/5.jpg", CV_LOAD_IMAGE_COLOR ); cvShowImage("Serangga Nakal", bg); int rnd_audio2=rand()%3; //random suara saat serangga mati
xxiii
if(rnd_audio2==0) { PlaySound("audio/tepuk1.wav", NULL, SND_FILENAME| SND_SYNC); //load suara } else if (rnd_audio2==1) { PlaySound("audio/tepuk2.wav", NULL, SND_FILENAME| SND_SYNC); //load suara } else if (rnd_audio2==1) { PlaySound("audio/tepuk3.wav", SND_SYNC); //load suara } cvWaitKey(3000); jml_srg=10; awal(); inc=40; game(); } else if (lvl==5) {
NULL,
SND_FILENAME|
bg = cvLoadImage("gbr/final.jpg", CV_LOAD_IMAGE_COLOR ); cvShowImage("Serangga Nakal", bg); int rnd_audio2=rand()%3; //random suara saat serangga mati if(rnd_audio2==0) { PlaySound("audio/tepuk1.wav", NULL, SND_FILENAME| SND_SYNC); //load suara } else if (rnd_audio2==1) { PlaySound("audio/tepuk2.wav", NULL, SND_FILENAME| SND_SYNC); //load suara } else if (rnd_audio2==1) { PlaySound("audio/tepuk3.wav", SND_SYNC); //load suara } cvWaitKey(3000);
xxiv
NULL,
SND_FILENAME|
jml_srg=1; awal(); inc=40; game(); } else if (lvl==6) // FINAL level { bg = cvLoadImage("gbr/bonus.jpg", CV_LOAD_IMAGE_COLOR ); cvShowImage("Serangga Nakal", bg); int rnd_audio2=rand()%3; //random suara saat serangga mati if(rnd_audio2==0) { PlaySound("audio/tepuk1.wav", NULL, SND_FILENAME| SND_SYNC); //load suara } else if (rnd_audio2==1) { PlaySound("audio/tepuk2.wav", NULL, SND_FILENAME| SND_SYNC); //load suara } else if (rnd_audio2==1) { PlaySound("audio/tepuk3.wav", SND_SYNC); //load suara } cvWaitKey(3000); jml_srg=10; awal(); inc=40; game(); }
NULL,
}
int CMfcDlg::game() // fungsi segmentasi warna { waktu_awal=time(NULL); while(1) { cam = cvQueryFrame(capture);
xxv
SND_FILENAME|
if( !cam ) { fprintf( stderr,
"ERROR:
frame
is
null...\n" ); return -1; }
//proses
segmentasi
warna cam_seg = cvCloneImage(cam); height = cam_seg->height; width = cam_seg->width; step = cam_seg->widthStep; channels = cam_seg->nChannels; data = (uchar *)cam_seg->imageData; for(int i=0;i (0.62*(G+B))) && (R>77))&&((R-G>27))&& (((G<150)||((G>=150)&&(B>140)) ))) if (((R > (0.85*(G+B))) && (R>105))&&((R-G>73))&& (((G<150)||((G>=150)&&(B>140)) ))) { data[i*step+j*channels+0]=0; data[i*step+j*channels+1]=0; data[i*step+j*channels+2]=255; } else //menghitamkan warna selain merah { data[i*step+j*channels+0]=0; data[i*step+j*channels+1]=0; data[i*step+j*channels+2]=0; } } }
fin_img = cvCloneImage(cam); //capture langsung dari kamera ImgGray = cvCreateImage( >width, cam_seg->height), IPL_DEPTH_8U, 1 );
xxvi
cvSize(cam_seg-
cvCvtColor( cam_seg, ImgGray, CV_BGR2GRAY ); //konversi gambar ke grayscale
//proses erosi yang diikuti oleh dilasi proses closing cvErode(ImgGray,ImgGray,NULL,2); cvDilate(ImgGray,ImgGray,NULL,2);
disebut
cvCanny(ImgGray,ImgGray,20,90,3); // Canny Edge Detection
//
height1 = ImgGray->height; width1 = ImgGray->width; step1 = ImgGray->widthStep; channels1= ImgGray->nChannels; data1 = (uchar *)ImgGray->imageData; ImgGray->origin=cam_seg->origin;
//mencari batas dari gambar hasil Canny atas=0; for(int i1=0;i1
atas
//mencari batas kiri gambar hasil Canny kiri=0; for(int j2=0;j2<width1;j2++) { for(int i2=0;i2
dari
xxvii
} }
//mencari batas kanan gambar hasil Canny kanan=0; for(int j4=width1;j4>0;j4--) { for(int i4=0;i4
dari
//mencari batas bawah gambar hasil Canny bawah=0; for(int i3=height1-1;i3>0;i3--) { for(int j3=0;j3<width1;j3++) { if (data1[i3*step1+j3*channels1]==255) { bawah=i3; } } }
dari
//inisialisasi batas kiri, kanan, atas dan bawah pt1.x=kiri; pt1.y=atas; pt2.x=kiri; pt2.y=bawah; pt3.x=kanan; pt3.y=atas; pt4.x=kanan; pt4.y=bawah;
// fungsi untuk mengganti background saat naik level if (lvl==0) { bg = cvLoadImage("gbr/ruang1.jpg", CV_LOAD_IMAGE_COLOR ); // load gbr bg }
xxviii
else if (lvl==1) { bg = cvLoadImage("gbr/ruang2.jpg", CV_LOAD_IMAGE_COLOR ); // load gbr bg } else if (lvl==2) { bg = cvLoadImage("gbr/ruang3.jpg", CV_LOAD_IMAGE_COLOR ); // load gbr bg } else if (lvl==3) { bg = cvLoadImage("gbr/ruang4.jpg", CV_LOAD_IMAGE_COLOR ); // load gbr bg } else if (lvl==4) { bg = cvLoadImage("gbr/ruang5.jpg", CV_LOAD_IMAGE_COLOR ); // load gbr bg } else if (lvl==5) { bg = cvLoadImage("gbr/ruangfinal.jpg", CV_LOAD_IMAGE_COLOR ); // load gbr bg } else if (lvl==6) { bg = cvLoadImage("gbr/ruangbonus.jpg", CV_LOAD_IMAGE_COLOR ); // load gbr bg } ///////////////////////////////////
//"membalik"
gambar
background cvFlip(bg,bg,1); cvFlip(bg,bg,0);
//
mengambar
bounding box cvLine(bg,pt1,pt2,CV_RGB(0,0,255),2,8,0); cvLine(bg,pt1,pt3,CV_RGB(0,0,255),2,8,0); cvLine(bg,pt2,pt4,CV_RGB(0,0,255),2,8,0); cvLine(bg,pt3,pt4,CV_RGB(0,0,255),2,8,0); //////////////////////////////////// dx=abs(kiri-kanan); //jarak bound kiri dan kanan
xxix
garis
dy=abs(atas-bawah); //jarak bound atas dan bawah serangga(); //memanggil fungsi serangga()
//
mengecek
adanya
tepukan int luas =dx*dy; if(lvl==0) { if (luas>=10000&&tpk>=0){ //10000 = Luas minimal Bounding Box tpk++; if (tpk==1){ tpk=-1; //set
agar
kondisi
tidak dalam posisi tepuk luas=0; //set luas ke 0, agar raket dapat ditepuk lagi } mati(); //memanggil fungsi mati() } else if(luas<10000) { tpk=0; } } else if (lvl==1) { if (luas>=9000&&tpk>=0){ //9000 = Luas minimal Bounding Box tpk++; if (tpk==1){ tpk=-1; //set
agar
kondisi
tidak dalam posisi tepuk luas=0; //set luas ke 0, agar raket dapat ditepuk lagi }
xxx
mati(); //memanggil fungsi mati() } else if(luas<9000) { tpk=0; } } else if (lvl==2) { if (luas>=8000&&tpk>=0){ //8000 = Luas minimal Bounding Box tpk++; if (tpk==1){ tpk=-1; //set
agar
kondisi
tidak dalam posisi tepuk luas=0; //set luas ke 0, agar raket dapat ditepuk lagi } mati(); //memanggil fungsi mati() } else if(luas<8000) { tpk=0; } } else if(lvl==3) { if (luas>=7000&&tpk>=0){ //7000 = Luas minimal Bounding Box tpk++; if (tpk==1){ tpk=-1; //set
agar
kondisi
tidak dalam posisi tepuk luas=0; //set luas ke 0, agar raket dapat ditepuk lagi } mati(); //memanggil fungsi mati() }
xxxi
else if(luas<7000) { tpk=0; } } else if(lvl==4) { if (luas>=6000&&tpk>=0){ //6000 = Luas minimal Bounding Box tpk++; if (tpk==1){ tpk=-1; //set
agar
kondisi
tidak dalam posisi tepuk luas=0; //set luas ke 0, agar raket dapat ditepuk lagi } mati(); //memanggil fungsi mati() } else if(luas<6000) { tpk=0; } } else if(lvl==5) { //nyawa KING ada 9 if (luas>=6000&&tpk>=0){ //6000 = Luas minimal Bounding Box tpk++; if (tpk==1){ tpk=-1; //set
agar
kondisi
tidak dalam posisi tepuk luas=0; //set luas ke 0, agar raket dapat ditepuk lagi } int rnd_audio=rand()%3; //random suara saat serangga mati if(rnd_audio==0) {
xxxii
PlaySound("audio/des1.wav", NULL, SND_FILENAME| SND_SYNC); //load suara } else if (rnd_audio==1) { PlaySound("audio/des2.wav", NULL, SND_FILENAME| SND_SYNC); //load suara } else if (rnd_audio==1) { PlaySound("audio/des3.wav", NULL, SND_SYNC); //load suara } nyawaraja--;
SND_FILENAME|
if(nyawaraja==0) { mati(); } //memanggil fungsi mati() } else if(luas<6000) { tpk=0; } } else if(lvl==6) { if (luas>=10000&&tpk>=0){ //10000 = Luas minimal Bounding Box tpk++; if (tpk==1){ tpk=-1; //set
agar
kondisi
tidak dalam posisi tepuk luas=0; //set luas ke 0, agar raket dapat ditepuk lagi } mati(); //memanggil fungsi mati() } else if(luas<10000) { tpk=0; } }
xxxiii
waktu_akhir=time(NULL); //waktu untuk game over if(lvl==0) { if(waktu_akhir-waktu_awal==20
&&
poin=10) { lvl++; //saat poin mencapai limit, level bertambah limit+=10; //naikkan nilai limit level(); //memanggil fungsi level() awal(); //memanggil fungsi awal() } }
xxxiv
else if(lvl==1) { if(waktu_akhir-waktu_awal==20
&&
poin=20) { lvl++; //saat poin mencapai limit, level bertambah limit+=10; //naikkan nilai limit level(); //memanggil fungsi level() awal(); //memanggil fungsi awal() } } else if(lvl==2) {
xxxv
if(waktu_akhir-waktu_awal==20
&&
poin=30) { lvl++; //saat poin mencapai limit, level bertambah limit+=10; //naikkan nilai limit level(); //memanggil fungsi level() awal(); //memanggil fungsi awal() } } else if(lvl==3) { if(waktu_akhir-waktu_awal==20 poin
xxxvi
&&
bg = cvLoadImage("gbr/gameover.jpg", CV_LOAD_IMAGE_COLOR ); cvShowImage("Serangga Nakal", bg); cvWaitKey(5000); int rnd_audio3=rand()%4; if(rnd_audio3==0) { PlaySound("audio/ketawa1.wav", NULL, SND_FILENAME| SND_SYNC);} //load suara if(rnd_audio3==1) { PlaySound("audio/ketawa2.wav", NULL, SND_FILENAME| SND_SYNC);} if(rnd_audio3==2) { PlaySound("audio/ketawa3.wav", NULL, SND_FILENAME| SND_SYNC);} if(rnd_audio3==3) { PlaySound("audio/ketawa4.wav", NULL, SND_FILENAME| SND_SYNC);} Onbtnexit(); } //fungsi untuk berpindah level jika poin mencapai kelipatan 10 else if (poin>=40) { lvl++; //saat poin mencapai limit, level bertambah limit+=10; //naikkan nilai limit level(); //memanggil fungsi level() awal(); //memanggil fungsi awal() } } else if(lvl==4) { if(waktu_akhir-waktu_awal==20
&&
poin
xxxvii
=
cvShowImage("Serangga
Nakal",
bg); cvWaitKey(5000); int rnd_audio3=rand()%4; if(rnd_audio3==0) { PlaySound("audio/ketawa1.wav", NULL, SND_FILENAME| SND_SYNC);} //load suara if(rnd_audio3==1) { PlaySound("audio/ketawa2.wav", NULL, SND_FILENAME| SND_SYNC);} if(rnd_audio3==2) { PlaySound("audio/ketawa3.wav", NULL, SND_FILENAME| SND_SYNC);} if(rnd_audio3==3) { PlaySound("audio/ketawa4.wav", NULL, SND_FILENAME| SND_SYNC);} Onbtnexit(); } //fungsi untuk berpindah level jika poin mencapai kelipatan 10 else if (poin>=50) { lvl++; //saat poin mencapai limit, level bertambah limit+=10; //naikkan nilai limit level(); //memanggil fungsi level() awal(); //memanggil fungsi awal() } } else if(lvl==5) { if(waktu_akhir-waktu_awal==60
&&
poin
xxxviii
int rnd_audio3=rand()%4; if(rnd_audio3==0) { PlaySound("audio/ketawa1.wav", NULL, SND_FILENAME| SND_SYNC);} //load suara if(rnd_audio3==1) { PlaySound("audio/ketawa2.wav", NULL, SND_FILENAME| SND_SYNC);} if(rnd_audio3==2) { PlaySound("audio/ketawa3.wav", NULL, SND_FILENAME| SND_SYNC);} if(rnd_audio3==3) { PlaySound("audio/ketawa4.wav", NULL, SND_FILENAME| SND_SYNC);} Onbtnexit(); } //fungsi untuk berpindah level jika poin mencapai kelipatan 10 else if (poin>=51) { lvl++; //saat poin mencapai limit, level bertambah limit+=10; //naikkan nilai limit level(); //memanggil fungsi level() awal(); //memanggil fungsi awal() } } if(lvl==6) { if(waktu_akhir-waktu_awal==60
&&
poin<61) { bg = cvLoadImage("gbr/gameover.jpg", CV_LOAD_IMAGE_COLOR ); cvShowImage("Serangga Nakal", bg); cvWaitKey(5000); int rnd_audio3=rand()%4; if(rnd_audio3==0)
xxxix
{ PlaySound("audio/ketawa1.wav", NULL, SND_SYNC);} //load suara if(rnd_audio3==1) { PlaySound("audio/ketawa2.wav", NULL, SND_SYNC);} if(rnd_audio3==2) { PlaySound("audio/ketawa3.wav", NULL, SND_SYNC);} if(rnd_audio3==3) { PlaySound("audio/ketawa4.wav", NULL, SND_SYNC);}
SND_FILENAME|
SND_FILENAME|
SND_FILENAME|
SND_FILENAME|
Onbtnexit(); } //fungsi untuk berpindah level jika poin mencapai kelipatan 10 else if (poin>=30) { lvl++; //saat poin mencapai limit, level bertambah limit+=10; //naikkan nilai limit level(); //memanggil fungsi level() awal(); //memanggil fungsi awal() } }
/* //menampilkan info printf("poin = %d\n", poin); printf("tampung = %d\n", tampung); printf("limit = %d\n", limit); printf("lvl = %d\n\n\n", lvl); */ //fungsi "membalik" window cvFlip(bg,bg,1); cvFlip(bg,bg,0);
xl
untuk
// menampilkan image pada window cvShowImage("Capture Gambar",fin_img ); cvShowImage("Edge Detection", ImgGray); cvShowImage("Color Segmentation", cam_seg); cvShowImage("Serangga Nakal", bg);
//
membebaskan
memory yg terpakai cvReleaseImage(&fin_img); cam = NULL; cvReleaseImage(&cam_seg); cvReleaseImage(&ImgGray); cvReleaseImage(&bg); cvWaitKey(10); //delay
dengan
satuan
mili
detik }
}
mfcDlg.h // mfcDlg.h : header file // #include "cv.h" #include "highgui.h" #if !defined(AFX_MFCDLG_H__EDE490D5_36E4_4514_9537_9C59DAA44E50__ INCLUDED_) #define AFX_MFCDLG_H__EDE490D5_36E4_4514_9537_9C59DAA44E50__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 ///////////////////////////////////////////////////////////// //////////////// // CMfcDlg dialog class CMfcDlg : public CDialog
xli
{ // Construction public: CMfcDlg(CWnd* pParent = NULL); constructor void prog(IplImage *img); // void bikin_srg(); void awal(); CvPoint rnd(CvPoint pos); void serangga(); void mati(); void level(); void background(); int game();
//
standard
// Dialog Data //{{AFX_DATA(CMfcDlg) enum { IDD = IDD_MFC_DIALOG }; CString m_hWnd; CString m_hWnd2; CString m_skor; //}}AFX_DATA // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CMfcDlg) protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support //}}AFX_VIRTUAL // Implementation protected: HICON m_hIcon; // Generated message map functions //{{AFX_MSG(CMfcDlg) virtual BOOL OnInitDialog(); afx_msg void OnSysCommand(UINT nID, LPARAM lParam); afx_msg void OnPaint(); afx_msg HCURSOR OnQueryDragIcon(); afx_msg void Onbtnstart(); afx_msg void Onbtnexit(); //}}AFX_MSG DECLARE_MESSAGE_MAP() }; //{{AFX_INSERT_LOCATION}} // Microsoft Visual C++ will insert additional declarations immediately before the previous line.
xlii
#endif // !defined(AFX_MFCDLG_H__EDE490D5_36E4_4514_9537_9C59DAA44E50__ INCLUDED_)
xliii