我的作品也做得差不多了,這次做的作品是泡泡龍的小遊戲,雖然做了滿久的,但還是有些BUG存在。話不多說直接上程式碼吧ˊˇˋ
import ddf.minim.*;
Minim minim;
AudioPlayer BGM;
AudioPlayer GG;
AudioPlayer Hit;
PFont F;
float bx;//發射球之x座標
float by;//發射球之y座標
float bvx;//發射球之x方向速度
float bvy;//發射球之y方向速度
int bc = 0;//目前發射球之顏色
int []ec = new int [1000];//所有敵人顏色編號資料 *重要資料*
int bnext = 0;//下一顆發射球之顏色
int enemy[];//敵人數量,最多11行
float []ex = new float[1000];//所有敵人的x座標資料 *重要資料*
float []ey = new float[1000];//所有敵人的y座標資料 *重要資料*
//float []nx = new float [4];//發射球黏上敵人陣列後偵測上下左右敵人x座標 *重要資料*
//float []ny = new float [4];//發射球黏上敵人陣列後偵測上下左右敵人y座標 *重要資料*
boolean shoot = false;//觸發子彈發射
boolean appear;//觸發子彈繪製
float nearx = 10000;//距離發射求最近之敵人x座標 *重要資料*
float neary = 10000;//距離發射求最近之敵人y座標 *重要資料*
float near = 10000;//距離發射求最近之敵人歐幾理德距離 *重要資料*
int bulletsize = 50;//發射球之直徑參數 *重要資料*
int r = 50;//所有敵人之直徑參數 *重要資料*
int N = 0;//敵人總數
float []dx = new float[1000];//應該死掉的球x座標
float []dy = new float[1000];//應該死掉的球y座標
float []dc = new float[1000];//應該死掉的顏色標號
void setup(){
size(550 ,600);
minim=new Minim(this);
BGM=minim.loadFile("Video Game Blockbuste.mp3",1024);
BGM.play();
BGM.loop();
F = createFont("18thCentury" ,80);
for(int i = 0 ;i <= 70 ;i++){
ec[i] = int(random(1 ,5));//給予所有位址隨機1~5整數以作為上色標準,0為空格
}
for(int i = 1 ;i <= 7 ;i++){
for(int j = 1 ;j <= 10 ;j++){
N++;
ex[N-1] = j * r;ey[N-1] = i * r;
}
}
newbullet();
bnext = int(random(1 ,5));
}
void draw(){
background(#242DFF);
fill(#FFB624);rect(100 ,100 ,350 ,350);
for(int i = 0 ;i < N ;i++){
if(ec[i] == 1) {fill(#FC8585);ellipse(ex[i] ,ey[i] ,r ,r);}//紅
if(ec[i] == 2) {fill(#FAFA86);ellipse(ex[i] ,ey[i] ,r ,r);}//黃
if(ec[i] == 3) {fill(#86FA9C);ellipse(ex[i] ,ey[i] ,r ,r);}//綠
if(ec[i] == 4) {fill(#8696FA);ellipse(ex[i] ,ey[i] ,r ,r);}//藍
if(dist(bx ,by ,ex[i] ,ey[i]) < r){
shoot = false;
appear = false;
N++;
near = (dist(nearx * r ,neary * r ,bx ,by));
for(int k = 1 ;k <= 10 ;k++){
for(int l = 1 ;l <= 11 ;l++){
if(dist(l * r ,k * r ,bx ,by) < near){
nearx = l;
neary = k;
near = dist(nearx * r ,neary * r ,bx ,by);
ex[N-1] = nearx * r;
ey[N-1] = neary * r;
ec[N-1] = bc;
dx[N-1] = ex[N-1];
dy[N-1] = ey[N-1];
dc[N-1] = ec[N-1];
S_Hit();
if(ey[N-1] == 10 * r) {gameover();}
}
}
}
for(int a = N-2 ;a >= 0 ;a--){
if(ec[a] == dc[N-1] && dist(dx[N-1] ,dy[N-1] ,ex[a] ,ey[a]) <= 1.4*r){
println(ex[N-1] ,ey[N-1] ,ec[N-1]);
//ec[a] = 0;
ex[N-1] = 1000;
ey[N-1] = 1000;
dx[N-1] = ex[a];
dy[N-1] = ey[a];
ex[a] = 1000;
ey[a] = 1000;
}
}
for(int a = 0 ;a <= N-2 ;a++){
if(ec[a] == dc[N-1] && dist(dx[N-1] ,dy[N-1] ,ex[a] ,ey[a]) <= 1.4*r){
println(ex[a] ,ey[a] ,ec[a]);
//ec[a] = 0;
ex[N-1] = 1000;
ey[N-1] = 1000;
dx[N-1] = ex[a];
dy[N-1] = ey[a];
//dc[N-1] = ec[a];
ex[a] = 1000;
ey[a] = 1000;
}
}
newbullet();
}
if(ey[N-1] == 10 * r) {
gameover();
appear = false;
bnext = 0;
M_Stop();
break;
}
}
if(bnext == 1) {fill(#FC8585);ellipse(275,575 ,bulletsize ,bulletsize);}
if(bnext == 2) {fill(#FAFA86);ellipse(275,575 ,bulletsize ,bulletsize);}
if(bnext == 3) {fill(#86FA9C);ellipse(275,575 ,bulletsize ,bulletsize);}
if(bnext == 4) {fill(#8696FA);ellipse(275,575 ,bulletsize ,bulletsize);}
if(appear){
if(bc == 1) {fill(#FC8585);ellipse(bx,by ,bulletsize ,bulletsize);}
if(bc == 2) {fill(#FAFA86);ellipse(bx,by ,bulletsize ,bulletsize);}
if(bc == 3) {fill(#86FA9C);ellipse(bx,by ,bulletsize ,bulletsize);}
if(bc == 4) {fill(#8696FA);ellipse(bx,by ,bulletsize ,bulletsize);}
if(shoot){
bx+=bvx;
by+=bvy;
if(bx >= width-(bulletsize/2) || bx <= bulletsize/2) {bvx=-(bvx);S_Hit();}
if(by >= height-(bulletsize/2) || by <= bulletsize/2) {bvy=-(bvy);S_Hit();}
}
}
}
void newbullet(){
bx=275;
by=575;
}
void gameover(){
background(255);
fill(0);
textFont(F);
text("GAME OVER" ,100 ,300);
minim=new Minim(this);
GG=minim.loadFile("Sad Trombone.mp3",1024);
GG.play();
}
void nextbullet(){
bnext = int(random(1 ,5));
}
void M_Stop()
{
BGM.close();
minim.stop();
super.stop();
}
void S_Hit(){
minim=new Minim(this);
Hit=minim.loadFile("Pop sound effect.mp3",1024);
Hit.play();
}
void mousePressed(){
appear=true;
shoot=true;
bc = bnext;
float dx=mouseX-275, dy=mouseY-575;
float len=sqrt(dx*dx + dy*dy);
bvx = dx*10/len;
bvy = dy*10/len;
nextbullet();
}
這是遊戲的外觀:
大致上就是這樣,雖然該消的球似乎沒辦法每次都完整消光,音樂到後期好像也會有點問題,但遊戲性還是沒啥大問題,我應該還會用點時間把這部分完善,就這樣囉ˊˇˋ
沒有留言:
張貼留言