顯示具有 99160531邱垂傑 標籤的文章。 顯示所有文章
顯示具有 99160531邱垂傑 標籤的文章。 顯示所有文章

2013年1月18日 星期五

Week 19 , Final

系統名稱: 直升機保衛戰


1. 遊戲進行和裝置介紹

 

遊戲剛開始畫面















直升機射擊時的畫面

  

攔截失敗時的畫面(損失生命)














操作裝置(搖桿+射擊按鈕)






2. 遊戲玩法說明

        一開始進入遊戲, 畫面上方會隨機出現轟炸飛彈,此時必須使用搖桿控制直升機左右移動,並且按射擊鍵攔截飛彈,如果攔截飛彈失敗或是碰到機身,此時就會扣掉右下角的生命值,當生命值為0時,遊戲結束並且秀出得分狀況。


3. 遊戲Demo影片

 

4.程式碼

 
 /*Arduino*/
int pushButton = 2;
int pushButton2 = 6;
int pushButton3 = 7;
void setup() {

 Serial.begin(9600);
 pinMode(pushButton, INPUT_PULLUP);
 pinMode(pushButton2, INPUT_PULLUP);
 pinMode(pushButton3, INPUT_PULLUP);
}
int a=0;
int a2=0;
int a3=0;
// the loop routine runs over and over again forever:
void loop() {
 // read the input pin:
 int buttonState = digitalRead(pushButton);
 int buttonState2 = digitalRead(pushButton2);
  int buttonState3 = digitalRead(pushButton3);
 // print out the state of the button:
 if (buttonState == HIGH && a==0 ) { // If switch is ON,
   Serial.print(1); 
   a=1; // send 1 to Processing
 }
 if (buttonState == LOW && a==1) { // If the switch is not ON,
   Serial.println(0); 
   a=0; // send 0 to Processing
 }
 if (buttonState2 == HIGH && a2==0 ) { // If switch is ON,
   Serial.print(2); 
   a2=2; // send 1 to Processing
 }
 if (buttonState2 == LOW && a2==1) { // If the switch is not ON,
   Serial.println(3); 
   a2=3; // send 0 to Processing
 }
 if (buttonState3 == HIGH && a3==0 ) { // If switch is ON,
   Serial.print(4); 
   a3=4; // send 1 to Processing
 }
 if (buttonState3 == LOW && a3==1) { // If the switch is not ON,
   Serial.println(5); 
   a2=5; // send 0 to Processing
 }
 // Serial.println(buttonState);
 delay(10); // delay in between reads for stability
}
   

/*Processing*/
import processing.serial.*;
Serial myPort;  
int val;
PImage bg,helicopter,bomb;
PImage [] life = new PImage[5];
float hx=350,hy=400;
PImage [] missile = new PImage[5];
int[] mx = new int [5];
int[] my = new int [5];
int bx=0,by=0;

void setup(){
  size(840,525);
  String portName = Serial.list()[0];
  myPort = new Serial(this, "COM5", 9600);
  
  bg =loadImage("sky.jpg");
  helicopter= loadImage ("Helicopter.png");
  for(int i=0;i<5;i++){
   life[i]= loadImage("Life.png");
  }
  for(int i=0;i<5;i++){
   missile[i]= loadImage("Missile.png");
  }
  for(int i=0;i<5;i++){
    mx[i]=i*200;
    my[i]=(-300+i*40);
  }
  bomb= loadImage ("bomb.png");
}
void draw(){
  background(bg);
  life();
  helicopterA();
  missilefly();
  myserial();
  bomb();
}
void  helicopterA(){
  image(helicopter,hx,hy);
}
void life(){
  fill(180,180,180);
  rect(740,340,60,160);
  fill(255,0,0);
  rect(740,300,60,40);
  fill(255,255,255);
  textFont(createFont("Georgia", 25));
  text("LIFE ",742,330);
  for(int i=0;i<5;i++){
  image(life[i],690,320+(30*i),150,100);
  }

}
void missilefly(){
  for(int i=0;i<5;i++){
    image(missile[i],mx[i],my[i],50,100);
  }
  for(int i=0;i<5;i++){
    my[i]+=2;
  }
  for(int i=0;i<5;i++){
    if(my[i]==600){
      my[i]=(-300+i*40);
    }
  }
}

void myserial(){
  if ( myPort.available() &rt; 0) {  // If data is available,
    val = myPort.read();         // read it and store it in val
  }
  if (val == 0) {              // If the serial value is 0,
    translate(hx,hx+=10);
  } 
  else if(val == 2){                       // If the serial value is not 0,
    translate(hx,hx-=10);   
  }

}
void bomb(){
 int p=0;
  image(bomb,hx+90,hy+by,10,15);  
    if(val != 4 && by!=0){
      by-=10;
    }
  
    if (val == 4){
       by-=10;
    }
  if((hy+by)<=0){
    by=0;
 }
} 


