.bmp)
2007年11月15日 星期四
作業
在這次的程式作業中,從一開始的如何運用BCB指令去分割一張圖片,覺得還算蠻好玩的,在程式的撰寫當中雖然遭遇到很多的困難,可能是對BCB的指令還不大熟的關係吧!所以去請教同學教我如何做分割,最後分割總算是成功了!接下來就是要讓圖片打亂而且還要能移動做成一個小遊戲,這個就更困難了,也是用了很久才有些許了解,所以要對BCB的指令要更加熟悉才可以,這樣才能得心應手。
本週指定閱讀問題:
HTML為超連結標記語言,是為了要讓網頁能在各家平台都能通行無阻,變制定了HTML標準,提供了一種統一格式的資訊表示方法,那又何謂DHTML??還記得上次有聽過上Web程式設計課的人有說過利用HTML來寫網頁沒有除錯的功能,有時候往往一個大小寫打錯或是單字拼錯,網頁整個就會無法顯示,這是為什麼呢??有沒有有可以除錯的網頁編輯器呢??
2007年11月8日 星期四
WK7_8_Puzzle
問題跟補圖.....
拼圖+心得+問題
1。這張是一開始的執行檔
簡單的視窗和按鈕,目前為止還ok
←這時候的怪怪新村的"村"還正常
2。類似上次作業的九宮格把圖切割
不過,要空出一格到時候讓圖案可以跑
←這時候村就不見了
3。打散&開始拼圖
自己試了一下,雖然有教學網站可以看
不過我還是用了好久= ="
雖然這次有參考其他的同學po在部落格上的程式碼
雖然不完全是自己打的,不過還是研究了很久
我自己後來有去拼完成,沒有做出成功之後會跳出的視窗
因為寫的時候debug一直有錯誤,(套陳建利一句話:我討厭debug)
在寫程式的時候明明就調好了,在執行的時候字就會不見
有一點鬧鬼的感覺
*問題:
bbs和一般的網頁撰寫的方式應該差別很大吧
我其實滿想了解bbs的原理
以及他存在在網路上的方式
畢竟學校也有架設bbs,應該要了解一下才對!
week07 8-puzzle

這是我第七週的東東,基本上就只是會動而已~
嚴格要求到不會有bug.完全正常的移動.
唯一的缺點就是...我作完時才發現..沒有辦法判斷甚時候才完成拼圖!?
看來還要加點東西才可以~
(只好下次摟~)
我的方法沒有其他人那麼複雜~
很簡單.
第一..切
第二..移..
就這樣~
只是我移的方法是用
Image1->Picture=Image2->Picture;
這樣.把圖給換過去~
(事實上我用了十張image)
用來當緩衝.
所以我只是在那九張image裡寫
1.判斷鄰近image是否有看不到的image?
2.互換!
就這樣完成摟..
程式碼範例:以中間那一個為例..其他依此類推~
Image11->Picture=Image6->Picture;//先把自己丟給緩衝
if(Image3->Visible==false)
{
Image6->Picture=Image3->Picture;//互換!
Image3->Picture=Image11->Picture;//換回來
Image3->Visible=true;//把原本看不見設成看得見
Image6->Visible=false;//把原本看的建設成看不見!
}else if(Image5->Visible==false)
{
Image6->Picture=Image5->Picture;
Image5->Picture=Image11->Picture;
Image5->Visible=true;
Image6->Visible=false;
}else if(Image7->Visible==false)
{
Image6->Picture=Image7->Picture;
Image7->Picture=Image11->Picture;
Image7->Visible=true;
Image6->Visible=false;
}else if(Image9->Visible==false)
{
Image6->Picture=Image9->Picture;
Image9->Picture=Image11->Picture;
Image9->Visible=true;
Image6->Visible=false;
}
就是這麼簡單...
心得:
看來有時候太衝動..寫太快也不好...
2007年11月7日 星期三
week7-作業!! 程式圖+心得+問題

←這是我的執行檔唷!!超可愛的吧!!
(只是上網抓了icon小圖,改了一下,
是看到地下室那位同學PO文
所以 我也想改一下!!)

