聆聽輕快的音樂再搭配上緊張刺激的跑酷遊戲!💥
Geometry Dash是我很喜歡玩的遊戲💗
每次死掉重來都令人懊惱但又激發了玩家不服輸的性格😈
雖然我們的重製沒能做出像原作般與音樂的完美契合
但緊張刺激的跑酷部分還是有還原到😱
也搭配上原作的首關音樂
希望可以讓更多人認識這款遊戲🙏🙏
上鍵跳躍
下鍵作弊模式(不死)
每20分換背景與更新評價 40分封頂
隨著遊戲進行速度會越來越快
遊戲影片:
前面是正常遊玩 後半部作弊模式看40分以上
程式碼這邊看👈
import ddf.minim.*; Minim minim; AudioPlayer bgm,jump,gameover; PImage img1,img2,img3,img4,img5,img6,img7; PFont myFont; float []badx,bubblex,bubbley,boardx,boardy,boardw,hboardx,hboardy,hboardw,trix,triy,rx,ry,md,mdt; int now,score,now2; int boardID=0; int hboardID=0; int rID=0; void setup(){ size(600,400); myFont = createFont("微軟正黑體",30); img1=loadImage("bg.jpg"); img2=loadImage("gg.png"); img3=loadImage("good.png"); img4=loadImage("bg2.jpg"); img5=loadImage("bg3.png"); img6=loadImage("start.jpg"); img7=loadImage("block.png"); minim = new Minim(this); gameover = minim.loadFile("gameover.wav"); jump = minim.loadFile("jump.mp3"); bgm = minim.loadFile("BGMG.mp3"); textSize(40); badx=new float[1000]; badx[0]=350+250; for(int i=1;i<1000;i++){ if(i%5==0 || i%8==0 || i%11==0) {badx[i]=badx[i-1]+random(200,300);} else {badx[i]=badx[i-1]+random(50,55);} } boardx=new float[100]; boardx[0]=380+250; for(int i=1;i<100;i++){ boardx[i]=boardx[i-1]+random(360,440); } boardy=new float[100]; boardy[0]=260; for(int i=1;i<100;i++){ if(boardy[i-1]>=270){boardy[i]=boardy[i-1]-20;} else if(boardy[i-1]<=230){boardy[i]=boardy[i-1]+20;} else boardy[i]=boardy[i-1]+random(-20,10); } boardw=new float[100]; boardw[0]=140; for(int i=1;i<100;i++){ boardw[i]=boardw[i-1]+random(-20,10); if(boardw[i-1]<=80){boardw[i]=boardw[i-1]+30;} } hboardx=new float[90]; //hboardx[0]=boardx[2]+160; for(int i=0;i<90;i++){ //hboardx[i]=hboardx[i-1]+random(300,380); hboardx[i]=boardx[i+2]+random(200,210); } trix=new float[180]; for(int i=0;i<180;i++){ if(i%2==0) trix[i]=hboardx[i/2]+50; else trix[i]=hboardx[(i-1)/2]+50+50; } hboardy=new float[90]; hboardy[0]=150; for(int i=1;i<90;i++){ if(hboardy[i-1]>=170){hboardy[i]=hboardy[i-1]-20;} else if(hboardy[i-1]<=120){hboardy[i]=hboardy[i-1]+20;} else hboardy[i]=hboardy[i-1]+random(-20,10); } triy=new float[180]; triy[0]=150+20; for(int i=1;i<180;i++){ if(i%2==0) triy[i]=hboardy[i/2]+20; else triy[i]=hboardy[(i-1)/2]+20; } hboardw=new float[90]; hboardw[0]=150; for(int i=1;i<90;i++){ hboardw[i]=hboardw[i-1]; } rx=new float[50]; for(int i=0;i<50;i++){ rx[i]=boardx[i+8]+boardw[i+8]+10; } ry=new float[50]; for(int i=0;i<50;i++){ ry[i]=170; } md=new float[90]; for(int i=0;i<90;i++){ md[i]=random(0.3,0.6); } mdt=new float[180]; for(int i=0;i<180;i++){ mdt[i]=(md[i/2]/0.4001)*0.1335; } 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, speed=0; //md=0.4001,mdt=0.1335; boolean gameOver=false; boolean onBoard=false; boolean onhBoard=false; boolean onr=false; int condition=0; int wait=0; void mousePressed(){///場景切換 if (mouseButton == LEFT) condition=1; } void draw(){ if(condition==0){ image(img6,0,0,600,400); fill(255); text("按下滑鼠左鍵開始遊戲",150,50); text("上鍵跳躍 下鍵無敵",170,350); textFont(myFont); wait=millis()/1000; } if(condition==1){ if(gameOver && hacking==false) bgm.pause(); else bgm.play(); if(score>=0 && score<30) image(img1,0,0,600,400); if(score>=20 && score<40) image(img4,0,0,600,400); if(score>=40) image(img5,0,0,600,400); speed=(score/4)*0.2; bgx=bgx+3+speed; fill(#F5ADCF); for(int i=0;i<1000;i++){ now=i; if(collision()) gameOver=true; triangle(badx[i]-bgx,310,badx[i]-25-bgx,350,badx[i]+25-bgx,350); } fill(#F5ADCF); for(int i=0;i<180;i++){ now2=i; if(collision2()) gameOver=true; triangle(trix[i]+25-bgx,(triy[i]+=mdt[i])+40,trix[i]-bgx,triy[i]+=mdt[i],trix[i]+50-bgx,triy[i]+=mdt[i]); if(triy[i]<130) mdt[i]=abs(mdt[i]); if(triy[i]>280) mdt[i]=-abs(mdt[i]); } fill(#003E6C); rect(0,350,600,400); fill(#FFEC17); image(img7,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; } } fill(#AD0051); for(int i=0;i<90;i++){ hboardy[i]+=md[i]; rect(hboardx[i]-bgx,hboardy[i],hboardw[i],20); if(hboardy[i]<110) md[i]=abs(md[i]); if(hboardy[i]>260) md[i]=-abs(md[i]); if(hboardID==i){ if(onhBoard==true && (hboardx[i]+hboardw[i]<150+bgx) ){ onhBoard=false;jumping=true; } } if(jumping && usery+50<hboardy[i] && usery+50+vy>hboardy[i] && hboardx[i]<150+50+bgx && 150+bgx<hboardx[i]+hboardw[i]){ usery=hboardy[i]-50;vy=0;jumping=false;onhBoard=true;hboardID=i; } } if(onhBoard==true) usery+=md[hboardID]; fill(#AD0051); for(int i=0;i<50;i++){ rect(rx[i]-bgx,ry[i],70,20); if(rID==i){ if(onr==true && (rx[i]+70<150+bgx) ){ onr=false;jumping=true; } } if(jumping && usery+50<ry[i] && usery+50+vy>ry[i] && rx[i]<150+50+bgx && 150+bgx<rx[i]+70){ usery=ry[i]-50;vy=0;jumping=false;onr=true;rID=i; } } for(int i=9;i>0;i--){ bubblex[i]=bubblex[i-1]; bubbley[i]=bubbley[i-1]; fill(#FFF586); rect(bubblex[i]+150-bgx,bubbley[i]+40,10,10); } bubblex[0]=bgx; bubbley[0]=usery; if(hacking){ fill(255,0,0); text("作弊中",150,100); } if(gameOver==false || hacking){ score=millis()/1000-wait; if(score<20) text("分數: "+score+"分 你好菜",150,50); else if(score<40) text("分數: "+score+"分 還不錯",150,50); else if(score>=40) text("分數: "+score+"分 不可思議",150,50); } else if(gameOver && hacking==false){ gameover.play(); background(255); image(img2,0,0,600,350); fill(255,0,0); if(score<20) text("評價:你好菜",220,50); else if(score<40) text("評價:還不錯",220,50); else if(score>=40) text("評價:不可思議",220,50); text("最終得分: "+score+"分",200,350); } } } boolean jumping=false; boolean hacking=false; void keyPressed(){ if(keyCode==DOWN){ if(hacking==false){ hacking=true; } } if(keyCode==UP){ jump.rewind(); jump.play(); 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; } boolean collision2(){ boolean t1=insideTriangle2(150,usery); boolean t2=insideTriangle2(200,usery); boolean t3=insideTriangle2(200,usery+50); boolean t4=insideTriangle2(150,usery+50); if(t1 || t2 || t3 || t4) return true; else return false; } boolean insideTriangle2(float x,float y){ float tc1=cross(x,y,trix[now2]+25-bgx,triy[now2]+40,trix[now2]-bgx,triy[now2]); float tc2=cross(x,y,trix[now2]-bgx,triy[now2],trix[now2]+50-bgx,triy[now2]); float tc3=cross(x,y,trix[now2]+50-bgx,triy[now2],trix[now2]+25-bgx,triy[now2]+40); if(tc1<=0 && tc2<=0 && tc3<=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); }
沒有留言:
張貼留言