其實突然也不知道要寫啥
總之評分的話
大致上出席率還算不錯
扣掉幾次身體不舒服沒來以外
程式的部分我基本上該有的功能也都有自己把它寫出來了
畢竟這個部份對我來說不算太難
指定閱讀的部份後半部以後的我比較沒有去念
所以大概就是這邊扣點分數吧
不過看再寫程式而且我最後又花了時間寫了這支程式的說明文件的份上
給自己85分吧
我認為我自己在這門課應該有這個分數
2008年1月9日 星期三
2007年12月20日 星期四
同心圓重疊
寫完方形的忘記要改寫成同心圓
一開始就把CANVAS的地方改寫成SCANLINE
基本上我比較擅長用SCANLINE
所以改起來還挺輕鬆的
大概就把GetRValue改成抓ptr[j*3+2]
G和B類似作法
再把整張圖塞回值這樣的作法
因為使用SCANLINE
比起CANVAS的方法要快上很多
開圖檔都不會頓
然後就是把方形改成圓形的
由於和之前的混合顏色修改成圓形很類似
所以改一改又弄好了
只是要決定直徑比較麻煩
還有就是一開始是參照方塊的作法
結果忽略了範圍
圖變成很奇怪的圓形
最後察覺到才都掃瞄整張圖
最後結果

我用的畫圓法搞不好是比較笨的方法XD
//---------------------------
問題
再DVD燒錄技術有一個是追加資料
說是把新增的資料在追加到外圈的TRACK中
但是耗費的空間會增加(譬如我追10M的資料他起碼要15M的空間)
這是為什麼呢?
一開始就把CANVAS的地方改寫成SCANLINE
基本上我比較擅長用SCANLINE
所以改起來還挺輕鬆的
大概就把GetRValue改成抓ptr[j*3+2]
G和B類似作法
再把整張圖塞回值這樣的作法
因為使用SCANLINE
比起CANVAS的方法要快上很多
開圖檔都不會頓
然後就是把方形改成圓形的
由於和之前的混合顏色修改成圓形很類似
所以改一改又弄好了
只是要決定直徑比較麻煩
還有就是一開始是參照方塊的作法
結果忽略了範圍
圖變成很奇怪的圓形
最後察覺到才都掃瞄整張圖
最後結果

我用的畫圓法搞不好是比較笨的方法XD
//---------------------------
問題
再DVD燒錄技術有一個是追加資料
說是把新增的資料在追加到外圈的TRACK中
但是耗費的空間會增加(譬如我追10M的資料他起碼要15M的空間)
這是為什麼呢?
2007年11月29日 星期四
2007年11月14日 星期三
棘手

