2013-05-13 99 views
0

我正在嘗試製作自己的俄羅斯方塊遊戲。到目前爲止,我能夠展示作品,旋轉它們。但我堅持一點,不知道如何繼續。製作俄羅斯方塊時卡住

enter image description here

我有一個

  • BoardClass靜態整數數組board爲網格。用不同的整數數字顯示不同的顏色。
  • Block類有它的方法來產生隨機塊和旋轉它們。
  • Graphic類顯示顏色基於board陣列上,並且
  • GameLogic類開始,暫停遊戲。

對於當前片段我已經採取了4×4陣列和被放置在板中前四行board

所有的工作良好。但我該如何開始移動東西。如何建立塊之間的關係是我卡住的地方。

我的問題

  • 上午我在正確的軌道工作?
  • 如何實現事物自動化,我的意思是塊將如何自動出現。我知道我可以在tick事件中有一個DispatcherTimer和移動塊,但繪製和重繪整個網格很慢。我只想要重繪遊戲網格的一部分。
  • 如果我將棋子向左/向右/向下移動,則完整棋子陣列會移動,這意味着4x4棋子會移動,而不僅僅是可能在1x3或2x2中的棋子。
  • 如何知道這件作品是新作品還是舊作品。我知道我可以採用布爾值,但我認爲10x20的布爾數組會很大。

我知道這些可能不是一個很好的問題要問,但我堅持和任何幫助,將不勝感激。問我是否想看任何代碼。

回答

2

我在正確的軌道上工作嗎?

我想你是。

如何實現事物自動化,我的意思是塊將如何自動地相繼出現。我知道我可以在tick事件中有一個DispatcherTimer和移動塊,但繪製和重繪整個網格很慢。我只想要重繪遊戲網格的一部分。

您是否測量了它?大多數遊戲以每秒30幀的速度重繪整個場景。先做好工作,然後再進行優化。

如果我將棋子向左/向右/向下移動,則完整棋子陣列會移動,這意味着4x4棋子會移動,而不僅僅是可能位於1x3或2x2中的棋子。

您需要在每次移動前檢查邊界。你可以爲每個方塊做這個,你只有16個比較。這不是很困難,也不會很慢。

如何知道這件作品是新作品還是舊作品。我知道我可以採用布爾值,但我認爲10x20的布爾數組會很大。

這並不大。

0

你到目前爲止所做的工作對我來說聽起來沒有問題。至於你的其他問題去:

如何自動化的東西,我的意思是,塊將如何自動出現 一個接一個。我知道我可以有一個DispatcherTimer 並在tick事件處移動塊,但繪製和重新繪製完整的 網格很慢。我只想要重繪遊戲網格的一部分。

  • 您可以使用髒重新計算來找出重新繪製的位置。但是,如果你真的有一個像俄羅斯方塊遊戲一樣簡單的應用程序的性能問題,我寧願試圖找出爲什麼你的繪圖代碼是如此之慢。在過去10年內生產的任何硬件上,即使您每幀重新繪製完整的電路板,您也應該輕鬆存檔100 + fps。

如何知道這件作品是新作品還是舊作品。我知道我可以 採取布爾值,但我認爲一個10x20的布爾數組將是 大。

很坦率地說沒有。只需使用一個數組。陣列中10x20 = 200條目。 AFAIK bools將在每個陣列中佔用1個字節,這意味着200個字節,所以對於在過去30年建造的機器來說不應該是一個問題。即使你使用整數,你仍然可以使用小於1 kb的內存。

+0

我的俄羅斯方塊的實現的例子,但我將不得不作出的一舉一動200個比較..那豈不是很大? – 2013-05-13 12:12:03

+0

不需要進行200次比較(儘管即使那樣也肯定會表現良好)。你應該知道你的棋盤上你的活動部分在哪裏,所以你可以對你的部分觸及的字段進行比較。 – rincewound 2013-05-13 12:17:27

0

我在正確的軌道上工作嗎?

如果你的願望是學習遊戲編程,而不是在每一個小細節都拉出你的頭髮,我會推薦使用像Box2D這樣的庫來處理世界空間和物體碰撞。

除了Box2D,我還建議使用一個遊戲框架,處理許多遊戲編程,頻率,輸入,聲音等基礎知識...... PlayN和LibGDX都很棒&免費框架讓你跳躍開始。

使用這些工具,您的焦點將更多地放在您的遊戲上,而不是基本的。

https://code.google.com/p/playn/

https://code.google.com/p/libgdx/

1

如何自動化事情/繪圖,重劃網格完整緩慢。我只想要重繪遊戲網格的一部分。

當用戶劃一條線 - 你必須重畫整個網格。 (降低線上的數字);

如果我將棋子向左/向右/向下移動,則完整棋子陣列會移動,這意味着4x4棋子會移動,而不僅僅是可能位於1x3或2x2中的棋子。

我認爲錯誤在於當你實際需要1x4的塊列表(對於每個俄羅斯方塊圖)時,爲每個圖製作4x4陣列;你使用4倍的內存和空間!

如何知道這件作品是新作品還是舊作品。我知道我可以採用布爾值,但我認爲10x20的布爾數組會很大。

一個數組永遠不會太大(如果我們不談論數百萬); 你可以採用我的方式:製作一個LIST,在其中存儲遊戲的所有「舊」部分。然後製作一個VARIABLE(數字對象),它將指向電路板上的「新」圖形。在「新」人物落地之後 - 您只需將其放入您擁有「舊」物品的LIST中即可。並將VARIABLE指向您網格上的「新增」圖形。

希望有所幫助。

您可以檢查(在Java中)here

+0

請嘗試用一個最小的例子總結你的論點。一段時間後,鏈接往往會打破。 – ilir 2014-10-20 21:57:18