本周进行跳上/落下板子的程式码,直接用if和Boolean进行判断。
1.跳上板子
利用if的判断,当四个条件全都成立时,方块会落在板子上,同时jumping的Boolean值变为false
int boardX=300;
int boardY=100;
int boardW=1000;
void setup(){
size(500,300);
}
float x=30,y=150,vx=3,vy=0;
float scrolling=0;//相对运动
boolean jumping=false;
void draw(){
background(#162390);
line(0,200,500,200);
rect(x-scrolling,y,50,50);
x+=vx;
if(jumping){
y+=vy;
vy+=0.98;
if(y>150){//在地面
y=150;vy=0;jumping=false;
}
}
scrolling=(x-30);
for(int i=0;i<1;i++){
rect(boardX-scrolling,boardY,boardW,20);
if(jumping && y+50<boardY && y+50+vy>boardY && boardX<x+50 && x<boardX+boardW){
y=boardY-50;vy=0;jumping=false;//落在板子上
}
}
}
void keyPressed(){
if(keyCode==UP){
jumping=true;
vy=-15;
}
}
增加Boolean值onBoard,如果onBoard为true且不超过板子右侧,则jumping为false,到一定边界方块会落下板子
int []boardX={300,400};
int []boardY={100,50};
int []boardW={800,300};
void setup(){
size(500,300);
}
float x=30,y=150,vx=3,vy=0;
float scrolling=0;
boolean jumping=false,onBoard=false;
int boardID=0;
void draw(){
background(#162390);
line(0,200,500,200);
rect(x-scrolling,y,50,50);
x+=vx;
if(jumping){
y+=vy;
vy+=0.98;
if(y>150){
y=150;vy=0;jumping=false;
}
}
scrolling=(x-30);
for(int i=0;i<2;i++){
rect(boardX[i]-scrolling,boardY[i],boardW[i],20);
if(boardID==i){
if(onBoard==true && (boardX[i]+boardW[i]<x) ){//如果不在板子上会掉落
onBoard=false;jumping=true;
}
}
if(jumping && y+50<boardY[i] && y+50+vy>boardY[i] && boardX[i]<x+50 && x<boardX[i]+boardW[i]){
y=boardY[i]-50;vy=0;jumping=false;onBoard=true;boardID=i;
}
}
}
void keyPressed(){
if(keyCode==UP){
jumping=true;
vy=-15;
}
}
3.geometry dash程式码
float []badx,bubblex,bubbley,boardx,boardy,boardw;
int now,score;
int boardID=0;
void setup(){
size(600,400);
textSize(40);
badx=new float[100];
badx[0]=300+random(200,300);
for(int i=1;i<100;i++){
badx[i]=badx[i-1]+random(200,250);
}
boardx=new float[100];
boardx[0]=500+random(200,300);
for(int i=1;i<100;i++){
boardx[i]=boardx[i-1]+random(350,600);
}
boardy=new float[100];
boardy[0]=260;
for(int i=1;i<100;i++){
boardy[i]=boardy[i-1]+random(-20,10);
}
boardw=new float[100];
boardw[0]=100;
for(int i=1;i<100;i++){
boardw[i]=boardw[i-1]+random(20,50);
}
bubblex=new float[10];
bubbley=new float[10];
for(int i=0;i<10;i++){
bubblex[i]=0;
bubbley[i]=300;
}
}
float usery=300, vy=0, bgx=0;
boolean gameOver=false;
boolean onBoard=false;
void draw(){
background(#FF0A7D);
bgx+=4;
fill(#F5ADCF);
for(int i=0;i<100;i++){
now=i;
if(collision()) gameOver=true;
triangle(badx[i]-bgx,310,badx[i]-25-bgx,350,badx[i]+25-bgx,350);
}
fill(#AD0051); rect(0,350,600,400);
rect(150,usery,50,50);
if(jumping){
usery+=vy;
vy+=0.98/2.5;
if(usery>300){
jumping=false;
usery=300;
}
}
fill(#AD0051);
for(int i=0;i<100;i++){//新增程式码,跳跃中落在板子上
rect(boardx[i]-bgx,boardy[i],boardw[i],20);
if(boardID==i){
if(onBoard==true && (boardx[i]+boardw[i]<150+bgx) ){
onBoard=false;jumping=true;
}
}
if(jumping && usery+50<boardy[i] && usery+50+vy>boardy[i] && boardx[i]<150+50+bgx && 150+bgx<boardx[i]+boardw[i]){
usery=boardy[i]-50;vy=0;jumping=false;onBoard=true;boardID=i;
}
}
for(int i=9;i>0;i--){
bubblex[i]=bubblex[i-1];
bubbley[i]=bubbley[i-1];
ellipse(bubblex[i]+150-bgx,bubbley[i],10,10);
}
bubblex[0]=bgx;
bubbley[0]=usery;
if(gameOver==false){
score=millis()/1000;
fill(0);
text("score: "+score,200,50);
}
else if(gameOver){
background(0);
fill(255,0,0);
text("Goog luck next time!",100,100);
text("score: "+score,200,150);
}
}
boolean jumping=false;
void keyPressed(){
if(jumping==false){
jumping=true;
vy=-10;
}
}
boolean collision(){
boolean b1=insideTriangle(150,usery);
boolean b2=insideTriangle(200,usery);
boolean b3=insideTriangle(200,usery+50);
boolean b4=insideTriangle(150,usery+50);
if(b1 || b2 || b3 || b4) return true;
else return false;
}
boolean insideTriangle(float x,float y){
float c1=cross(x,y,badx[now]-bgx,310,badx[now]-25-bgx,350);
float c2=cross(x,y,badx[now]-25-bgx,350,badx[now]+25-bgx,350);
float c3=cross(x,y,badx[now]+25-bgx,350,badx[now]-bgx,310);
if(c1>=0 && c2>=0 && c3>=0) return true;
else return false;
}
float cross(float xp,float yp,float x0,float y0,float x1,float y1){
return (xp-x0)*(y1-y0)-(yp-y0)*(x1-x0);
}
沒有留言:
張貼留言