討論 8-Puzzle Game
a. 狀態表示方式 (state representation)
8-Puzzle遊戲中的表示方式我是使用Label和Bevel兩個物件去構成一個小的九宮格
123
456
789
圖片切成的小塊分別對應這9塊
b. 搜尋演算法 (state space search)
若是搜尋路徑的演算法的話
我是想到兩種
一個是課堂說的
建構一棵樹
循著這棵樹去把最短的那幾條路徑給找出來
另一種是把它當成一種排序
只是是一種有設立一些規則的立體排序
把BUBBLE SORT這類的排序法當作應用去做
c. 遊戲初始打亂演算法 (initialization)
其實這部分想到歸想到
但是在實作的時候有碰到幾個麻煩
一開始我是想說寫幾個副程式去減少重複的CODE
可是要是碰到物件的時候
譬如說我的Label1控制
程式內本來是
Label1->Caption = IntToStr(puzzle8[0]);
可是因為寫成副程式
我必須多加上這個FORM的名稱(我的是DMC)
變成
DMC->Label1->Caption = IntToStr(puzzle8[0]);
但這還不是麻煩
最麻煩的是我打算動態去做Image物件內容的變換的時候
是使用FindComponent這個函式
試了許久
都會出現Member identifier expected這個警告
本來打算先放棄不寫完了
後來想到直接把函式直接寫在程式裡面也是可以...
這樣就不會出現這個ERROR的問題了
接著就是怎麼讓程式去跑
一開始的想法是
初值是9
從9開始去隨選路線
因為是使用陣列控制
所以作交換的時候
四個方向就是分別對原本的陣列作+3或-3或+1或-1的位置去做交換就行了
可是我又再作的時候
似乎又有RANDOM的選取問題
頭腦有點打結
所以最後決定照這個想法
但是使用比較暴力的寫法
用兩層switch去控制
不再用通式去做計算
不過這暴力的有點過頭
我自己都覺得不太好意思把code拿出來orz
code是長了一點
不過作打亂的時候是ok的
也試了幾次也ok可以排回來
找時間在縮短一點code
至於本來有個bug
是交換的時候
初始flag是9
要是我換了嫌不夠亂
在按一次按鈕的時候
本來有排不回來的狀況
是因為排亂第一次的時候
最後白色區塊不一定會在右下
所以flag不能設9
要保留原值
然後是缺失
我沒有去記憶之前的路線
完全是死的亂走
有可能會走原路回來
所以步數我不是設30步了
設成100步
亂的樣子才會有出來
關於程式大概就這個樣子
------------------------
問題的話
是關於css的
因為感覺他用起來和html+java script有點像
那麼
到底有什麼樣明顯性的差異呢?
2007年11月7日 星期三
week7 8-puzzle
上週生病沒去上課
要做的東西是打聽來的
首先是新增JPEG的開檔和寫檔功能
先在OpenPictureDialog1和SavePictureDialog1中的Filter中的選項新增JPG這個項目

接著是在我的標頭檔(Unit.h)中新增一行
include "jpeg.hpp"
這樣就能讀取JPEG檔了
可是他不能像BMP檔一樣處理
所以我們讀取後把他轉成BMP檔
讓他可以做處理
重點程式碼使用這些
TJPEGImage *TheJPEG;
if(OpenPictureDialog1->Execute())
{
if(OpenPictureDialog1->FilterIndex==1)
BMPIMAGE->Picture->LoadFromFile(OpenPictureDialog1->FileName);
else
if(OpenPictureDialog1->FilterIndex==2)
{
TheJPEG=new TJPEGImage;
TheJPEG->LoadFromFile(OpenPictureDialog1->FileName);
BMPIMAGE->Picture->Bitmap->Assign(TheJPEG);
}
}
就能如下圖一樣開啟和處理JPEG影像
寫檔也是差不多就不贅述
因為不知道上禮拜寫JPEG這部份有上到什麼
所以我把以前寫過的東西就弄上去

然後是8-puzzle的移動
我其實最後選用比較笨的方法
看點選哪個圖
偵測周圍有沒有白色那張圖
如果有就做交換
有使用個小陣列(puzzle8[9])方便判斷用
中間有遇到個問題
就是圖做不到交換
會變成兩張一樣
因為會這樣
所以我採用更笨的方法
直接把要換的圖換過去
然後要變白色的部分在填上白色
最後無聊把陣列號碼也寫在旁邊方便移動

接著又用很笨的方法去判斷圖片完成沒
直接用if和&&去跑陣列
如果全都正確那就跳出恭喜的小視窗
本來有想到用迴圈+flag
不過實在有點懶
就暫時使用這樣的方法

因為每張圖的事件判斷都用複製貼上
所以code有點又臭又長的
我找時間想個辦法改進看看好了
----------------------------------------
打亂8-PUZZLE的想法:
我想到的是比較笨的方法
基本理念就是叫程式學人一樣作移動打亂
所以首先我去找到陣列內內容是9的在哪邊
再從周邊(上下左右)去隨機選擇一塊作交換
然後再去找9
在隨機交換
就這樣LOOP
LOOP次數(空白的移動次數)也隨機產生
做了N次就停止
這是參考人類手動打亂的方法去想的
讓電腦做人在做的事情
要做的東西是打聽來的
首先是新增JPEG的開檔和寫檔功能
先在OpenPictureDialog1和SavePictureDialog1中的Filter中的選項新增JPG這個項目

