甜品消消乐整理

糖果:

 

Enum  SweetType

EMPTY,

NORMAL,

BARRIER,

ROW_CLEAR,

COLUMN_CLEAR,

RAINBOWCANDY,

COUNT

 

扫描二维码关注公众号,回复: 2687294 查看本文章

 

GameSweet

用于存储糖果在面板上的位置,提供自己创建的糖果的属性,并且处理鼠标的进入等方法,

变量:

GameManager.SweetType type;

Int x;

Int y;

GameManager gameManager;

MoveSweet moveComponent;

ColorSweet colorComponent;

ClearSweet clearComponent;

函数:

Init(int _x,int _y,GameManager _gameManager);

Awake();//给组件赋值,

CanMove();

CanColor();

CanClear();

OnMouseEnter();//调用gameManager处理甜品的交换

OnMouseDown();

OnMouseUp();

 

 

MoveSweet

用于控制糖果交换的位移效果

变量:

IEnumerator moveCoroutine;//糖果移动动画的协程

GameSweet sweet;

函数:

Move(int newX,newY,float time);//用于外部调用,开启移动协程

IEnumerator MoveCoroutine(int newX,newY,float time);//使用循环利用插值的方法,使得糖果在time的时间内平滑的移动到指定的位置。

 

 

 

 

 

Enum ColorType

YELLOW,

PURPLE,

RED,

BLUE,

GREEN,

PINK,

ANY,

COUNT

 

Struct  ColorSprite

ColorType color;

Sprite sprite;

 

 

ColorSweet

用于糖果的“着色”。使得预制体的糖果的图片可以改变。

变量:

ColorSprite[] colorSprites;//用于储存该糖果可以转变的 Sprite

Dictionary<ColorType,Sprite> colorSpriteDict;//用于查找sprite

SpriteRenderer sprite;//渲染器

ColorType color;

Int numColor;

函数:

Awake();//用于给sprite赋值,给字典赋值

SetColor(ColorType  newColor);//更改图片

 

ClearSweet

//消除甜品类,用于播放消除动画和声音并且计算得分

变量:

AnimationClip clearAnimation;

bool isClearing;//判断是否正在销毁

AudioClip destoryAudio;

GameSweet sweet;

函数:

Awake();//获糖果sweet

Clear();//设置正在清除,开启协程

IEnumerator ClearCoroutine();//播放动画,增加分数,播放声音,播放完动画后消除物体。

yield return new WaitForSeconds(clearAnimation.length);

 

 

 

 

 

 

ClearLine:ClearSweet

//继承于ClearSweet,用于行消除和列消除

变量:

Bool isRow;//英语判断是否是行消除

函数

override void Clear();//用于调用gameManager的行消除和列消除的函数

 

ClearColorSweet

:ClearSweet

//继承于ClearSweet,用于消除同颜色的甜品

变量:

ColorSweet.ColorType clearColor;//标记所要删除的颜色

函数:

 public override void Clear()//用于调用gameManager的ClearColor方法。

 

 

 

 

Struct SweetPrefabs

public SweetType type;

public GameObject prefab;

 

GameManager

//游戏主处理类,用于处理游戏的逻辑调用。

变量:

//单例

private static GameManager _instance;

 

int xColumn;//游戏面板的行列数

int yRow;

GameObject gridPrefab;//面板背景的巧克力预制体

 

Dictionary<SweetType,GameObject> sweetPrefadDict; //甜品预制字典

SweetPrefabs[] sweetPrefabs;//用于放置甜品结构体,以便后面对字典赋值

GameSweet[,] sweets;//用于装载面板上的所有甜品的gameSweet脚本。

 

 

GameSweet pressedSweet;//甜品交换的前一个甜品对象

GameSweet enterSweet;//后一个甜品

 

 //有关时间的UI显示

    public Text timeText;

    private float gameTime = 60;

    private bool gameOver;

    public int playerScore;

    public Text PlayerScoreText;

    private float addScoreTime;

    private float currentScore;

    public GameObject gameOverPanel;

    public Text finalScoreText;