5.心得

這次得專題製作跟以前碰過的都不太相同,除了還是有程式的撰寫之外,還必須同時結合到2個程式,所以中間的連結很重要。

此外在接Arduino線路時,必須克服許多問題(ex.接觸不良、接腳錯誤.....等)因此也花了較多的時間在處理硬體上面的問題,但是還好最後都有想出辦法解決(ex.絕緣膠帶,多接幾次線路並檢查)。

麒時後來在Demo時還覺得蠻有成就感的,畢竟是自己從無到有生出來的, 所以很開心!!

也謝謝各位同學在票選時對我們的厚愛,害我們自己都下了一跳呢! 謝謝大家 :)


6.工作分配



遊戲作品構思:

李之寧 、邱垂傑



遊戲程式:

Arduino + 合併 李之寧

Processing 邱垂傑




遊戲硬體:

Arduino 各線路連接 李之寧

搖桿本體製作 邱垂傑

 

  

2012年12月18日 星期二

Week 15, HW12


一、期末作品主題

期中時是做射擊酒瓶的遊戲,用滑鼠點擊移動中的酒瓶,並在限定的時間裡看可以得到多少分數。期末也打算做射擊方面的遊戲,但是會全部從新開始,我們想要做直升機的攔截遊戲,搭配arduino 的按鍵做出射擊的動作。

 

二、期末作品描述

直升機攔截遊戲,場景是銘傳大學,會讓直升機去攔截飛彈,畫面中會有從不同地方出現的飛彈,想轟炸我們美麗的校園。主要要搭配Arduino 的上、下、左、右 跟射擊鍵,操控直升機射擊出飛彈,來抵消從上方出現的飛彈,成功防禦我們的校園。當然期中時有做的功能,倒數計時、記分都會繼續保留,我們打算另外加上,如果沒有抵擋成功,使校園被炸到的話,會有失敗的畫面產生。

 

三、作品所需素材

畫面素材:

開始畫面












移動直升機













轟炸用飛彈






四、心得
後來跟老師討論過後,如果只做上下左右的按鈕再加一顆射擊鍵,這樣不如直接用鍵盤完還來的方便快速,因此後來稍稍的做了修改,可能會加入搖桿的功能,或是上下的功能改成用腳踏! 仿照值生機的內部操作。



2012年11月12日 星期一

Midtern

1. 遊戲畫面


遊戲開始畫面點選start布幕會拉開,且會有手槍上膛的聲音


攻擊酒瓶,打中酒瓶能得5分,時限30秒,開槍及打中都會有音效,且有背景音樂


遊戲結束將會計算所得總分。

2.DEMO影片




3.程式碼


/*Var 設定*/
import ddf.minim.*;
Minim minim;
AudioPlayer shoot,glass,shotgun,bgmusic,ccheer;

PImage screenleft,screenright,people,bg;   
boolean ctl=true,ctl2=false;          //control mouse press
int m=1; //control ending music  
int siteX1=0,siteX2=350,siteX3=525;   //Image site
 
PImage gun,star;
PImage [] bottle = new PImage[5];//酒瓶圖
float [] bx = new float [5];//位置
int savedTime,passedTime,gameTime;  //計時器時間
int score=0;//分數

/*首頁畫面*/
void Start()
{
  if(mousePressed&&mouseX<430&&mouseX&rt;270&&mouseY<430&&mouseY&rt;270&&ctl)
    ctl=false;
  if(ctl==false && ctl2==false){
     image(screenleft, siteX1-=3, 0, width/2, height);
     image(screenright,siteX2+=3,0,width/2, height);
     image(people,siteX3+=1,150,width/4, height/1.5);
     if(siteX1<-350&&siteX2&rt;700&&siteX3&rt;700) ctl2=true;
     if(ctl2) ;
  }
  else if(ctl==true && ctl2 == false){
     image(screenleft, siteX1, 0, width/2, height);
     image(screenright,siteX2,0,width/2, height);
     image(people,siteX3,150,width/4, height/1.5);
     fill(66,66,255);
     ellipse(350,350, 80,80);
     fill(255,255,0);
     textFont(createFont("Cooper Black", 20));
     text("START",315,358);
  } 
}