接著是在我的標頭檔(Unit.h)中新增一行
include "jpeg.hpp"
這樣就能讀取JPEG檔了
可是他不能像BMP檔一樣處理
所以我們讀取後把他轉成BMP檔
讓他可以做處理
重點程式碼使用這些
TJPEGImage *TheJPEG;
if(OpenPictureDialog1->Execute())
{
if(OpenPictureDialog1->FilterIndex==1)
BMPIMAGE->Picture->LoadFromFile(OpenPictureDialog1->FileName);
else
if(OpenPictureDialog1->FilterIndex==2)
{
TheJPEG=new TJPEGImage;
TheJPEG->LoadFromFile(OpenPictureDialog1->FileName);
BMPIMAGE->Picture->Bitmap->Assign(TheJPEG);
}
}
就能如下圖一樣開啟和處理JPEG影像
寫檔也是差不多就不贅述
因為不知道上禮拜寫JPEG這部份有上到什麼
所以我把以前寫過的東西就弄上去

然後是8-puzzle的移動
我其實最後選用比較笨的方法
看點選哪個圖
偵測周圍有沒有白色那張圖
如果有就做交換
有使用個小陣列(puzzle8[9])方便判斷用
中間有遇到個問題
就是圖做不到交換
會變成兩張一樣
因為會這樣
所以我採用更笨的方法
直接把要換的圖換過去
然後要變白色的部分在填上白色
最後無聊把陣列號碼也寫在旁邊方便移動

接著又用很笨的方法去判斷圖片完成沒
直接用if和&&去跑陣列
如果全都正確那就跳出恭喜的小視窗
本來有想到用迴圈+flag
不過實在有點懶
就暫時使用這樣的方法

因為每張圖的事件判斷都用複製貼上
所以code有點又臭又長的
我找時間想個辦法改進看看好了
----------------------------------------
打亂8-PUZZLE的想法:
我想到的是比較笨的方法
基本理念就是叫程式學人一樣作移動打亂
所以首先我去找到陣列內內容是9的在哪邊
再從周邊(上下左右)去隨機選擇一塊作交換
然後再去找9
在隨機交換
就這樣LOOP
LOOP次數(空白的移動次數)也隨機產生
做了N次就停止
這是參考人類手動打亂的方法去想的
讓電腦做人在做的事情
2007年10月31日 星期三
WEEK6
這次是簡單製作3乘3的隨機圖形排列

