顯示具有 99160070_邱凱民 標籤的文章。 顯示所有文章
顯示具有 99160070_邱凱民 標籤的文章。 顯示所有文章

2015年1月25日 星期日

WEEK17


遊戲開始時,會從最上面開始一起掉落



會漸漸的區分為三排(三種速度)


全部清除或失敗時則要顯示計分和經過時間(尚未完成)

WEEK16

遊戲中會使用到的字母圖


WEEK15

置入大量圖片


設定圖片落下的速度及設定圖片XY之座標
         

設定按鍵事件及計分方式
(目前計分的程式碼有BUG)
                                                                         

WEEK12

學習如何用Arduino按鈕來作發出聲音或亮燈

這是一個在網路上的實例教學:有四個按鈕對應四個LED燈,程式會亂數點亮LED,要記住順序依序按下那四個按鈕,若對了就會發出成功的音效,錯了則發出失敗的音效,然後在繼續下一次。

接線如下:
1.從Arduino板的GND接到麵包板
2.Arduino腳位5接開關右上腳,開關佐下腳接地
3.Arduino腳為13接LED長腳,LED短腳接GND



完整電路圖如下


從Arduino板的GND接到麵包板。
先差上四個瞬時型開關,左下腳接地。右上腳,從左到右,接到5、4、3、2。


然後開關的左上腳接LED的短腳,LED的長腳接到100 ohm的電阻。


再然後,從左到右,電阻的另一腳,接到Arduino板的腳位11、10、9、8。



聲音的部分:從Arduino板的腳位Ao接到1k ohm可變電阻的左腳,中腳接蜂鳴器的紅線,蜂鳴器的黑線接地,將以這個可變電組調整音量。

程式碼以功能區塊劃分說明。

#define TONE_PIN A0 // 定義蜂鳴器的腳位
#define NUMBER 4 // 共有四個LED、四個開關

// 定義開關與LED的腳位
const int switches[NUMBER] = {5, 4, 3, 2};
const int leds[NUMBER] = {11, 10, 9, 8};

// 定義各LED對應的音符頻率
const int notes[NUMBER] = {
    NOTE_C4, NOTE_D4, NOTE_E4,NOTE_F4,
};

// 使用狀態機的概念,要定義各種狀態
typedef enum{
    STATE_START, // 重新開始遊戲
    STATE_QUESTION, // 閃爍LED,給出問題
    STATE_ANSWER, // 等待使用者按下開關,回答問題
    STATE_CORRECT, // 正確,播放恭喜的音效,重置
    STATE_WRONG, // 錯誤,播放可惜的音效,重置
    STATE_MAX,
} State;

// 定義播放音效的資料
Melody melodys[MELODY_MAX] = {
    {noteStart, noteDurationsStart, 13},
    {noteCorrect, noteDurationsCorrect, 6},
    {noteWrong, noteDurationsWrong, 8},
};

// 以tone()播放音效
void playtone(int *note, int *noteDurations, int num){
  for(int thisNote = 0; thisNote < num; thisNote++){
    int noteDuration = 3000 / noteDurations[thisNote];
    tone(TONE_PIN, note[thisNote], noteDuration);

    int pauseBetweenNotes = noteDuration * 1.30;
    delay(pauseBetweenNotes);
  }
}

// 程式裡有三種音效,開始遊戲、回答正確、回答錯誤
typedef enum{
    MELODY_START,
    MELODY_CORRECT,
    MELODY_WRONG,
    MELODY_MAX,
} Melody_Enum;
// 把playtone()包一層,用起來比較簡單
void playMelody(Melody_Enum me){
    playtone(melodys[me].note, melodys[me].duration, melodys[me].number);
}

// 初始化,開關的腳位,開啟上拉電阻,所以預設狀態會是HIGH,
// 之後讀取開關狀態時,若讀到LOW,代表按下按鍵
void setup(){
    for(int i = 0; i < NUMBER; i++){
        pinMode(switches[i], INPUT);
        digitalWrite(switches[i], HIGH);
        
        pinMode(leds[i], OUTPUT);
        digitalWrite(leds[i], LOW);
    }
    
    // 亂數,將以亂數製作問題
    randomSeed(analogRead(A1));
}

// 只播放一個音符的函式,秀出問題時可用,
// 使用者回答時也可用。
void playOneTone(int note, float delayScale){
    int noteDuration = 3000 / 8;
    tone(TONE_PIN, note, noteDuration);
    
    int pauseBetweenNotes = noteDuration * delayScale;
    delay(pauseBetweenNotes);

}