1.執行
2.先把圖分割成九塊減一
3.打散
4.開始拼圖囉!!
(為了用完成圖,我拼超久的啦!!
最後啊!是用小畫家剪貼的QQ,
在拼下去,我會陷入無限回圈!!)
●心得
上次已經寫出擷取圖片,也就是分割成九塊減一,(我上次沒有減一)
這次啊!是直接要寫出拼圖了!有點棘手!
是不知從何下手,
後來就想說,程式嘛,一步一步慢慢來吧!
第一步,就是要先把切割好的八塊圖片,打亂,所以我用了一個按鍵,
是把圖片打散的,我是取亂數,然後,讓他隨機交換。
第二步,就是要想怎麼跟空白的那個位置做交換,中間那個最不用考慮了,
因為他上下左右都可以跑,其他的就要考慮了,然後再寫一個swap將換的函數,
嗯~~C++很常用的,GOOD!! 這邊我也是用了一個按鍵,開始拼圖,
上一個只是打亂,但是不能做拼圖的動作,這邊這個才可以玩,
這邊,我又寫了一次取亂數耶,也就是說上一個按鍵,可以刪掉了!!
可是這邊寫的,是直接用亂數和swap,去隨意交換,程式碼比較簡短,!!
第三步,是在我寫功課之前我有上來blog看一下,看到,地下室的哪位同學,
說了一個很有用的東西,並不是每個人的電腦都有裝BCB,要讓程式完美,
就要讓它在每台電腦都可以執行,所以,我就更改設定了,
拿我室友的電腦來做實驗,OK的!!還改了icon的小圖唷!!
最後一步,應該是要判斷,拼圖完成了沒,但是,我始終沒有完成過,
所以,我自己也不知道,結果會是怎樣耶!!@@"
部落格很好用,同學很好用,BCB好難用!!
●問題
在輸入網址列的地方,通常前面是http://也有用過ftp://,
這是專門用來傳輸擋案的,就像開自己的文件夾一樣,
還有bbs://是用在kkman的時候才會看到的,但是在別人電腦
,我還看過另外一個,〝PPG://〞←超陌生的耶!!
PPG:// 他的功用是什麼呢?!
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次就停止
這是參考人類手動打亂的方法去想的
讓電腦做人在做的事情
拼圖 &問題

之前內碼就有了 只是把它顯示出來而已
以下是亂數做圖:
總算完成了...算是滿徒法煉鋼的= =
一開始取亂數:
想說用二維陣列去做,結果寫一寫還是太麻煩了 ,很亂很亂~.結果還是用一維陣列做下去了,
因為取圖大小都一樣,所以我就把它丟給temp儲存, 而每個圖的範圍我給它設定好後丟到s0~s8去 方便存取, 然後再去做圖片位置(位置用算的x+???,y+???)各丟給img[s?],如:
Image00->Canvas->CopyRect(temp,OriginalImage->Canvas,img[s0]);
而之後的s1~s8 ,再取亂數 分別丟到其他圖片去,並判斷重複與否,就可以完成亂數了...
之後要做位置轉換:
為了之後方便判斷拼圖是否答對,一開始設定儲存亂數值a[?]=s0~s8,
以及正確的答案b[]={0,1,2,3,4,5,6,7,8} ,之後每個圖各別判斷相鄰四方的位置a[?]代表的是否是0,是則點取時做對換,此時徒的值要換 s0就要跟著換 ,
而判斷是否為正確的a[?]當然也要對換了... 比如:
if(a[0]==0) { t=s0; s0=s1; s1=t;
t=a[0]; a[0]=a[1]; a[1]=t;
Image00->Canvas->CopyRect(temp,OriginalImage->Canvas,img[s0]);
Image01->Canvas->CopyRect(temp,OriginalImage->Canvas,img[s1]);
}
分別判斷完之後 移位沒問題 就來做判斷答案了:
先前已經做好了a[?]的轉換設置,當a[]=b[]={0,1,2,3,4,5,6,7,8}的時候,
做一個for loop判斷a,b的正確數是否為9 是的話就輸出 確認答案是正確的之訊息
以下是正確答案之圖:
中間其實許多多程式碼上打錯的錯誤在,其中有一個是因為我做的是左上角為空圖,每次轉換完後若想按亂數重做,因為左上角已經變成其他區塊的圖示了,圖示會留著 其他做亂數,會有跟其他有重複的情形,最後以在做亂數部分補了一個s0=0;之後圓滿解決~
完成執行檔放在webhd分享名稱: GGspace
Question7:
網頁上有許許多多的圖片.文字,很多都做成了超連結,
請問他們儲存的格式是否是一樣的? 是什麼格式呢??
2007年11月6日 星期二
拼圖-加強版
開始:
第1步:分割圖,請參考上一篇
第2步:亂數排序,傳入要交換的2個圖編號(0~8),利用位置交換
經過老師提醒後發現會出現無解的情形,所以上網找了何時會出現無解的情形
加上一個如果無解則將空白移到有解的位置判斷(無解的判斷法在下面)
遊戲:
第1步:點空白四周的圖,判斷位置是否跟空白的位置相差為一個圖的長或寬
是則移動
第2步:用陣列確認是否完成,一開始是0~8,當圖移動時跟著移 ,未完成則回到遊戲第1步
EX:第5個跟第9個圖(空白的圖)交換,陣列變{0,1,2,3,8,5,6,7,4}
第3步:顯示出隱藏的第9格
無解的判斷法:
參考下面的那個網頁
http://www.shes.hcc.edu.tw/~oddest/math162.htm
覺得第一個方法太麻煩第二個看不懂
沒關係,我也覺得很麻煩
所以,觀察了一下,發現還有一個方法,下面是用小畫家畫有解的圖
看出來了嗎?
由於空白到原本位置的移動次數等於交換次數
而移動次數跟移動到原本位置的最少次數都為奇數次或偶數次
(例如:移4次的空白移動到原本位置最少次數的路徑為空->7->8為移2次)
因此可得到若交換次數跟空白移動到原本位置的最少次數都為奇數次或偶數次
時有解。
2007年11月4日 星期日
8 Puzzle Game finished

【心得】
所以在測試的時候才會發生 Image 通通跑錯位置的烏龍
{
if(BMP[8]->Top==40 && BMP[8]->Left==424)
{