# 基于C#实现的双人对战与道具赛的俄罗斯方块小游戏
# 1.系统总体设计
要完成本系统中俄罗斯方块,必须考虑以下几个问题:
- 如何判断一个方块下落到底部或是发生碰撞
- 如何预测一个方块最终能下落到达的位置并给以玩家提示
- 如何判断一个方块在进行左右移动或是旋转时不碰触边界与其他方块
- 如何让一个方块时时下落更新
- 如何将道具俄罗斯方块与普通俄罗斯方块区分
为此,需要为上面的几个判断依次写明方法,最后可重用,而对于俄罗斯方块的位置可以使用数组存放。
特别的,对于双人俄罗斯方块,还需要考虑:
- 要实现本玩家消除多行时给对面玩家添加相应行数
- 要实现本玩家消除特定行时给对面玩家添加捣乱方块
为此,需要写明2个方法记录自己相应的消除行数以及添加给对面玩家。
数据结构:数组,全局变量。
# 2.系统功能设计
本程序的主要功能如下图所示:
![](http://www.writebug.com/myres/static/uploads/2021/10/19/572a9750a4b93566f13b480454e09034.writebug)
- 运行程序进入主界面,选择单人或双人游戏
- 单人游戏
- 用方向键来移动,上方向键来旋转
- 下落过程中方块会实时产生下落预测图
- 方块碰到左右边界无法继续移动,方块旋转后产生的图形超过边界或碰到已有方块则不能旋转,方块下落到边界或碰到已有方块则不再下落并随机生成新方块
- 新方块有一定几率是特殊方块,红色方块能令所在行随机消除,绿色则是随机填充
- 当方块产生的初始位置被填充,游戏结束
- 双人游戏
- 玩家一用方向键移动,上方向键旋转,玩家二用wasd移动,w键旋转
- 2内bcde
- 当玩家连续消除2行或3行方块时,给对手增加这些方块
- 当玩家连续消除4行方块时,给对方添加特殊方块,红色方块能令所在行随机消除,绿色则是随机填充
- 游戏结束
# 3.类的设计
| 类名 | Form1 |
| ---- | ---------------------------------------- |
| 属性 | int x1 玩家一方块一的x坐标 |
| 属性 | int y1 玩家一方块一的y坐标 |
| 属性 | int x2 玩家一方块二的x坐标 |
| 属性 | int y2 玩家一方块二的y坐标 |
| 属性 | int x3 玩家一方块三的x坐标 |
| 属性 | int y3 玩家一方块三的y坐标 |
| 属性 | int x4 玩家一方块四的x坐标 |
| 属性 | int y4 玩家一方块四的y坐标 |
| 属性 | int x5 玩家二方块一的x坐标 |
| 属性 | int y5 玩家二方块一的y坐标 |
| 属性 | int x6 玩家二方块二的x坐标 |
| 属性 | int y6 玩家二方块二的y坐标 |
| 属性 | int x7 玩家二方块三的x坐标 |
| 属性 | int y7 玩家二方块三的y坐标 |
| 属性 | int x8 玩家二方块四的x坐标 |
| 属性 | int y8 玩家二方块四的y坐标 |
| 属性 | int size 方块的长宽 |
| 属性 | int youtu[,] 记录玩家一各个区域有无方块 |
| 属性 | int P2youtu[,] 记录玩家二各个区域有无方块 |
| 属性 | int type 记录玩家一方块代号 |
| 属性 | int P2type 记录玩家二方块代号 |
| 属性 | int turn 记录玩家一方块旋转次数 |
| 属性 | int P2turn 记录玩家二方块旋转次数 |
| 属性 | int specialtype 记录玩家一特殊方块代号 |
| 属性 | int P2specialtype 记录玩家二特殊方块代号 |
| 属性 | bool onlyone 记录是否是单人模式 |
| 方法 | private bool meetnow(int tempx1,int tempx2,int tempx3,int tempx4, int tempy1, int tempy2,int tempy3,int tempy4,int[,] temp) //旋转后是否碰撞的计算函数 |
| 方法 | private void special_init(ref int tempspecialtype)//特殊方块生成 |
| 方法 | private void block_init(ref int type,ref int turn)//玩家一普通方块生成 |
| 方法 | private void P2block_init(ref int P2type, ref int P2turn) //玩家二普通方块生成 |
| 方法 | private void tianblock_init(ref int x1,ref int x2,ref int y1,ref int y2,ref int x3,ref int x4,ref int y3,ref int y4)//田子型block初始化 |
| 方法 | private void long_init(ref int x1, ref int x2, ref int y1, ref int y2,ref int x3,ref int x4,ref int y3,ref int y4)//长条型block,type1 |
| 方法 | private void turn0_long_init(ref int tempx1, ref int tempx2, ref int tempy1, ref int tempy2, ref int tempx3, ref int tempx4, ref int tempy3, ref int tempy4,ref int tempturn)//长条型block旋转 |
| 方法 | private void turn1_long_init(ref int tempx1, ref int tempx2, ref int tempy1, ref int tempy2, ref int tempx3, ref int tempx4, ref int tempy3, ref int tempy4, ref int tempturn)//长条型block旋转2 |
| 方法 | private void tublock_init(ref int x1, ref int x2, ref int y1, ref int y2, ref int x3, ref int x4, ref int y3, ref int y4)//凸型block初始化 |
| 方法 | private void turn0_tublock_init(ref int tempx1, ref int tempx2, ref int tempy1, ref int tempy2, ref int tempx3, ref int tempx4, ref int tempy3, ref int tempy4,ref int tempturn)//凸型block旋转 |
| 方法 | private void turn1_tublock_init(ref int tempx1, ref int tempx2, ref int tempy1, ref int tempy2, ref int tempx3, ref int tempx4, ref int tempy3, ref int tempy4, ref int tempturn)//凸型block旋转2 |
| 方法 | private void turn2_tublock_init(ref int tempx1, ref int tempx2, ref int tempy1, ref int tempy2, ref int tempx3, ref int tempx4, ref int tempy3, ref int tempy4, ref int tempturn)//凸型block旋转3 |
| 方法 | private void turn3_tublock_init(ref int tempx1, ref int tempx2, ref int tempy1, ref int tempy2, ref int tempx3, ref int tempx4, ref int tempy3, ref int tempy4, ref int tempturn)//凸型block旋转4 |
| 方法 | private void RZblock_init(ref int x1, ref int x2, ref int y1, ref int y2, ref int x3, ref int x4, ref int y3, ref int y4)//RZ型block |
| 方法 | private void turn0_RZblock_init(ref int tempx1, ref int tempx2, ref int tempy1, ref int tempy2, ref int tempx3, ref int tempx4, ref int tempy3, ref int tempy4,ref int tempturn)//RZ型block旋转 |
| 方法 | private void turn1_RZblock_init(ref int tempx1, ref int tempx2, ref int tempy1, ref int tempy2, ref int tempx3, ref int tempx4, ref int tempy3, ref int tempy4,ref int tempturn) //RZ型block旋转2 |
| 方法 | private void LZblock_init(ref int x1, ref int x2, ref int y1, ref int y2, ref int x3, ref int x4, ref int y3, ref int y4)//LZ型block |
| 方法 | private void turn0_LZblock_init(ref int tempx1, ref int tempx2, ref int tempy1, ref int tempy2, ref int tempx3, ref int tempx4, ref int tempy3, ref int tempy4,ref int tempturn) //LZ型block旋转 |
| 方法 | private void turn1_LZblock_init(ref int tempx1, ref int tempx2, ref int tempy1, ref int tempy2, ref int tempx3, ref int tempx4, ref int tempy3, ref int tempy4,ref int tempturn)// LZ型block旋转2 |
| 方法 | private void LLblock_init(ref int x1, ref int x2, ref int y1, ref int y2, ref int x3, ref int x4, ref int y3, ref int y4)//LL型block |
| 方法 | private void turn0_LLblock_init(ref int tempx1, ref int tempx2, ref int tempy1, ref int tempy2, ref int tempx3, ref int tempx4, ref int tempy3, ref int tempy4,ref int tempturn) //LL型block旋转 |
| 方法 | private void turn1_LLblock_init(ref int tempx1, ref int tempx2, ref int tempy1, ref int tempy2, ref int tempx3, re
精选_基于C#实现的双人对战与道具赛的俄罗斯方块小游戏_源码打包
版权申诉
137 浏览量
2022-03-12
09:30:54
上传
评论
收藏 380KB ZIP 举报
工具盒子
- 粉丝: 58
- 资源: 1313