#include <iostream> #include <windows.h> //menggunakan gotoxy,
GetAsyncKeyState, //dan beberapa fungsi lainnya //Awal pendeklarasian beberapa konstanta #define batas_atas 2 //batas_atas game #define batas_bawah 23 //batas_bawah_game #define batas_samping 2 // batas samping kiri game #define batas_samping_k 78 //batas samping kanan game //Akhir pendeklarasian konstanta using namespace std; //pendeklarasian variabel int iX(5), iY(5), x1 (4), y1 (4), xHapus(3), yHapus(3),
veloX(1), veloY(0) ,ekorsX[200],
ekorsY[200], nEkor = 5, start = 0, makX, makY; void gotoxy(int x, int y) //Void untuk gotoxy, memindahkan
kursor pada console { COORD pos = {x, y}; SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),
pos); } void naik() //untuk gerak Snake ke atas { veloY = -1;
//Kecepatan Y menjadi ke atas veloX = 0;
//kecepatan X dinolkan } void turun() { veloY = 1; //sda veloX = 0; //sda } void samping() { veloX = -1; //sda veloY = 0; //sda } void samping_k() { veloX = 1; //sda veloY = 0; //sda } void hapus() { gotoxy(xHapus,
yHapus); //untuk menghapus bagian yang sudah dilewati cout <<
" "; } void ekor() { for(int j = 0; j
<= 2; j++) { gotoxy(ekorsX[j],
ekorsY[j]); cout <<
"+"; } } void tampil() { gotoxy(iX, iY);
//iX dan iY adalah posisi gambar kepala cout <<
char(2); //untuk menggambar gambar kepala //karena ascii dari
smiley tsb adalh 2 gotoxy(makX, makY); //nilai makX dan makY
adalah random //digunakan untuk
posisi makanan, jadi posisi makanan random cout <<
"*"; //gambar makanan } void ganti_posisi() //mengganti posisi dari ekor ekor
snake { xHapus =
ekorsX[nEkor - 1]; yHapus =
ekorsY[nEkor - 1]; for(int j = nEkor -
1; j >= 1; j--) { ekorsX[j] =
ekorsX[j-1]; ekorsY[j] =
ekorsY[j-1]; } ekorsX[0] = iX; ekorsY[0] = iY; } void velo() //fungsi untuk melakukan update posisi snake
sesuai tombol //yang ditekan { ganti_posisi(); hapus(); iX += veloX; iY += veloY; tampil(); ekor(); } /*void trace() { for(int j = 0; j
<= nEkor -1; j++) { cout <<
"x" << j << " y"<< j<< " =
" << ekorsX[j] << "," << ekorsY[j]; cout <<
" // " << iX << "," << iY <<
endl; } system("pause"); system("cls"); }*/ bool isDestroy() { //selain untuk
mencek apakah snake sudah kalah //fungsi ini juga
menghapus kepala snake yang tersisa jika membentur dinding if(iX ==
batas_samping_k) { iX = 3; gotoxy(78, iY); cout << " "; } if(iX ==
batas_samping) { iX = 77; gotoxy(2, iY);
cout << " "; } if(iY ==
batas_atas) { iY = 22; gotoxy(iX, 2); cout << " "; } if(iY ==
batas_bawah) { iY = 3; gotoxy(iX, 23); cout << " "; } //trace(); for(int j = 0; j
<= nEkor - 1; j++) if(ekorsX[j] == iX
&& ekorsY[j] == iY) return true; return false; } char getkey()//fungsi untuk mendapatkan tombol yang
ditekan { for(int i = 8; i
<= 222; i++) {
if(GetAsyncKeyState(i) == -32767) { switch(i) { case 38 :
if(veloY != 1)naik();
break;//jika tombol yang ditekan adalah atas case 40 :
if(veloY != -1)turun(); break;
//jika tombol yang ditekan adalah bawah case 37 :
if(veloX != 1)samping(); break;
//jika tombol yang ditekan adalah kiri case 39 :
if(veloX != -1)samping_k(); break;
//jika tombol yang ditekan adalah kanan } } } } void random_makanan() { makX =
rand()%(batas_samping_k - 1); if(makX < 4)
makX += 3 + (4-makX); //mencegah agar makanan tidak diluar batas makY =
rand()%(batas_bawah - 1); if(makY < 4)
makY += 3 + (4-makY); gotoxy(makX, makY); cout <<
"*"; } bool isEaten() { if(iX == makX
&& iY == makY) return true; else return false; } void cBorder() //Fungsi untuk membuat garis tepi game { for(int i = 1; i
<= 78; i++) { for(int j = 1; j
<= 24; j += 23) { if(j > 1 || i
>= 32) { gotoxy(i,
j);cout << char(219); } } } for(int i = 1; i
<= 24; i++) { for(int k = 1; k
<= 80; k += 78) { gotoxy(k, i);
cout << char(219); } } } //akhir pembuatan garis tepi //Penulisan Skor void skor() { gotoxy(3,1); cout
<< "Skor : "; gotoxy(18,1); cout
<< "Panjang : "; } //Untuk menulis skor terbaru dan panjang dari snake void tulis_skor() { gotoxy(11,1); cout
<< (nEkor - 5) * 10; gotoxy(28,1); cout
<< nEkor; } //Fungsi yang menjalankan beberapa fungsi yang berjalan //pada awal program, hanya sekali void inisialisasi() { cBorder(); //buat
pinggiran game random_makanan();
//letakkan makanan secara random skor(); //tulis
tulisan skor di tepi atas tulis_skor();
//menulis skor } int main() //fungsi Utama { system("cls"); //membersihkan
layar inisialisasi();
//menjalankan fungsi inisialisasi while(!(isDestroy())) //selama snake belum
rusak atau kalah { velo(); //merubah
posisi snake berdasarkan kecepatan X atau Y getkey(); //untuk
mendapatkan tombol apa yang ditekan user dan //menjalankan
beberapa fungsi yang diperlukan
if(isEaten())//mencek apakah makanan telah dilalap oleh snake { nEkor += 2;
//panjang ekor ditambah 2
random_makanan(); //makanan diletakkan lagi
tulis_skor();//skor di update } Sleep(40 - (nEkor
/ 10)); //delay yang semakin cepat dengan penambahan ekor } system("cls"); //layar dibersihkan gotoxy(32,12); cout
<< "Skor : " << (nEkor - 5) * 10; //ditampilkan skor gotoxy(25,13); system("pause"); //selesai } |
0 Response to "Permainan ular sederhanan"
Posting Komentar