Pages

Banner 468 x 60px

 

Wednesday, December 19, 2018

Game Sederhana Menggunakan AI

18 comments

Game Sederhana My AI Pong menggunakan Artificial Intelligent


Game MyAIPong adalah sebuah game arcade yang menarik untuk dimainkan. Cara bermainnya cukup mudah yaitu pemain (player) menggerakkan brick atau papan ke kiri dan ke kanan sesuai arah bola untuk memantulkan bola ke arah lawan. Pada game ini kita akan melawan sebuah artificial inteligent yang sudah di program sebelumnya. Fyi game ini terinspirasi dari permainan bola ping-pong loh.
Artificial Inteligent atau kecerdasan buatan adalah ilmu yang mempelajari cara membuat komputer melakukan sesuatu seperti yang dilakukan manusia (Minsky, 1989). Definisi lain diungkapkan oleh H. A. Simon (1987), kecerdasan buatan merupakan kawasan penelitian, aplikasi dan instruksi yang terkait dengan pemrograman komputer untuk melakukan sesuatu hal yang dalam pandangan manusia adalah cerdas. Definisi kecerdasan buatan lainnya juga diungkapkan oleh Rich and Knight (1991), kecerdasan buatan merupakan sebuah studi tentang bagaimana membuat komputer melakukan hal-hal yang pada saat ini dapat dilakukan lebih baik oleh manusia. Dan definisi lainnya juga ditulis dalam Encyclopedia Britania, Kecerdasan Buatan (AI) merupakan cabang dari ilmu komputer yang dalam merepresentasi pengetahuan lebih banyak menggunakan bentuk simbol-simbol daripada bilangan, dan memproses informasi berdasarkan metode heuristic atau dengan berdasarkan sejumlah aturan.
Game ini dibuat dengan menggunakan Processing, yang merupakan sebuah software sederhana yang digunakan untuk coding di suatu komputer, penggunaannya hampir sama mudahnya dengan software text editor sederhana (seperti TextEdit atau Notepad) yang dikombinasikan dengan sebuah media player. Setiap sketsa (program pada Processing disebut dengan sketsa) memiliki sebuah nama file, sebuah tempat dimana kamu dapat membuat coding, dan beberapa tombol untuk menyimpan, membuka, dan menjalankan sketsa.


jika anda ingin mencoba anda harus mendownload source code sebelumnya di diodwiki.blogspot.com part 1 dan wisnudhanti.blogspot.com part2
Berikut Source code Part 3 Lanjutannya

Source code  Program/Game

void drawPembatas() {
  fill(0, 100);
  rectMode(CENTER);
  rect(pembatasX, pembatasY, pembatasWidth, pembatasHeight);
}

void printScore() {
  textAlign(CENTER);
  text("Player Score : " + scorePong, 60, 15);
  text("AI Score : " + AIscorePong, 45, 35);
}

void scorePong() {
  scorePong++;
}

void AIscorePong() {
  AIscorePong++;
}

//JENIS-JENIS SKILL BOLA
void skillAdder() {
  if (millis() - lastAddTime > skillInterval) {
    int sX = round(random(0, width));
    int sY = round(random(0, height));
    int skillSpeedHor = round(random(-8, 8));
    int skillSpeedVert = round(random(-8, 8));
    int destroySkill = lastAddTime + 9000;
    int Ability = round(random(0, width));
    int[] randSkill = {sX, sY, skillSize, skillSize, skillSpeedHor, skillSpeedVert, destroySkill, Ability};
    skills.add(randSkill);
    lastAddTime = millis();
  }
}

//MEMPERODUKSI SKILL BOLA
void skillHandler() {
  for (int i = 0; i < skills.size(); i++) {
    skillSpeedHor(i);
    skillSpeedVert(i);
    keepSkillInScreen(i);
    AIkejarSkill(i);
    //pongKejarSkill(i);
    skillDrawer(i);
    destroySkill(i);
  }
}

