Cara Membuat Game Ular Ularan Di C++
Halo semua, Hari ini saya akan memposting tentang membuat game di C++. Disini saya akan membuat game ular ularan atau yang lebih dikenal yaitu game SNAKE. Siapa sih yang gak tau game Snake atau Ular ularan. Game ini biasanya ada di HP Symbian ( HP JADUL). Kalau kita memainkan sih gampang tapi kalo buatnya gampang – gampang susah. Sudah jangan panjang lebar copykan script dibawah ke software C++ misalkan dev-c++ , borland c++ dll
#include <iostream>
#include <conio.h>
#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 = 2, start = 0, makX, makY ,level = 1 ,username;
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 << char(29);
}
}
void tampil()
{
gotoxy(iX, iY); //iX dan iY adalah posisi gambar kepala
cout << char(1); //untuk menggambar gambar kepala
gotoxy(makX, makY);
//nilai makX dan makY adalah random
//digunakan untuk posisi makanan, jadi posisi makanan random
cout << char(3); //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();
}
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()
{
// PENAMBAHAN UNTUK IF PERULANGAN LEVEL UP PER KELIPATAN MAKAN
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 << char(3);
if (nEkor%10==0)
level=level+1;
}
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 >= 33)
{
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 : ";
gotoxy(33,1); cout << "level : ";
gotoxy(3,2); cout << "Nama : ";
}
//Untuk menulis skor terbaru dan panjang dari snake
void tulis_skor()
{
gotoxy(11,1); cout << (nEkor) * 10;
gotoxy(28,1); cout << nEkor;
gotoxy(41,1); cout << level;
}
//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 dimana program perulangan di jalan kan
{ int pilih;
char user[20];
pilih:
system("cls"); //membersihkan layar
cout << "\tSelamat Datang \n";
cout << "\t\t1.main \n";
cout << "\t\t2.keluar \n";
cout << "anda pilih yang mana : "; cin>>pilih;
switch (pilih){
case 1:
goto main;
case 2:
goto exit;
default : cout << "maaf tidak tersedia";
goto pilih;
}
main:
cout << "Masukkan Nama = ";cin >> user;
system("cls");
gotoxy(11,2); cout << user; // menampilkan nama user
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
}
//===============================ini untuk kecepatan dari ular ============
Sleep(200 - (nEkor * 5)); //delay yang semakin cepat dengan penambahan ekor
}
system("cls"); //layar dibersihkan
gotoxy(32,12); cout << "Skor "<< user<<":" << (nEkor - 1) * 10; //ditampilkan skor
gotoxy(25,13);
exit:
system("pause"); //selesai
Terimakasih Semoga Bermanfaat J
oke sipp mantapp
ReplyDeletethanks gan,izin pakai untuk demo
ReplyDeletengk bisa di download,error itu gan
ReplyDeleteMantap Gan...
ReplyDeletethanks gan..membantu sekali
ReplyDeleteCoba akh..
ReplyDeletedi borland kok filed gk running..
ReplyDeleteapa ada tambahannya gan??
kok gak mau scripnya,,,mohon bantuan
ReplyDeletegood job
ReplyDeleteyang gak bisa coba aja pakek software dev-c++ kalo gak punya nih linknya http://www.alfanno8.com/2015/03/donwload-dev-c-terbaru-versi-571-64bit.html
ReplyDeleteini compilernya pakek dev C++?
ReplyDelete