2022年11月28日 星期一

week13Ucc的互動技術概論筆記

 目前的成果展示

1.封面

=>有透過resize的方式讓圖片跟隨頁面變化

2.加入音樂

-在按封面頁的start後跳轉進遊戲頁面


(飛機是主角,上面是怪獸)

3.遊戲方法

-鍵盤的上下左右鍵是操控飛機

-空白鍵射出子彈(紅色)





4.視窗跳轉

-打贏時跳出YOU WIN的字樣


##目前程式碼
```
//射擊遊戲: 子彈
//飛機大戰 泡泡龍消消樂 泡泡射手 彈幕的遊戲 猫狗大戰
//Step01: 主角(keyboard)
//Step02: 子彈(自己移動)
//Step02-2: 子彈碰到敵人, 子彈消失, 敵人消失
//Step03: 很多子彈 很多離人'
import processing.sound.*;
SoundFile sound1;
PImage imgBG;//背景
PImage imgC;//封面
PImage imgMS1;//怪獸一
PImage imgMS2;//怪獸二
PImage boss;//大boss
PImage plane;//飛機
int stage=1;//開頭
void setup() {
  size(500, 500);
  imgC=loadImage("cover.png");
  imgBG=loadImage("background.jpg");
  imgMS1=loadImage("monster1.png");
  imgMS2=loadImage("monster2.png");
  boss=loadImage("boss.png");
  plane = loadImage("airplane.png");
  imgBG.resize(width, height);
  sound1=new SoundFile(this,"SW2.mp3");
}
int userX=250, userY=400, userVX=0, userVY=0;
int []bulletX=new int[1000];//更多子彈,就大一點
int []bulletY=new int[1000];
int []bulletVX=new int[1000];
int []bulletVY=new int[1000];
;
boolean []bulletFlying=new boolean[1000];
int bulletN=0;
int []enemyX={25, 125, 225, 325, 425};
int []enemyY={80, 80, 80, 80, 80};
int []enemyLife={3, 3, 3, 3, 3};
void draw() {
  if(stage==3){
    background(imgBG);
    textSize(40);
    text("YOU WIN!",190,240);
  }
  if (stage==1) {
    background(imgC);
    textSize(30);
    fill(#FFFFF2);
    rect(225, 225, 80, 30);
    fill(0,0,0);
    text("START", 225, 250);
    imgC.resize(width, height);
  }
  if (stage==2) {
    println(bulletN);
    background(imgBG);
    for (int k=0; k<5; k++) {//k敵人
      if (enemyLife[k]>0) {
        fill(0, 255, 0);
        //rect(enemyX[k], enemyY[k], 50,10);血條
        image(imgMS1, enemyX[k], enemyY[k], 80, 80);//怪獸本身
      }
      if(enemyLife[0]<=0 && enemyLife[1]<=0 &&enemyLife[2]<=0&&enemyLife[3]<=0&&enemyLife[4]<=0)
      stage=3;  
    }
    fill(255, 255, 0);
    ellipse(userX, userY, 8, 8);
    image(plane, userX-40, userY-40, 80, 80);//主角飛機
    userX += userVX;//人物動起來
    userY += userVY;//人物動起來
    for (int i=0; i<bulletN; i++) {
      if (bulletFlying[i]) {
        bulletX[i] += bulletVX[i];
        bulletY[i] += bulletVY[i];
        if ( bulletY[i]<0) recycleBullet(i);///當子彈i超過範圍, 回收再利用
        fill(255, 0, 0);
        ellipse( bulletX[i], bulletY[i], 6, 6);
        for (int k=0; k<5; k++) {
          if ( enemyLife[k]>0 && enemyX[k] <= bulletX[i] && bulletX[i] <= enemyX[k] + 75 && enemyY[k] <= bulletY[i] && bulletY[i] <= enemyY[k] + 75) {
            bulletFlying[i]=false;
            recycleBullet(i);///當子彈i超過範圍, 回收再利用
            enemyLife[k]--;
          }
        }
      }
    }
  }
}
void recycleBullet(int i) {//i子彈
  for (int k=i; k<1000-1; k++) {
    bulletX[k] = bulletX[k+1];//右邊移動過來
    bulletY[k] = bulletY[k+1];
    bulletVX[k] = bulletVX[k+1];
    bulletVY[k] = bulletVY[k+1];
    bulletFlying[k] = bulletFlying[k+1];
  }
  bulletN--;
}
void keyPressed() {
  if (keyCode==RIGHT) userVX=2;
  if (keyCode==LEFT) userVX=-2;
  if (keyCode==UP) userVY=-2;
  if (keyCode==DOWN) userVY=2;
  if (key==' ') {
    //println("add one");
    bulletN++;
    bulletFlying[bulletN-1]=true;
    bulletX[bulletN-1]=userX;
    bulletY[bulletN-1]=userY;
    bulletVY[bulletN-1] = -1;//往上射
  }
}
void keyReleased() {//放開就不會動了
  if (keyCode==RIGHT) userVX=0;
  if (keyCode==LEFT) userVX=0;
  if (keyCode==UP) userVY=0;
  if (keyCode==DOWN) userVY=0;
}
void mousePressed() {
  if(mouseX>=225&&mouseX<=305&&mouseY>=210&&mouseY<=240){
    if (stage==1)stage=2;
    sound1.play();
  }
}
```


沒有留言:

張貼留言