Workshop Project 2 Collision Detection

Slides:



Advertisements
Presentasi serupa
FUNGSI Erizal, S.Si, M.Kom Universitas Respati Yogyakarta
Advertisements

Lingkup Variabel Kelas Penyimpanan Rekursi
UNIVERSITAS BINA DARMA 2013 DATA MANIPULATION LANGUAGE (DML)
Enterprise Architecture
ALGORITME & PEMROGRAMAN Abdul Kudus, SSi., MSi., PhD. Senin, 6.30 – 9.00 Rabu, 8.00 – Rabu, – Senin, 9.00 – Selasa, –
Workshop Project 2 Tic Tac Toe Game
Workshop Project II Mohammad Zikky, S.ST, M.T.
PHP -Array dan Fungsi- ULLA DELFANA ROSIANI, ST. Array  Array atau larik adalah kumpulan data variabel dalam satu variabel.  Masing-masing dapat diakses.
TRIK MENEBAK NAMA PACAR TEMAN ALA DINAR RIADDIN
Operasi Hitung pada Matriks
Pengoperasian Mouse.
MENGOPERASIKAN APLIKASI PRESENTASI
Pemrograman Terstruktur
Workshop Project 2 Game PacMan & Algoritma AI yang Digunakan Musuhnya
INSTRUKSI MASUKAN DAN KELUARAN
3 Variabel, Konstanta Tipe Data dan dalam Bahasa C/C++ Java dan Bab
PENGENALAN c++ DAN STRUKTUR DASAR C++
STRING Pemrograman Object Oriented dengan JAVA Teknik Informatika-UMM.
5. 1 Bab 05 Tipe Data dan Mengisi Variabel.
Pemrograman web dasar TABEL.
Sistem Persamaan Linear
Pertemuan 3 KELUARAN dan MASUKAN (INPUT & OUTPUT) Dasar Pemrograman.
Pertemuan 1 Dasar Pemrograman Triana Elizabeth S. Kom Dibuat o/ : Renni Angreni, S.Kom.
PART 7 Array DOSEN : AHMAD APANDI, ST.
EXCEL 2003 Semester II. Bagian EXCEL 1. Mengenal Elemen Dasar Excel.
Statement Input – Output
Operasi Dasar Input/Output
Pemrograman Terstruktur C++ : Person 21 : Imelda Florensia Jayadi Kasenda Risky Radjamuda : Dosen : Ir. Hasanuddin Sirait, MT Created by. imeldaflorensia91.
Tenia Wahyuningrum, S.Kom., MT
Rahmat D. R. Dako, ST, M.Eng.  Modul  void main (void)  Modul  fungsi = function  Keuntungan penggunaan Fungsi atau modul :  Program menjadi lebih.
Dibuat oleh : Renni Angreni, S.Kom.
REPORT Bentuk Laporan Untuk memahami cara membuat laporan (report) di Visual Foxpro, kita harus memahami bentuk laporan (layout), yaitu sebagi berikut.
PERSON 20 TUGAS PEMROGRAMAN TERSTRUKTUR C++ CHERIA LOUPATTY MANAJEMEN INFORMATIKA STMIK / AMIK PARNA RAYA MANADO.
Prosedur dan Fungsi Triana Elizabeth, S.Kom.
FUNGSI.
Pemrograman Berorientasi Objek C++ Object Oriented Programming Rachmansyah, S.Kom
Pertemuan 10 Constructor dan Destructor
Mengaktifkan Microsoft Visual C++ : Klik Start Klik All Program, Microsoft Visual Studio 2008 Klik File, New, Project Klik Visual C++, Win32 Console Application.
Command line argument.
PENGENALAN C++ Part 2 Struktur Program.
DASAR BAHASA PEMROGRAMAN BORLAND C++
MODIFIKASI OBYEK DAN PENGATURAN LAYAR KERJA
Oleh : Agus Priyanto, M.Kom Norma Amalia, M.Eng
5. Fungsi S. Indriani L, M.T 5. Fungsi.
Constructor dan Overloading
ARRAY (Array Dua Dimensi) Pertemuan 16 Dasar Pemrograman
PENGANTAR TEKNOLOGI INFORMASI
Array Multidimensi.
FUNGSI (Method) Bag.1 Pertemuan 18 Dasar Pemrograman
NILAI EIGEN DAN VEKTOR EIGEN Definisi :
Command line argument.
MENGELOLA DAN MENCETAK DOKUMEN
STATEMENT INPUT DAN OUTPUT
Array.
MATERI 1 Review dan Pengantar C (Struktur Bahasa C, Variabel, Konstanta, Tipe Data, Operator)
S. Indriani Lestariningati, M.T
Array.
6. Array S. Indriani L, M.T.
Algoritma Struktur Data
Materi 9 Pembahasan CLASS Dalam C++
Menggunakan parameter pada ireport
Pertemuan 6 Penyelesaian Persamaan Linear (Metode Gauss) - 2
MATERI 1 Review dan Pengantar C (Struktur Bahasa C, Variabel, Konstanta, Tipe Data, Operator)
DATA ENTRY MUSDALIFAH DJ.
Oleh : Rahmat Robi Waliyansyah, M.Kom.
Pengantar Pemrograman Bahasa C
Pertemuan ke 9.
Aljabar Linier TIF 206 Mohammad Nasucha, S.T., M.Sc.
Kesamaan Dua Matriks Lawan Dua Matriks Operasi-Operasi Pada Matriks
Aljabar Linier TIF 206 Mohammad Nasucha, S.T., M.Sc.
Transcript presentasi:

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