// 準備好問題後,放出音效、閃爍LED 
void playQuestionsTone(){
    for(int i = 0; i < q_num; i++){
        digitalWrite(leds[questions[i]], HIGH);
        playOneTone(notes[questions[i]], 1.3);
        digitalWrite(leds[questions[i]], LOW);
    }


// 檢查問題跟使用者的回答是不是一樣
boolean check(){
    for(int i = 0; i < q_num; i++){
        if(questions[i] != answers[i]){
            return false;
        }
    }
    return true;
}

// 重點
void loop(){
    switch(state){ // 以state記錄目前狀態,根據狀態作事
        case STATE_START:{ // 開始遊戲,播放開始音效,進入問題狀態
            reset();
            playMelody(MELODY_START);
            state = STATE_QUESTION;
            break;
        }
        
        case STATE_QUESTION:{ // 問題狀態,以亂數製作問題
            questions = (int *)(malloc(sizeof(int) * q_num));
            answers = (int *)(malloc(sizeof(int) * q_num));
            for(int i = 0; i < q_num; i++){
                questions[i] = random(0, NUMBER);
            }
            answer_num = 0;
            playQuestionsTone(); // 顯示問題
            lastClickTime = millis(); // 記錄目前時間
            state = STATE_ANSWER;
            break;
        }
        
        case STATE_ANSWER:{
            // 看看使用者多久沒按開關了,超過10就宣布失敗
            const unsigned long nowTime = millis();
            if(nowTime >= lastClickTime + 10000UL){
                state = STATE_WRONG;
                break;
            }
            
            // 讀取每個開關的狀態
            for(int i = 0; i < NUMBER; i++){
                int ss = digitalRead(switches[i]);
                if(ss == LOW){
                    digitalWrite(leds[i], HIGH);
                    lastClickTime = nowTime;
                    answers[answer_num] = i; // 把使用者的輸入答案存起來
                    answer_num++;
                    playOneTone(notes[i], 1);
                    digitalWrite(leds[i], LOW);
                    delay(200);
                    break;
                }
                
            }
            
            if(answer_num >= q_num){ // 判斷是不是已經回答完了
                // 檢查回答正不正確
                state = check() ? STATE_CORRECT : STATE_WRONG;
            }
            break;
        }
        
        case STATE_CORRECT:{ // 回答正確,恭喜
            q_num++;
            playMelody(MELODY_CORRECT);
            delay(2000);
            state = STATE_START;
            break;
        }
        
        case STATE_WRONG:{ // 回答錯誤,可惜
            playMelody(MELODY_WRONG);
            delay(2000);
            state = STATE_START;
            break;
        }
        
        default:{
            state = STATE_START;
            break;
        }
    }
}


實際操作影片網址:https://www.youtube.com/watch?v=ZDvK9AbC1eY#action=share
資料來源 網址:http://yehnan.blogspot.tw/2012/02/arduinosimon-says.html

WEEK05

希望能作英打輸入法類型的遊戲,步驟如下
1.隨機掉落26個英文字母且速率不同
2.成功或失敗消去字母時會有相對應的音樂
3.隨著時間掉落速度越來越快
4.無規定時間,再失敗10次後結束遊戲
5.計分方式,消去字母則加分,按錯則扣分

WEEK03

         


                                                      點擊畫面後即開始播放音樂




PImage boy, girl;
import ddf.minim.*;
Minim minim;
AudioPlayer song;

void setup() {
background(0);
size(600, 400);
minim=new Minim(this);
song=minim.loadFile("song.mp3");
boy=loadImage("boy.jpg");
girl=loadImage("girl.jpg");
}

void draw() {
  image(boy, 0, 0);
  image(girl, 300, 200);
}

void mousePressed(){
  song.play();
}

week01


void setup() {
size(400, 400);
background(0);}
void draw() {
  fill(255,0,0);
  rect(50,50,300,300);
 
  fill(0,255,0);
  ellipse(200,200,250,250);
 
  fill(0,0,255);
  triangle(120, 270, 200, 100, 280, 270);
}

期中作品

利用滑鼠左右移動控制橫軸,把圈圈打完就過關並可挑戰下一關。
影片網址:https://www.youtube.com/watch?v=PByHh-evRHw

期末作品

總共有三種速度(三排),有A~Z共26個英文字母隨機編排,只要按到相對應的字母就可消除,消除一個得10分,若未及時消除則game over並結算分數。



影片網址:https://www.youtube.com/watch?v=VQcOnpL-kI4&feature=youtu.be

2014年12月15日 星期一

Week13



第十四週課堂

Arduino旋鈕




void setup(){
pinMode(13,OUTPUT);
}

void loop(){
int value = analogRead(A0);
digitalWrite(13, HIGH);
delay(value);
digitalWrite(13, LOW);
delay(value);
}


可以控制LED燈閃爍的頻率!!

2014年11月24日 星期一

Week11霹靂燈

                         可以藉由程式碼來控制LED燈如何進行閃爍!!

第10週業界雙師授課心得報告-愛迪斯胡啟彥先生心得

這週的雙師計畫我們請來了愛迪生科技的胡啟彥先生來給大家上課,不同於上次的是,這次的內容比較多偏向在體感互動和虛擬實境的結合及延伸,並且可以如何運用在運動、藝術、遊戲方面。
運動上,有一個是滑冰的,用大型投影的方式把整個冰面幻化成一個場景,然後在偵測選手們的位置,使場景隨之而變,使整個的呈現方式生動了許多,並且也可以配合音樂或著表演內容來設置場景,使表演可以呈現更高一個檔次,相當有意思。
藝術方面呢,則是可以在表演者身上安置感應點,偵測表演者的動作,傳回電腦計算,再投射到表演場地的背景,而這些動作及投影都是即時的,也就是說是隨著表演者動作的變化而立即做出相應的變化,所以就算是同一個表演,也許呈現出來的也會有些許的不同,且變化的方式也可以做改變,大大的強化了視覺效果。

最讓我在意的,就是遊戲這部分!很久之前的漫畫或是卡通中就有用意識去控制的方式玩遊戲這樣的素材,現在好像也有聽說可以用腦波來控制部分什麼系統之類的,但就目前來說,要真的能用在遊戲上大概還有很長的路要走,而這次老師給的影片中就有看到,是戴上像是眼罩的裝置,使視覺可以看到像是在另一個環境,並在身上貼感應裝置,電腦就可以偵測你的動作,再傳到該虛擬環境中,那我們就可以控制一個虛擬空間中角色來進行遊戲,目前是還沒有開發出這種大型遊戲,不然我覺得一定會很夯,就目前來說肯定是個超級大作,真是令人期待,想想都覺得熱血沸騰啊!!

2014年11月19日 星期三

Week08業界雙師授課心得報告-叁式曾煒傑先生

今天的上課內容,是由叁式的創辦人曾煒傑先生來帶領,他首先介紹了他們公司的相關資訊,然後說明了一些現今的發展,最後則是給了看我們許多成果,像是可以表達喜怒哀樂的貓尾巴、歷史人物結合動漫、布袋戲造型的佈景拍照……令人覺得很有新鮮感。
除此之外,業師也讓我們看了很多的廣告成果,真的都相當的有創意且容易令人印象深刻,吸引住我們的眼球,真的是很完美的達到了廣告的目的!
有一個廣告,背景是在日本,有一男一女從很遠的地方向著彼此開始跑,廣告中也有顯示他們之間的距離,隨著距離顯示越來越小,最後兩人終於在大阪城相見並擁抱在一起,距離顯示也來到了0,廣告結束後又變成0.02。一開始我還以為是鞋子的廣告,但最後讓人意想不到的是,這原來是保險套廣告!0.02代表的是超薄、最接近的距離,這廣告的表現方式真是讓人會心一笑。
另一個是有4位男子坐在電動單輪車上的,拍攝方式好像是一鏡到底,參與的人相當多,我覺得光是那整齊的動作就不知道要練習多久,更不用說那精準的走位,先不說廣告好壞,這兩點就讓我覺得不容易了。在廣告中,大家都是專著紅和白的衣服及雨傘,從高空拍攝下去,雨傘開開張張以及隊形移動的畫面很具視覺衝擊性,相當厲害。
還有一個我覺得滿有意義的,是一個可口可樂的廣告,在對峙的兩個國家各設置大型的儀器,讓兩地雙方的人可以藉由一些搞笑動作的互動方式獲得免費可口可樂,極大的拉近彼此距離及消除隔閡,雖然可口可樂公司這樣無償的投資好像是虧本,但我相信,不論兩國之間最後如何,這活動所引起的效果絕對大大的加深可口可樂在人民心中的印象,帶來的效益肯定巨大,真是很佩服可口可樂他們的心思及大膽。
其中有一個是鞋子的廣告,什麼品牌有點忘了,這是一個有點類似惡搞實錄,參加者盡到一個房間後,地板就開始慢慢減少變小,這時參加者不得不攀在牆上,這時空中有一雙鞋子,只要跳躍過去拿到了就可以帶走。而旁邊都有攝影機拍攝記錄,最後編制能廣告,看完我覺得還真的是滿歡樂的,而且我想那些參加者一定是印象深刻,大概有很大一部分會變成這品牌的死忠粉絲吧!

業師當然還有播放許多其他廣告,不過這四個是讓我最印象深刻的,我覺得雙師計畫還滿有趣的,增加的課堂的彈性及樂趣,也可以了解目前世界各地的發展和運用,有些真的讓我們大開眼界、嘆為觀止,業師老師問有沒有問題時,我都很想說:老師,有沒有一個網站可以讓我們自己上網去瀏覽這些作品啊! 真的是太有意思了啊!!!

2014年10月20日 星期一

期中作品

延續上週所述,只是目前有兩種遊戲方式:
(1)如A圖所示,傳統的輸入法方式,只是轉變為英文字母
(2)如B圖所示,類似打擊節奏遊戲的方式,當然落下的會變成英文,也是要按對應的字母


                                                                               A


B

2014年9月22日 星期一

99160070_邱凱民, HW02, Week02


可以用滑鼠移到左列顏色區塊來變更字的顏色,右邊的是可以改變字的粗細。