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次就停止

這是參考人類手動打亂的方法去想的
讓電腦做人在做的事情

沒有留言:

張貼留言