gotoxy(kolom1, baris1); cout << teks1; Overview Diandaikan kita mempunyai 2 buah objek, teks1 dan teks2. Setiap objek ini memiliki posisi tertentu dilayar yang ditandai dengan kolom dan baris, kolom1 dan baris1 adalah posisi dari teks1 sedangkan kolom2 dan baris2 adalah posisi dari teks2. Jika kita ingin menempatkan teks1 pada posisinya maka yang perlu dilakukan adalah Memanggil fungsi gotoxy() dengan kolom1 dan baris1 sebagai parameternya. Kemudian mencetak teks1 gotoxy(kolom1, baris1); cout << teks1;

Overview Hal yang sama juga bisa dilakukan untuk teks2. Jika teks1 = ”ABC“ (tiga karakter/huruf) maka ketiga huruf tersebut akan menempati posisi berikut: Contoh : kolom1 = 5 baris1 = 10 Huruf Posisi A kolom1, baris1 B kolom1 + 1, baris1 C kolom1 + 2, baris1 Huruf Posisi A 5, 10 B 6+ 10 C 7+ 10

gotoxy(kolom2, baris2); cout << teks2; Penjelasan Lanjut Dengan pengetahuan tersebut, berikut ini akan dijelaskan bagaimana caranya mendeteksi terjadinya tabarakan: Andaikan teks2 = “x“ (sebuah karakter), berarti jika kita menggunakan perintah berikut : gotoxy(kolom2, baris2); cout << teks2; maka karakter “x“ akan menempati posisi kolom2 dan baris2. Dengan demikin tabrakan akan terjadi jika kondisi berikut terpenuhi : baris2 = baris1 dan kolom2 = kolom1 (kolom huruf A) atau baris2 = baris1 dan kolom2 = kolom1 + 1 (kolom huruf B) atau baris2 = baris1 dan kolom2 = kolom1 + 2 (kolom huruf C)

