Spieleentwicklung zur Verarbeitung mit Kontrolle über das Arduino Uno Board

Zunächst werde ich kurz den Zweck des Projekts beschreiben. Ich wollte mir etwas Einfaches und Intuitives einfallen lassen, um die Kommunikation der Arduino Uno-Karte und eines PCs über eine serielle Verbindung zu demonstrieren. Etwas, das in die Vorschriften des „Wochenend“ -Projekts passt, nämlich: Es wurde in ein paar Stunden erledigt und war leicht zu codieren.

Es wurde beschlossen, ein Spiel mit den folgenden Regeln zu erstellen. Die Aktion findet auf einer arbeitenden zweidimensionalen Ebene statt. Der "Helden" -Ball, dessen Position vom Spieler kontrolliert wird, versucht, eine Kollision mit den "gegnerischen" Bällen zu vermeiden. Der Heldenball bewegt sich nur entlang der Abszissenachse, Gegner erscheinen an einer beliebigen Stelle auf der Arbeitsebene und bewegen sich geradlinig entlang der Ordinatenachse. Wenn der "Helden" -Ball die Kollision mit dem "Gegner" verlässt, wird der Wert des Punktezählers erhöht, andernfalls wird der Zähler zurückgesetzt und die zuvor gesammelten Punkte werden "ausgebrannt".

Schritt 1


Die Wahl der Programmiersprache. Die Verarbeitung wurde ausgewählt, weil die Programmiersprache für Arduino-Boards darauf basiert. Die Verarbeitung ist auch ein gutes und einfaches Werkzeug zum Erstellen von Bildern, Animationseffekten usw. Ja, es ist auch kostenlos.

Schritt 2


Bauen Sie einen hausgemachten "Joystick". Alles ist völlig trivial. Die Rolle des Joysticks spielt ein herkömmliches Potentiometer, das zwischen +5 V Spannung und GND-Masse auf der Arduino Uno-Platine angeschlossen ist. Der mittlere Pin ist mit dem analogen Pin „A0“ verbunden.



Wenn Sie möchten, können Sie natürlich auch den Analogstick, das Touchpad usw. verwenden. Das Wesentliche ist dasselbe.

Schritt 3


Arduino Board Programmierung. In diesem Projekt muss die Arduino-Karte kontinuierlich Daten über die Position des Potentiometer-Schiebereglers senden. Anschließend werden diese Daten auf dem Computer von Processing für die Anforderungen des Spiels „erfasst“ (Bestimmung der Koordinaten des „Helden“ -Balls).

Code für 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 
}


Schritt 4


Eigentlich das Schreiben des Spiels selbst. Wie bereits erwähnt, ist das Spiel in der Verarbeitungssprache geschrieben . Sie können das Distributionskit auf der Website herunterladen. Es gibt auch Anwendungsbeispiele. In meinem Fall besteht die „Engine“ aus 49 Codezeilen, von denen die Hälfte Kommentare sind. Was ich sagen möchte, um es zu verstehen, ist nicht schwierig. Sie können die "Skins" der Helden unabhängig voneinander ändern, die Anzahl der Gegner hinzufügen, Boni in das Spiel einführen, die Daten vom Potentiometer vom Rasseln befreien usw. Mein Code ist wie unter dem Spoiler.

Spielcode verarbeiten
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
}


Schritt 5


Spieldemo
Video


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


All Articles