2018年11月1日 星期四

week08

期末作品展示_閃躲隕石

遊戲操作:
1.火箭(鼠標)移到地球上,點擊進入遊戲
2.利用鍵盤左右鍵移動,移動中綠綠外星人會變換動作以及表情
3.吃到盾牌可啟動無敵模式10秒(被隕石碰到不會死掉)
4.整個遊戲時間為60秒,進入
5.使用了四個音樂來增加玩的感覺(一般遊戲中的背景音樂,無敵模式的背景音樂,過關時的音樂,以及失敗時的音樂)
6.若順利撐過60秒,畫面切換到成功畫面(GOOD JOB)
7.若被隕石砸中則結束遊戲,畫面切換到失敗畫面(GAME OVER)
8.玩過遊戲後,若想再次挑戰,在成功/失敗畫面找到綠綠外星人並點擊,會回到一開始的地球畫面,再次點及地球即可重新玩。

賣點:
此遊戲中的所有畫面(遊戲背景、地球、火箭、隕石、盾牌、角色、數字)皆為親自手繪

困難點:
1.原本隕石都是直直落下,後來將一開始的位置和速度方向改變即可
2.將秒數倒數以圖片的方式呈現
3.原本火箭(鼠標)在遊戲畫面中任意位置按下都可以進入遊戲,後來將火箭(鼠標)移到特定位置點擊才有辦法進入遊戲畫面

https://www.youtube.com/watch?v=PQmqmMYmwJ4


week08_阿天天天

期中作品

作品名稱:炸彈超人(Morty版)

組員 : 05160486武煜川 , 05160806陳怡瑄

youtube連結 : https://youtu.be/w-F68enBSN8

遊戲玩法:
需要兩個人來操作競技 想辦法炸死對方取得勝利
右下是P1 分別用 'UP' 'DOWN' 'LEFT' 'RIGHT' 四個方向鍵控制對應方向 空白鍵是放炸彈
左上是P2 分別用 'W' 'A' 'S' 'D' 四個對應鍵控制方向 'Z'是放炸彈
地圖石頭隨機生成 需炸掉方能通過


Week 8

期中作品

組員:廖葆棠、林俐妏

我們做了一個馬力歐的2P射擊遊戲,
左邊的玩家使用WASD可以操控上下左右,
右邊的玩家則是使用↑↓←→控制;
射擊的鍵分別為空白鍵及Enter鍵。



Week08_05160664

Week08
期中作品展示
作品名稱:貓狗大戰
作品連結:https://www.youtube.com/watch?v=qXTpFrMss2I&feature=youtu.be
遊戲玩法:丟出骨頭丟貓貓和用貓罐頭丟狗狗

QAQ筆記 WEEK08

期中作業_炸彈超人

Week 8 期中作品分享

組員 : 05160806陳怡瑄,05160486武煜川

作品名稱 : 炸彈超人(Morty版)

作品連結 : https://youtu.be/w-F68enBSN8

遊戲玩法 : 用上下左右鍵控制右下角的Player,用WSAD鍵控制左上角的Player



程式碼如下:
import ddf.minim.*;
Minim minim;
AudioPlayer player;
PImage imgA, imgB, imgBG;
PImage imgBomb, imgRock, imgBombBG;
int [][]grid=new int[100][100];
void setup(){
  size(800, 640);
  minim = new Minim(this);
  player = minim.loadFile("sd.mp3");
  player.loop();
  imgBG = loadImage("bg.jpg");
  imgA = loadImage("player22.png");
  imgB = loadImage("player1.png");
  imgBomb = loadImage("bomb.png");
  imgRock = loadImage("rock.png");
  imgBombBG = loadImage("bombbg.jpg");
  grid[0][0]=3; grid[9][7]=4;
  grid[1][0]=3; grid[9][6]=4;
  grid[0][1]=3; grid[8][7]=4;
  for(int i=0;i<35;i++){
    int a=int(random(10)), b=int(random(10));
    while(grid[a][b]!=0){
      a=int(random(10)); b=int(random(10));
    }
     grid[a][b]=2;
     if(a==bombA[i] && b==bombB[i] || a==bombA[i]+1 && b==bombB[i] || a==bombA[i]-1 && b==bombB[i] || a==bombA[i] && b==bombB[i]+1 || a==bombA[i] && b==bombB[i]-1){
       grid[a][b]=0;
     }
  }
  grid[0][0]=0; grid[9][7]=0;
  grid[1][0]=0; grid[9][6]=0;
  grid[0][1]=0; grid[8][7]=0;
}

boolean boom=false;
int userA=9, userB=7;
int userC=0, userD=0;
int bombN=0;
int []bombA=new int[100];
int []bombB=new int[100];
int []bombS=new int[100];
int []bombT=new int[100];

