资源简介
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,代表砖块在该区域中无显示,为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; //中心点 相对于必要区域
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的即时通讯系统源码GG2014
- 下一篇:c#dll文件查看工具
相关资源
- c#dll文件查看工具
- C#基于Gecko 52自用浏览器,chrome风格选
- C#函数式编程英文版
- C#做的学生信息管理系统、连接SQL数据
- 简单C#词法分析器编译原理实验
- C#上位机反编译
- C#二等精密水准实习平差程序武大测绘
- C#摄影测量学相对定向后方交会尺度量
- C#高级编程(第11版) 附随书编码24
- c#高级编程(第10版)
- ASP.NET网上商城完整源码[201903]
- C# 类似PS的魔棒工具漫水加边缘获取
-
Office 2007 Access Databa
se Engine - c# 调取微信扫一扫接口v1.1版本
- C# 小学期牙医管理系统
- C# FFmpeg保存rtsp视频流到本地文件
- Visual C#.NET数据库开发经典案例解析
- c#高级编程(第10版) pdf 文字版 非扫
- 酒店管理C#项目(推荐)
- 北大青鸟KTV点歌系统项目
- 酒店管理系统 C#开发
- unity3d 登录注册界面功能实现 c#
- IP电话的设计与实现
- MoreEffectiveC#中文高清.pdf
- c#源码服务端与客户端文件传出
- winform+SqlServer2008R2 仿QQ聊天源码
- WinForm\\C#开发图标素材上千张
- c# 实现即时通讯工具
- c#SQL数据库课程设计 整合版
- 个人财务管理系统的设计与实现源码
评论
共有 条评论