void skillDrawer(int index) {
  int[] skill = skills.get(index);

  int skillsX = skill[0];
  int skillsY = skill[1];
  int skillsWidth = skill[2];
  int skillsHeight = skill[3];

  fill(random(255), random(255), random(255));
  ellipseMode(CENTER);
  ellipse(skillsX, skillsY, skillsWidth, skillsHeight);
}

void skillSpeedVert(int index) {
  int[] skill = skills.get(index);
  skill[1] = skill[1] + skill[5];
}

void skillSpeedHor(int index) {
  int[] skill = skills.get(index);
  skill[0] = skill[0] + skill[4];
}

void keepSkillInScreen(int index) {
  int[] skill = skills.get(index);

  if (skill[1] > height) {
    bounceSkillBottom(index, height);
  }
  if (skill[1] < 0) {
    bounceSkillTop(index, 0);
  }
  if (skill[0] > width) {
    bounceSkillRight(index, width);
  }
  if (skill[0] < 0) {
    bounceSkillLeft(index, 0);
  }
}

void bounceSkillBottom(int index, int surface) {
  int skill[] = skills.get(index);

  skill[1] = surface-(skill[3]/2);
  skill[5] *= -1;
}

void bounceSkillTop(int index, int surface) {
  int[] skill = skills.get(index);

  skill[1] = surface+(skill[3]/2);
  skill[5] *= -1;
}

void bounceSkillRight(int index, int surface) {
  int[] skill = skills.get(index);

  skill[0] = surface-(skill[2]/2);
  skill[4] *= -1;
}

void bounceSkillLeft(int index, int surface) {
  int[] skill = skills.get(index);

  skill[0] = surface+(skill[2]/2);
  skill[4] *= -1;
}

void destroySkill(int index) {
  int[] skill = skills.get(index);

  if (millis() >= skill[6]) {
    skills.remove(index);
    println("Skill Hilang");
  }
 
  if ((skill[0]+(skill[3]/2) > pongX-(pongWidth/2)) && (skill[0]-(skill[3]/2) < pongX+(pongWidth/2))) {
    if (skill[1]+(skill[4]/2) >= pongY) {
      pongWidth = skill[7];
      skills.remove(index);
    }
  }
 
  if ((skill[0]+(skill[3]/2) > AIpongX-(AIpongWidth/2)) && (skill[0]-(skill[3]/2) < AIpongX+(AIpongWidth/2))) {
    if (skill[1]-(skill[4]/2) <= AIpongY) {
      AIpongWidth = skill[7];
      skills.remove(index);
    }
  }
}

void AIkejarSkill(int index) {
  int[] skill = skills.get(index);

  if (skill[1] < height/2 && skill[1] < ballY) {
    if (!(skill[0]+(skill[3]/2) > AIpongX-(AIpongWidth/2))) {
      AIpongX = AIpongX + (AIpongSpeed * -1);
    } else if (!(skill[0]-(skill[3]/2) < AIpongX+(AIpongWidth/2))) {
      AIpongX = AIpongX + (AIpongSpeed * 1);
    }
  }
}

void pongKejarSkill(int index) {
  int[] skill = skills.get(index);

  if (skill[1] > height/2 && skill[1] > ballY) {
    if (!(skill[0]+(skill[3]/2) > pongX-(pongWidth/2))) {
      pongX = pongX + (pongSpeed * -1);
    } else if (!(skill[0]-(skill[3]/2) < pongX+(pongWidth/2))) {
      pongX = pongX + (pongSpeed * 1);
    }
  }
}


Berikut langkah-langkah memainkannya

a. Run program
b. Klik start pada program
c. Gunakan tombol  A untuk menggeser papan milik player(bawah)  kekiri, dan tombol D untuk menggeser ke Kanan
d. Usahakan bola mengenai papan
e. Jika bola mengenai lantai maka point lawan akan bertambah
f. Usakan juga papan terkena bola bayangan. Bola bayangan dapat memperpanjang dan memperpendek papan kita, jika papan masih kecil maka bola bayangan akan membuat papan menjadi panjang, sebaliknya jika papan panjang maka anda harus menghindari bola bayangan.

Tampilan Game




Selamat mencoba.

18 comments:

Post a Comment