1. 遊戲進行及裝置介紹
首先是開頭畫面
然後努力滑要到終點了 ! !
如果在時間內趕上終點 你就贏了
就會顯示贏的畫面
如果沒辦法就會顯示輸的畫面
這是我們 arduino 的裝置圖 - 划船裝置
這張是裝置的內部
是採用彈簧與桿子的槓桿原理做出划船力道的模擬
我們把按鈕黏上彈簧讓控制時需要力道才能順利案到按鍵
然後利用保麗龍塊固定按鈕位置
接者是控制示意圖
下面是遊戲進行畫面 方向示意圖
右上角是剩餘時間
2. 遊戲玩法說明
當畫面一開始,就按下紅色開始鍵開始遊戲,雙手放在桿子上,模擬划船的槳
當手往前推動,遊戲畫面中的船就會往該方向前去,而在 30 秒內要到達終點
如果 30 秒內抵達就是任務達成,否則就是任務失敗遊戲結束
3. 心得
這個划船遊戲能夠完整的利用裝置來操控,真的是非常的幸運
在整個遊戲作品的製作過程中,遇見了許許多多的問題,有和一些同學們共同討論解決
謝謝他們提供的建議和解決方式,也謝謝助教建議的軟體與硬體操控的方向 :)
在完成裝置之前都是理想中的設計裝置,製作過程中便是狀況一堆
不僅僅是按鈕和搖桿的結合,再加上 arduino 接線、程式撰寫等等搭配,遇到的問題真不少
尤其是裝置的方形按鈕與接線處頻頻出錯,一下是按鈕壞掉接觸不良,一下是接線鬆掉
後來嘗試用了課堂上做的小鋼琴按鈕,結果卻是如我們預期的控制船的方向移動
但這樣就要捨棄掉利用桿子進行操控裝置的方法,讓我們非常挫折與無奈
也因為捨棄掉操控裝置的方法可惜,我們不斷地的嘗試,看還有甚麼方式能補救
運氣很好的,在我們裝上小按鈕,再接上方形按鈕後卻可以操控了 ! ! ! ! !
划船裝置也在那時候如我們預期成果般地完成,順利地完成 demo
也很感謝同學和老師、助教的肯定,讓我們獲得了獎品,謝謝大家 :D
很開心這學期學到了這麼多和互動相關的東西,這堂課很充實 :P
我們從同學、老師、助教身上學到很多寶貴的經驗、程式撰寫技巧以及遊戲設計概念等等
也完成兩個簡單的小作品,雖然這兩個小作品不是非常的完整 ˊ ˇ ˋ
但對我們來說是很好的經驗,也讓我們更了解自己不足的地方,希望之後能表現得更好:D
4. 遊戲 demo 影片
5. 作品分工狀況
遊戲作品構思:王靚暄、詹中豪
遊戲背景素材貼圖:王靚暄
遊戲程式:王靚暄、詹中豪
遊戲裝置構思:詹中豪
遊戲裝置製做:王靚暄、詹中豪
6. 程式碼
*processing
import processing.serial.*; Serial myPort; PImage sence1; PImage sence3; PImage sence4; PImage ship; PImage bg; int W=1000,H=700; float boatX=320,boatY=100, boatVX=0, boatVY=0; float bgX=0,bgY=-1232; int gameTime,s; boolean ctrl=true; int lastTime; import ddf.minim.*; Minim minim; int testState=0; AudioPlayer player; void setup(){ size(W,H); sence1 = loadImage("sence1.jpg"); sence3 = loadImage("sence3.jpg"); sence4 = loadImage("sence4.jpg"); image(sence1,0,0); ship = loadImage("ship.png"); bg=loadImage("bg.jpg"); s=millis()/1000; minim = new Minim(this); myPort = new Serial(this,"COM3", 9600); player = minim.loadFile("abdc.mp3"); player.play(); } void draw(){ testState = myPort.read(); println(testState); if (testState=='G') { ctrl=false; } if(ctrl==true){ s = millis(); image(sence1,0,0); } else if(ctrl==false){{ image(bg, bgX, bgY); if (bgY>0) bgY=0; boat(boatX, boatY); boatMove(); } fill(255,0,0); textSize(60); lastTime = millis()- s; gameTime = 30-lastTime/1000; text(gameTime,900,70); if(gameTime>0 && bgY==0){ image(sence4,0,0); } else if(gameTime <=0){ image(sence3,0,0); gameTime = 0; } } } boolean [] keys=new boolean[250]; void boatMove() { if ( testState == 'A') { boatVY-=1; boatVX+=1; if (boatVX<0)boatVX=0; if (boatVY>-0.5)boatVY=-0.5; } if (testState == 'S') { boatVX-=0.5; boatVY-=0.5; if (boatVX<-1)boatVX=-1; if (boatVY>-0.5)boatVY=-0.5; } boatX+=boatVX; boatY+=boatVY; if (boatY<H/2) { bgY-=(boatY-H/2); boatY=H/2; } if (boatX<0) { boatX=0; } if (boatX>600) { boatX=600; } if (boatY>650) { boatY=650; } boatVY*=0.9; boatVX*=0.9; } void keyPressed() { if (testState=='G') { ctrl=false; } else if (testState=='A') { boatVY-=1; boatVX+=1; } else if (testState=='S') { boatVX-=0.5; boatVY-=0.5; } } void keyReleased() { if (testState=='A') { boatVY=0; boatVX=0; } else if (testState=='S') { boatVX=0; boatVY=0; } } void boat(float X, float Y) { image(ship, boatX, boatY); }
*arduino
/* DigitalReadSerial Reads a digital input on pin 2, prints the result to the serial monitor This example code is in the public domain. */ // digital pin 2 has a pushbutton attached to it. Give it a name: int pushButton2= 2; int pushButton3 = 3; int pushButton4 = 4; int buttonState2 =0; int buttonState3 =0; int buttonState4 =0; // the setup routine runs once when you press reset: void setup() { // initialize serial communication at 9600 bits per second: Serial.begin(9600); // make the pushbutton's pin an input: pinMode(pushButton2, INPUT); pinMode(pushButton3,INPUT); pinMode(pushButton4,INPUT); } // the loop routine runs over and over again forever: void loop() { // read the input pin: int buttonState2 = digitalRead(pushButton2); int buttonState3 = digitalRead(pushButton3); int buttonState4 = digitalRead(pushButton4); // print out the state of the button: if (buttonState2 == HIGH) { Serial.write('A'); } if (buttonState3== HIGH) { Serial.print('S'); } if (buttonState4 == HIGH ) { Serial.print('G'); buttonState4 = 1;} else { Serial.print('H'); } delay(100); }
沒有留言:
張貼留言