unity小游戏实践(一) 俄罗斯方块

本文介绍了作者将一个JavaScript编写的俄罗斯方块游戏重构为C#版本的过程,重点探讨了C#中的yield用法和游戏设计思路。游戏的核心包括一个全局管理类Manager,用于初始化和判断游戏状态,以及各种方块的生成、移动、旋转和消除逻辑。通过yield关键字实现了游戏循环和延迟效果。

写这个的原因是 我从网上download了一个俄罗斯的小游戏,源码是js写的  在我看来相当的混乱而且有少量bug,然后我就改成了c#的版本,在此途中认真学习到了yield在c#中的用法和俄罗斯方块的设计思路。


首先说说我设计这种游戏的话肯定不会用到yield,因为我自认为不用这样的设计也能运行得很好,就是可能代码量会多一点。

然后看看js中的 yield,作用是挂起线程,等下次运行的时候直接跳到线程之下的步骤,

我总结了一下,主要有几个区域会用到的

js:

while(true)
{
  yield;
}
在c#中写成
while(true)
{
  yield return null;
}  搞定

for(i)
{   yield;  }

for(i)
{    yield return i;} 搞定   太吐血了     因为js的各种yield搞不清;

还有的函数体第一句fun(){ yield;}的
我认为是fun(){ yield return 1;}的 //一般是下一帧后运行  如果函数体每帧都运行的吧

yield fun()这样的  看情况而定,如果不是 yield return StartCoroutine(fun( )),那么就是StartCoroutine(fun( )),(看函数体是不是IEnumerator)


然后说说这个游戏的设计思路: 首先全局有一个静态的管理类Manager,它附在空物体中,在场景运行的时候执行初始化操作

一些关键参数 bool[,] field; 场景的2维bool数组存储

blockNormalSpeed = 2.0f;   正常速度
blockDropSpeed = 30.0f;   方块掉落速度
blockMoveDelay = 0.1f; //   移动延迟

初始化,确定场景的真实边界,并确定2维数组field的边界,使用true表示block,false表示space,并在2维数组中的上下左右分别做一条边的true  表示有边界了不能移动过去=,= 主要是方便以后判断用。。。。

然后初始化第一个方块SpawnBlock();  实际上是Instantiate(Blocks[Random.Range(0, Blocks.Length)]);

生成预定义范围内的随机的方块,这个方块附有脚本Block


然后我们说说怎么定义一个方块,用一个string[]数组以,注意为方便以后计算,这个数组的字符串以n的平方次来定义,比如

0000

1111  表示一个横条

0000

0000

一个四方的方块表示为

11

11

一个z字型表示为

010

011

001

都是这样的表示,比较而言浅显易懂。


Block的start函数是一个IEnumerator,它读取了stri

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值