void draw(){
  noStroke();
  image(imgBG,0,0,width,height);
  image(imgA,userA*80-20,userB*80-10,120,100);
  image(imgB,userC*80-5,userD*80-5,90,90);

  for(int i=0;i<bombN;i++){
    int a=bombA[i] , b=bombB[i];
    if(bombT[i]>0){
      grid[a][b]=1;
      image(imgBomb,bombA[i]*80+5, bombB[i]*80, 80, 80);
      bombT[i]--;
      if(bombT[i]==0)  bombT[i]=-30;
    }
    if(bombT[i]<0){
      for(int k=-bombS[i];k<=bombS[i];k++){
        image(imgBombBG,(bombA[i]+k)*80, (bombB[i])*80, 80, 80);
        image(imgBombBG,(bombA[i])*80, (bombB[i]+k)*80, 80, 80);
        grid[a][b]=0;
        if(grid[a+1][b]!=0){grid[a+1][b]=0;}
        if(a-1>=0){if(grid[a-1][b]!=0)grid[a-1][b]=0;}
        if(grid[a][b+1]!=0){grid[a][b+1]=0;}
        if(b-1>=0){if(grid[a][b-1]!=0)grid[a][b-1]=0;}

     
        if(userA==bombA[i] && userB==bombB[i] || userA==bombA[i]+1 && userB==bombB[i] || userA==bombA[i]-1 && userB==bombB[i] || userA==bombA[i] && userB==bombB[i]+1 || userA==bombA[i] && userB==bombB[i]-1)
        {boom=true;}
        if(userC==bombA[i] && userD==bombB[i] || userC==bombA[i]+1 && userD==bombB[i] || userC==bombA[i]-1 && userD==bombB[i] || userC==bombA[i] && userD==bombB[i]+1 || userC==bombA[i] && userD==bombB[i]-1)
        {boom=true;}
        if(userA==bombA[i] && userB==bombB[i] || userA==bombA[i]+1 && userB==bombB[i] || userA==bombA[i]-1 && userB==bombB[i] || userA==bombA[i] && userB==bombB[i]+1 || userA==bombA[i] && userB==bombB[i]-1){ userA=-3; userB=-3;}
        if(userC==bombA[i] && userD==bombB[i] || userC==bombA[i]+1 && userD==bombB[i] || userC==bombA[i]-1 && userD==bombB[i] || userC==bombA[i] && userD==bombB[i]+1 || userC==bombA[i] && userD==bombB[i]-1){ userC=-3; userD=-3;}
     
      }
      bombT[i]++;
    }
  }

  for(int x=0;x<10;x++){
    for(int y=0;y<8;y++){
      if(grid[x][y]==2) image(imgRock,x*80, y*80, 80, 80);
    }
  }

  if(boom){
    textSize(100);
    fill(#FF4800); text("GameOver", 150,200);
  }
}

void keyPressed(){
  if(keyCode==LEFT && userA-1>=0 && grid[userA-1][userB]==0) userA--;
  if(keyCode==RIGHT && userA+1<=9 && grid[userA+1][userB]==0) userA++;
  if(keyCode==UP && userB-1>=0 && grid[userA][userB-1]==0) userB--;
  if(keyCode==DOWN && userB+1<=7 && grid[userA][userB+1]==0) userB++;
  if(keyCode==' '){
    bombA[bombN]=userA;  bombB[bombN]=userB;
    bombS[bombN]=1;  bombT[bombN]=30;
    bombN++;
  }

  if(keyCode=='A' && userC-1>=0 && grid[userC-1][userD]==0) userC--;
  if(keyCode=='D' && userC+1<=9 && grid[userC+1][userD]==0) userC++;
  if(keyCode=='W' && userD-1>=0 && grid[userC][userD-1]==0) userD--;
  if(keyCode=='S' && userD+1<=7 && grid[userC][userD+1]==0) userD++;
  if(keyCode=='Z'){
    bombA[bombN]=userC;  bombB[bombN]=userD;
    bombS[bombN]=1;  bombT[bombN]=30;
    bombN++;
  }
 
}

Week8其中作業 鄭昕恬劉沛潔

期中作品



操作模式:
進到遊戲畫面後,點'1'開始遊戲,利用滑鼠控制忍者左右移動,
並按滑鼠左右鍵向惡鬼射出刀子,右下有個魔力條,當魔力用光
就輸了遊戲,而當殺鬼的分數到達設定值時,即遊戲勝利。

遊戲賣點:
利用可愛的忍者角色,結合最近的萬聖節,組合成一個有趣的組合
在符合氣氛的背景還有音效下,玩著此遊戲很符合過節的氣氛,雖
然遊戲名"砍殺惡鬼"聽起來帶有恐怖的感覺,但事實上卻是個可愛
趣味的遊戲。

程式碼:
import ddf.minim.*;
Minim minim;
AudioPlayer player;
PImage img;
PImage ninja;
PImage ninja01;
PImage ninja02;
PImage background02;
PImage background01;
PImage bullet;
PImage[] imgN=new PImage[10];
PImage monster;
int[]monsterlife=new int[100];
float[]bulletX =new float[100];
float[]bulletY =new float[100];
boolean []bulletAlive =new boolean[100];
float [] monsterX = new float[100];
float [] monsterY = new float[100];
boolean[] monsterDie= new boolean[100];
boolean win =false;
boolean lose = false;
int life=100;
float[]lineY=new float[1];
int state=0;
void setup() {
  minim= new Minim(this);
  player=minim.loadFile("music.mp3");
  player.play();
  player.loop();
  size(800, 600);
  for (int i=0; i<=9; i++) imgN[i] = loadImage(i+".png");
  background01=loadImage("background.jpg");
  background02=loadImage("background01.png");
  ninja=loadImage("ninja.png");
  ninja01=loadImage("ninja01.png");
  ninja02=loadImage("ninja02.png");
  bullet=loadImage("bullet.png");
  img=loadImage("soldier.png");
  monster=loadImage("monster.png");
  for (int i=0; i<100; i++) {
    monsterX[i]=random(0, 600);
    monsterY[i]=random(-1000, 2);
    monsterlife[i]=1;
    monsterDie[i]=false;
  }
}
void draw() {
  if(state==0){
    drawOP();
    if(key=='1')state=1;
    }
    else if(state==1){
      drawPlayer();
  }
 }
boolean flying=false;
int score=0;
void drawPlayer(){
  background(255);
  image(background01, 0, 0, 800, 600);
  fill(255);rect(630,480,100,20);
  fill(0,0,255);rect(630,480,life*1,20);
  //fill(255);rect(0,450,900,1);
  stroke(255);
  fill(255);
  image(img, mouseX-10, 450, 100, 150);
  for (int i=0; i<100; i++) {
    if (monsterDie[i])continue;
    image(monster, monsterX[i], monsterY[i], 90, 100);
    monsterY[i]+=1;
   // if (monsterY[i]>700) monsterY[i]=-2000+600;
  // if(monsterY[i]<lineY)life--;
 
  }

  for (int b=0; b<100; b++) {
    if (bulletAlive[b]) {
      fill(255, 255, 0);
      image(bullet, bulletX[b], bulletY[b], 60, 60);
      bulletY[b]-=7;
      for (int i=0; i<100; i++) {
        if (monsterX[i]<bulletX[b]&&bulletX[b]<monsterX[i]+40 && abs(bulletY[b]-monsterY[i])<30) {
          monsterlife[i]=0;
          score+=100;
          bulletAlive[b]=false;
          monsterDie[i]=true;
       
        }
        //fill(255);rect(630,480,100,20);
          //fill(255,0,0);rect(630,480,life,20);
          //if(monsterY[i]>500)life--;
      }
    }
  }

  int now=score;
  for (int i=0; i<5; i++) {
    image(imgN[(now%10)], 720-i*30, 520, 40, 40);
    now/=10;
  }
  //int now=blood;

  if (win) {
    background(255, 255, 255);
    image(background02, 0, 0, 800, 600);
    image(ninja, 100, 100, 300, 300);
    textSize(80);
    fill(255, 0, 0);
    text("YOU WIN!", 300, 300);
  }
  if (lose) {
    background(255, 255, 255);
    image(background02, 0, 0, 800, 600);
    image(ninja01, 100, 100, 300, 300);
    textSize(80);
    fill(255, 0, 0);
    text("YOU LOSE!", 300, 300);
  }
}
void drawOP(){
  background(255);
  image(background01, 0, 0, 800, 600);
  image(ninja02, 300, 150, 200, 300);
  text("you can press 1 to play...",170,240);
  textSize(40);
  fill(#8E7366);
}
void mousePressed() {
  life-=3;
  if (score>2000)win=true;
   if(life<0)lose=true;
  for (int now=0; now<100; now++) {
    if (bulletAlive[now] ==false) {
      bulletX[now]=mouseX;
      bulletY[now]=450;
      bulletAlive[now]=true;
      break;
    }
  }
}

遭遇困難:
我想最大的困難就是從無到有吧,從一開始沒什麼想法,到參考老師
的各種影片,把影片中的一些重點與自己的遊戲互相配合,從每個教學
影片都學到不同技巧,不管是有關場景還是遊戲中的偵測等等,寫出一個
遊戲真不是那麼容易,但也不像想像中那麼難,除了要一直創新和除錯
也要與共同的組員相互討論,還好最後還是靠著老師的影片、同學的發問
,在這之中了解了許多要點,才因此寫出屬於自己的遊戲。

Week08

Week08
Week08 期中作品分享
作品名稱:貓狗大戰
作品連結:https://www.youtube.com/watch?v=qXTpFrMss2I&feature=youtu.be
遊戲玩法:丟出骨頭丟貓貓和用貓罐頭丟狗狗