Pressing:
import processing.serial.*;
Serial myPort;
int mapSizex=480; //map x >>>
int mapSizey=480; //map y ↓↓↓
//int posX=mapSizex/2, posY=mapSizey/2; //player place at mid
int i=0; //for
int maxWalkSpeed=2; //move speed
float walkAccelx=0; //x++ speed
float walkAccelxtmp=0; //x++ speed tmp
float walkSpeedx=0; //x start speed
float walkAccely=0; //y++speed
float walkAccelytmp=0; //y++speed temp
float walkSpeedy=0; //y start speed
int maxConnon=5; //max rock how many
float minConnonSpeed=0.1; //rock move low speed
float maxConnonSpeed=1; //rock move fast speed
float[] connonv= new float[maxConnon+1]; //
float[] connonx= new float[maxConnon+1]; //
float[] connonxv= new float[maxConnon+1]; //
float[] connony= new float[maxConnon+1]; //
float[] connonyv= new float[maxConnon+1]; //
float[] connonw= new float[maxConnon+1]; //
boolean gamestart=false; //pan duan start or not
boolean gameover=false; //pan duan die or not
int score=0; //score
PImage img, imgBG;
int posX=0;
int posY=0;
void setup()
{
myPort=new Serial(this,"COM3",9600);
size(255,200);
size(mapSizex, mapSizey+6); //+5 or can't see score
img=loadImage("spaceship.png"); //
imgBG=loadImage("starworld.jpg"); //picture
imgBG.resize(mapSizex, mapSizey+6); //+5 or can't see score
imageMode(CENTER);
posX=floor(mapSizex/2); //player place reset
posY=floor(mapSizey/2); //same
for (i=1;i<=maxConnon;i++)
{
switch(floor(random(1,5))) // random come out ball
{
case 1: //<< x place -10 y random place
connonx[i]=-10;
connony[i]=random(-10, mapSizey+10);
break;
case 2: //↑↑ y place -10 x random place
connonx[i]=random(-10, mapSizex+10);
connony[i]=-10;
break;
case 3: //>> x place +10 y random place
connonx[i]=mapSizex+10;
connony[i]=random(-10, mapSizey+10);
break;
case 4://↓↓ y place +10 x random place+10
connonx[i]=random(-10, mapSizex+10);
connony[i]=mapSizey+10;
break;
}
connonv[i]=random(minConnonSpeed,maxConnonSpeed); //rock speed
connonxv[i]=connonv[i]*((posX-connonx[i])/sqrt(sq(connonx[i]-posX)+sq(connony[i]-posY))); //x
connonyv[i]=connonv[i]*((posY-connony[i])/sqrt(sq(connonx[i]-posX)+sq(connony[i]-posY))); // y
connonw[i]=5;//ball big small
}
}
void draw() {
background(imgBG);
image (img, posX,posY, 30,30);
if (gamestart) {
//gameStart();
update();
setConnon();
scoreShow();
}
else {
textSize(40); //big small
fill(255,255,255); //colour
text("PRESS HERE TO START", 30,100); //title
}
}
void keyPressed() //keyboard up down left right
{
switch(keyCode)
{
case LEFT: //<<
walkAccelx=-0.2; //speed
walkAccelxtmp=0; //ship start 0 everytime then -0.15
break;
case RIGHT: //>>
walkAccelx=0.2;
walkAccelxtmp=0;
break;
case UP: //^^
walkAccely=-0.2;
walkAccelytmp=0;
break;
case DOWN: //↓↓
walkAccely=0.2;
walkAccelytmp=0;
break;
}
}
void keyReleased() //put out
{
switch(keyCode)
{
case LEFT:
walkAccelxtmp=walkAccelx; //orginal speed switch
walkAccelx=0; //restar 0
break;
case RIGHT:
walkAccelxtmp=walkAccelx;
walkAccelx=0;
break;
case UP:
walkAccelytmp=walkAccely;
walkAccely=0;
break;
case DOWN:
walkAccelytmp=walkAccely;
walkAccely=0;
break;
case ' ': //space bar
if (gameover==true)
{
score=0;
gameover=false;
frameCount=0;
walkAccelytmp=0;
setup();
//redraw();
}
break;
}
}
void mouseClicked()
{
if (gameover==true)
{
score=0;
gameover=false;
frameCount=0;
setup();
//redraw();
}
if (gamestart==false)
{
gamestart=true;
}
} // see dao zhe bian
void update()
{
if (posY>=10 && posY<=mapSizey-10)
{
posY+=walkSpeedy;
if (walkAccely!=0)
{
if (abs(walkSpeedy)<maxWalkSpeed)
{
walkSpeedy+=walkAccely;
}
else
{
if (walkSpeedy>0)
{
walkSpeedy=maxWalkSpeed;
}
else
{
walkSpeedy=-maxWalkSpeed;
}
}
}
else
{
if (abs(walkSpeedy)>0.2)
{
walkSpeedy-=walkAccelytmp;
}
else
{
walkSpeedy=0;
walkAccelytmp=0;
}
}
}
else
{
if (posY<10)
{
walkSpeedy=0;
posY=10;
walkAccely=0;
}
if (posY>mapSizey-10)
{
walkSpeedy=0;
posY=mapSizey-10;
walkAccely=0;
}
}
if (posX>=10&&posX<=mapSizex-10)
{
posX+=walkSpeedx;
if (walkAccelx!=0)
{
if (abs(walkSpeedx)<maxWalkSpeed)
{
walkSpeedx+=walkAccelx;
}
else
{
if (walkSpeedx>0)
{
walkSpeedx=maxWalkSpeed;
}
else
{
walkSpeedx=-maxWalkSpeed;
}
}
}
else
{
if (abs(walkSpeedx)>0.2)
{
walkSpeedx-=walkAccelxtmp;
}
else {
walkSpeedx=0;
walkAccelxtmp=0;
}
}
}
else
{
if (posX<10) //dun give aloplant go outside
{
walkSpeedx=0;
posX=10;
walkAccelx=0;
}
if (posX>mapSizex-10)
{
walkSpeedx=0;
posX=mapSizex-10;
walkAccelx=0;
}
}
int a=0;
if(myPort.available()>0) a =myPort.read();
if( (a&0x01)==0x01)posY+=10;///{println("up");}else println("no up");
if( (a&0x02)==0x02)posY-=10;
if( (a&0x04)==0x04)posX+=10;
if( (a&0x08)==0x08)posX-=10;
noStroke();
fill(0,255,0,1);
ellipse(posX,posY, 10, 10); //mid xiao dian
}
void setConnon() {
for (i=1;i<=maxConnon;i++) {
if (abs(connonx[i]-posX)<connonw[i]&&abs(connony[i]-posY)<connonw[i]) {
gameover=true;
}
else {
if ((connonx[i]>mapSizex+10)||(connonx[i]<-10)||(connony[i]<-10)||(connony[i]>mapSizey+10)||gameover) {
switch(floor(random(1, 4.99))) {
case 1: //左
connonx[i]=-10;
connony[i]=random(-10, mapSizey+10);
break;
case 2: //上
connonx[i]=random(-10, mapSizex+10);
connony[i]=-10;
break;
case 3: //右
connonx[i]=mapSizex+10;
connony[i]=random(-10, mapSizey+10);
break;
case 4: //下
connonx[i]=random(-10, mapSizex+10);
connony[i]=mapSizey+10;
break;
}
connonv[i]=random(0.1, 5);
connonxv[i]=connonv[i]*((posX-connonx[i])/sqrt(sq(connonx[i]-posX)+sq(connony[i]-posY)));
connonyv[i]=connonv[i]*((posY-connony[i])/sqrt(sq(connonx[i]-posX)+sq(connony[i]-posY)));
if (!gameover) {
score+=1;
}
if (frameCount>=1000&&frameCount<2000) {
connonw[i]=floor(random(3, 15));
}
if (frameCount>=2000&&frameCount<4000) {
connonw[i]=floor(random(3, 30));
}
if (frameCount>=4000) {
connonw[i]=floor(random(3, 80));
}
}
else {
connonx[i]+=connonxv[i];
connony[i]+=connonyv[i];
noStroke();
fill(250, 20, 0);
ellipse(connonx[i], connony[i], connonw[i], connonw[i]);
}
}
}
}
void scoreShow() //show score
{
if (gameover)
{
textSize(15);
fill(255, 255, 255);
text("Game Over\nYour Score: "+score+"\nPress space bar to continue", floor(mapSizex/4), floor(mapSizey/2));
}
else
{
textSize(10);
fill(240, 220, 0);
text("Your Score: "+score, 10, mapSizey+5); //left botton score
}
}
arduino:
void setup(){
Serial.begin(9600);
pinMode(12, INPUT_PULLUP);
pinMode(5, INPUT_PULLUP);
pinMode(3, INPUT_PULLUP);
pinMode(0, INPUT_PULLUP);
pinMode(8,INPUT_PULLUP);
}
void loop(){
int a=0;
if(digitalRead(12)==LOW)a|=0x01;//Serial.println("up ");
if(digitalRead(5)==LOW) a|=0x02;//Serial.println("down");
if(digitalRead(3)==LOW) a|=0x04;//Serial.println("left");
if(digitalRead(0)==LOW) a|=0x08;//Serial.println("right");
Serial.write(a);
delay(20);
}
沒有留言:
張貼留言