SOGO論壇
  登入   註冊   找回密碼
查看: 1542|回覆: 2
列印 上一主題 下一主題

[程式設計] c語言寫類似俄羅斯方塊 [複製連結]

Rank: 4

狀態︰ 離線
跳轉到指定樓層
1
發表於 2012-6-15 19:39:54 |只看該作者 |倒序瀏覽
最近看到有個習題,我打了好久都打不出來,所以想請問懂程式的大大們

題目是:寫一個會隨著時間而變化的俄羅斯方塊(自己不需要操作),而且會慢慢往下,也會左右邊

移動。似乎要用陣列去寫,請神手幫忙。

感恩^^

(可以的話希望附上註解)

ps我只會c語言還不會c++
所以請用c語言教我
喜歡嗎?分享這篇文章給親朋好友︰
               感謝作者     

Rank: 11Rank: 11Rank: 11Rank: 11

熱心參予論壇活動及用心回覆主題勳章 數位硬體勳章

狀態︰ 離線
2
發表於 2012-6-16 11:09:36 |只看該作者
  1.首先是對windows消息隊列機制的理解,知道了On_ButtonDown之類的函數,了解了windows如何跟外設進行交互,所以通過上下左右鍵來改變方塊的狀態的代碼可以寫在這類函數里面,內部具體的就是通過判斷捕獲的ASCII碼來判斷按下的是哪個鍵。

      2.略微了解了些MFC框架的實現過程,俄羅斯方塊的實現可以在空的MFC程序上進行添加,代碼大部分都可以寫在View那個類里面。

      3.略微了解一點繪圖的函數,知道CDC的簡單用法,可以繪出不同顏色的方塊,這樣,游戲區域的圖形實現就可以做到了。

      4.俄羅斯方塊的自動下落則需要用到定時器的函數,這個可以用SetTimer來實現。

      5.這樣,感覺這個游戲功能實現應該是沒問題了,剩下的就是具體如何設計的問題的,如果更有效率如果用戶體驗更好之類的。這些可能需要繼續把Widows編程給學完
由於C++非常不熟,基本上就看了半本的accelerated in C++,所以不免會犯些低級錯誤,首先是二維數組的構造,居然還要先構造成指針的一維數組,然後寫個for循環再構造成一個二維數組,真他媽的麻煩。然後是兩數組的賦值,我本意是把一個數組內部的信息賦給另一個數組,結果它把兩個數組等同處理了,以前JAVA編程時用到最短路徑函數時也碰到過這問題,那時是因為JAVA是把數組當對象處理的,所以一個數組實際上只是一個引用。C++的原因我猜也是類似,估計也只是把數組的地址給賦過去了,所以兩個數組指向的地方是一樣的,改變了一個數組的元素也便把另一個數組元素給改了,因為本質上他們是一個數組,故後來處理時就寫了個for循環一個一個賦值,土是土了點,不過只能想到這個辦法了。SetTimer函數那兒也出了點小問題,原來把SetTimer寫到了構造函數里面,出現了Assertion的警告,原因估計是View類還沒構造好我就給他設一個定時器了,後來寫到了其他函數里面就OK了。
      然後還有一個就是方塊和游戲區域的表示,我用的比較土的方法,游戲區域是個12*18的數組,方塊也是(這個比較囧,正好手頭有本《編程之美》,那兒他們用的是個3*3數組來表示方塊,翻轉處理可以統一化,我這兒就不行了,哈哈,不過先編着吧),通過用1來表示有方法,0表示空白區域,每個方塊都是一個只有四個值為1的數組。我目前只試了一種形狀的自由下落,基本上實現,每一秒鍾下落一格並重繪一次,下落的具體實現是通過對四個值為1的位置進行下調。目前就只進展到這兒啦,EOF~~~
已有 1 人評分威望 收起 理由
紅塵孤鳥 + 1 感謝您熱心幫助會員解決問題,論壇需要您的.

總評分: 威望 + 1   查看全部評分

Rank: 4

狀態︰ 離線
3
發表於 2012-6-20 01:30:02 |只看該作者
感謝您仔細的講解~~
雖然很多不懂= =
還是謝謝
請注意︰利用多帳號發表自問自答的業配文置入性行銷廣告者,將直接禁訪或刪除帳號及全部文章!
您需要登錄後才可以回覆 登入 | 註冊


本論壇為非營利自由討論平台,所有個人言論不代表本站立場。文章內容如有涉及侵權,請通知管理人員,將立即刪除相關文章資料。侵權申訴或移除要求:abuse@oursogo.com

GMT+8, 2025-3-1 07:10

© 2004-2025 SOGO論壇 OURSOGO.COM
回頂部