Jalankan Source Code Berikut dan Amati #include<iostream> #include<windows.h> using namespace std; //variabel global untuk menyimpan informasi //tombol yang ditekan INPUT_RECORD InRec; //fungsi delay(), digunakan untuk menunda proses eksekusi //selama beberapa millisecond #define delay Sleep //fungsi gotoxy(), digunakan untuk menempatkan kursor //pada posisi KOLOM dan BARIS void gotoxy(unsigned int kolom, unsigned int baris) { COORD posisi = {kolom,baris}; SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), posisi); } //fungsi kbhit(), digunakan untuk mendeteksi terjadinya //penekanan tombol. Jika terdapat tombol yang ditekan maka fungsi ini //akan mengembalikan nilai TRUE sebaliknya FALSE bool kbhit() 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); //fungsi getch(), digunakan untuk mengambil informasi tombol yang //terakhir kali ditekan. char getch() return InRec.Event.KeyEvent.uChar.AsciiChar; int main() { char tekan='X'; //kontrol arah gerak tulisan //kalau TRUE tulisan akan bergerak ke KANAN (MAJU) //kalau FALSE tulisan akan bergerak ke KIRI (MUNDUR) bool maju = true; bool atas = true; //area animasi unsigned int BATASKANAN = 45; unsigned int BATASKIRI = 10; unsigned int BATASATAS = 11; unsigned int BATASBAWAH = 13; unsigned int kolom = 10; //kolom untuk tulisan "CPP" unsigned int baris = 12; //baris untuk tulisan "CPP" unsigned int kolom2 = 26; //kolom untuk tulisan "X" unsigned int baris2 = 14; //baris untuk tulisan "X" unsigned int tabrak = 0; //teks yang akan dicetak string teks = "CPP"; string teks2= "x"; gotoxy(10,4); cout << "========================================="; gotoxy(10,5); cout << "== Animasi - Teknik Deteksi Tabrakan =="; gotoxy(10,8); cout << "========================================="; gotoxy(10,16); cout << " Tabrakan = 0 "; gotoxy(10,18); cout << " [ Tekan 'x' Untuk Keluar ] ";

Jalankan Source Code Berikut dan Amati (lanjutan) { baris2++; } //deteksi tabrakan 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; //cek apakah terjadi penekanan tombol, //jika 'ya', simpan tombol tersebut pada variabel TEKAN if(kbhit()) tekan = getch(); delay(50); //HAPUS teks cout.width(teks.length()); //Coba deh, tambahkan titik di antara tanda kutip berikut //apa yang terjadi ? cout.fill(' '); //Diantara tanda kutip berikut, akan diisi dengan KARAKATER //yang ditentukan lewat fungsi cout.fill(KARAKATER) diatas gotoxy(kolom,baris); cout<<""; //hapus teks2 gotoxy(kolom2,baris2); cout << " "; //perulangan ini akan diulang selama tekan TIDAK SAMA dengan 'x' while(tekan!='x') { //kontrol posisi teks "CPP" if(maju==true) //coba deh, ganti bagian ini dengan 'kolom>=BATASKANAN' //apa yang terjadi ? if (kolom>=BATASKANAN-teks.length()) maju=false; } else kolom++; } if (kolom<=BATASKIRI) maju=true; kolom--; //kontrol poisi teks "x" if(atas==true) if(baris2<=BATASATAS) atas=false; baris2--; if(baris2>=BATASBAWAH) atas=true;

Implementasi Project: Game Spacewar Sederhana

Contoh Game Sederhana Contoh dari implementasi collision detection adalah game spacewar. Disini akan dicontohkan prototype game spacewar sederhana dengaN c++. Untuk bisa membuat game ini, pengetahuan yang sudah diperkenalkan pada pembahasan sebelumnya sangat dibutuhkan Seperti pengetahuan fungsi yang bisa mengenali penekanan tombol PANAH dan SPASI. Untuk itu dibutuhkan modifikasi pada fungsi kbhit() dan getch()

Jalankan Source Code Berikut dan Amati unsigned int getch(bool kodeAscii=true) { if(kodeAscii==true) return InRec.Event.KeyEvent.uChar.AsciiChar; else return InRec.Event.KeyEvent.wVirtualKeyCode; } // DAFTAR TOMBOL //daftar ini akan berlaku jika kita memanggil fungsi getch() //seperti berikut : 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 mempunyai kode yang sama. Aturan yang sama berlaku //untuk huruf yang lain. //huruf A ... Z dimulai dari 65 .. 90 //angka 0 ... 9 dimulai dari 48 .. 57 const unsigned int HURUF_X = 88; int main() gotoxy(10,4); cout << "==================================="; gotoxy(10,5); cout << "== Game Spaceware Sederhana =="; 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' Untuk Keluar ] "; unsigned int tekan='w'; //kontrol arah gerak tulisan //kalau TRUE tulisan akan bergerak ke KANAN (MAJU) //kalau FALSE tulisan akan bergerak ke KIRI (MUNDUR) bool maju = true; //kalau tombol SPASI ditekan, //variable ini akan di set TRUE bool tembak = false; #include<iostream> #include<windows.h> using namespace std; //variabel global untuk menyimpan informasi //tombol yang ditekan INPUT_RECORD InRec; //fungsi delay(), digunakan untuk menunda proses eksekusi //selama beberapa millisecond #define delay Sleep //fungsi gotoxy(), digunakan untuk menempatkan kursor //pada posisi KOLOM dan BARIS void gotoxy(unsigned int kolom, unsigned int baris) { COORD posisi = {kolom,baris}; SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), posisi); } //fungsi kbhit(), digunakan untuk mendeteksi terjadinya //penekanan tombol. Jika terdapat tombol yang ditekan maka fungsi ini //akan mengembalikan nilai TRUE sebaliknya FALSE bool kbhit() 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; //fungsi getch(), digunakan untuk mengambil informasi tombol yang //terakhir kali ditekan.

