[Flutter实战]2048小游戏实现

547 阅读1分钟

简介

最近断断续续学习了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();
  }

效果图

后记

虽然比较简单,但是好记性不如烂笔头嘛,后续也会更新这种小练习吧,督促自己学习。
潜水好久了,第一次在掘金上写文章,才疏学浅还请掘金上的大大们多多关照呀。