Cara Membuat Game Snake dari Bahasa C++
Disaat kesibukan yang melelahkan, tidak salah juga kalau kita merefresh otak dan juga menambah pengetahuan nih gan.
Di sini saya membuat game snake berbasis C++ console. Tidak panjang lebar Source Code beserta contoh aplikasinya. Untuk Pertanyaan dan Saran silahkan tinggalkan komentar di bawah ini. Thanks for Visit.
Screen Shot nya :
Ini Source Codenya gan :
#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
}
Semoga Bermanfaat (y). Bila kurang paham step-stepnya tanyakan saja lewat komentar ya. Terima kasih.
Di sini saya membuat game snake berbasis C++ console. Tidak panjang lebar Source Code beserta contoh aplikasinya. Untuk Pertanyaan dan Saran silahkan tinggalkan komentar di bawah ini. Thanks for Visit.
Ini Source Codenya gan :
#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
}
Semoga Bermanfaat (y). Bila kurang paham step-stepnya tanyakan saja lewat komentar ya. Terima kasih.
Semoga artikel Cara Membuat Game Snake dari Bahasa C++ bermanfaat bagi Anda. Jika kamu suka dengan artikel Cara Membuat Game Snake dari Bahasa C++ ini, like dan bagikan ketemanmu.
2 error gun, yg mna tuh yg slah?
programnya bagus ditambah ada penjelasannya jadi enak buat dibaca, bagus banget buat belajar bagi orang awam sepertii saya
thanks banget
gan kenapa pake x(1) maksudnya didalam kurung apa gan itu kan bukan array juga
nga jalan gan, saat di run nga bisa, pdhal nga ada codingan yang error
maaf mas . ini masih banyak yang salah program gamenya . ngga isa di running .
ms itu tulisannya gak ada yang di ganti kan pas copy ke c++
mantap gan...
Bos makasih banyak berkat ente tugas ane kelar . makasih banyak
ada source code game adventure bang?
cara mudah memahami codingan bagaimana sih gan? penasaran ane hehe
Makasih Ilmunya
itu cara membuat kecepatan menjadi lebih lambat gimana gan?
Mantab kak
ini pake apk c++ yang mana yah gan
hahaha... punya gw udh jadi tpi aneh hasil nya..
masa makanan nya banyak banget sekali keluar sama gerakan uler nya kecepatan.. jadi kasian sama uler nya gw.. hahaha... :v
makasih sudah share
Power supply hp
Sama kayak saya
mantap broo... :)
mboh ra nggenah poll ki
kekplerr wuuuuuuu
kyukk
Post a Comment