Jalankan Source Code Berikut dan Amati (lanjutan 1) //area animasi unsigned int BATASKANAN = 45; unsigned int BATASKIRI = 10; unsigned int BATASATAS = 10; //Batas atas dari jalannya PELURU unsigned int kolom = 10; unsigned int baris = 10; //kolom dari TARGET unsigned int kolom1 = 20; //baris dari TARGET unsigned int baris1 = 18; //kolom dari SENJATA unsigned int kolom2 = 20; //baris dari SENJATA unsigned int baris2 = 17; //kolom dari PELURU unsigned int kena = 0; //baris dari PELURU //teks yang akan dicetak string target = "..0.."; string senjata = "^"; string peluru = "+"; //perulangan ini akan diulang selama tekan TIDAK SAMA dengan 'x' while(tekan!=HURUF_X) { //kontrol posisi if(maju==true) //coba deh, ganti bagian ini dengan 'kolom>=BATASKANAN' //apa yang terjadi ? if (kolom>=BATASKANAN-target.length()) maju=false; } else kolom++; } if (kolom<=BATASKIRI) maju=true; kolom--; //kontrol senjata if(tekan == PANAH_KANAN) { //reset tombol tekan tekan=0; if (kolom1<BATASKANAN-senjata.length()) kolom1++; kolom2 = kolom1; } gotoxy(30,19);cout<<"KANAN"; } else if(tekan==PANAH_KIRI) if (kolom1>BATASKIRI) kolom1--; gotoxy(30,19);cout<<"KIRI "; if(tekan==SPASI) tembak = true; baris2 = 17;

Jalankan Source Code Berikut dan Amati (lanjutan 2) //kontrol peluru if(tembak==true) { if (baris2>BATASATAS) //peluru selalu bergerak ke atas. //ini berarti baris harus dikurangi baris2--; gotoxy(30,20);cout << " IYA "; } else //ketika posisi peluru sudah mencapai BATASATAS //kita bisa tembak lagi. tembak=false; //deteksi tabrakan 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; //menampilkan senjata gotoxy(kolom1,baris1); cout << senjata; //menampilkan peluru //hanya dilakukan jika kita menembak gotoxy(kolom2,baris2); cout << peluru; //cek apakah terjadi penekanan tombol, //jika 'ya', simpan tombol tersebut pada variabel TEKAN if(kbhit()) tekan = getch(false); //cout << " " <<tekan<<" "; //Cek kode tombol yang ditekan, aktifkan baris ini. delay(50); //HAPUS teks cout.width(target.length()); //Coba deh, tambahkan titik di antara tanda kutip berikut //apa yang terjadi ? cout.fill(' '); //Diantara tanda kutip berikut, akan diisi dengan KARAKATER //yang ditentukan lewat fungsi cout.fill(KARAKATER) diatas gotoxy(kolom,baris); cout<<""; //hapus posisi lama senjata gotoxy(kolom1,baris1); cout <<" "; //hapus posisi lama peluru if(tembak==true) { gotoxy(kolom2,baris2); cout <<" "; }

Percobaan lebih lanjut Pahami masing-masing fungsi dan baris program dan kembangkan menjadi game spaceware dengan musuh yang lebih banyak. Jika sudah berhasil, coba berikan tembakan juga pada musuh, jika mengenai pesawat lakon (^), kurangi skor/kena minus 1 (-1) Analisa dan jelaskan hasil praktikumnya Buat laporan