void setup() {
  //Size
  size(700,525);
  bg = loadImage("bg.jpg");
  
  //Load Image
  screenleft = loadImage("screen_left.jpg");
  screenright = loadImage("screen_right.jpg");
  people = loadImage("people.png");
  
  //Print Image
  image(screenleft, siteX1, 0, width/2, height);
  image(screenright,siteX2,0,width/2, height);
  image(people,siteX3,150,width/4, height/1.5);
  
  //code
   savedTime = millis();  //儲存遊戲開始的時間(只執行一次)
  
   gun=loadImage("gun.png");
   star=loadImage("star.png");
   for(int i=0;i<5;i++){
      bottle[i]=loadImage("bottle.png");
   }
   minim=new Minim(this);
   bgmusic=minim.loadFile("lion.wav", 2048);
   bgmusic.play();      
}

void draw() {
  background(bg);
  Start();
  //code
  if(siteX1<-350 && siteX2&rt;700 && siteX3&rt;700){
    bottle();    //酒瓶  
    gun();    //槍的準心
    word();    //字
    time();
    End();
  }
  /*結尾的拍手聲*/
  if(m==1 && gameTime<0){
    ccheer=minim.loadFile("ccheer.wav", 2048);
    ccheer.play();
    m--;
  }
}

/*槍的準心設置*/
void gun(){
  image(gun,530,420);
  image(star,mouseX-38,mouseY-35);
}
/*移動酒瓶的設置*/
void bottle(){
   for(int i=0;i<5;i++){
       image(bottle[i],i*50+bx[i],98,50,80);
       bx[i]+=1;
       if(bx[i]&rt;=700){
         bx[i]=0;
       }
     }
}
/*畫面上的字*/
void word(){
  textFont(createFont("Georgia", 40));
  text("Score:",20,500);
  textFont(createFont("Georgia", 40));//得分數
  text(score,150,500);
}
/*計時器*/
void time(){
  //當滑鼠按下,計時器重新回到60秒
  if(mousePressed&&mouseX<430&&mouseX&rt;270&&mouseY<430&&mouseY&rt;270&&ctl)
    ctl=false;
  if(ctl==false){
    savedTime = millis();
    if(siteX1<-350&&siteX2&rt;700&&siteX3&rt;700) ctl=true;
   }
  passedTime = millis() - savedTime;  //經過的秒數
  gameTime = 60-passedTime/1000;  //剩下的秒數
  textFont(createFont("Georgia", 40));
  text("Time: "+gameTime,250, 500);    

}   

/*槍射擊 & 音效*/
void mouseClicked(){
  minim=new Minim(this);
  shoot=minim.loadFile("BULLET.wav", 2048);
  shotgun=minim.loadFile("Shoutgun198.wav", 2048);
  glass=minim.loadFile("glass.wav",2048);
   
  //start的音效
  if(siteX1<-350 && siteX2&rt;700 && siteX3&rt;700){
    shoot.play();
   }
  for(int i=0;i<5;i++){
    if(mouseY&rt;100 && mouseY<175 && mouseX&rt;i*50+bx[i]+15 && mouseX<i*50+bx[i]+30){
      score+=5;
      shoot.pause();
      glass.play();
      bx[i]=0;
    }
  }
  //槍射擊音效
  if(mouseX<430&&mouseX&rt;270&&mouseY<430&&mouseY&rt;270){
    if(siteX1<-350 && siteX2&rt;700 && siteX3&rt;700){
      shotgun.pause();
    }
    else 
    shotgun.play();
  }
}
/*結尾畫面*/
void End(){
  if(gameTime<0){    
    background(0,0,0);
    fill(255,255,255);
    textFont(createFont("Georgia", 60));
    text("Game Over ",180,200);
    text("Your score:"+score,150,300);
    
    fill(66,66,255);
    ellipse(200,400, 80,80);
    fill(255,255,0);
    textFont(createFont("Cooper Black", 30));
    text("Exit",190,410);
    if(mousePressed && mouseX<280 && mouseX&rt;120 && mouseY<480 && mouseY&rt;320){  
      exit();
    }  
    
  }  
  
}


2012年10月30日 星期二

Week08 , HW08

1. 請寫下以下資料:
1.1. 你之前完成了什麼?
找完素材,想好架構,並尋找可利用的程式

1.2. 你今天計畫要做什麼?
(a)把首頁畫面完成
(b)遊戲畫面裡,酒瓶可以跑出來,準心可以跟著滑鼠移動

1.3. 可能會遇到的問題... (及可能的解決方法)
(a)選單畫面的設置
(b)儲存酒瓶的陣列


2. 請把你目前期中作品的進度貼出來
(a)首頁畫面



(a)把首頁畫面完成


