2019年1月3日 星期四
Week 17 Hankins
期末作品展示:
將期中作品:猴子打怪物 延續,新增了音效,並且在過Menu上做了一個小設計:猴子會自己有規律的跳動,這個靈感是因為小時候的一些經典遊戲,算是一種致敬吧~ 利用搖桿來操控猴子的移動,按下搖桿按鈕即可發射球球。 遊戲規則: 遊戲時間30秒,猴子可以在發射出球球後,用自己的頭來將球球頂起來,控制球球自由落體的方向,來擊敗怪物。 藍怪100分,紅怪500分,綠怪1000分。 賣點: 當初在設計是為了向上個世紀的遊戲致敬,因此在遊戲風格,照片,背景音樂,背景音效的選擇上都採用復古風,以及開頭時小猴子會自己跳動的設計也是源自於復古小遊戲。
將期中作品:猴子打怪物 延續,新增了音效,並且在過Menu上做了一個小設計:猴子會自己有規律的跳動,這個靈感是因為小時候的一些經典遊戲,算是一種致敬吧~ 利用搖桿來操控猴子的移動,按下搖桿按鈕即可發射球球。 遊戲規則: 遊戲時間30秒,猴子可以在發射出球球後,用自己的頭來將球球頂起來,控制球球自由落體的方向,來擊敗怪物。 藍怪100分,紅怪500分,綠怪1000分。 賣點: 當初在設計是為了向上個世紀的遊戲致敬,因此在遊戲風格,照片,背景音樂,背景音效的選擇上都採用復古風,以及開頭時小猴子會自己跳動的設計也是源自於復古小遊戲。
QAQ筆記 WEEK17
期末展示
我們覺得最大的困難點是要把PROCESSING跟ARDUINO做結合,因為需要花很多的耐心跟時間
要先搞懂如何接板子,再來搞懂要如何把正確的Arduino程式碼上傳到板子,最後是將Arduino連接上Processing
分別要把玩家一跟玩家二的炸彈還有移動方式分開寫,有點困難,我們摸索很久雖然有做出來但不完整,之後還是請教老師了
如何操作:玩家一使用Player1搖桿箱,玩家二使用Player2搖桿箱的搖桿來操作上下左右,遙桿按下則放出炸彈
賣點是很適合兩人玩,增進感情。
要先搞懂如何接板子,再來搞懂要如何把正確的Arduino程式碼上傳到板子,最後是將Arduino連接上Processing
分別要把玩家一跟玩家二的炸彈還有移動方式分開寫,有點困難,我們摸索很久雖然有做出來但不完整,之後還是請教老師了
如何操作:玩家一使用Player1搖桿箱,玩家二使用Player2搖桿箱的搖桿來操作上下左右,遙桿按下則放出炸彈
賣點是很適合兩人玩,增進感情。
實際玩遊戲的樣子(用搖桿操控上下左右,按下搖桿的按鈕即可放出炸彈)
總結:
雖然最後操控部分還是有請教老師,但看到結果蠻成功而且還有被同學票選加到分
真的很有成就感很開心~~~~~~
不過按鈕的部分沒有弄到理想中的樣子有點可惜,可能之後再自己完成吧哈哈
2019年1月2日 星期三
Week17 夏玉庭
期末作品
作品名稱:踩踩黑塊
https://youtu.be/S77Dsol-niU
操作說明:
1.按下一頁按鍵進入說明畫面
2.進入說明畫面5秒後自動換下一頁
3.依序歌單順序使用鍵盤123鍵選擇歌曲
4.進入操作說明按下一頁按鍵進入音樂遊戲
5.左邊第一行開始依序按鍵左到右,當方塊到達下方綠色區塊的同時你按下了按鍵,就可以獲得分數,若秒數尚未結束可以按Q鍵提前跳出遊戲畫面
6.看完成績後按下一頁按鍵進入記憶翻牌遊戲的圖片記憶畫面,音樂遊戲的分數會影響到記憶時間,秒數倒數結束即可開始翻牌。
我們延續期中作品踩踩黑塊來結合Arduino,期中時老師提到遊戲沒有輸贏或是分數上的高低差別,所以我們另外加入了一個記憶翻牌小遊戲,遊戲中圖片記憶時間會依據音樂遊戲分數高低來加秒數,成功完成翻牌遊戲和失敗會有不同的圖片在最後顯示。
困難點→當初接觸Arduino時,因為沒有很了解所以有點不知道怎麼做,後來上網學習和詢問老師後有成功完成。
賣點→不但能讓玩家聽音樂動動手指,還能考驗一點玩家的記憶力。
作品名稱:踩踩黑塊
https://youtu.be/S77Dsol-niU
操作說明:
1.按下一頁按鍵進入說明畫面
2.進入說明畫面5秒後自動換下一頁
3.依序歌單順序使用鍵盤123鍵選擇歌曲
4.進入操作說明按下一頁按鍵進入音樂遊戲
5.左邊第一行開始依序按鍵左到右,當方塊到達下方綠色區塊的同時你按下了按鍵,就可以獲得分數,若秒數尚未結束可以按Q鍵提前跳出遊戲畫面
6.看完成績後按下一頁按鍵進入記憶翻牌遊戲的圖片記憶畫面,音樂遊戲的分數會影響到記憶時間,秒數倒數結束即可開始翻牌。
我們延續期中作品踩踩黑塊來結合Arduino,期中時老師提到遊戲沒有輸贏或是分數上的高低差別,所以我們另外加入了一個記憶翻牌小遊戲,遊戲中圖片記憶時間會依據音樂遊戲分數高低來加秒數,成功完成翻牌遊戲和失敗會有不同的圖片在最後顯示。
困難點→當初接觸Arduino時,因為沒有很了解所以有點不知道怎麼做,後來上網學習和詢問老師後有成功完成。
賣點→不但能讓玩家聽音樂動動手指,還能考驗一點玩家的記憶力。
2019年1月1日 星期二
Week16 呆江與泓丞的期末作品
製作期末作品
1.關卡設計
基於我們的按鈕僅買了4個,所以我們把關卡改成3關2.設計上的改變
(1)考慮新增LED紅燈當生命值(2)增加障礙怪物
3.修正的問題
(1)轉場(2)怪物吸起來卡卡
裝置圖

