核心代码就是这些,关于的那些分数排行榜哪些小功能懒得做了。
using System.Collections.Generic;
using System;
/// <summary>
/// 游戏核心处理类
/// </summary>
public class GameCore
{
/// <summary>
/// 游戏地图
/// </summary>
private int[,] map;
public int[,] Map
{
get {
return map; }
}
public GameCore()
{
map = new int[4, 4];
//0 0 2 2 2 2 2 2 4 2 4 4
//2 0 2 0 => 2 4 2 2 => 0 4 0 0
//0 2 0 0 0 0 0 0 0 0 0 0
//2 4 0 2 0 0 0 0 0 0 0 0
emptyList = new List<Location>();
random = new Random();
orginalMap = new int[4, 4];
mergeArr = new int[4];
removeZeroArr = new int[4];
moveDataList = new List<MoveData>();
mergeLocationList = new List<Location>();
}
#region 生成新数
/// <summary>
/// 空位置列表
/// </summary>
private List<Location> emptyList;
/// <summary>
/// 计算有所空位置
/// </summary>
public void CalculateEmety()
{
//清空记录的空位
emptyList.Clear();
//逐行逐列的扫描游戏地图里的每一个单元格
for (int r = 0; r < 4; r++)
{
for (int c = 0; c < 4; c++)
{
if (map[r, c] == 0)
{
emptyList.Add(new Location(r, c));
}
}
}
}
/// <summary>
/// 随机找空位
/// </summary>
private Random random;
/// <summary>
/// 生成新数字
/// </summary>
/// <param name="number">生成的数字</param>
/// <param name="loc">生成的位置</param>
public void GenerateNumber(out int number, out Location loc)
{
number = 0;
loc = new Location();
//计算所有的空位置
CalculateEmety();
//如果还有空位
if (emptyList.Count > 0)
{
//从空位数组中随机选一个位置
int randIndex = random.Next(0, emptyList.Count);
loc = emptyList[randIndex];
//为该位置赋值 2或4, 2几率高 4几率小
number = random.Next(1, 11) == 1 ? 4 : 2;
//将该数字 赋进 map里
map[loc.RIndex, loc.CIndex] = number;
//将该位置从空列表中清除
emptyList.RemoveAt(randIndex);
}
}
#endregion
#region 移动
/// <summary>
/// 地图是否发生改变