first commit
This commit is contained in:
77
assets/scripts/Board.ts
Normal file
77
assets/scripts/Board.ts
Normal file
@@ -0,0 +1,77 @@
|
||||
import { _decorator, Node, Prefab, instantiate, SpriteFrame, tween, Vec3, Sprite } from "cc";
|
||||
import { Fruit } from "./Fruit";
|
||||
import { FruitNode } from "./FruitNode";
|
||||
const { ccclass, property } = _decorator;
|
||||
|
||||
@ccclass("Board")
|
||||
export class Board extends Node {
|
||||
@property(Prefab) fruitPrefab: Prefab = null!;
|
||||
@property([SpriteFrame]) fruitSprites: SpriteFrame[] = [];
|
||||
|
||||
board: (Fruit | null)[][] = [];
|
||||
rows = 4;
|
||||
cols = 4;
|
||||
|
||||
node: Node = null!;
|
||||
|
||||
onLoad() {
|
||||
this.initBoard();
|
||||
}
|
||||
|
||||
initBoard() {
|
||||
this.board = [];
|
||||
for (let r = 0; r < this.rows; r++) {
|
||||
this.board[r] = [];
|
||||
for (let c = 0; c < this.cols; c++) {
|
||||
this.board[r][c] = null;
|
||||
}
|
||||
}
|
||||
this.spawnFruit();
|
||||
this.spawnFruit();
|
||||
}
|
||||
|
||||
spawnFruit() {
|
||||
let emptyCells: { r: number; c: number }[] = [];
|
||||
for (let r = 0; r < this.rows; r++) {
|
||||
for (let c = 0; c < this.cols; c++) {
|
||||
if (!this.board[r][c]) emptyCells.push({ r, c });
|
||||
}
|
||||
}
|
||||
if (emptyCells.length === 0) return;
|
||||
|
||||
let index = Math.floor(Math.random() * emptyCells.length);
|
||||
let cell = emptyCells[index];
|
||||
|
||||
let node = instantiate(this.fruitPrefab);
|
||||
node.setParent(this.node);
|
||||
node.setPosition(new Vec3(cell.c * 100, cell.r * -100, 0));
|
||||
|
||||
let fruit = new Fruit(node, cell.r, cell.c, 1);
|
||||
node.getComponent(FruitNode)!.init(fruit, this);
|
||||
node.getComponent(Sprite)!.spriteFrame = this.fruitSprites[0];
|
||||
|
||||
this.board[cell.r][cell.c] = fruit;
|
||||
}
|
||||
|
||||
merge(f1: Fruit, f2: Fruit) {
|
||||
if (f1.level !== f2.level) return;
|
||||
f1.level += 1;
|
||||
|
||||
if (f1.level - 1 < this.fruitSprites.length)
|
||||
f1.node.getComponent(Sprite)!.spriteFrame = this.fruitSprites[f1.level - 1];
|
||||
|
||||
this.playMergeAnimation(f1.node, f2.node);
|
||||
|
||||
this.board[f2.row][f2.col] = null;
|
||||
f2.node.destroy();
|
||||
|
||||
this.spawnFruit();
|
||||
}
|
||||
|
||||
playMergeAnimation(n1: Node, n2: Node) {
|
||||
// tween(n1)
|
||||
// .to(0.2, { scale: 1.2 })
|
||||
// .to(0.1, { scale: 1 })
|
||||
// .start();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user