好康道相報
※加入部落軌道,讓你的部落格有更多人知道 《按此加入》《使用心得
※欲轉貼本站文章者,只要註明出處及網址即可,不需我同意了,謝謝您的配合
※留悄悄話的網友請注意:如果您非痞客邦會員(包含使用FB/Google+帳號),是看不到回覆的喔
※痞客邦會自動將疑似廣告留言隱藏,因此若留言後看不到,可能是被系統自動隱藏了,由於我現在很久才會開一次網誌,有看到時我才會將非廣告留言解開,敬請見諒

 

以前的視窗老師跟我要兩年前在課堂上的這個臨時作業...
不過當時我覺得我做的太爛了所以沒有存檔
所以現在就加上當時沒做的功能重寫一次,當作練習

遊戲就是簡單的記憶翻牌遊戲(俗稱對對碰)
因為這只是練習用,所以跟尋常的對對碰無異
只有增加當時沒寫的一點點小功能
像是按鈕數可以動態決定(不過最大11*7,因為螢幕不夠用了=__=)
還有增加音效或小限制
按鈕可以設奇數個,多出來的那一個是擾亂用的XD

圖片使用神奇寶貝珍鑽版的圖片
理由一是變化多,理由二是好找,理由三是格式相同且不會太大
每次開始遊戲的圖片是從151隻裡面隨機挑出來的
為什麼不用493隻?因為版面最大也只能挑出38個
全部圖片都包進去實在太佔空間了

順便提醒一下,如果按鈕數超過50個,並在100秒內過關
會有驚喜喔( ̄ー ̄)

遊戲下載(184 kb,需要.NET Framework 2.0)
會比平常大的原因是因為大部分是圖啦
原始碼(請不要進行二次散布,遊戲中需要的圖片、音效存在bin\debug中)

-----
由於程式實在是太過簡單,所以我嘗試簡短了變數的宣告
比方說一般的設計應該會宣告按鈕陣列
還有記憶按鈕實際編號的數字陣列
但其實數字陣列可以不用另外宣告
因為VB的每個物件都有Tag屬性
可以讓你放置數字或文字等任何東西,就像備註一樣
這麼好用的東西怎麼可以不用呢?

還有,有些人會把選項的設定再宣告一個全域變數使用
(例如選項的Form設定X,Y大小,在遊戲畫面的Form又宣告一個X,Y紀錄)
這其實也是多此一舉
只要確定選項在遊戲進行時不會被改掉
直接去抓別的Form的物件的變數不就好了?

另外就是翻牌失敗牌面會暫留後翻回去
這段我以前竟然看到有人用Timer來寫
不用這麼麻煩啦,直接用Thread.Sleep暫停畫面就好了
(缺點是快速連按時會有lag的感覺)

還有一些很基本的方法
像是用AndAlso跟OrElse來取代And跟Or
這種我就不說了(我還是說了嘛)

以寫視窗程式來說,VB絕對比知名的C,C++,Java還好用
只要靠著拉物件跟口語化的程式語法
絕對可以讓寫程式變成一種樂趣

大家也來寫視窗程設吧~

----
本日分享歌曲 AiM - 誰より

創作者介紹

正因為活著

蕭雲 發表在 痞客邦 PIXNET 留言(23) 人氣()


留言列表 (23)

