顯示具有 98360730 郭建宏 標籤的文章。 顯示所有文章
顯示具有 98360730 郭建宏 標籤的文章。 顯示所有文章

2012年6月23日 星期六

期末遊戲專案

遊戲名稱 : 無限閃躲 Avoid of Infinite

我的這次的遊戲構想就是想要做一個類似像閃躲的遊戲 
遊戲玩法: 我的人物會被我設定只能在最右邊也就是他的X值被我給鎖定了
他只會跟著我的手上下改變Y軸的位置 

   這是我上面的橫槓

      封面

剛進入的遊戲介面

這樣的封面 花了我許多的時間包括找圖
找字型 排版 或是為了修一張圖片 大費周章的跑到雲端
其實話在美工與程式的部分我覺得自己有點本末倒置




 這是一個我卡比較久的程式部分
大概花了我一整天的時間
我常常會自己思考而不太想去打擾別人
但是經過這次的教訓 我覺得不會的話就應該要多多問人

其中這邊的程式碼在於利用到老師的範例六程式碼加以改造一下
首先這邊先使用兩個for迴圈 在加上一個if
for (m=0;m<iVideoBlockHeight;m++)
        {
        for (n=0;n<iVideoBlockWidth;n++)
            {
         if (iBlockChangeCounter[m][n]>51)
先來偵測差異的點
接著重頭戲來了!!
我們要如何判斷說 好讓我的喬巴可以跟隨著我的手來做上下移動呢?
首先 我只要先判斷說 iObjectY1
也就這個虛擬物件他的點要跟著我這些差異點的最高那點就可以了
所以我只要判斷Y軸即可 因為X軸不管在哪裡都沒有差
我只需要偵測最高點

像我在做這個部份的時候
就有遇到一個問題 為什麼 我明明都打玩了 可是呈現的圖片並沒有像我想像中的那樣在
被我控制得很順利 但是他是有動的!!

與老師討論過後發現 原來!!
因為我很白癡的只宣告了X1 Y1
也就是說他每執行完一次我應該都要更新X2 Y2他們的位置
所以只要在後面補上
iObjectX2 = iObjectX1 + iObjectWidth - 1;
iObjectY2 = iObjectY1 + iObjectHeight - 1;

這行程式碼就大功告成了!!!!

*使用偵測差意度的時候 我的程式測出來他的值我只需要使用到20就可以讓畫面0差異
但是我為了確保一定成功 所以特地將值給提高到200如上圖


  
在我的構想中 是想要左邊各有兩個木桶位置一個在上一個在下
且不同時間出現漸漸往右移動
而這部分就必須使用iObject[ 2] 陣列來儲存
因為我總共使用了三個物件在遊戲中 所以使用這樣的陣列來宣告會比較方便

而很可惜的是我這次只能做到一個障礙物
就已經禮拜五了  我發誓我對這個專案是相當的重視的 在這個禮拜中 
我碰他的時間絕對是有30個小時之久 但是最後的完成品卻是沒有達到我想要的預期

最後在投票的時候大家還頭給我創意第三名的時候 我真的很謝謝大家
但一方面我是覺得我自己心虛沒有做完 所以很沒有資格去領任何一個獎項
上台發言 也只好草草帶過 
我也自己期許之後有機會當然會在更把握



學期上課心得: 結束了這學期的課 我覺得在影像方面我是很認真的覺得我有大大的提升能力
雖然最後一周我還是沒辦法把我自己的專案給做出完全成品有點難過
真的有點對老師感到抱歉 雖然最後一周都有每天來學校
不過既然 知道就應該要早一點開始 經過一天的思考 
我覺得很重要的一點就是 真的以後每次上課都要跟上每周的進度 
而且真的不能漏掉每一次 因為課程都是有連續的 像我自己覺得
我再到範例六前都完全的有跟上課堂的進度 直到最後一PART因為接近期末考就比較疏忽
導致在暑期夏令營的前一兩天還在搞懂最後一PART的程式碼
這樣就會造成我整個進度的延後 然後我覺得還有依些是真的要好好反省的地方
我覺得有時候如果自己在寫程式的時候  如果真的不太懂
"問人" 是一件不要不好意思的事情 因為如果自己真的不懂 就算再給我兩天
我也還是無法自己DEBUG  另一點 是我覺得一開始我就把自己的重心給放錯地方了
我在一開始的時候 太過於注重自己的外觀 很精心的再去背景 設計封面排版等等
過於疏忽這個遊戲專案的主要內容 這真的是一個很重大的判斷錯誤
希望以後的我可以不要再犯這種錯誤 

一學期下來這樣的課程 照著老師的一開始 呼叫視訊鏡頭 到最後一周的虛擬互動
其實真的是一個還滿有趣的課程 但是如果要持續每天都碰到這些程式到是也真的有點難度
加上因為在學期間 也常常會有些外務 導致很難每兩三天就要挪出時間來練習
這次的夏令營5天
我覺得很棒 在我們考完期末考後 比較沒有壓力的時間
早上九點來學校到下午四點 雖然我有時候很容易睡過頭 
不過睡飽後可以比較放鬆的思考程式碼
我覺得是對這方面 有相當大的進步的
最後也謝謝老師 跟我們一起在最後一個禮拜一起奮鬥
雖然還有颱風來攪局之累的 還是一樣9點準時在S5131出現
DEMO的前一天晚上還願意犧牲吃飯時間 陪我們DEBUG到晚上10點
電腦自動關機.....當下是真的有點傻眼
不過我回家後 自己在寫一遍 反而相當的順利 且當初不小心搞混的IJ變數等等
也迎刃而解了。

2012年6月5日 星期二

期末專案構想

我這次的期末構想是類似像閃避障礙物的遊戲
如圖中一開始會有一個人物
而感應互動的部分必須支撐在人物的下方
可以是手 也可以是顏色較鮮明的物體 看情況而定哪個顏色較易辨別及效果特別好

當障礙物以亂數隨機由左至由時
必須控制人物上下來閃避障礙物
遊戲會有關卡難易之分及時間限制
當閃避過一座障礙物會積分+1
當時間結束時 看誰獲得積分最多及可獲勝


2012年6月4日 星期一

HW02

第二次的互動視訊作業
其實早就做好了 只是現在才上傳

這次是要做錄影的部分
其實啊 我覺得這算是目前最簡單的作業了吧

因為只需要幾個指令就可以完成的
首先我錄影funtion的部分

capFileSetCaptureFile(hwndVideo,"CAPTURE.AVI") ;
capCaptureSequence(hwndVideo);
只用了兩行的程式碼
一開始先在前面宣告 hwndVideo 也就是藥使用錄影的功能
"CAPTURE.AVI"這個是我錄影的檔名
他自己就會存在我程式的檔案夾裡了

在結束錄影的部分
也只用了一行的程式碼
capCaptureStop(hwndVideo);
這次的作業算是還滿容易上手的

下面就是我上傳Youtube的檔案
640*480的解析度 隨便拍個1X秒就要106MB了 檔案真大....




HW03

這次是第三次的作業 是上次作業龍珠的加強版
也就是選擇相框

首先一開始必須先挑選需要使用的相框圖1-2
而我想說為了要方便讓程式辨認
所以將我想要透明的部分改為黑色

修圖的部分必須注意一個小細節
就是如果是使用Photoshop修圖的話 在存檔之後
使用程式讀取 會一直發生error無解的bug
但是使用小畫家的話卻不會這樣
所以我嘗試先使用Photoshop來修圖比較方便之後再使用小畫家開起
存成bmp後這個問題就解決了!!
事實證明小畫家還是很好用 薑還是老的辣!!

進入程式部分我遇到了一個問題而且debug很久,明明確定都沒有錯的問題
程式一直顯示 ScanLine out of range!!
通常遇到這樣大概都是直覺去找尋值哪裡錯誤
沒錯 我也是這樣!!!但是找了很久 就是真的沒有錯誤
突然靈機一動看到!!
原來我讀取的是"JPG格式"
沒錯 雖然可以讀取JPG格式 但是在程式裡卻只能使用BMP執行!!

解決了這些小小的蠢問題後就是開始RUN之後出現的BUG

一開始會發現怎麼畫面右方怪怪的 如圖1-1
1-1 畫面錯誤圖
1-2 相框原圖

原本的相框1-2 應該長這樣,但是顯示出來右邊卻變成好像是另一張圖疊到
經過與老師的討論發現!!
原來是我的大小陣列設錯了
unsigned char ucPhotoFrameRGB[2][640][480][3]; 
unsigned char ucPhotoFrameYUV[2][640][480][3];

程式碼中 第一個為編號 接下來為長*寬 第四個為使用RGB三種顏色
但是因為我是參考老師的範例程式 沒有看清楚原來 I、J 的變數是相反的
也就是說我應該要改成
unsigned char ucPhotoFrameRGB[2][480][640][3]; 
unsigned char ucPhotoFrameYUV[2][480][640][3];

這樣就會變為正常的大小了圖1-3
1-3 正常相框顯示圖

 1-4 相框2樣式圖

為了想要增加程式的多元性
所以我利用了上禮拜所教的點選功能+改變編號
來進行快速選擇多個相框 隨興想要換哪個就換哪個很方便
1-5 灰階模式圖

第二個部分就是要將顯示的模式調為灰階 圖1-5
這個比較簡單一點 只要稍微改一下YUV的部分 改成128就可以了

比較麻煩的是進階 要選取可以自己想要的色彩
就像是市面上很多手機APP那樣拍完照還可以調整看是要哪個模式
復古、鮮紅、海洋藍等等 
就是類似那樣的功能
首先必須先拉出一個Colordialog物件
重點就是這邊 要寫一小段可以呼叫初選取顏色的介面圖1-7
這樣的話 其他就可以用跟灰階模式的方式寫出來了!!
1-6 選取彩色模式圖

1-7 復古模式圖

1-8 復古籃模式圖

到這裡就大功告成了
不過我以為這樣就結束了 沒想到出現令我無言的事情
到學校開程式竟然無法打開
我的是2010的BCB 用學校的XE版本竟然無法開啟 會一直顯示
  ScanLine out of range!!
但是根本沒有錯
結果使用BCB6的版本卻又可以使用
這次又真的證明 
薑還是老的辣 嘖嘖

2012年3月7日 星期三

HW01


成品↑

首先呢 關於這次互動視訊課程的第一個作業
也就是先將簡單基本的可以開出一個視訊顯示視窗
而當然也是使用我們比較熟悉的BCB

一開始最簡單的就事要先從介面設計著手
先拉取一個Panel也就說想要將我們視訊想要放取的位置
當然個大小也是可以隨意我們調整的
從左邊的屬性 找到Height、Width可以很容易的改變
我自己的畫調整成320*480好讓畫面可以比較協調一點
在下來想要可以有上面的介面按鈕的話就必須要使用下面這個↓
使用這個原件後就可以讓我們輕鬆的設定上方的按鈕
而當然為了可以讓自己更清楚了解按鈕的功用
輸入中文也是可以的!!

接下來就是進入寫程式的部分
一開始有個最最最重要的部分
也就是"標頭擋"
而這邊使用的特殊標頭擋是#include
也就是Video for Window的縮寫 接下去程式碼的部分
int iCapWindowWidth = 480; int iCapWindowHeight = 320;
這個是我用來設定說我顯示在Panel的大小視窗一樣也是可以隨自己喜好調整

之後就會出現黑色的視訊框框
因為現在只有開啟的部分所以之後還必須要有連結的部分

也就是以下這段程式碼 capDriverConnect(hwndVideo, dwDriverIndex);
可以將視訊裝置與視訊截取視窗連結起來也就是driver的意思

之後就會出現視訊截取的畫面
接下來調整成Preview模式也就差不多塊大功告成了

最後一個步驟就是必須選擇我所想要的影格速率
在老師給的程式範例中有兩個速率一個是
每秒30影格、15影格
而每秒30影格的範例程式為下
capPreviewRate(hwndVideo, 33);
一開始實在非常好奇為什麼後面的數字為33
之後發現原來後面的那個數字是指miliseconds(微秒數)
也就是說每33微秒有一個影格
1000/33的話就是大約為30個影格/秒
既然知道了這個意思那就可以隨心所欲的調整自己想要的速率
所以我又自己增加了三個速率
capPreviewRate(hwndVideo, 16);60影格/秒
capPreviewRate(hwndVideo, 500);2影格/秒
capPreviewRate(hwndVideo, 1000);1影格/秒

發現真的很有趣
因為影格越少看到的畫面也就越像是跳躍的方式
而影格越多畫面也就看起來越流利相當的連貫

這次第一次的作業
雖然大多都是老師的範例程式碼
但是經過好好的研究練習後大約也都懂大概如何使用
第一次使用BCB來打出視訊的程式相當的有趣
這次的作業只是個開始
接下來也希望可以在更深入的了解這方面的程式碼使用方法