Desarrollo de juegos en Procesamiento con control a trav茅s del tablero Arduino Uno

Para comenzar, describir茅 brevemente el prop贸sito del proyecto. Quer铆a crear algo simple e intuitivo para demostrar la comunicaci贸n de la placa Arduino Uno y una PC a trav茅s de una conexi贸n en serie. Algo que encajar铆a en las regulaciones del proyecto "fin de semana", a saber: se realiz贸 en un par de horas y se codific贸 f谩cilmente.

Se decidi贸 crear un juego con las siguientes reglas. La acci贸n tiene lugar en un plano bidimensional en funcionamiento. La bola de "h茅roe", controlada por el jugador, est谩 tratando de evitar una colisi贸n con las bolas de "oponentes". La bola de h茅roe se mueve solo a lo largo del eje de abscisas, los oponentes aparecen en un lugar arbitrario en el plano de trabajo y se mueven rectil铆neamente a lo largo del eje de ordenadas. Si la bola del "h茅roe" abandona la colisi贸n con el "oponente", el valor del contador de puntos se incrementa, de lo contrario, el contador se reinicia y los puntos acumulados anteriormente se "queman".

Paso 1


La elecci贸n del lenguaje de programaci贸n. El procesamiento se eligi贸 porque el lenguaje de programaci贸n para las placas Arduino se basa en 茅l. El procesamiento tambi茅n es una herramienta buena y simple para crear im谩genes, efectos de animaci贸n, etc. S铆, tambi茅n es gratis.

Paso 2


Construye un "joystick" casero. Todo es completamente trivial. El papel del joystick lo desempe帽a un potenci贸metro convencional conectado entre + 5V de potencia y tierra GND en la placa Arduino Uno. El pin central est谩 conectado al pin anal贸gico "A0".



Naturalmente, si lo desea, puede usar el stick anal贸gico, el panel t谩ctil, etc. La esencia es la misma.

Paso 3


Programaci贸n de placa Arduino. En este proyecto, se requiere que la placa Arduino env铆e continuamente datos sobre la posici贸n del control deslizante del potenci贸metro. Posteriormente, estos datos en la computadora son "recogidos" por Processing para las necesidades del juego (determinando las coordenadas de la pelota "hero").

C贸digo para la placa Arduino Uno
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 
}


Paso 4


En realidad, la escritura del juego en s铆. Como se mencion贸 anteriormente, el juego est谩 escrito en el lenguaje de procesamiento . Puede descargar el kit de distribuci贸n en el sitio web, tambi茅n hay ejemplos de uso. En mi caso, el "motor" consta de 49 l铆neas de c贸digo, de las cuales la mitad son comentarios. Lo que quiero decir, entenderlo no es dif铆cil. Puedes cambiar de forma independiente las "m谩scaras" de los h茅roes, agregar el n煤mero de oponentes, introducir bonificaciones en el juego, eliminar los ruidos del potenci贸metro, etc. Mi c贸digo est谩 debajo del spoiler.

Procesando c贸digo de juego
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
}


Paso 5


Demostraci贸n de un juego
V铆deo


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


All Articles