学习C#从俄罗斯方块开始二.docx
- 文档编号:12026743
- 上传时间:2023-04-16
- 格式:DOCX
- 页数:39
- 大小:32.21KB
学习C#从俄罗斯方块开始二.docx
《学习C#从俄罗斯方块开始二.docx》由会员分享,可在线阅读,更多相关《学习C#从俄罗斯方块开始二.docx(39页珍藏版)》请在冰豆网上搜索。
学习C#从俄罗斯方块开始二
学习C#从俄罗斯方块开始
(二)俄罗斯方块的规则和算法的简单实现
分类:
C#开发2010-02-0913:
303793人阅读评论(50)收藏举报
根据上节我们规划好的开发过程,这节我们来实现一个简单的俄罗斯方块程序。
当然完成俄罗斯方块的Demo是我们这节课的最终目标。
在实现这个目标的同时,我还要跟大家一起去分析俄罗斯方块的需求、算法、具体开发的步骤。
并且最终选择C#语言来实现这个demo。
下面废话少说,翠花,上内容!
第一步、 思考俄罗斯方块的游戏规则:
任何时候我们去开发或者设计一个项目,首先需要思考的就是需求。
俄罗斯方块中,我们要做一个俄罗斯方块的游戏,那么俄罗斯方块游戏的游戏规则就是我们的需求。
所以我们必须深入了解俄罗斯方块游戏的游戏规则。
俄罗斯方块游戏可能产生下面五种形状的方块。
这些方块有我们的方向键的控制可以产生旋转,左右移动和加速前进等,往下掉,只到遇到下面已经有方块挡住停下来。
如果一行完全排列满,则会消掉,如果排列到了顶部,则会失败。
第二步、把我们的“需求”从计算机的角度去分析:
我们对任何一个项目的最初的需求是从使用者的角度去描述这个项目的,这种描述基本上涵盖了使用者可能用到的功能和要求。
我们在做一个项目,特别是为一个非计算机专业做一个项目的时候,客户的描述,或者业务人员承接到项目的时候,他们和客户的沟通,基本上是基于这种初级的需求的,这种初级的需求的有点是:
客户和业务人员比较容易理解,沟通起来非常的方便。
但是他的缺点是非计算机专业用语,不够规范和严谨。
不能拿这个文档和需求来直接要求开发人员。
需要一个对市场(客户)比较了解,同时又是资深的程序员把这个需求编程一个专业开发人员相对比较容易理解的需求。
甚至直接编程开发的具体思路。
然后有开发人员去实现。
我们的小游戏实在是太小了,不可能分出来业务人员、项目规划人员、项目架构、程序开发。
。
。
。
所以这一切也都有我们开发者一个人独揽了。
不过麻雀虽小,五脏俱全哦。
我们不是说了嘛,通过学习俄罗斯方块掌握项目开发的经验呢。
所以希望各位看客认真的看这些个步骤,如果我哪里说错了,欢迎拍砖。
a、关于俄罗斯方块游戏中方块的产生。
我们假设产生四种方块。
实际上俄罗斯方块产生的方块要多余四个。
但是咱们这节课是做一个Demo,所以先做四个,具体的四个请见图片1。
(因为CSDN不能上传图片,我上传到下载中去了。
大家可以下载使用,期待csdn可以正常的上传图片)。
b、俄罗斯方块当需要变化方块的时候,每个方块需要顺时针旋转90°,具体可能产生的形状也见图一。
从数学,或者计算机的角度来看:
我们根据图1来看,我们可以把所有的方块看成一个4*4的二维数组。
把有“砖”的地方表示为1,没有“砖”的地方表示为0,所以所有的的方块都可以表示为图二的样式。
c、我们也可以把背景看成是14*20的二维数组。
那么俄罗斯方块的需求,站在程序员的角度上就可以变成:
我们随机从方块的4个4*4的矩阵中挑选出来一个,并且随机的挑选一个他的初始化状态(关于状态变化,我们同样可以把他们表示在一个4*4的矩阵中)。
然后这个被挑选的矩阵,在一个14*20的矩阵中不断的按照一种速度进行往下运动。
我们同时可以使用方向键,对这个举证进行控制,使得它可以左右运动,同时可以循环的变化他的状态。
如果这个矩阵在运动的方向上遇到了数值为1的时候则停止运动,在左右运动上表现为不能移动,在往下运动的时候则表现为这个方块运动的结束。
把这个矩阵的数值复制到背景矩阵中去。
这个时候检查背景矩阵,如果背景矩阵中有一个行全部为1,那么在y轴上比该行小的所有行向下移动一行,用户得分增加100。
同理,检查所有的行,并且做同样动作。
检查完成后,进入下个方块的随机挑选,下落。
当某个方块下落完成的时候。
他的y坐标在背景中为0的时候。
游戏结束。
作为游戏的界面,我们需要在游戏的状态发生改变的时候,把背景矩阵和运动矩阵都绘制出来。
数值为0的地方不绘图,数值为1的地方绘制图片。
---------------------------------------------------------------------------
到此为止。
我们的游戏已经用人类语言。
从计算机的角度来说分析完成了。
剩下的就是使用计算机语言表达出来了,不管你是学习的C#,C语言,C++,Delphi,Java,python,Js,VB,……(汇编我不懂,暂时不包括吧)。
只要你能理解了上述的“思路”。
那么你可以用任何语言来写出来。
我真希望用所有的语言都给大家写写,把IT老祖宗的那句:
“编程靠的是思想(想法,思路),语言不重要。
"的真理来验证下,可怜CSDN的blog写起来太麻烦了,而且我老婆催着我赶紧回家过年的,所以这次就暂时使用C#来给大家实现下。
我们就从一个C#盲来开始看看需要如何学习,如何实现。
首先、确定我们要用的语言是C#,矩阵的运算需要多是多维数组,数组的运算多需要循环。
另外对多种情况的判断需要if,switch等分支判断语句,我们的方块定时运动,需要用到timer控件。
所以在开始咱们的项目前,请确保,你已经对C#的语法有了基本的了解,尤其对数组的操作、if语句,for循环语句,switch语句要会用。
同时对基本的button、timer控件进行基本的了解。
如果你在使用其他语言编程,找你所使用的语言中的类似的东西。
其他的东西至少这个项目中不会经常用到。
即时用到,查查即可。
这个可能就是所谓的“语言没有思想重要吧”。
如果你还不懂,去看看
其次、俄罗斯方块需要绘制图形,这个需要你对C#GDI+有所了解。
在其他语言中可能是GDI或者API了,这个你只需要google下即可。
如果GDI+编程你还不懂,那么来下载个教程吧。
我已经给大家上传到:
上面的两个条件如果你已经具有了。
那么开始我们的C#俄罗斯方块的代码之旅途吧。
不过在代码开始之前,还是先看看我们的界面吧。
请看界面图;
下面我们来看代码。
首先定义我们的砖块和背景吧。
viewplaincopytoclipboardprint?
1.#region 定义砖块int[i,j,y,x] Tricks:
i为那块砖,j为状态,y为列,x为行
2. private int[, , ,] Tricks = {{
3. {
4. {1,0,0,0},
5. {1,0,0,0},
6. {1,0,0,0},
7. {1,0,0,0}
8. },
9. {
10. {1,1,1,1},
11. {0,0,0,0},
12. {0,0,0,0},
13. {0,0,0,0}
14. },
15. {
16. {1,0,0,0},
17. {1,0,0,0},
18. {1,0,0,0},
19. {1,0,0,0}
20. },
21. {
22. {1,1,1,1},
23. {0,0,0,0},
24. {0,0,0,0},
25. {0,0,0,0}
26. }
27. },
28. {
29. {
30. {1,1,0,0},
31. {1,1,0,0},
32. {0,0,0,0},
33. {0,0,0,0}
34. },
35. {
36. {1,1,0,0},
37. {1,1,0,0},
38. {0,0,0,0},
39. {0,0,0,0}
40. },
41. {
42. {1,1,0,0},
43. {1,1,0,0},
44. {0,0,0,0},
45. {0,0,0,0}
46. },
47. {
48. {1,1,0,0},
49. {1,1,0,0},
50. {0,0,0,0},
51. {0,0,0,0}
52. }
53. },
54. {
55. {
56. {1,0,0,0},
57. {1,1,0,0},
58. {0,1,0,0},
59. {0,0,0,0}
60. },
61. {
62. {0,1,1,0},
63. {1,1,0,0},
64. {0,0,0,0},
65. {0,0,0,0}
66. },
67. {
68. {1,0,0,0},
69. {1,1,0,0},
70. {0,1,0,0},
71. {0,0,0,0}
72. },
73. {
74. {0,1,1,0},
75. {1,1,0,0},
76. {0,0,0,0},
77. {0,0,0,0}
78. }
79. },
80. {
81. {
82. {1,1,0,0},
83. {0,1,0,0},
84. {0,1,0,0},
85. {0,0,0,0}
86. },
87. {
88. {0,0,1,0},
89. {1,1,1,0},
90. {0,0,0,0},
91. {0,0,0,0}
92. },
93. {
94. {1,0,0,0},
95. {1,0,0,0},
96. {1,1,0,0},
97. {0,0,0,0}
98. },
99. {
100. {1,1,1,0},
101. {1,0,0,0},
102. {0,0,0,0},
103. {0,0,0,0}
104. }
105. }};
106.
107. #endregion
108. #region 定义背景
109. private int[,] bgGraoud ={
110. {0,0,0,0,0,0,0,0,0,0,0,0,0,0},
111. {0,0,0,0,0,0,0,0,0,0,0,0,0,0},
112. {0,0,0,0,0,0,0,0,0,0,0,0,0,0},
113. {0,0,0,0,0,0,0,0,0,0,0,0,0,0},
114. {0,0,0,0,0,0,0,0,0,0,0,0,0,0},
115. {0,0,0,0,0,0,0,0,0,0,0,0,0,0},
116. {0,0,0,0,0,0,0,0,0,0,0,0,0,0},
117. {0,0,0,0,0,0,0,0,0,0,0,0,0,0},
118. {0,0,0,0,0,0,0,0,0,0,0,0,0,0},
119. {0,0,0,0,0,0,0,0,0,0,0,0,0,0},
120. {0,0,0,0,0,0,0,0,0,0,0,0,0,0},
121. {0,0,0,0,0,0,0,0,0,0,0,0,0,0},
122. {0,0,0,0,0,0,0,0,0,0,0,0,0,0},
123. {0,0,0,0,0,0,0,0,0,0,0,0,0,0},
124. {0,0,0,0,0,0,0,0,0,0,0,0,0,0},
125. {0,0,0,0,0,0,0,0,0,0,0,0,0,0},
126. {0,0,0,0,0,0,0,0,0,0,0,0,0,0},
127. {0,0,0,0,0,0,0,0,0,0,0,0,0,0},
128. {0,0,0,0,0,0,0,0,0,0,0,0,0,0},
129. {0,0,0,0,0,0,0,0,0
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 学习 C# 俄罗斯方块 开始