Cara Membuat Game Snake dari Bahasa C++

Disaat kesibukan yang melelahkan, tidak salah juga kalau kita merefresh otak dan juga menambah pengetahuan nih guys. Jangan lupa siapin makanan ringan sama kopinya buat nemenin ngoding guys. Coding again, coding again, coding, coding and error code wkwkw, santai aja guys :p Yuk kita coding sambil terus ngopi :D 

Di sini saya membuat game snake berbasis C++ console. Ane coding dan compile menggunakan aplikasi Dev-C++.
Tidak panjang lebar Source Code beserta contoh aplikasinya.

Ini Source Codenya guys:
*Kalau bisa tulis ulang sourcenya guys, biar hafal tambah paham haha :D 
#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 guys (y) :D. Bila kurang paham step-stepnya tanyakan saja lewat komentar ya guys. Terima kasih. Keep coding and keep high guys! :p

0 Response to "Cara Membuat Game Snake dari Bahasa C++"

/*! SCRIPT IKLAN */ /*! SCRIPT IKLAN */