基本架構都跟上周提及的差不多,但在期末展示的時候我們沒有展示到一些內容,
透過部落格跟大家分享一下我們遇到的狀況......
1.紅色LED燈怎麼沒在裝置上
因為製作的時候我們把盒子弄壞了,所以緊急製作了簡易裝製上台2.障礙怪物並沒有出現
我們嘗試新增2隻障礙怪物在場上的時候,發現會有掉貞的狀況,為了不要讓我們的作品看起來節奏太過緩慢,沒有把這個功能拿出來展示刪除上面題及的遊戲機制後,整個遊戲雖然很流暢,
但缺少了死亡的可能,會讓人覺得很乏味
雖然起初確實是要製作讓人放鬆的小遊戲,但少了死掉的條件還真的玩久了會無聊
最後,分享一下我們的程式碼
Processing:
//charactersPImage[] imgBG=new PImage[7]; PImage[] imgKirby=new PImage[4]; PImage[] imgMonster=new PImage[6];
float [] MonsterX = new float[80]; float [] MonsterY = new float[80];
float MonsterVX=8 ; float [] MonsterVY = new float[80];
//Die Monster
float DieX; float DieY; float DieVX=8; float DieVY;
//reboorn
boolean [] MonsterDie = new boolean[80];
float [] MonsterDieVX = new float[80]; float [] MonsterDieVY = new float[80];
//change bg
int c=1;
//store score
int score=0; int score2=0; int score3=0;
import processing.serial.*;
Serial myPort;
int val;
import ddf.minim.*;
Minim minim;
AudioPlayer player;
//reborn monster
void reborn(int i){
MonsterDie[i] = false;
MonsterX[i] = -random(1000); MonsterY[i] = random(30,630);
}
void reborn2(int i){
MonsterDie[i] = false;
MonsterX[i] = random(1300,2500); MonsterY[i] = random(30,630);
}
//level change
void level(int a){
if(a>=30){
for(int i=0; i<40; i++){
MonsterX[i] = -random(1000); MonsterY[i] = random(30,630);
MonsterVY[i] = random(-1,2);
MonsterDie[i] = false;
}
for(int i=40;i<80;i++){
MonsterX[i] = random(1300,2500); MonsterY[i] = random(30,630);
MonsterVY[i] = random(-1,2);
MonsterDie[i] = false;
}
}
}
void setup(){
size(1280,720);
minim = new Minim(this);
player = minim.loadFile("kirby.mp3",2048);
player.play();
player.loop();
String portName = Serial.list()[0];
myPort = new Serial(this,"COM3", 9600);
//load background and characters
for(int i=0; i<3; i++){
imgBG[i] = loadImage("bg0"+i+".jpg");
}
imgBG[3] = loadImage("lv01.jpg");
imgBG[4] = loadImage("lv02.jpg");
imgBG[5] = loadImage("bg.jpg");
for(int i=0; i<4; i++){
imgKirby[i] = loadImage((i+1)+".png");
}
for(int i=0; i<6; i++){
imgMonster[i] = loadImage("00"+(i+1)+".png");
}
//stat bg & text
image(imgBG[0],width/500,height/300,width,height);
fill(30,30,30);
rect(400,250,500,60,7);
textSize(50);
fill(255,255,255);
text("Press Space to Start",410,300);
//original coordinates
for(int i=0; i<40; i++){
MonsterX[i] = -random(1000); MonsterY[i] = random(30,630);
MonsterVY[i] = random(-1,2);
MonsterDie[i] = false;
}
for(int i=40;i<80;i++){
MonsterX[i] = random(1300,2500); MonsterY[i] = random(30,630);
MonsterVY[i] = random(-1,2);
MonsterDie[i] = false;
}
}
boolean check = true;
void draw(){
if (myPort.available() > 0) {
val = myPort.read();
}
if(val==1 && check==true){
check=false;
c++;
}
if(val==0 && check==false){
check=true;
}
//description bg
if(c==2) {
image(imgBG[1],width/500,height/300,width,height);
}
//game bg
if(c==3){
image(imgBG[2],width/500,height/300,width,height);
//level 1 Monster
for(int i=0;i<40;i++){
MonsterX[i] += MonsterVX;
image(imgMonster[0],MonsterX[i],MonsterY[i],90,90);
if(MonsterX[i] > 1200){
MonsterDie[i] = true;
reborn(i);
}
}
for(int i=40;i<80;i++){
MonsterX[i] -= MonsterVX;
image(imgMonster[4],MonsterX[i],MonsterY[i],90,90);
if(MonsterX[i] < 0){
MonsterDie[i] = true;
reborn2(i);
}
}
for(int i=0;i<80;i++){
if(val==2){
if(score<=30 && c==3){
MonsterDieVX[i] = (540-MonsterX[i])/8;
MonsterDieVY[i] = (450-MonsterY[i])/8;
if(dist(540,450,MonsterX[i],MonsterY[i])<300){
if(MonsterX[i]>620 && i < 40){
MonsterX[i]-=5;
MonsterY[i]+=MonsterDieVY[i];
}
if(MonsterX[i]<460 && i > 40){
MonsterX[i]+=25;
MonsterY[i]+=MonsterDieVY[i];
}
else{
MonsterX[i]+=MonsterDieVX[i];
MonsterY[i]+=MonsterDieVY[i];
}
}
if(dist(540,450,MonsterX[i],MonsterY[i])<80){
MonsterDie[i]=true;
score++;
reborn(i);
}
}
}
}
//level 1 Kirby(520,450)
image(imgKirby[0],520,450,120,120);
}
//level 1 Monster
if(score>=30 && c==3){
level(score);
image(imgBG[3],width/500,height/300,width,height);
}
if(c==4){
image(imgBG[2],width/500,height/300,width,height);
//level 2 Monster
for(int i=0;i<40;i++){
MonsterX[i] += MonsterVX;
image(imgMonster[0],MonsterX[i],MonsterY[i],90,90);
if(MonsterX[i] > 1200){
MonsterDie[i] = true;
reborn(i);
}
}
for(int i=40;i<80;i++){
MonsterX[i] -= MonsterVX;
image(imgMonster[4],MonsterX[i],MonsterY[i],90,90);
if(MonsterX[i] < 0){
MonsterDie[i] = true;
reborn2(i);
}
}
for(int i=0;i<80;i++){
if(val==2){
if(score<=60 && c==4){
MonsterDieVX[i] = (540-MonsterX[i])/8;
MonsterDieVY[i] = (450-MonsterY[i])/8;
if(dist(540,450,MonsterX[i],MonsterY[i])<300){
if(MonsterX[i]>620 && i < 40){
MonsterX[i]-=5;
MonsterY[i]+=MonsterDieVY[i];
}
if(MonsterX[i]<460 && i > 40){
MonsterX[i]+=25;
MonsterY[i]+=MonsterDieVY[i];
}
else{
MonsterX[i]+=MonsterDieVX[i];
MonsterY[i]+=MonsterDieVY[i];
}
}
if(dist(540,450,MonsterX[i],MonsterY[i])<80){
MonsterDie[i]=true;
score++;
reborn(i);
}
}
}
if(val==4){
if(score2<=30 && c==4){
MonsterDieVX[i] = (175-MonsterX[i])/8;
MonsterDieVY[i] = (150-MonsterY[i])/8;
if(dist(175,150,MonsterX[i],MonsterY[i])<300){
if(MonsterX[i]>255 && i < 40){
MonsterX[i]-=5;
MonsterY[i]+=MonsterDieVY[i];
}
if(MonsterX[i]<95 && i > 40){
MonsterX[i]+=25;
MonsterY[i]+=MonsterDieVY[i];
}
else{
MonsterX[i]+=MonsterDieVX[i];
MonsterY[i]+=MonsterDieVY[i];
}
}
if(dist(175,150,MonsterX[i],MonsterY[i])<80){
MonsterDie[i]=true;
score2++;
reborn(i);
}
}
}
}
//level 2 Kirby(175,150)
image(imgKirby[0],520,450,120,120);
image(imgKirby[1],175,150,120,120);
}
if(score>=60 && score2>=30 && c==4){
level(score2);
image(imgBG[4],width/500,height/300,width,height);
}
if(c==5){
image(imgBG[2],width/500,height/300,width,height);
//level 3 Monster
for(int i=0;i<40;i++){
MonsterX[i] += MonsterVX;
image(imgMonster[0],MonsterX[i],MonsterY[i],90,90);
if(MonsterX[i] > 1200){
MonsterDie[i] = true;
reborn(i);
}
}
for(int i=40;i<80;i++){
MonsterX[i] -= MonsterVX;
image(imgMonster[4],MonsterX[i],MonsterY[i],90,90);
if(MonsterX[i] < 0){
MonsterDie[i] = true;
reborn2(i);
}
}
//level 3 Kirby(1000,300)
image(imgKirby[0],520,450,120,120);
image(imgKirby[1],175,150,120,120);
image(imgKirby[2],1000,300,120,120);
for(int i=0;i<80;i++){
if(val==2){
if(score<=90 && c==5){
MonsterDieVX[i] = (540-MonsterX[i])/8;
MonsterDieVY[i] = (450-MonsterY[i])/8;
if(dist(540,450,MonsterX[i],MonsterY[i])<300){
if(MonsterX[i]>620 && i < 40){
MonsterX[i]-=5;
MonsterY[i]+=MonsterDieVY[i];
}
if(MonsterX[i]<460 && i > 40){
MonsterX[i]+=25;
MonsterY[i]+=MonsterDieVY[i];
}
else{
MonsterX[i]+=MonsterDieVX[i];
MonsterY[i]+=MonsterDieVY[i];
}
}
if(dist(540,450,MonsterX[i],MonsterY[i])<80){
MonsterDie[i]=true;
score++;
reborn(i);
}
}
}
if(val==4){
if(score2<=60 && c==5){
MonsterDieVX[i] = (175-MonsterX[i])/8;
MonsterDieVY[i] = (150-MonsterY[i])/8;
if(dist(175,150,MonsterX[i],MonsterY[i])<300){
if(MonsterX[i]>255 && i < 40){
MonsterX[i]-=5;
MonsterY[i]+=MonsterDieVY[i];
}
if(MonsterX[i]<95 && i > 40){
MonsterX[i]+=25;
MonsterY[i]+=MonsterDieVY[i];
}
else{
MonsterX[i]+=MonsterDieVX[i];
MonsterY[i]+=MonsterDieVY[i];
}
}
if(dist(175,150,MonsterX[i],MonsterY[i])<80){
MonsterDie[i]=true;
score2++;
reborn(i);
}
}
}
if(val==5){
if(score3<=30 && c==5){
MonsterDieVX[i] = (1000-MonsterX[i])/8;
MonsterDieVY[i] = (300-MonsterY[i])/8;
if(dist(1000,300,MonsterX[i],MonsterY[i])<300){
if(MonsterX[i]>1000 && i < 40){
MonsterX[i]-=5;
MonsterY[i]+=MonsterDieVY[i];
}
if(MonsterX[i]<1000 && i >= 40){
MonsterX[i]+=25;
MonsterY[i]+=MonsterDieVY[i];
}
else{
MonsterX[i]+=MonsterDieVX[i];
MonsterY[i]+=MonsterDieVY[i];
}
}
if(dist(1000,300,MonsterX[i],MonsterY[i])<80){
MonsterDie[i]=true;
score3++;
reborn(i);
}
}
}
}
}
if(score>=90 && score2>=60 && score3>=30 && c==5){
level(score3);
image(imgBG[5],width/500,height/300,width,height);
}
}
訂閱:
文章 (Atom)





