Flutter从头到尾设计一款简单的五子棋游戏(三) 具体代码设计_flutter 游戏源码(3)

int get shape => _shape!;

set shape(int value) {
_shape = value;
}
}


ChessShape是一个抽象类,定义了其返回的形状类型。这里我们使用1代表圆,0代表方。具体的类设计如下:



class CircleShape extends ChessShape{
CircleShape(){
shape = 1;
}
}

class RectShape extends ChessShape{
RectShape(){
shape = 2;
}
}


#### 玩家状态的切换——状态模式


游戏玩家状态的可以进行切换,如是否可以悔棋等,因此在这里使用了状态模式。


![](https://img-blog.csdnimg.cn/img_convert/0c81842d45d17ab33df820e616fa1b4f.png)


玩家类设计如下:



class UserContext {

late State _state;

State get state => _state;

UserContext(){
_state = StartState(this);
}

play() {
_state.play();
}

//悔棋只能悔棋三次
bool regretChess() {
return _state.regretChess();
}

// 认输 10步之内不能认输
bool surrender() {
return _state.surrender();
}

setState(State state){
_state = state;
}

void reset() {
_state = StartState(this);
}
}


这里对玩家的一些动作进行了限制,比如`悔棋只能悔棋三次`,`前10步不能认输`。这个玩家类在状态模式中也叫`环境类`。


随后我们设计抽象状态类:



abstract class State {
int _step = 0;

int get step => _step;
int _reg = 0;

int get reg => _reg;
UserContext _userContext;

State(UserContext userContext):_userContext = userContext;

// 悔棋只能悔棋三次
bool regretChess();

// 认输10步之内不能认输
bool surrender();

play() {
_step++;
}

}


随后设计具体的状态类:



class StartState extends State {

StartState(UserContext userContext) : super(userContext);

//悔棋只能悔棋三次
@override
bool regretChess(){
return false;
}

@override
bool surrender() {
return false;
}

@override
play() {
super.play();
if(_step >= 4) {
_userContext.setState(MidState(_userContext)…_step = _step…_reg = _reg);
}
}

}


在开始状态中,我们设置不能悔棋,也不能投降。当步数大于4时,我们进行状态转移到`MidState`。效果图如下:


![](https://img-blog.csdnimg.cn/img_convert/2c5514e1dea492ec6ffeee03134ba751.png)



class MidState extends State {
MidState(UserContext userContext) : super(userContext);

@override
int get _reg{
return super._reg;
}

//悔棋只能悔棋三次
@override
bool regretChess(){
_reg++;
if(_reg == 3) {
print(‘切换到白热化阶段’);
_userContext.setState(EndState(_userContext)…_step = _step…_reg = _reg);
}
return true;
}

@override
bool surrender() {
return true;
}

}


在这个`MidState`中,我们允许投降,也允许悔棋。当悔棋超过3次,则进入到`EndState`。效果图如下:


![](https://img-blog.csdnimg.cn/img_convert/4c0d70c2049ecdf8ce9d21e7d0f3420a.png)



class EndState extends State {
EndState(UserContext userContext) : super(userContext);

//悔棋只能悔棋三次
@override
regretChess(){
return false;
}

@override
surrender() {
return true;
}

}


在`EndState`中,我们只允许投降。效果图如下:


![](https://img-blog.csdnimg.cn/img_convert/1cb39a21ba2f13ed407760fcdec6963b.png)


### 3.总结


今天在复习了原有的`享元模式`上,再介绍了`桥接模式`以及`状态模式`。关于棋子的创建以及玩家的状态我们也就已经设计完成,后续我们将把悔棋、以及App主题变换加上,基本就大功告成了。



> 
> 作者:Jalor  
>  链接:https://juejin.cn/post/7176111304745156665
> 
> 
> 


### 最后


如果想要成为架构师或想突破20~30K薪资范畴,那就不要局限在编码,业务,要会选型、扩展,提升编程思维。此外,良好的职业规划也很重要,学习的习惯很重要,但是最重要的还是要能持之以恒,任何不能坚持落实的计划都是空谈。


如果你没有方向,这里给大家分享一套由阿里高级架构师编写的《Android八大模块进阶笔记》,帮大家将杂乱、零散、碎片化的知识进行体系化的整理,让大家系统而高效地掌握Android开发的各个知识点。


![在这里插入图片描述](https://img-blog.csdnimg.cn/06e41b3932164f0db07014d54e6e5626.png)  
 相对于我们平时看的碎片化内容,这份笔记的知识点更系统化,更容易理解和记忆,是严格按照知识体系编排的。


#### 全套视频资料:


**一、面试合集**  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/4f54728150894ebcb33d7d4b57501cae.png)  
 **二、源码解析合集**


![在这里插入图片描述](https://img-blog.csdnimg.cn/eb777d5535da42099b8884182bd271d7.png)  
 **三、开源框架合集**


![在这里插入图片描述](https://img-blog.csdnimg.cn/103933b5a4434cf08fa230a193baaca9.png)  
 **欢迎大家一键三连支持,若需要文中资料,直接点击文末CSDN官方认证微信卡片免费领取↓↓↓**







### 设计模式学习笔记

![](https://img-blog.csdnimg.cn/img_convert/3176c1ed252563a2667c7e36f333c698.webp?x-oss-process=image/format,png)

### 设计模式系列学习视频

![](https://img-blog.csdnimg.cn/img_convert/85f7662b455be7951609f1e1d225e9d4.webp?x-oss-process=image/format,png)





**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化学习资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618156601)**

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

g-vb0i5ImU-1714489165152)]





**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化学习资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618156601)**

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值