我所使用的圖形有三種
方法是利用一個3X3的二維陣列
用RANDOM的方式填入0~2的數值
srand(time(NULL));
for(i = 0 ; i < j =" 0" href="http: tw=" s3360256="" jpg="">
利用這個物件我可以比較輕鬆的利用陣列的內容把ImageList編號過的圖片給一次大批輸出
不需要一個個的去指定Image物件所要讀取的圖片內容
ImageList1->Draw(Image00->Canvas,0,0,map[0][0],true);
ImageList1->Draw(Image01->Canvas,0,0,map[0][1],true);
.
.
.
(類推)
然後是設定一下圖片的屬性
我希望把圖片的白色背景去除
所以將去背這個選項給開啟(Transparent==true)
最後利用一個按鈕
希望按下去的時候圖形會重新洗牌
這時我發現新的圖形會和舊的圖形疊在一起繪製
我使用的解決法是在重新繪製之前
先把每張圖讀入一張全白的圖
接著再用上面的方法繪製
最後使用
Image00->Repaint();
Image01->Repaint();
Image02->Repaint();
.
.
.
重新描繪圖
不過缺點是連續重新洗牌的時候
圖片更新速度不是很快
另外就是要思考關於兩張圖交換的事件要怎麼去設定
交換的時候基本上像BUBBLE SORT的交換陣列內容寫法再把圖片重新描繪出來就可以了
但是甚麼時候要交換的條件可以成立就比較麻煩一點了
這個部分完成後還要去思考超過三個在一排時候的消去方式
至於時間可以利用Timer這個物件去做設定
要寫這個遊戲比較難的地方可能就是點選兩個圖的時候可以交換的成立事件吧
目前的想法是利用一個flag當作紀錄
再用一些判斷式做前置判斷
這些地方還要再做一些思考
接著是8-Puzzle的切割部分
基本上就是照著老師的作法去實作的
可能不同的地方是用計算的方式
我是利用把原圖除3的方式把圖給割出來
不是手動去分配的
只是出現的結果似乎顏色有點跑掉
不知道是不是圖片大小的緣故?
再這邊碰到一個麻煩的地方就是假如我不是一個正方形的圖去做的話
除三的結果去割會變的很奇怪
這部份可能我再想看看吧
==================================================================================================
在本章的問題方面
對VRML這個虛擬實際技術比較有興趣
我記得這是可以使用在網頁的插件去實行3D場景的一個技術
那麼在裡面的儲存方式和描繪方式和OpenGL之類的3D軟體有甚麼樣的不同呢?
另外就是關於3D動畫方面
我知道有一種流行的3D風格
介於2D和3D之間的賽璐璐風格式3D
它在傳統3D那種描繪方式有甚麼不同呢?
感覺是比較平面的3D
還是他是利用2D貼圖的偽3D呢?

我所使用的圖形有三種
方法是利用一個3X3的二維陣列
用RANDOM的方式填入0~2的數值
srand(time(NULL));
for(i = 0 ; i < j =" 0" href="http: tw=" s3360256="" jpg="">

不需要一個個的去指定Image物件所要讀取的圖片內容
ImageList1->Draw(Image00->Canvas,0,0,map[0][0],true);
ImageList1->Draw(Image01->Canvas,0,0,map[0][1],true);
.
.
.
(類推)
然後是設定一下圖片的屬性
我希望把圖片的白色背景去除
所以將去背這個選項給開啟(Transparent==true)
最後利用一個按鈕
希望按下去的時候圖形會重新洗牌
這時我發現新的圖形會和舊的圖形疊在一起繪製
我使用的解決法是在重新繪製之前
先把每張圖讀入一張全白的圖
接著再用上面的方法繪製
最後使用
Image00->Repaint();
Image01->Repaint();
Image02->Repaint();
.
.
.
重新描繪圖
不過缺點是連續重新洗牌的時候
圖片更新速度不是很快
另外就是要思考關於兩張圖交換的事件要怎麼去設定
交換的時候基本上像BUBBLE SORT的交換陣列內容寫法再把圖片重新描繪出來就可以了
但是甚麼時候要交換的條件可以成立就比較麻煩一點了
這個部分完成後還要去思考超過三個在一排時候的消去方式
至於時間可以利用Timer這個物件去做設定
要寫這個遊戲比較難的地方可能就是點選兩個圖的時候可以交換的成立事件吧
目前的想法是利用一個flag當作紀錄
再用一些判斷式做前置判斷
這些地方還要再做一些思考
接著是8-Puzzle的切割部分
基本上就是照著老師的作法去實作的
可能不同的地方是用計算的方式
我是利用把原圖除3的方式把圖給割出來
不是手動去分配的
只是出現的結果似乎顏色有點跑掉
不知道是不是圖片大小的緣故?

除三的結果去割會變的很奇怪
這部份可能我再想看看吧
==================================================================================================
在本章的問題方面
對VRML這個虛擬實際技術比較有興趣
我記得這是可以使用在網頁的插件去實行3D場景的一個技術
那麼在裡面的儲存方式和描繪方式和OpenGL之類的3D軟體有甚麼樣的不同呢?
另外就是關於3D動畫方面
我知道有一種流行的3D風格
介於2D和3D之間的賽璐璐風格式3D
它在傳統3D那種描繪方式有甚麼不同呢?
感覺是比較平面的3D
還是他是利用2D貼圖的偽3D呢?
2007年10月24日 星期三
本週作業
BCB程式的部份
我使用比較動態的方式處理
就是自己去填顏色
然後點圖去產生圓形
我使用比較動態的方式處理
就是自己去填顏色
然後點圖去產生圓形

由這張圖可以看到我在圖上面移動的時候可以知道我移動時的點座標和顏色比例
另外利用選項去改變背景的顏色(白或黑)
根據選項去決定使用加法混色或減法混色
另外就是用滑鼠按下的事件決定圓的圓心
本來有預定要連半徑都動態決定
不過覺得這樣再疊圖會有點麻煩
而且選項太多又不好
所以固定半徑為50個PIXELS
a. 描述撰寫過程曾經遭遇的困難
在減法混色部份我剛開始沒有搞懂
所以本來利用NOT(!)做對了
卻以為出來的顏色是錯的(填紅色卻出現青色)
重看一次課本圖才知道我沒弄錯
最後沒用NOT用補數(~)做完


b. 心得
我只是用一些比較漂亮的東西下去
沒什麼
只是設計感不是很好
不過挺有趣的就是
另外我這次將程式放在系主機上面給大家玩看看
雖然大家寫的應該差不多
-------------------------------
接下來是問題
有關於類比視訊規格
NTSC和PAL...
這兩種規格除了每秒的播放速度的差別外
還有什麼樣的大差別?
譬如說會不會因為所屬地區不同造成無法播放的問題產生
之前使用PREMIERE時
就會先問我們要使用哪種規格
感覺上不會因為地區有所差別
那麼選這規格的意義是在?
2007年10月10日 星期三
2007年10月3日 星期三
BCB注意事項
最近在準備總審比較忙點
所以這次只寫一下有關BCB的一些注意事項
首先是剛開始容易犯的錯誤
一個是你在物件裡面寫好了一個程式
後來不需要那個物件了
大部分的人的習慣就是
直接把物件DELETE掉
這樣做的後果
會造成COMPILER ERROR
因為你的物件資料會寫在define檔中
可是你的程式碼還在
以前我碰到這種狀況的解決方法就是重寫一次程式
正確的刪除物件順序應該是
先進code編輯器->將該物件的程式碼清除(物件的名稱欄不要刪,就是只刪除{}內的東西)
再把物件刪除->compiler
另外就是有些時候在不同電腦上
你安裝的BCB程式版本不同
造成無法繼續撰寫程式
所以這時候就請將BCB的程式打包起來
方法請參考
http://blog.yam.com/kaisudo0520/article/6902327
這篇寫的打包法
其他重點找機會在敘述
怕有人會混亂
所以這次只寫一下有關BCB的一些注意事項
首先是剛開始容易犯的錯誤
一個是你在物件裡面寫好了一個程式
後來不需要那個物件了
大部分的人的習慣就是
直接把物件DELETE掉
這樣做的後果
會造成COMPILER ERROR
因為你的物件資料會寫在define檔中
可是你的程式碼還在
以前我碰到這種狀況的解決方法就是重寫一次程式
正確的刪除物件順序應該是
先進code編輯器->將該物件的程式碼清除(物件的名稱欄不要刪,就是只刪除{}內的東西)
再把物件刪除->compiler
另外就是有些時候在不同電腦上
你安裝的BCB程式版本不同
造成無法繼續撰寫程式
所以這時候就請將BCB的程式打包起來
方法請參考
http://blog.yam.com/kaisudo0520/article/6902327
這篇寫的打包法
其他重點找機會在敘述
怕有人會混亂
訂閱:
文章 (Atom)