import processing.serial.*;//I/O library
Serial port;
PShape bot;
PFont font;
PImage img;
int radiusOfHero=100, radiusOfEnemy, radiusOfBullet=5, Counter=0, Fire;
float speedOfEnemy=1, DeltaPositionOfHeroX, positionOfHeroX1, positionOfHeroX0=640.0,
DeltapositionOfHeroY, positionOfHeroY1, positionOfHeroY0=640.0,
positionOfEnemyY = 0.0 ,positionOfEnemyX=0.0, positionOfBulletX=0.0,positionOfBulletY=0.0;
String strbuf="3223220";
void setup()
{
size(640, 640);
port = new Serial(this, "COM4", 9600);
port.bufferUntil('\n');
bot = loadShape("2.svg");
font = loadFont("AgencyFB-Bold-200.vlw");
img = loadImage("img.png"); // Load the image into the program
textFont(font,200);
}
void draw() {
background(0);
image(img, 0, 0);
fill(255);
text(Counter, 400,170);
//==========definiton of hero==========
fill(0, 200, 102);
positionOfHeroX1=positionOfHeroX0+(0.05*(DeltaPositionOfHeroX-width/2));
if (positionOfHeroX1<0){positionOfHeroX1=0.0;}
if (positionOfHeroX1>width){positionOfHeroX1=width;}
positionOfHeroY1=positionOfHeroY0+(0.05*(DeltapositionOfHeroY-height/2));
if (positionOfHeroY1<0){positionOfHeroY1=0.0;}
if (positionOfHeroY1>height){positionOfHeroY1=height;}
ellipse(positionOfHeroX1, positionOfHeroY1, radiusOfHero, radiusOfHero);
positionOfHeroX0=positionOfHeroX1;
positionOfHeroY0=positionOfHeroY1;
fill(244);
positionOfBulletY= positionOfHeroY1-radiusOfHero/2;
if (Fire==0){
for(int i = 0; i < (positionOfHeroY1); i++){
positionOfBulletX = positionOfHeroX1;
positionOfBulletY= positionOfBulletY-height/100;
ellipse(positionOfBulletX, positionOfBulletY, radiusOfBullet, radiusOfBullet); }
}
//===============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++;}
//==========definition of counter==========
if (Counter>1000){
text("YOU WON!", 50,height/2);
}
//==========clash==========
if (abs(positionOfHeroX1-positionOfEnemyX) < (radiusOfHero+radiusOfEnemy)/2 &
(abs(positionOfHeroY1-positionOfEnemyY) < (radiusOfHero+radiusOfEnemy)/2)){
background(255,0,0);
shape(bot, positionOfHeroX1-radiusOfHero/2,positionOfHeroY1-radiusOfHero, 100, 100);
Counter=-1;
fill(255);
textFont(font,150);
text("TURN AWAY!", 0,height/2);}
//==========Checking of target hit==========
if (((abs(positionOfBulletX-positionOfEnemyX) < (radiusOfBullet+radiusOfEnemy)/2))& (Fire==0))
{speedOfEnemy=0.05;// decreasing of enemy speed
Counter++;}
else speedOfEnemy=0.2;}
void serialEvent (Serial port) {
if(port.available()>0){
strbuf=port.readStringUntil('\n');
if (strbuf.length()<7) {//condition to prevent artefacts
strbuf="3223220";
}
DeltaPositionOfHeroX=float(strbuf.substring(0, 3));
DeltapositionOfHeroY=float(strbuf.substring(3, 6));
Fire=int(strbuf.substring(6, 7));
}
}