介绍
使用 Silverlight 2.0(c#) 开发一个七彩俄罗斯方块
玩法
↑ - 变形;← - 向左移动;→ - 向右移动;↓ - 向下移动
在线DEMO
点击这里查看效果
思路
1、每个形状都是由4个“块”组成的,也就是“块”是俄罗斯方块的最小单位,首先要有一个“块”的用户控件。要求可以设置“块”的位置和颜色
2、经典俄罗斯方块一共7种形状,把每种形状所需要的功能抽象出来写一个抽象类,7个具体形状分别继承这个抽象类,并重写其抽象属性和抽象方法
3、核心控制部分:在容器内铺满隐藏的“块”,上/下/左/右/控制形状的变形和移动,通过控制容器内“块”的颜色来响应变化,当形状下一步移动或变形的位置处已经有颜色时则禁止移动或变形,当形状下一步移动或变形的位置在底边有颜色或处于容器的底部则判断消行并生成新的形状
关键代码
1、形状抽象类
PieceBase.cs
using System;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
namespace YYTetris.Piece
{
public abstract class PieceBase
{
public PieceBase()
{
InitPiece();
}
// 形状的矩阵
public int[,] Matrix { get; set; }
// 形状的索引
private int _index = 0;
// 形状的最大索引
public int MaxIndex { get; set; }
/**//// <summary>
/// 初始化形状,需要设置 Matrix 和 MaxIndex
/// </summary>
public abstract void InitPiece();
/**//// <summary>
/// 变形
/// </summary>
/// <returns>变形后的矩阵</returns>
public abstract int[,] GetRotate();
/**//// <summary>
/// 形状的颜色
/// </summary>
public abstract Color Color { get; }
/**//// <summary>
/// 获取下一个形状的索引。如果超过最大索引则返回最初索引
/// </summary>
/// <returns></returns>
public int GetNextIndex()
{
int nextIndex = _index >= MaxIndex ? 0 : _index + 1;
return nextIndex;
}
/**//// <summary>
/// 变形。设置 Matrix 为变形后的矩阵
/// </summary>
public void Rotate()
{
Matrix = GetRotate();
_index = GetNextIndex();
}
}
}
[1] [2] [3] [4] [5] [6] [7] 下一页
责任编辑:小草