程式碼:
PImage screenleft,screenright,people,bg;  
boolean ctl=true,ctl2=false;          //control mouse press
int siteX1=0,siteX2=350,siteX3=525;   //Image site
//Var
PImage gun,star;
PImage [] bottle = new PImage[5];
float [] bx = new float [5];
//首頁畫面
void Start()
{
  if(mousePressed&&mouseX<430&&mouseX>270&&mouseY<430&&mouseY>270&&ctl)
    ctl=false;
  if(ctl==false && ctl2==false){
     image(screenleft, siteX1-=3, 0, width/2, height);
     image(screenright,siteX2+=3,0,width/2, height);
     image(people,siteX3+=1,150,width/4, height/1.5);
     if(siteX1<-350&&siteX2>700&&siteX3>700) ctl2=true;
     if(ctl2) ;
  }
  else if(ctl==true && ctl2 == false){
     image(screenleft, siteX1, 0, width/2, height);
     image(screenright,siteX2,0,width/2, height);
     image(people,siteX3,150,width/4, height/1.5);
     fill(66,66,255);
     ellipse(350,350, 80,80);
     fill(255,255,0);
     textFont(createFont("Georgia", 20));
     text("START",320,355);
  }
}
void setup() {
  //Size
  size(700,525);
  bg = loadImage("bg.jpg");
 
  //Load Image
  screenleft = loadImage("screen_left.jpg");
  screenright = loadImage("screen_right.jpg");
  people = loadImage("people.png");
 
  //Print Image
  image(screenleft, siteX1, 0, width/2, height);
  image(screenright,siteX2,0,width/2, height);
  image(people,siteX3,150,width/4, height/1.5);
 
  //code
  //textFont(createFont("Georgia", 40));
   gun=loadImage("gun.png");
   star=loadImage("star.png");
   for(int i=0;i<5;i++){
      bottle[i]=loadImage("bottle.png");
    }
}
void draw() {
  background(bg);
  Start();
  //code
  if(siteX1<-350&&siteX2>700&&siteX3>700){
  bottle(); 
  gun();
 
  }
}
void gun(){
  image(gun,530,420);
  image(star,mouseX,mouseY);
  text("Score:",40,500);
}
void bottle(){
   for(int i=0;i<5;i++){
     image(bottle[i],i*50+bx[i],98,50,80);
     bx[i]+=2;
     if(bx[i]==700){
       bx[i]=0;
     }
  }
}




2012年10月23日 星期二

Week07 , HW07

1.期中作品

(a)增加素材

射擊的手槍







瞄準的標靶










2.視訊

執行畫面:















全世界最短視訊程式碼(小葉老師)

import processing.video.*;
Capture video;
void setup(){
  size(640,480,P2D);
  video = new Capture(this, width, height);
  video.start();
  loadPixels();
}
void draw(){
  if(video.available()){
    video.read();
    video.loadPixels();
    for(int i=0;i<640*480;i++){
      pixels[i]=video.pixels[i];     
    }
    updatePixels();
  }
}

2012年10月9日 星期二

HW05 WEEK05

1.會自己動

void setup(){
  size(600,600);
}
float rrr;
void draw(){
 
  background(255,255,255);
  translate(300,300);
  fill(0,125,125);
  ellipse(0,0,350,350);
  fill(300,200,0);
  ellipse(0,0,310,310);
  fill(125,125,0);
  ellipse(0,0,270,270);
  fill(255,255,255);
  ellipse(0,0,230,230);
  fill(255,0,0);
  rotate(rrr);rrr+=0.02;
  for(int i=0;i<20;i++){
    rotate( PI/10);
    ellipse(100,0,150,30);
  }

}

2.互動

void setup(){
  size(600,600);
}
float rrr;
void draw(){
 
  background(255,255,255);
  if (mousePressed){
    translate(mouseX,mouseY);
    }
  else{
     translate(300,300);
  }
  fill(0,125,125);
  ellipse(0,0,350,350);
  fill(300,200,0);
  ellipse(0,0,310,310);
  fill(125,125,0);
  ellipse(0,0,270,270);
  fill(255,255,255);
  ellipse(0,0,230,230);
  fill(255,0,0);
  rotate(rrr);rrr+=0.02;
  for(int i=0;i<20;i++){
    rotate( PI/10);
    ellipse(100,0,150,30);
  }
    if (mousePressed) {
    stroke(255);
  } else {
    stroke(0);
  }

}
3.期中想做的

射擊酒瓶的遊戲!!
酒瓶要會移動~
且要增加計分&時間倒數的功能!!

2012年10月2日 星期二

Week04,HW04

