2013年1月15日 星期二

Week19,final,project

作品名稱:划船遊戲

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);
}

沒有留言:

張貼留言