Pengembangan game pada Pengolahan dengan kontrol melalui papan Arduino Uno

Untuk mulai dengan, saya akan menjelaskan secara singkat tujuan proyek. Saya ingin membuat sesuatu yang sederhana dan intuitif untuk menunjukkan komunikasi papan Arduino Uno dan PC melalui koneksi serial. Sesuatu yang akan cocok dengan peraturan proyek "akhir pekan", yaitu: dilakukan dalam beberapa jam dan mudah dikodekan.

Diputuskan untuk membuat game dengan aturan berikut. Aksi berlangsung pada bidang dua dimensi yang berfungsi. Bola "pahlawan", yang dikendalikan oleh pemain, berusaha menghindari tabrakan dengan bola "lawan". Bola pahlawan hanya bergerak di sepanjang sumbu absis, lawan muncul di tempat sewenang-wenang di pesawat yang bekerja dan bergerak lurus di sepanjang sumbu ordinat. Jika bola "pahlawan" meninggalkan tabrakan dengan "lawan", nilai penghitung skor bertambah, jika tidak penghitung diatur ulang dan poin yang diakumulasikan sebelumnya "habis".

Langkah 1


Pilihan bahasa pemrograman. Pemrosesan dipilih, karena bahasa untuk pemrograman papan Arduino didasarkan padanya, Pemrosesan juga merupakan alat yang baik dan sederhana untuk membuat gambar, efek animasi, dll. Ya, itu juga gratis.

Langkah 2


Buat "joystick" buatan sendiri. Semuanya sangat sepele. Peran joystick dimainkan oleh potensiometer konvensional yang terhubung antara daya + 5V dan ground GND pada papan Arduino Uno. Pin tengah terhubung ke pin analog "A0".



Secara alami, jika Anda mau, Anda dapat menggunakan stik analog, panel sentuh, dll. Esensinya sama.

Langkah 3


Pemrograman papan Arduino. Dalam proyek ini, papan Arduino diperlukan untuk terus mengirim data tentang posisi slider potensiometer. Selanjutnya, data ini di komputer "diambil" dengan Memproses untuk kebutuhan permainan (menentukan koordinat bola "pahlawan").

Kode untuk Arduino Uno Board
int potPin = 0;//   ,     
// 
void setup() {
Serial.begin(9600);// serial      
}
void loop() {
 int val = map (analogRead(potPin), 0, 1023, 0, 640);//    
//     Arduino     0  1023.
//  map      0  640. 
// ,        
//  Processing   
 Serial.println(val);//       
 delay(50);//   50 
}


Langkah 4


Sebenarnya, penulisan game itu sendiri. Seperti disebutkan sebelumnya, gim ini ditulis dalam bahasa Pemrosesan . Anda dapat mengunduh kit distribusi di situs web, ada juga contoh penggunaannya. Dalam kasus saya, "mesin" terdiri dari 49 baris kode yang setengahnya adalah komentar. Apa yang ingin saya katakan, untuk mengerti itu tidak sulit. Anda dapat secara mandiri mengubah "kulit" para pahlawan, menambahkan jumlah lawan, memperkenalkan bonus ke dalam permainan, menyingkirkan data dari potensiometer dari berderak, dll. Kode saya seperti di bawah spoiler.

Memproses Kode Permainan
import processing.serial.*;//I/O library
Serial port;
PShape bot; //       
PFont font; //   
int radiusOfHero=100, radiusOfEnemy, speedOfEnemy=1, Counter=0;
float positionOfHeroX=100.0, positionOfEnemyY = 0.0 ,positionOfEnemyX=0.0;
void setup()
{
  size(640, 400);//   
  port = new Serial(this, "COM4", 9600);//     COM  
//  4 
  port.bufferUntil('\n');
  bot = loadShape("2.svg");//  ,      Processing
  font = loadFont("AgencyFB-Bold-200.vlw");//    
  textFont(font,200);
}
void draw() {
    background(0);
    fill(255);
    text(Counter, 30,175);//        (30; 175)
//===============definiton of hero position=============
fill(0, 102, 153);
ellipse(positionOfHeroX, height-radiusOfHero/2, radiusOfHero, radiusOfHero);// 
// -
//===============definition of enemy===============
fill(255,0,0);
radiusOfEnemy=round(random(60));{
    for(int i = 0; i < height; i++) 
      positionOfEnemyY=positionOfEnemyY+0.02*speedOfEnemy;//   -   
      ellipse(positionOfEnemyX, positionOfEnemyY, radiusOfEnemy*2, radiusOfEnemy*2); }//  -
if (positionOfEnemyY>height) {
positionOfEnemyY=0.0;
positionOfEnemyX = round(random(width)); //     -
Counter++;}
//==============clash==========================
if (abs(positionOfHeroX-positionOfEnemyX) < (radiusOfHero+radiusOfEnemy)/2 & 
   (abs(height-radiusOfHero/2)-positionOfEnemyY) < (radiusOfHero+radiusOfEnemy)/2){//   -
background(255,0,0);
shape(bot, positionOfHeroX-radiusOfHero/2,height-radiusOfHero, 100, 100);  
Counter=-1;
fill(255);
textFont(font,150);
text("TURN AWAY!", 0,height/2);
}
}
void serialEvent (Serial port) {
positionOfHeroX=round(float(port.readStringUntil('\n')));//    -   COM4
}


Langkah 5


Demo permainan
Video


Source: https://habr.com/ru/post/id384479/


All Articles