ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

采用5种设计模式的五子棋

2021-04-17 22:57:12  阅读:166  来源: 互联网

标签:4.2 void 五子棋 模式 设计模式 public 采用


采用5种设计模式的五子棋


文章目录


一、设计要求

仿照教材上面围棋软件的设计思路,设计一款五子棋,采用至少5种设计模式

二、引言

五子棋最早源于中国古代尧帝时期,最初流行于少数民族地区,围棋就是从那时的五子棋渐渐的演变而来的。后来在炎黄子孙的后代流行开来。五子棋棋具虽然与围棋相同,但下法却完全不同。五子棋两人对局,轮流下棋,先将五子连成一行者为胜。后来,五子棋由朝鲜使臣带到朝鲜,再有日本人带到日本。而真正使五子棋发扬光大的是日本。五子棋刚到日本,只有在王室和贵族中间玩,后来被出入皇宫的下人偷偷的传入民间。

三、设计模式

4.1 采用的设计模式

本项目一共使用了5种设计模式,分别是工厂方法模式、享元模式、备忘录模式、观察者模式、策略模式。其中工厂方法模式给用户选择背景音乐、享元模式用于设计五子棋的棋子类、备忘录模式来实现悔棋功能,观察者模式来实现不同类中的JPanel与JFrame通信来实现关闭窗口,策略模式来提供用户来选择人机模式与人人模式。

4.2 设计模式结构视图

4.2.1 工厂方法模式

图 1工厂方法模式视图

4.2.2 享元模式


图 2享元模式视图

4.2.3 备忘录模式


图 3备忘录模式视图

4.2.4 观察者模式

图 4观察者模式视图

4.2.5 策略模式

图 5策略模式视图

四、 系统设计

4.1 背景音乐选择——简单工厂方法模式

图 6工厂方法模式实例类类图

4.2 棋子对象——享元模式

图 7享元模式实例类图

4.3 悔棋——备忘录模式

图 8备忘录模式实例类图

4.4 JPanel与JFrmae的通信——观察者模式


图 9观察者模式实例类图

4.5 人机对战人人对战选择——策略模式

图 10策略模式实例类图

4.6 分析类


图 11分析类类图

五、 系统实现

5.1 部分代码辅助说明

package Observer;import java.util.ArrayList;public abstract class Subject{protected static ArrayList observers = new ArrayList();public static void attach(Obs obs){observers.add(obs);}public void detach(Obs obs){observers.remove(obs);}public abstract void back() throws InterruptedException;}

package Observer;public interface Obs{void response() throws InterruptedException;}

package Memorandum;public class Memento{protected String [][] chess=new String[17][17];public Memento(String[][] chess){for (int i = 0; i < 17; i++){for (int j = 0; j < 17; j++){this.chess[i][j]=chess[i][j];}}}public String[][] getChess(){return chess;}public void setChess(String[][] chess){this.chess = chess;}}

package Game;import Memorandum.Memento;import java.awt.*;public interface ChessboardPanel{public void setCanPlay(boolean canPlay);public void setChess(String[][] chess);public void restoreMemento();public Memento saveMemento();public void paint(Graphics g);public void repaint();public String getFirst();}

package BgMusic;public interface BackgroundMusicFactory{public BackgroundMusic produceBackMusic();}

package BgMusic;public interface BackgroundMusic{public void play();public void stop();}

5.2 系统界面

图 12游戏进入界面

图 13游戏开始界面

图 14游戏开始提示界面

图 15人机对战且电脑先手界面

图 16悔棋提示界面

图 17背景音乐切换界面

六、 结语

此次实验比较有挑战性,要运用5中设计模式来实现五子棋,五子棋的算法其实十分常见,但是里面的人机算法就比较有挑战性,我首先想使用贪心算法来实现电脑的落子,但是由于在最优子结构那里不知道怎么很好的判断,去网上查了一下,可以通过赋予每种落子的可能来实现赋权。通过比较权值的大小进行判断,而且在设计模式中我首先是写了一个人人对战的算法,那个时候应该感觉还缺几个设计模式,所以有打算写一个人机对战的算法来添加一个策略模式,在这里的我感觉来改动过程中我感觉到了,设计模式真的能很好的解决耦合性的问题,对于传统的设计来比较,使用设计模式之后,明显降低了耦合度,而且还在一定程度上满足开闭原则,对整体代码来说,虽然代码流程会比之前复杂,但是整个代码的质量明显提升了一个档次。

七、项目地址

Gobang
大家如果喜欢欢迎给本菜鸡点一个小小的star
在这里插入图片描述

标签:4.2,void,五子棋,模式,设计模式,public,采用
来源: https://blog.51cto.com/u_14189203/2714307

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有