函数:

Awake();//初始化时给单例赋值

Start()

{

//实例化网格内的背景巧克力,实例化甜品字典,将空的甜品实例化至网格,之后再进行填充算法

 

}

Vector3 CorrectPosition(int x,int y); //传入在面板中的相对位置,用于计算实际甜品的位置,用于实例化

{

//实际需要巧克力的位置的X坐标=gamemanager的x坐标-大网格长度的一半+行列对应的x坐标

        ////实际需要巧克力的位置的y坐标=gamemanager的y坐标+大网格长度的一半-行列对应的y坐标(从左上角开始)

}

//产生甜品的方法

public GameSweet CreateNewSweet(int x,int y,SweetType type)

{

//实例化甜品,设置其父物体,将其GameSweet脚本放入sweets[x,y]数组中并初始化。

}

 

 

//交换甜品

public void PressSweet(GameSweet sweet);//获取第一个甜品

 public void EnterSweet(GameSweet sweet);//获取第二个甜品

public void ReleaseSweet();//判断是否相邻,并进入交换方法

private void ExchangeSweets(GameSweet sweet1, GameSweet sweet2)//交换甜品方法

{

//判断是否都可以移动

//交换数组中的甜品

 

 

 

//调用匹配方法MatchSweets,判断是否满足有物体需要销毁或者甜品有一个是消除颜色甜品

{

   //调用两个甜品的移动脚本

   //如果其中有一个甜品是消除颜色,则调用甜品的ClearColorSweet()方法将另一个甜品的颜色传进去。删除该甜品

//如果是另一个总情况则调用ClearAllMatchSweet()消除所有匹配的甜品

//开启填充协程

}

//不满足销毁则将数组中的两个甜品交换回来

 

ClearAllMatchSweets()//消除所有完成匹配的甜品,返回是否需要填充

{

一个个甜品遍历,如果可以清除,获取甜品的匹配列表。判断是否产生特殊甜品,如果等于四标记将产生行消除或者列消除甜品,如果>=5则标记产生颜色消除甜品。遍历匹配列表,调用消除甜品方法。在该处产生特殊甜品,并改变甜品的渲染贴图。

}

List<GameSweet> MatchSweets(GameSweet sweet,int newX,int newY)//遍历甜品四周,查找匹配列表

{

  判断该甜品是否可着色

  进行行匹配,往左右遍历,若大于三,则对行匹配链表的甜品进行LT型匹配,

同样进行列匹配。

返回匹配链表

}

bool IsFriend(GameSweet sweet1,GameSweet sweet2)//判断两个甜品是否是相邻

bool ClearSweet(int x, int y)//清除甜品列表

{

 判断是会否可以消除,并且不是正在消除。

调用甜品的消除方法,在该处产生一个新的空甜品

调用销毁障碍的方法 ClearBarrier(x, y);

}

 

void ClearBarrier(int x,int y)//是被消除掉的甜品的坐标

{

//遍历被销毁甜品的上下左右看是否有障碍物类型的甜品,有吃的话消除。还需要做是否越界的安全校验

}

IEnumerator AllFill(){

//全部填充协程。

在没有填充完全时,调用Fill()函数进行分部填充。

调用ClearAllMatchSweets()方法,用返回值控制是否继续调用Fill()方法

}

 

//分步填充

public bool Fill(){

从倒数第二行开始遍历每个甜品正下方是否有空甜品,有的话进行移动填充(调用甜品移动方法,更改数组中的甜品,该处生成空甜品)

斜向填充。

和左下和右下是否有空类型的甜品,有的话判断该空甜品正上方是否有障碍物,若有则调用甜品移动的方法移动至该处,

 

}

 

void ClearRow(int row);//行消除甜品被消除时调用该方法,该方法用于消除row所以在行的所有甜品

void ClearColumn(int column)//作用如上

void ClearColor(ColorSweet.ColorType color);//消除颜色甜品被消除时调用,用于消除与color同颜色的甜品

 

猜你喜欢

转载自blog.csdn.net/wk6sae88/article/details/81559661
今日推荐