🔺期中作品
05160080 黃惠嘉
05160213 黃登煜
YouTube連結:
https://www.youtube.com/watch?v=zNcujIiCDS4&feature=youtu.be
說明:RiseUp是一個保護熱氣球的一個遊戲,右鍵按下開始按鈕就可以進入遊戲,利用滑鼠可以反彈敵人(石頭),為了增加難度,高度每超過70m*N敵人會越來越多,使玩家會更有挑戰性,當玩家打倒300個敵人後,會進入Goodjob畫面,如果無法打倒300個敵人,就會進入End的畫面並保留最佳成績,藉由高度越高敵人越多的小遊戲,會讓玩家想一而再的挑戰。
🔺期中作品程式碼
float balloonX=450,balloonY=700;
PImage imgbadsky,imgballoon,imgghost,imgdie;
PImage imgstartsky,imgcloud,imgstartbutton,imgdieballoon;
PImage imgfrisbee,imgriseup,imgsky,imgstone,imgback;
float []cloudX =new float[300];
float []cloudY =new float[300];
float []stoneX = new float[300];
float []stoneY = new float[300];
float []stoneVX = new float[300];
float []stoneVY = new float[300];
boolean []stoneFlying = new boolean[300];
int state=0;
import ddf.minim.*;
Minim minim;
AudioPlayer player1,player2,player3,player4,player5;
void reborn(int i){
int direction=int(random(3));
if(direction==0){
stoneX[i]=0;
stoneY[i]=random(400);
}
else if(direction==1){
stoneX[i]=random(900);
stoneY[i]=0;
}else if(direction==2){
stoneX[i]=900;
stoneY[i]=random(400);
}
stoneVX[i]=(450-stoneX[i])/120;
stoneVY[i]=(700-stoneY[i])/120;
stoneFlying[i]=true;
}
void setup(){
size(900,900);
reborn(0);
imgbadsky=loadImage("badsky.jpg");
imgballoon=loadImage("balloon.png");
imgdieballoon=loadImage("dieballoon.png");
imgdie=loadImage("die.png");
imgfrisbee=loadImage("frisbee.png");
imgriseup=loadImage("riseup.png");
imgsky=loadImage("sky.jpg");
imgstartsky=loadImage("startsky.jpg");
imgcloud=loadImage("cloud.png");
imgstone=loadImage("stone.png");
imgghost=loadImage("ghost.png");
imgstartbutton=loadImage("startbutton.png");
imgback=loadImage("back.png");
imageMode(CENTER);
for(int i=0;i<300;i++){
cloudX[i]=random(0,900);
cloudY[i]= i*-100;
}
minim = new Minim(this);
player1 = minim.loadFile("GrandFantasia.mp3");
player2 = minim.loadFile("hit.mp3");
player3 = minim.loadFile("dieend.mp3");
player4 = minim.loadFile("HappyBackground.mp3");
player5 = minim.loadFile("WIN.mp3");
}
void draw(){
if(state==0){
Begin();
player5.pause();
player4.pause();
player1.play();
}else if(state==1){
Start();
player1.pause();
player4.play();
}else if(state==2){
End();
player4.pause();
player3.play();
}else if(state==3){
player4.pause();
player5.play();
Goodjob();
}
}
int i=0;
void Begin(){
background(255);
image(imgsky,width/2,height/2,width,height);
if(900+i>300){
image(imgballoon,400,900+i,500,500);
i-=10;
}
else image(imgballoon,400,300,500,500);
image(imgriseup,450,175,500,500);
image(imgstartbutton,450,700,200,150);
if(abs(mouseX- 450)<100 && abs(700-mouseY)<75){
if(mousePressed && (mouseButton == LEFT)){
player4.rewind();
state=1;
}
}
}
int z=0,a=500;
void Start(){
background(255);
if((a/50-10)<70){
if(frameCount%60==0){
for(int i=0;i<300;i++){
if(stoneFlying[i]==false){
reborn(i);
println("("+i);
break;
}
}
}
}
else if((a/50-10)<140){
if(frameCount%30==0){
for(int i=0;i<300;i++){
if(stoneFlying[i]==false){
reborn(i);
println("*"+i);
break;
}
}
}
}
else{
if(frameCount%20==0){
for(int i=0;i<300;i++){
if(stoneFlying[i]==false){
reborn(i);
println(i);
break;
}
}
}
}
if(z>9){
background(#81C7FB);
for(int i=0;i<300;i++){
image(imgcloud,cloudX[i],cloudY[i]+a,150,100);
}
a+=2;
}
z+=10;
image(imgballoon,balloonX,balloonY,300,300);
image(imgfrisbee,mouseX,mouseY,70,70);
for(int i=0;i<300;i++){
if(stoneFlying[i]==false) continue;
image(imgstone,stoneX[i],stoneY[i],100,100);
stoneX[i]+=stoneVX[i];
stoneY[i]+=stoneVY[i];
if(dist(stoneX[i],stoneY[i],450,700)<150){
player3.rewind();
stoneFlying[i]=false;
state=2;
break;
}
if(dist(mouseX,mouseY,stoneX[i],stoneY[i])<70){
player2.rewind();
player2.play();
float normalX = stoneX[i]-mouseX;
float normalY = stoneY[i]-mouseY;
float len =sqrt(normalX*normalX+normalY*normalY);
normalX/=len;
normalY/=len;
float dotlen = stoneVX[i]*normalX+stoneVY[i]*normalY;
stoneVX[i]=stoneVX[i]+ -2*(dotlen * normalX);
stoneVY[i]=stoneVY[i]+ -2*(dotlen * normalY);
float pushLen =(50+35-len);
stoneY[i]+= normalY*pushLen;
stoneX[i]+= normalX*pushLen;
if(i==299) {
player5.rewind();
state=3;
}
}
}
fill(#E68EFF); textSize(80); text((a/50-10)+"m", 30,80);
}
int w=0;
void End(){
image(imgbadsky,width/2,height/2,width,height);
image(imgdie,700,600,300,300);
image(imgghost,500-w,400,300,300);
image(imgback,800,800,100,100);
if(dist(mouseX,mouseY,800,800)<50){
if(mousePressed && (mouseButton == LEFT)){
player1.rewind();
state=0;
a=500;
w=0;
i=0;
reborn(0);
}
}
fill(#AABCEA); textSize(80); text("best score:"+(a/50-10)+"m", 150,400);
w+=10;
}
void Goodjob(){
background(255);
image(imgsky,width/2,height/2,width,height);
if(900+i>300){
image(imgballoon,400,900+i,500,500);
i-=10;
}
else image(imgballoon,400,300,500,500);
image(imgback,800,800,100,100);
if(dist(mouseX,mouseY,800,800)<50){
if(mousePressed && (mouseButton == LEFT)){
player1.rewind();
state=0;
}
}
fill(#FF0000); textSize(80); text("Good job~~", 200,650);
}
05160080 黃惠嘉
05160213 黃登煜
YouTube連結:
https://www.youtube.com/watch?v=zNcujIiCDS4&feature=youtu.be
說明:RiseUp是一個保護熱氣球的一個遊戲,右鍵按下開始按鈕就可以進入遊戲,利用滑鼠可以反彈敵人(石頭),為了增加難度,高度每超過70m*N敵人會越來越多,使玩家會更有挑戰性,當玩家打倒300個敵人後,會進入Goodjob畫面,如果無法打倒300個敵人,就會進入End的畫面並保留最佳成績,藉由高度越高敵人越多的小遊戲,會讓玩家想一而再的挑戰。
🔺期中作品程式碼
float balloonX=450,balloonY=700;
PImage imgbadsky,imgballoon,imgghost,imgdie;
PImage imgstartsky,imgcloud,imgstartbutton,imgdieballoon;
PImage imgfrisbee,imgriseup,imgsky,imgstone,imgback;
float []cloudX =new float[300];
float []cloudY =new float[300];
float []stoneX = new float[300];
float []stoneY = new float[300];
float []stoneVX = new float[300];
float []stoneVY = new float[300];
boolean []stoneFlying = new boolean[300];
int state=0;
import ddf.minim.*;
Minim minim;
AudioPlayer player1,player2,player3,player4,player5;
void reborn(int i){
int direction=int(random(3));
if(direction==0){
stoneX[i]=0;
stoneY[i]=random(400);
}
else if(direction==1){
stoneX[i]=random(900);
stoneY[i]=0;
}else if(direction==2){
stoneX[i]=900;
stoneY[i]=random(400);
}
stoneVX[i]=(450-stoneX[i])/120;
stoneVY[i]=(700-stoneY[i])/120;
stoneFlying[i]=true;
}
void setup(){
size(900,900);
reborn(0);
imgbadsky=loadImage("badsky.jpg");
imgballoon=loadImage("balloon.png");
imgdieballoon=loadImage("dieballoon.png");
imgdie=loadImage("die.png");
imgfrisbee=loadImage("frisbee.png");
imgriseup=loadImage("riseup.png");
imgsky=loadImage("sky.jpg");
imgstartsky=loadImage("startsky.jpg");
imgcloud=loadImage("cloud.png");
imgstone=loadImage("stone.png");
imgghost=loadImage("ghost.png");
imgstartbutton=loadImage("startbutton.png");
imgback=loadImage("back.png");
imageMode(CENTER);
for(int i=0;i<300;i++){
cloudX[i]=random(0,900);
cloudY[i]= i*-100;
}
minim = new Minim(this);
player1 = minim.loadFile("GrandFantasia.mp3");
player2 = minim.loadFile("hit.mp3");
player3 = minim.loadFile("dieend.mp3");
player4 = minim.loadFile("HappyBackground.mp3");
player5 = minim.loadFile("WIN.mp3");
}
void draw(){
if(state==0){
Begin();
player5.pause();
player4.pause();
player1.play();
}else if(state==1){
Start();
player1.pause();
player4.play();
}else if(state==2){
End();
player4.pause();
player3.play();
}else if(state==3){
player4.pause();
player5.play();
Goodjob();
}
}
int i=0;
void Begin(){
background(255);
image(imgsky,width/2,height/2,width,height);
if(900+i>300){
image(imgballoon,400,900+i,500,500);
i-=10;
}
else image(imgballoon,400,300,500,500);
image(imgriseup,450,175,500,500);
image(imgstartbutton,450,700,200,150);
if(abs(mouseX- 450)<100 && abs(700-mouseY)<75){
if(mousePressed && (mouseButton == LEFT)){
player4.rewind();
state=1;
}
}
}
int z=0,a=500;
void Start(){
background(255);
if((a/50-10)<70){
if(frameCount%60==0){
for(int i=0;i<300;i++){
if(stoneFlying[i]==false){
reborn(i);
println("("+i);
break;
}
}
}
}
else if((a/50-10)<140){
if(frameCount%30==0){
for(int i=0;i<300;i++){
if(stoneFlying[i]==false){
reborn(i);
println("*"+i);
break;
}
}
}
}
else{
if(frameCount%20==0){
for(int i=0;i<300;i++){
if(stoneFlying[i]==false){
reborn(i);
println(i);
break;
}
}
}
}
if(z>9){
background(#81C7FB);
for(int i=0;i<300;i++){
image(imgcloud,cloudX[i],cloudY[i]+a,150,100);
}
a+=2;
}
z+=10;
image(imgballoon,balloonX,balloonY,300,300);
image(imgfrisbee,mouseX,mouseY,70,70);
for(int i=0;i<300;i++){
if(stoneFlying[i]==false) continue;
image(imgstone,stoneX[i],stoneY[i],100,100);
stoneX[i]+=stoneVX[i];
stoneY[i]+=stoneVY[i];
if(dist(stoneX[i],stoneY[i],450,700)<150){
player3.rewind();
stoneFlying[i]=false;
state=2;
break;
}
if(dist(mouseX,mouseY,stoneX[i],stoneY[i])<70){
player2.rewind();
player2.play();
float normalX = stoneX[i]-mouseX;
float normalY = stoneY[i]-mouseY;
float len =sqrt(normalX*normalX+normalY*normalY);
normalX/=len;
normalY/=len;
float dotlen = stoneVX[i]*normalX+stoneVY[i]*normalY;
stoneVX[i]=stoneVX[i]+ -2*(dotlen * normalX);
stoneVY[i]=stoneVY[i]+ -2*(dotlen * normalY);
float pushLen =(50+35-len);
stoneY[i]+= normalY*pushLen;
stoneX[i]+= normalX*pushLen;
if(i==299) {
player5.rewind();
state=3;
}
}
}
fill(#E68EFF); textSize(80); text((a/50-10)+"m", 30,80);
}
int w=0;
void End(){
image(imgbadsky,width/2,height/2,width,height);
image(imgdie,700,600,300,300);
image(imgghost,500-w,400,300,300);
image(imgback,800,800,100,100);
if(dist(mouseX,mouseY,800,800)<50){
if(mousePressed && (mouseButton == LEFT)){
player1.rewind();
state=0;
a=500;
w=0;
i=0;
reborn(0);
}
}
fill(#AABCEA); textSize(80); text("best score:"+(a/50-10)+"m", 150,400);
w+=10;
}
void Goodjob(){
background(255);
image(imgsky,width/2,height/2,width,height);
if(900+i>300){
image(imgballoon,400,900+i,500,500);
i-=10;
}
else image(imgballoon,400,300,500,500);
image(imgback,800,800,100,100);
if(dist(mouseX,mouseY,800,800)<50){
if(mousePressed && (mouseButton == LEFT)){
player1.rewind();
state=0;
}
}
fill(#FF0000); textSize(80); text("Good job~~", 200,650);
}
沒有留言:
張貼留言