發表留言
  • Mango
  • 小綠好強!@@
    我也想要會做這種東西呢!以後有時間我再來自己翻書研究好了...
    到時候在跟你請教^_^
  • 其實這種東西一點都不難做
    其他語言我不敢說
    但是VB已經很接近script language了
    就算是非本科系的學生只要看一下書就會了
    有不懂的地方歡迎問我喔~

    蕭雲 於 2008/10/22 21:08 回覆

  • leo900597
  • 您好!!無意間點到這個blog
    我對這個遊戲還瞞有興趣
    不知道可以寄給我整個程式碼??
  • 不好意思喔,因為我怕有人拿我的程式去做壞事
    所以程式碼我一般都是不會給別人的
    以前有篇加解密程式我也是沒有給人
    但如果你有不懂的地方,可在此篇發問
    我可以在部落格給你技術支援
    若我會的話一定幫你解答
    ---
    話說我們學校今年視窗課的第二次作業就是這個遊戲
    不知道作業截止了沒...

    蕭雲 於 2008/11/23 18:18 回覆

  • Salan
  • 對遊戲有興趣幹嘛要程式碼= ="...
  • 你真是問到我的心坎裡了^^"

    蕭雲 於 2008/11/23 18:19 回覆

  • 路
  • 想請問一下
    像秒數還有次數的程式
    那邊要怎麼設定阿
    弄好久還是不成功
    (期末報告想做這個可是始終弄不出來..)
  • 先設定一個計時器,Interval=1000(一秒更新一次)
    然後設定一個變數time
    遊戲開始時設定time=60(假設一場60秒)
    然後計時器程式打上time-=1
    如果time=0時就把相關按鈕的Enable設成false
    並顯示時間結束訊息

    我是這樣的作法啦

    蕭雲 於 2009/06/24 02:56 回覆

  • 小玲
  • 我目前也想學,不知你是用java 寫的嗎,可否mail給我練習呢...謝謝
  • 都說需要.NET Framework 2.0了
    怎麼會是java呢

    蕭雲 於 2010/06/30 16:45 回覆

  • Lin
  • 我的期末專題在考慮做這個遊戲
    但是有好多問題..
    方便請教你嗎
  • 不方便耶

    蕭雲 於 2010/06/30 16:45 回覆

  • 訪客
  • 我想問圖片要怎麼插入呢?3Q
  • 第一種是全部放進ImageList,也就是包在程式中

    第二種是放在執行檔的附近
    程式直接從硬碟讀取
    缺點是圖片可以被使用者複製走
    而且如果圖片檔名被修改或刪掉會有錯誤

    我當時是用第二種方式

    蕭雲 於 2011/01/21 01:44 回覆

  • 賴其任
  • 請問 一開始要怎打亂順序阿? 我剛學而已=="
    我一直做到當機
    EX:
    for i = 0 to 19
    picture1(i)= int(rnd*10)+1
    next i
    但是他會重複到耶~~
    next i
  • 因為你的數據會重複,我是建議用洗牌法比較好
    也就是隨機取陣列兩數做交換,重複N次即可
    以下是憑我對VB.NET語法的印象寫的範例
    Ex.
    Dim array() as Integer = {1, 1, 2, 2, 3, 3, 4, 4}
    Dim rand as new Random()
    For i as Integer = 0 to 1000
    Dim a as Integer = rand.next(0, array.Length)
    Dim b as Integer = rand.next(0, array.Length)
    Dim temp as Integer
    temp = array(a)
    array(a) = array(b)
    array(b) = temp
    Next

    蕭雲 於 2011/04/13 01:41 回覆

  • 雲
  • 用出了imagelist
    可是我不知道怎麼把它放進各個要翻的排組裡......
    可以提供一些意見嘛?!
    最近想做做看這個遊戲~
  • imageList是不需要"放"進牌組的
    我個人的作法是將牌都記錄一個編號
    當要顯示的時候,就從imageList取出該編號的圖片即可
    將圖片取出的語法是imgList.Images(0)
    imgList是物件名稱,0為你的List編號

    蕭雲 於 2011/05/01 03:47 回覆

  • 悄悄話
  • 麥茶
  • 請問可以告訴我這個程式大略的打法嗎?例如需要那些物件或語法?小弟最近研究VB 還是新手 請大大不吝指教
  • 麥茶
  • 請問可以告訴我這個程式大略的打法嗎?例如需要那些物件或語法?小弟最近研究VB 還是新手 請大大不吝指教
  • 我寫的方法不是正規方法,不確定跟其他人寫的是否相同
    首先我這個使用的語言是VB.NET而非傳統的VB
    這程式首先你要會用物件陣列,最好能動態產生按鈕的數量
    然後你要會洗牌法,也就是對變數隨機交換,做到洗牌的效果
    之後就只是簡單的程式邏輯判斷了
    點牌之後就將該牌的圖形顯示在按鈕上
    當選兩張牌後用if判斷是否是相等的牌,true的話就把分數增加
    false的話就把牌翻回去....etc

    如果對程式有不懂的地方,歡迎再留言請教

    蕭雲 於 2011/07/05 19:32 回覆

  • 訪客
  • 請問下 我動態新增了按鈕9個 但要如何得知使用者點了哪個按鈕?
    是不是會用到sender 這個?
  • 是的
    先幫每個按鈕設定Name或其他屬性
    當按下去後讀取sender.Name就可以知道該按鈕的位置了

    蕭雲 於 2011/11/07 02:37 回覆

  • 李森
  • 請問我用vb6.0要如何放照片?
  • 請問你所謂的放照片的意思是?
    把圖片放到按鈕上嗎?
    我沒用過VB 6.0,對其語法其實不是很清楚...

    蕭雲 於 2011/11/07 02:30 回覆

  • 歐
  • 不好意思 我剛剛自己嘗試寫了一下
    我想用 Image1->Picture->LoadFromFile("0"+IntToStr(Tmp)+".bmp");
    讓每個IMAGE都亂數放 但似乎不行欸:(
  • 欸...好久沒寫VB了
    印象中應該是先建立好PictureBox物件後,在觸發條件寫上
    PictureBox1.image = Image.FromFile(Application.StartupPath & "\" & rand & ".bmp")
    rand為亂數取得的變數
    當然執行目錄下必須也要包含該檔名的檔案才行

    補充一點,要做字串相接的話,使用&會比+更好
    用+必須對所有數字變數作轉型,&則不用

    蕭雲 於 2012/01/26 01:20 回覆

  • 悄悄話
  • 雪
  • 請問一下,如果記憶翻牌結束後,怎麼加入文字?
    (VB6.0)
  • 不太懂你加文字的意思
    如果是跳出訊息視窗可以用msgbox
    如果是要顯示文字在畫面上的話
    可以先建立Label並設定隱藏
    在遊戲結束後執行Label1.Visible = True將其顯示

    蕭雲 於 2013/03/25 23:02 回覆

  • 訪客
  • 想請問一下,那個圖片怎麼判斷圖片是不是一樣?
    如果不一樣想要轉回來 程式碼該怎麼用
  • 1. 我是另外用一個二維陣列去存所有位置的代表數值,這樣應該比較簡單
    也可以將代表數值寫在物件的tag屬性
    或是寫個繼承button的物件設定新屬性

    2. 我是用Thread.Sleep這個方法,暫停執行緒
    http://msdn.microsoft.com/zh-tw/library/system.threading.thread.sleep%28v=vs.110%29.aspx
    如果判斷兩張圖片不同,Thread.Sleep(毫秒)後設定圖片消失

    蕭雲 於 2014/06/09 13:04 回覆

  • 憨包
  • 請問如果我要把picturebox取亂圖後5秒鐘 變回原本面
    我應該怎麼下?(我有設timer2500,但是他5秒鐘後就會重新洗牌)

    再請問你:如果我要讓他亂數只取兩張一樣的
    我應該怎麼改?
    我有設亂數 也用了for next
    但怎麼用 還是會有地3張 甚至第4張一樣的

    拜託 求解
  • 第一個問題最簡單的作法是設定執行緒暫停
    如同我前一個留言寫的,作法如下
    (TODO部分請換成你要處理的語法)

    // TODO 顯示圖片
    Thread.Sleep(2500);
    Application.DoEvents();
    // TODO 隱藏圖片

    第二個問題
    請看第八個留言的回覆,謝謝

    蕭雲 於 2014/08/04 23:43 回覆

  • 奇
  • 大大的文章幫了小弟很大的忙!!

    但也是用盡了全力才拚奏出來
    而且寫出來的程式容量也不小

    希望有天能像大大一樣厲害
    程式的魅力真是無法抵擋阿
  • 謝謝你的留言

    蕭雲 於 2015/03/15 23:45 回覆

  • ta860212
  • 關於那個第8個回復 那這之後要怎麼把它帶入進圖片QAQ??
  • 請修改按鈕的Image屬性

    蕭雲 於 2016/01/03 20:35 回覆

  • 郭柏慶
  • 請問大大真的不能分享程式碼嗎QQ
  • 已經附在原文上了
    可以的話,請不要進行二次散布,謝謝
    若要修改的話還請註明出處...

    蕭雲 於 2016/09/16 20:41 回覆

  • asd95084
  • 大大你可以教我做c# windowsform 版的翻牌遊戲嗎
    拜託
  • source code不是都公開了...

    蕭雲 於 2017/01/10 20:55 回覆

【 X 關閉 】

恭喜您是我們挑選到的讀者!希望能了解您的
【痞客邦部落格使用行為】

填問卷將有機會獲得痞客邦獨家好禮喔!(注意:關閉此視窗將不再出現。)

立即填寫取消