1 / 12

Workshop Project 2 Collision Detection

Workshop Project 2 Collision Detection. Mohammad Zikky, S.ST, M.T. Overview.

venice
Download Presentation

Workshop Project 2 Collision Detection

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Workshop Project 2Collision Detection Mohammad Zikky, S.ST, M.T

  2. Overview • Diandaikankitamempunyai 2 buahobjek, teks1 danteks2. Setiapobjekinimemilikiposisitertentudilayaryang ditandaidengankolomdanbaris, kolom1 danbaris1 adalahposisidariteks1 sedangkankolom2 danbaris2 adalahposisidariteks2. • Jika kita ingin menempatkan teks1 pada posisinya maka yang perlu dilakukan adalah • Memanggilfungsigotoxy() dengankolom1 danbaris1 sebagaiparameternya. • Kemudianmencetakteks1 gotoxy(kolom1, baris1); cout << teks1;

  3. Overview • Hal yang samajugabisadilakukanuntukteks2. • Jikateks1 = ”ABC“ (tigakarakter/huruf) makaketigahuruftersebutakanmenempatiposisiberikut: • Contoh : kolom1 = 5 baris1 = 10

  4. PenjelasanLanjut • Denganpengetahuantersebut, berikutiniakandijelaskanbagaimanacaranyamendeteksiterjadinyatabarakan: • Andaikanteks2 = “x“ (sebuahkarakter), berartijikakitamenggunakanperintahberikut : gotoxy(kolom2, baris2); cout << teks2; • makakarakter“x“ akanmenempatiposisikolom2 danbaris2. Dengandemikintabrakanakanterjadijikakondisiberikutterpenuhi : • baris2 = baris1 dan kolom2 = kolom1 (kolomhuruf A) atau • baris2 = baris1 dan kolom2 = kolom1 + 1 (kolomhuruf B) atau • baris2 = baris1 dan kolom2 = kolom1 + 2 (kolomhuruf C)

  5. Jalankan Source Code Berikutdan Amati int main() { char tekan='X'; //kontrolarahgeraktulisan //kalau TRUE tulisanakanbergerakke KANAN (MAJU) //kalau FALSE tulisanakanbergerakke KIRI (MUNDUR) boolmaju = true; boolatas = true; //area animasi unsigned int BATASKANAN = 45; unsigned int BATASKIRI = 10; unsigned int BATASATAS = 11; unsigned int BATASBAWAH = 13; unsigned intkolom = 10; //kolomuntuktulisan "CPP" unsigned intbaris = 12; //barisuntuktulisan "CPP" unsigned int kolom2 = 26; //kolomuntuktulisan "X" unsigned int baris2 = 14; //barisuntuktulisan "X" unsigned inttabrak = 0; //teks yang akandicetak string teks = "CPP"; string teks2= "x"; gotoxy(10,4); cout << "========================================="; gotoxy(10,5); cout << "== Animasi - TeknikDeteksiTabrakan =="; gotoxy(10,8); cout << "========================================="; gotoxy(10,16); cout << " Tabrakan = 0 "; gotoxy(10,18); cout << " [ Tekan 'x' UntukKeluar ] "; #include<iostream> #include<windows.h> using namespace std; //variabel global untukmenyimpaninformasi //tombol yang ditekan INPUT_RECORD InRec; //fungsi delay(), digunakanuntukmenunda proses eksekusi //selamabeberapa millisecond #define delay Sleep //fungsigotoxy(), digunakanuntukmenempatkankursor //padaposisi KOLOM dan BARIS void gotoxy(unsigned intkolom, unsigned intbaris) { COORD posisi = {kolom,baris}; SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), posisi); } //fungsikbhit(), digunakanuntukmendeteksiterjadinya //penekanantombol. Jikaterdapattombol yang ditekanmakafungsiini //akanmengembalikannilai TRUE sebaliknya FALSE boolkbhit() { DWORD EventCount,NumRead; GetNumberOfConsoleInputEvents(GetStdHandle(STD_INPUT_HANDLE), &EventCount); if(EventCount>0) ReadConsoleInput(GetStdHandle(STD_INPUT_HANDLE), &InRec, 1, &NumRead); return (InRec.EventType == KEY_EVENT); } //fungsigetch(), digunakanuntukmengambilinformasitombol yang //terakhir kali ditekan. char getch() { return InRec.Event.KeyEvent.uChar.AsciiChar; }

  6. { baris2++; } } //deteksitabrakan if (baris2==baris) { if (kolom2>=kolom && kolom2<=kolom+teks.length()) { tabrak++; gotoxy(32,16); cout << tabrak; } } //TULIS teks gotoxy(kolom,baris); cout<< teks; gotoxy(kolom2,baris2); cout << teks2; //cekapakahterjadipenekanantombol, //jika 'ya', simpantomboltersebutpadavariabel TEKAN if(kbhit()) tekan = getch(); delay(50); //HAPUS teks cout.width(teks.length()); //Cobadeh, tambahkantitik di antaratandakutipberikut //apa yang terjadi ? cout.fill(' '); //Diantaratandakutipberikut, akandiisidengan KARAKATER //yang ditentukanlewatfungsicout.fill(KARAKATER) diatas gotoxy(kolom,baris); cout<<""; //hapus teks2 gotoxy(kolom2,baris2); cout << " "; } } Jalankan Source Code Berikutdan Amati (lanjutan) //perulanganiniakandiulangselamatekan TIDAK SAMA dengan 'x' while(tekan!='x') { //kontrolposisiteks "CPP" if(maju==true) { //cobadeh, gantibagianinidengan 'kolom>=BATASKANAN' //apa yang terjadi ? if (kolom>=BATASKANAN-teks.length()) { maju=false; } else { kolom++; } } else { if (kolom<=BATASKIRI) { maju=true; } else { kolom--; } } //kontrolpoisiteks "x" if(atas==true) { if(baris2<=BATASATAS) { atas=false; } else { baris2--; } } else { if(baris2>=BATASBAWAH) { atas=true; } else

  7. Implementasi Project:Game SpacewarSederhana

  8. Contoh Game Sederhana • Contohdariimplementasi collision detection adalah game spacewar. Disiniakandicontohkan prototype game spacewarsederhanadengaNc++. • Untukbisamembuatgame ini, pengetahuan yang sudahdiperkenalkanpadapembahasansebelumnyasangatdibutuhkan • Sepertipengetahuanfungsi yang bisamengenalipenekanantombol PANAH danSPASI. • Untukitudibutuhkanmodifikasipadafungsikbhit() dangetch()

  9. unsigned intgetch(boolkodeAscii=true) { if(kodeAscii==true) return InRec.Event.KeyEvent.uChar.AsciiChar; else return InRec.Event.KeyEvent.wVirtualKeyCode; } // DAFTAR TOMBOL //daftariniakanberlakujikakitamemanggilfungsigetch() //sepertiberikut : getch(false); const unsigned int PANAH_KIRI = 37; const unsigned int PANAH_KANAN = 39; const unsigned int PANAH_ATAS = 38; const unsigned int PANAH_BAWAH = 40; const unsigned int SPASI = 32; //huruf A atau a mempunyaikode yang sama. Aturan yang samaberlaku //untukhuruf yang lain. //huruf A ... Z dimulaidari 65 .. 90 //angka 0 ... 9 dimulaidari 48 .. 57 const unsigned int HURUF_X = 88; int main() { gotoxy(10,4); cout << "==================================="; gotoxy(10,5); cout << "== Game SpacewareSederhana =="; gotoxy(10,8); cout << "==================================="; gotoxy(10,19); cout << " ARAH SENJATA = "; gotoxy(10,20); cout << " TEMBAK = TIDAK "; gotoxy(10,21); cout << " KENA = 0 "; gotoxy(10,22); cout << " [ Tekan 'x' UntukKeluar ] "; unsigned inttekan='w'; //kontrolarahgeraktulisan //kalau TRUE tulisanakanbergerakke KANAN (MAJU) //kalau FALSE tulisanakanbergerakke KIRI (MUNDUR) boolmaju = true; //kalautombol SPASI ditekan, //variable iniakan di set TRUE booltembak = false; Jalankan Source Code Berikutdan Amati #include<iostream> #include<windows.h> using namespace std; //variabel global untukmenyimpaninformasi //tombol yang ditekan INPUT_RECORD InRec; //fungsi delay(), digunakanuntukmenunda proses eksekusi //selamabeberapa millisecond #define delay Sleep //fungsigotoxy(), digunakanuntukmenempatkankursor //padaposisi KOLOM dan BARIS void gotoxy(unsigned intkolom, unsigned intbaris) { COORD posisi = {kolom,baris}; SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), posisi); } //fungsikbhit(), digunakanuntukmendeteksiterjadinya //penekanantombol. Jikaterdapattombol yang ditekanmakafungsiini //akanmengembalikannilai TRUE sebaliknya FALSE boolkbhit() { bool result = false; DWORD EventCount,NumRead; GetNumberOfConsoleInputEvents(GetStdHandle(STD_INPUT_HANDLE), &EventCount); if(EventCount>0) { ReadConsoleInput(GetStdHandle(STD_INPUT_HANDLE), &InRec, 1, &NumRead); result = InRec.EventType == KEY_EVENT; } return result; } //fungsigetch(), digunakanuntukmengambilinformasitombol yang //terakhir kali ditekan.

  10. Jalankan Source Code Berikutdan Amati (lanjutan 1) //kontrolsenjata if(tekan == PANAH_KANAN) { //reset tomboltekan tekan=0; if (kolom1<BATASKANAN-senjata.length()) { kolom1++; kolom2 = kolom1; } gotoxy(30,19);cout<<"KANAN"; } else if(tekan==PANAH_KIRI) { //reset tomboltekan tekan=0; if (kolom1>BATASKIRI) { kolom1--; kolom2 = kolom1; } gotoxy(30,19);cout<<"KIRI "; } else if(tekan==SPASI) { tembak = true; tekan=0; baris2 = 17; } //area animasi unsigned int BATASKANAN = 45; unsigned int BATASKIRI = 10; unsigned int BATASATAS = 10; //Batas atasdarijalannya PELURU unsigned intkolom = 10; unsigned intbaris = 10; //kolomdari TARGET unsigned int kolom1 = 20; //barisdari TARGET unsigned int baris1 = 18; //kolomdari SENJATA unsigned int kolom2 = 20; //barisdari SENJATA unsigned int baris2 = 17; //kolomdari PELURU unsigned intkena = 0; //barisdari PELURU //teks yang akandicetak string target = "..0.."; string senjata = "^"; string peluru = "+"; //perulanganiniakandiulangselamatekan TIDAK SAMA dengan 'x' while(tekan!=HURUF_X) { //kontrolposisi if(maju==true) { //cobadeh, gantibagianinidengan 'kolom>=BATASKANAN' //apa yang terjadi ? if (kolom>=BATASKANAN-target.length()) { maju=false; } else { kolom++; } } else { if (kolom<=BATASKIRI) { maju=true; } else { kolom--; } }

  11. Jalankan Source Code Berikutdan Amati (lanjutan 2) //cekapakahterjadipenekanantombol, //jika 'ya', simpantomboltersebutpadavariabel TEKAN if(kbhit()) tekan = getch(false); //cout << " " <<tekan<<" "; //Cekkodetombol yang ditekan, aktifkanbarisini. delay(50); //HAPUS teks cout.width(target.length()); //Cobadeh, tambahkantitik di antaratandakutipberikut //apa yang terjadi ? cout.fill(' '); //Diantaratandakutipberikut, akandiisidengan KARAKATER //yang ditentukanlewatfungsicout.fill(KARAKATER) diatas gotoxy(kolom,baris); cout<<""; //hapusposisi lama senjata gotoxy(kolom1,baris1); cout <<" "; //hapusposisi lama peluru if(tembak==true) { gotoxy(kolom2,baris2); cout <<" "; } } } //kontrolpeluru if(tembak==true) { if (baris2>BATASATAS) { //peluruselalubergerakkeatas. //iniberartibarisharusdikurangi baris2--; gotoxy(30,20);cout << " IYA "; } else { //ketikaposisipelurusudahmencapai BATASATAS //kitabisatembaklagi. tembak=false; //deteksitabrakan PELURU & teks CPP if(kolom2>=kolom && kolom2<=kolom+target.length()-1) { kena++; gotoxy(30,21);cout << kena; } gotoxy(30,20);cout << "TIDAK"; } } //TULIS teks gotoxy(kolom,baris); cout<< target; //menampilkansenjata gotoxy(kolom1,baris1); cout << senjata; //menampilkanpeluru //hanyadilakukanjikakitamenembak if(tembak==true) { gotoxy(kolom2,baris2); cout << peluru; }

  12. Percobaanlebihlanjut • Pahamimasing-masingfungsidanbaris programdankembangkanmenjadi game spacewaredenganmusuh yang lebihbanyak. • Jikasudahberhasil, cobaberikantembakanjugapadamusuh, jikamengenaipesawatlakon (^), kurangiskor/kena minus 1 (-1) • Analisadanjelaskanhasilpraktikumnya • Buatlaporan

More Related