資源簡介
C#俄羅斯方塊程序設計與簡單實現
效果演示:https://www.cnblogs.com/JiYF/p/9632821.html可以到這里查看效果,當然有部分bug還需要解決
相信90后或者80后都玩過這款小游戲,一直想干一票,琢磨一下,但又不太懂,于是網上搜集修改就有了以下效果!bug較多,多多包涵!
1.效果展示
2.實現方法
參考https://blog.csdn.net/qian_f/article/details/19758671 感謝博主分享,我在這里也沒修改啥,有時間修復幾個bug
2.1對象分析
把每個磚塊當成一個對象。每個磚塊都有共同的行為,就是可以左移、 右移、下移和變形。既然這是他們共同的行為(方法),那么可以定義一個虛基類Brick,然后在該基類中聲明這些行為。當然,磚塊在做這些行為前需要知道能不能進行這些行為,比如說到了左邊界就不能左移;到了下邊界就不能下移;周圍空間不夠大,就不能變形等等。因此該基類還需要聲明一些虛函數:CanTransform() CanLeftMove() CanRightMove() CanDropMove()等。
2.2繼承實現
繼承定義的基類,每種磚塊根據自身的形狀具體實現相應函數。據說在標準的俄羅斯方塊中,一共有七種形狀。本練習項目中定義的方塊和變形方式(繞著中心點順時針旋轉,途中顏色較深的點就是中心點)如下:
根據上圖就可以知道,表示磚塊最好的方法就是用二維數組了。對于磚塊而言,這個二維數組就是它的變形范圍,數組中的數字為0,代表磚塊在該區(qū)域中無顯示,為1代表有顯示。在實現CanTransform() CanLeftMove() CanRightMove() CanDropMove()這四個函數時,要尤其小心,這邊是最容易出錯的地方。
2.3畫布處理
完成磚塊下面就要進行畫布的處理了。可以想象一下,把畫布分成多個方格,也就相當于二維數組了,然后把磚塊所對應的二維數組按指定的位置放到代表畫布的二維數組中。在顯示的時候就可以根據值為1的方格來獲取位置并進行繪圖了。所以,該項目中定義了一個名為Canvas的類,核心功能是用于獲取這個二維數組的值,其中包含根據磚塊設置數組的值、行滿(一行里所有的值都為1)之后消除、超出高度后返回失敗等。
2.4繪圖
真正的繪圖操作。根據二維數組的值繪制顯示,并響應方向鍵操作。
3.代碼實現
代碼片段和文件信息
///////////////////////////////////////////////////////////
//??Class : Block.cs
//??CLRVersion : 4.0.30319.42000
//??NameSpace : BenNHTetris
//??Created?on : 2018/5/31?11:41:27
//??Original?author : JIYONGFEI?
//??JiYF笨男孩博客??:???https://www.cnblogs.com/JiYF/
///////////////////////////////////////////////////////////
using?System;
using?System.Collections.Generic;
using?System.Drawing;
using?System.Linq;
using?System.Text;
namespace?BenNHTetris
{
????public?abstract?class?Block
????{
????????protected?int?_curChangeTimes;??//變化次數
????????public?int?_needRows;???????????//行數
????????public?int?_needColumns;????????//列數
????????public?int[]?_range;???????????//變化范圍
????????public?Point?_center;???????????//中心點?相對于必要區(qū)域
????????public?Point?_Pos;??????????????//中心點位置相對于畫布
????????///?
????????///?能否變形?,能變形的條件為在方塊的變形范圍內不能有其它的方塊
????????///?
????????///?
????????///?
????????///?
????????///?
????????public?abstract?bool?CanChange(int[]?arr?int?rowsint?cloumns);
????????///?
????????///?變形
????????///?
????????public?abstract?void?Change();
????????///?
????????///?能否左移動
????????///?
????????///?
????????///?
????????///?
????????///?
????????public?abstract?bool?CanLeftMove(int[]?arrint?rowsint?columns);
????????///?
????????///?左移
????????///?
????????public?void?LeftMove()
????????{
????????????_Pos.Y?-=?1;
????????}
????????///?
????????///?能否右移
????????///?
????????///?
????????///?
????????///?
????????///?
????????public?abstract?bool?CanRightMove(int[]?arr?int?rows?int?columns);
????????///?
????????///?右側移動
????????///?
????????public?void?RightMove()
????????{
????????????_Pos.Y?+=?1;
????????}
????????///?
????????///?能否下移
????????///?
????????///?
????????///?
????????///?
????????///?
????????public?abstract?bool?CanDownMove(int[]?arr?int?rows?int?columns);
????????///?
????????///?下側移動
????????///?
????????public?void?DownMove()
????????{
????????????_Pos.X?+=?1;
????????}
????????///?
????????///?隨機生成一個可以通過變形得到的形狀
????????///?
????????public?void?RandomShape()
????????{
????????????Random?random?=?new?Random();
????????????this._curChangeTimes?=?random.Next(4);
????????????this.Change();
????????}
????????///?
????????///?設置中心點相對于畫布的位置
????????///?
????????///?橫向位置
????????///?
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
????I.A....???????350??2018-09-12?09:38??05BenNHTetris\.gitignore
????I.A....?????????3??2018-09-12?09:38??05BenNHTetris\.svn\entries
????I.A....?????????3??2018-09-12?09:38??05BenNHTetris\.svn\format
????I.A...R??????1098??2018-09-12?09:38??05BenNHTetris\.svn\pristine\02\02e85a64cba779e856a6a378a06b509ded44c966.svn-ba
????I.A...R??????2076??2018-09-12?09:38??05BenNHTetris\.svn\pristine\0e\0e42c87c47c44e63e3e11e1706ad6e94c545b1ad.svn-ba
????I.A...R?????12349??2018-09-12?09:38??05BenNHTetris\.svn\pristine\2f\2fe30ae0a086eeeb84f71326f7cf9567578e72c2.svn-ba
????I.A...R??????5817??2018-09-12?09:38??05BenNHTetris\.svn\pristine\31\31fb76e5d9babe97a11fea041081f96ce426107a.svn-ba
????I.A...R??????6077??2018-09-12?09:38??05BenNHTetris\.svn\pristine\33\3323eed01c6c487289e0895005be3e47b4ed22b3.svn-ba
????I.A...R?????14757??2018-09-12?09:38??05BenNHTetris\.svn\pristine\33\336a624c12d5496abc4b0714ea54d240598ef1c2.svn-ba
????I.A...R??????1002??2018-09-12?09:38??05BenNHTetris\.svn\pristine\36\36a1325bd8f934d1fbe72c15d3d94e204c14ee93.svn-ba
????I.A...R??????5612??2018-09-12?09:38??05BenNHTetris\.svn\pristine\47\47b15748ecc8e952c5935170090db7c269ce4b4f.svn-ba
????I.A...R??????2563??2018-09-12?09:38??05BenNHTetris\.svn\pristine\47\47c899ebda9aeb147b63dd73a54a0985310e54a4.svn-ba
????I.A...R??????1651??2018-09-12?09:38??05BenNHTetris\.svn\pristine\4a\4a43b9681c5ba52e70965f2bd85bf512a153f7f2.svn-ba
????I.A...R??????1643??2018-09-12?09:38??05BenNHTetris\.svn\pristine\52\52899819fd2ae36ff0622cac845c0d209da4a92b.svn-ba
????I.A...R??????2658??2018-09-12?09:38??05BenNHTetris\.svn\pristine\53\5351c0828f1c299d0074824ece42efe241936b31.svn-ba
????I.A...R???????249??2018-09-12?09:38??05BenNHTetris\.svn\pristine\5e\5e1d04de66ffcc5dfd813530ab6992e6daaae417.svn-ba
????I.A...R?????14323??2018-09-12?09:38??05BenNHTetris\.svn\pristine\63\63bcbc96958904c0d420d9345c937a1151a86474.svn-ba
????I.A...R??????2054??2018-09-12?09:38??05BenNHTetris\.svn\pristine\66\6607e26735d9bb74994f153cd315327ea053f573.svn-ba
????I.A...R?????18930??2018-09-12?09:39??05BenNHTetris\.svn\pristine\71\71ff4385ae80f895aa992ae2cada17db4c6c5df0.svn-ba
????I.A...R??????4229??2018-09-12?09:38??05BenNHTetris\.svn\pristine\87\879225c7e50303da3b30a0ff2b8ef12f25e12453.svn-ba
????I.A...R?????18352??2018-09-12?09:39??05BenNHTetris\.svn\pristine\8c\8cc49c5e215283c57e3040e100c66e5958c331dd.svn-ba
????I.A...R??????1671??2018-09-12?09:38??05BenNHTetris\.svn\pristine\90\90a440037834c74a6cd80af76201a3c4309c34e1.svn-ba
????I.A...R??????1364??2018-09-12?09:38??05BenNHTetris\.svn\pristine\a5\a54911d99af1525f608f2045952acbac3c06c8ee.svn-ba
????I.A...R??????2874??2018-09-12?09:38??05BenNHTetris\.svn\pristine\ad\adf81728a6c9ada869a110f07d3642d0dfd6700a.svn-ba
????I.A...R??????3581??2018-09-12?09:38??05BenNHTetris\.svn\pristine\b3\b3deee6571969175a95ff74054d0cb6205e88763.svn-ba
????I.A...R?????12038??2018-09-12?09:38??05BenNHTetris\.svn\pristine\b4\b499c73375c0b5f54607dd4e71f20dbfb0e529e1.svn-ba
????I.A...R???????494??2018-09-12?09:38??05BenNHTetris\.svn\pristine\b9\b93e4ea5ba7d3013821ada3b476e35021b8cffc6.svn-ba
????I.A...R???????350??2018-09-12?09:38??05BenNHTetris\.svn\pristine\c7\c706037b17b9d02fbdb637d970f16f96aa175f4e.svn-ba
????I.A...R?????12346??2018-09-12?09:38??05BenNHTetris\.svn\pristine\c9\c99c0a8818c75c63a19b98e0a0c895d5b391b601.svn-ba
????I.A...R???6222450??2018-09-12?09:39??05BenNHTetris\.svn\pristine\c9\c9f000d08b76a20078a8c0cdcdf4582aab19cf23.svn-ba
............此處省略101個文件信息
- 上一篇:高仿QQ的即時通訊系統(tǒng)源碼GG2014
- 下一篇:c#dll文件查看工具
評論
共有 條評論