Lampiran
Berikut ini adalah Source Code Program Game Serangga Nakal:
// mfcDlg.cpp : implementation file // #include "stdafx.h" #include "mfc.h" #include "mfcDlg.h" #include <windows.h> #include <stdio.h> #include <string.h> #include <time.h> // #include <MMSystem.h>
//library untuk load wav audio
#ifdef _DEBUG
#define new DEBUG_NEW #undef THIS_FILE
static char THIS_FILE[] = __FILE__; #endif
int R,G,B;
int height, width, step, channels; int height1, width1, step1, channels1; int kiri, kanan, atas, bawah;
int dx, dy, tpk=0; int inc;
// jarak perpindahan serangga int lvl, jml_srg, tampung=0;
// jumlah serangga int status[50], nyawaraja=9;
//status nyawa serangga dan nyawa raja int poin=0, limit=10;
int 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;
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 window jika program utama dimatikan
cvReleaseCapture( &capture ); cvDestroyWindow("Serangga Nakal..");*/
}
CvPoint CMfcDlg::rnd(CvPoint pos)
//fungsi random arah {
int x0=rand()%8;
//8 kemungkinan arah gerakan
{ 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 {
{ status[i]=1; pos[i].x=(rand()%630); //random posisi x pos[i].y=(rand()%470); //random 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, cvSize
(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);
} 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);
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) {
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;
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;
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
}
{
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", NULL, SND_FILENAME| SND_SYNC); //load suara
} cvWaitKey(3000); jml_srg=10; awal(); inc=30; game(); } else if (lvl==4) { bg = cvLoadImage("gbr/5.jpg", CV_LOAD_IMAGE_COLOR ); cvShowImage("Serangga Nakal", bg); int rnd_audio2=rand()%3;
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=40; game(); } else if (lvl==5) { 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", NULL, SND_FILENAME| SND_SYNC); //load suara
} cvWaitKey(3000);
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", NULL, SND_FILENAME| SND_SYNC); //load suara
} cvWaitKey(3000); jml_srg=10; awal(); inc=40; game(); } } int CMfcDlg::game()
// fungsi segmentasi warna {
waktu_awal=time(NULL); while(1)
{
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<height;i++) { for(int j=0;j<width;j++) { B=data[i*step+j*channels+0]; G=data[i*step+j*channels+1]; R=data[i*step+j*channels+2]; // if (((R > (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( cvSize(cam_seg->width, cam_seg->height), IPL_DEPTH_8U, 1 );
cvCvtColor( cam_seg, ImgGray, CV_BGR2GRAY );
//konversi gambar ke grayscale
//proses erosi yang diikuti oleh dilasi disebut proses closing
cvErode(ImgGray,ImgGray,NULL,2); cvDilate(ImgGray,ImgGray,NULL,2);
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 atas dari gambar hasil Canny
atas=0; for(int i1=0;i1<height1;i1++) { for(int j1=0;j1<width1;j1++) { if (data1[i1*step1+j1*channels1]==255) { atas=i1; } } }
//mencari batas kiri dari gambar hasil Canny
kiri=0; for(int j2=0;j2<width1;j2++) { for(int i2=0;i2<height1;i2++) { if (data1[i2*step1+j2*channels1]==255) { kiri=j2; }
} }
//mencari batas kanan dari gambar hasil Canny
kanan=0; for(int j4=width1;j4>0;j4--) { for(int i4=0;i4<height1;i4++) { if (data1[i4*step1+j4*channels1]==255) { kanan=j4; } } }
//mencari batas bawah dari 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; } } }
//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 }
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 garis 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);
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
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()
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)
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_FILENAME| SND_SYNC); //load suara
}
nyawaraja--;
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; } }
waktu_akhir=time(NULL);
//waktu untuk game over
if(lvl==0) { if(waktu_akhir-waktu_awal==20 && poin<limit) { 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>=10) {
lvl++;
//saat poin mencapai limit, level bertambah
limit+=10;
//naikkan nilai limit level();
//memanggil fungsi level() awal();
//memanggil fungsi awal() }
else if(lvl==1) { if(waktu_akhir-waktu_awal==20 && poin<limit) { 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>=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) {
if(waktu_akhir-waktu_awal==20 && poin<limit)
{
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>=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<limit) {
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<limit) { 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>=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<limit) { bg = cvLoadImage("gbr/gameover.jpg", CV_LOAD_IMAGE_COLOR );
cvShowImage("Serangga Nakal", bg);
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)
{
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>=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 untuk "membalik" window cvFlip(bg,bg,1); cvFlip(bg,bg,0);
// 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{
// Construction public:
CMfcDlg(CWnd* pParent = NULL); // standard constructor
void prog(IplImage *img);
// void bikin_srg(); void awal();
CvPoint rnd(CvPoint pos); void serangga(); void mati(); void level(); void background(); int game(); // 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.
#endif //
!defined(AFX_MFCDLG_H__EDE490D5_36E4_4514_9537_9C59DAA44E50__ INCLUDED_)