简介
最近断断续续学习了flutter,实践出真知,就拿2048来练手了。 可以扫码体验,项目地址:github.com/chencld/flu…
逻辑
这部分参考了js版本的逻辑,大概就是:
1、创建一个二维数组
2、随机生成格子
3、判断能否移动,然后合并
布局
这部分代码都在chess_board.dart里面
1、整体就是是Center+Column布局
2、棋子、棋盘部分就是Stack+Position布局了
数据
chess_model.dart这个文件里面是整个游戏的核心,用到了provider,具体可以点文件链接查看。下面列了几个关键点 1、创建数组
void creatList(){
_chesslist = List < List < Chess >>();
for (int r = 0; r < _size; ++r) {
_chesslist.add(List < Chess > ());
for (int c = 0; c < _size; ++c) {
_chesslist[r].add(Chess(
row: r,
column: c,
number: 0,
));
}
}
...
}
2、能否合并判断,需要注意的一点就是合并过的,需要标记一下
bool canMerge(Chess a, Chess b) {
return !a.isMerged&&((a.number==0 && b.number>0) || (a.number>0 && a.number == b.number));
}
3、最高得分纪录用到了shared_preferences库
loadBest() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
_bestScore = (prefs.getInt('bestscore') ?? 0);
notifyListeners();
}
效果图
后记
虽然比较简单,但是好记性不如烂笔头嘛,后续也会更新这种小练习吧,督促自己学习。
潜水好久了,第一次在掘金上写文章,才疏学浅还请掘金上的大大们多多关照呀。