PImage img;
void setup()
{

  img = loadImage("aaaa.jpg");
  size(500,400);
  fill(255,0,0);rect(0,0,30,30);
  fill(0,0,255);rect(0,30,30,30);
  fill(0,255,0);rect(0,60,30,30);
  fill(0,0,0);rect(0,90,30,30);
  fill(255,255,255);rect(0,120,30,30);
  fill(255,255,255);
  rect(470,0,30,30);
  fill(0,0,0);
  rect(470,30,30,30);
  fill(255,255,255);
  rect(470,60,30,30);
  fill(0,0,0);
  ellipse(485,75,25,25);
  fill(255,255,255);
  rect(470,90,30,30);
  fill(0,0,0);
  ellipse(485,105,10,10);

}
void draw()
{
 if(mousePressed && mouseX<30 && mouseY<30) stroke(255,0,0);
 if(mousePressed && mouseX<30 && mouseY<60 &&mouseY>30) stroke(0,0,255);
 if(mousePressed && mouseX<30 && mouseY<90 &&mouseY>60) stroke(0,255,0);
 if(mousePressed && mouseX<30 && mouseY<120 &&mouseY>90) stroke(0,0,0);
 if(mousePressed && mouseX<30 && mouseY<150 &&mouseY>120) stroke(255,255,255);
 if(mousePressed && mouseX>470 && mouseY<30) save("aaaa.jpg");
 if(mousePressed && mouseX>470 && mouseY>30 && mouseY<60) image(img,0,0);
 if(mousePressed && mouseX>470 && mouseY>60 && mouseY<90)strokeWeight(5);
 if(mousePressed && mouseX>470 && mouseY>90 && mouseY<120)strokeWeight(1);
 if(mousePressed) line(mouseX,mouseY,pmouseX,pmouseY);
}

2012年9月25日 星期二

HW03



程式碼:
void setup(){
  size(600,600);
}

void draw(){
  fill(123,255,255);
  rect(100,100,50,100);

  fill(129,255,0);
  ellipse(mouseX,mouseY,100,100);
}


程式碼
void setup()
{
  size(600,600);
}

float x=100.0,y=100.0;
void draw()
{
background(0,0,0);

fill(255,255,0);
ellipse(x,y,100,60);

fill(255,0,0);
ellipse(mouseX,mouseY,40,60);
fill(0,0,0);
ellipse(mouseX,mouseY,50,10);

x=x*0.9+mouseX*0.1;
y=y*0.9+mouseY*0.1;
}

2012年9月18日 星期二

Hw2



程式碼

size(600,600);
for(int i=0;i<50;i++)
{
  fill(random(255),random(255),random(255));
rect(random(500),random(500),random(500),random(500));
}

程式碼

size(600,300);
for(int i=0;i<60;i++){
  for(int k=0;k<30;k++){
    fill(i*255/10,k*255/10,random(255));
    rect(i*10,k*10,10,10);
  }
}

for迴圈的意思是指將方格以y軸的順序逐一創造







程式碼


size(400,300);
for(int i=0;i<4;i++){
  for(int k=0;k<3;k++){
    fill(random(255),random(255),random(255));
    ellipse(i*100+50,k*100+50,  100,100);
     fill(random(255),random(255),0);
    ellipse(i*100+50,k*100+50,  90,90);
     fill(random(255),random(255),random(255));
    ellipse(i*100+50,k*100+50,  80,80);
     fill(random(255),random(255),random(255));
    ellipse(i*100+50,k*100+50,  70,70);
     fill(random(255),random(255),0);
    ellipse(i*100+50,k*100+50,  60,60);
     fill(random(255),random(255),random(255));
    ellipse(i*100+50,k*100+50,  50,50);
     fill(random(255),random(255),random(255));
    ellipse(i*100+50,k*100+50,  40,40);
     fill(random(255),random(255),random(255));
    ellipse(i*100+50,k*100+50,  30,30);
     fill(random(255),random(255),random(255));
    ellipse(i*100+50,k*100+50,  20,20);
  }
}

心得:目前都是學一些很簡單的繪圖方式,跟一二年級比起來,現在已經越來越
上手了,但是學的語言很多,有時候真的會產生混亂!有沒有辦法解決產生混亂
的這種問題呢??有時候寫C語言,又跳到Java又跳到OpenCv,腦筋常常會轉不過
來欸!!現在又加上processing!天哪!

2012年9月11日 星期二

week01 HW01

1.

2.
size (500,500);
PImage kitty;
kitty=loadImage("http://www.youtube.com/watch?v=ZByppaYSJB8");
image(kitty, 3,50);

3.
原圖: