#第15週
期末作品:皮卡丘打排球-------------------------------------------------------------------------------------------------------------------------
◎接上搖桿
程式碼:
const int SW_pin = 2; // digital pin connected to switch output
const int X_pin = 0; // analog pin connected to X output
const int Y_pin = 1; // analog pin connected to Y output
void setup() {
pinMode(SW_pin, INPUT);
digitalWrite(SW_pin, HIGH);
Serial.begin(115200);
}
void loop() {
Serial.print("Switch: ");
Serial.print(digitalRead(SW_pin));
Serial.print("\n");
Serial.print("X-axis: ");
Serial.print(analogRead(X_pin));
Serial.print("\n");
Serial.print("Y-axis: ");
Serial.println(analogRead(Y_pin));
Serial.print("\n\n");
delay(500);
}

◎數值簡單化
程式碼:
const int SW_pin = 2; // digital pin connected to switch output
const int X_pin = 0; // analog pin connected to X output
const int Y_pin = 1; // analog pin connected to Y output
void setup() {
pinMode(SW_pin, INPUT);
digitalWrite(SW_pin, HIGH);
Serial.begin(115200);
}
void loop() {
int s=digitalRead(SW_pin);
int x=analogRead(X_pin);
int y=analogRead(Y_pin);
Serial.print("w");
Serial.print(s);
Serial.print("x");
if(x/4=='w' || x/4=='x' || x/4=='y' ) Serial.write('v');
else Serial.write(x/4);
Serial.print("y");
if(y/4=='w' || y/4=='x' || y/4=='y' ) Serial.write('v');
else Serial.write(y/4);
delay(50);
// Serial.print("Switch: ");
// Serial.print(digitalRead(SW_pin));
/* Serial.print("\n");
Serial.print("X-axis: ");
Serial.print(analogRead(X_pin));
Serial.print("\n");
Serial.print("Y-axis: ");
Serial.println(analogRead(Y_pin));
Serial.print("\n\n");*/
// delay(500);
}
◎連到Processing
程式碼:
import processing.serial.*;
Serial myPort;
void setup(){
size(300,300);
myPort = new Serial(this, "COM7", 115200);
}
int t=0, s=48, x=128, y=128;
void draw(){
background(255);
while(myPort.available() > 0){
t = myPort.read();
if(t=='w') s = myPort.read();
else if(t=='x') x=myPort.read();
else if(t=='y') y=myPort.read();
}
if(s==49)fill(255,0,0);
else fill(0,255,0);
ellipse(x, y, 30,30);
}
◎代入之前期中的程式碼
程式碼:
import processing.serial.*;
Serial myPort;
//import ddf.minim.*;
//Minim minim;
//AudioPlayer bgm;
PImage imgBall,imgP1,imgP2;
void setup(){
size(800,600);
textSize(50);
myPort = new Serial(this, "COM7", 115200);
imgBall=loadImage("Ball.png");
imgP1=loadImage("P1.png");
imgP2=loadImage("P2.png");
imageMode(CENTER);
//minim=new Minim(this);
//bgm=minim.loadFile("pika.mp3",2048);
//bgm.play();
//bgm.loop();
}
int t=0, s=48, x=128, y=128;
float ballX=120,ballY=150,ballVX=0,ballVY=0;
float p1X=100,p1Y=430,p1VX=0,p1VY=0;
float p2X=700,p2Y=430,p2VX=0,p2VY=0;
Boolean bGG=false;
int p1S=0,p2S=0; ///Score
void draw(){
background(#BFEAFF); ///sky
while(myPort.available() > 0){
t = myPort.read();
if(t=='w') s = myPort.read();
else if(t=='x') x=myPort.read();
else if(t=='y') y=myPort.read();
}
//if(s==49)fill(255,0,0);
//else fill(0,255,0);
//ellipse(x, y, 30,30);
noStroke();fill(#D1C0A6);rect(0,500,800,100); ///floor
fill(#A6ACAF);rect(400,320,10,240); ///cylider
image(imgP1,p1X,p1Y,200,200);
image(imgP2,p2X,p2Y,200,200);
image(imgBall,ballX,ballY,80,80);
fill(#484646);
text(p1S,100,70);
text(p2S,700,70);
if(p1S==15){
bGG=true;
String p1win = "p1 is winner !!";
fill(#E85050);
text(p1win, 230, 150, 500, 200);
}
if(p2S==15){
bGG=true;
String p2win = "p2 is winner !!";
fill(#E85050);
text(p2win, 230, 150, 500, 200);
}
if(ballX<=360 && ballY>=500-40){
bGG=true; ///if ball touch the floor : GameOver
if(bGG)
{
p2S++;
ballX=680;ballY=150;
p1X=100;p1Y=450;
p2X=700;p2Y=450;
ballVX=0;ballVY=0;
p1VX=0;p1VY=0;
p2VX=0;p2VY=0;
bGG=false;
}
}
if(ballX>=450 && ballY>=500-40){
bGG=true; ///if ball touch the floor : GameOver
if(bGG)
{
p1S++;
ballX=120;ballY=150;
p1X=100;p1Y=450;
p2X=700;p2Y=450;
ballVX=0;ballVY=0;
p1VX=0;p1VY=0;
p2VX=0;p2VY=0;
bGG=false;
}
}
if(bGG)return;
ballX += ballVX; ballY += ballVY;
ballVY += 0.98;
p1X+=p1VX;
if(p1X<80) p1X=80;
if(p1X>300) p1X=300;
p1Y += p1VY; p1VY+=0.98;
p2X+=p2VX;
if(p2X<500) p2X=500;
if(p2X>720) p2X=720;
p2Y += p2VY; p2VY+=0.98;
if(ballX<50){ballX=50;ballVX=-ballVX;}
if(ballX>800-50){ballX=800-50;ballVX=-ballVX;}
if(ballY<50){ballY=50;ballVY=-ballVY;}
if(ballY>800-50){ballY=800-50;ballVY=-ballVY;}
if(330<ballX && ballX<470 && 270<ballY &&ballY<560)
{ballVX=-ballVX;ballVY=-ballVY;}
if(p1Y>=500-50) {p1VY=0; p1Y=500-50;}
if(p2Y>=500-50) {p2VY=0; p2Y=500-50;}
if(dist(p1X,p1Y,ballX,ballY)<=80)ballVY=-ballVY;
if(dist(p2X,p2Y,ballX,ballY)<=80)ballVY=-ballVY;
if(dist(p1X,p1Y,ballX,ballY)<=80) ballVX=(80-ballVX)/6.0;
if(dist(p2X,p2Y,ballX,ballY)<=80) ballVX=-(80-ballVX)/6.0;
}


沒有留言:
張貼留言