《2022年五子棋设计.pdf》由会员分享,可在线阅读,更多相关《2022年五子棋设计.pdf(18页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、五子棋设计1: 序言程序简介 : 随着计算机网络的迅猛发展,异地计算机之间的通信变得十分便捷。这也为异地间的用户通过网络来进行下棋提供了可能。网络五子棋软件利用TCP/IP 协议 , 在异地的玩家之间建立起TCP连接 , 并用它来交换棋局的各种数据信息。所以, 网络五子棋软件在下棋以前必须要对相关的网络参数进行设置, 才能实现玩家双方的成功连接。连接成功后 , 玩家双方轮流下棋 , 并将每一步下棋的信息通过网络传送给对方, 使得双方棋盘上的棋子保持一致。与单机版五子棋软件相同,网络版五子棋软件也提供了倒计时器、“认输”、“与棋”与“悔棋”等功能。但这些功能的都就是通过网络来实现的,所以 ,实现
2、过程较单机版要复杂。在胜负判别方面,单机版五子棋软件与网络版五子棋软件并没有什么不同,只就是网络版的玩家双方各自有一套胜负判别的程序。当一方玩家下一步棋后,她的胜负判别程序就执行一次,然后再将落子的信息传送给对方,对方的胜负判别程序也将执行一次。这样就完成一次胜负的判别过程。另外 ,网络版五子棋的双方可能相距邀远,双方的语言交流没有单机版方便。所以 ,网络版五子棋还必须提供聊天功能。2: 需求分析功能需求能通过网络进行下棋符合五子棋的基本规则提供水平坐标与垂直坐标功能提供双方的倒计时功能能在棋子上显示的落子的顺序数提供玩家之间的聊天功能环境需求10/10Mbps 共享式 HUB一台装有 Win
3、dows95/98/NT/XP 操作系统的计算机两台计算机的CPU不低于 PII450,内存不小于64M 10/10Mbps 自适应网卡每台计算机各一块,SB 兼容声卡各一块,5 类双绞线若干米精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 1 页,共 18 页 - - - - - - - - - - 五子棋设计每台计算机都应配置有TCP/IP 协议用户界面需求界面友好、亲切界面简洁、不花哨操作界面直观、不繁琐3: 程序运行精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下
4、载 名师归纳 - - - - - - - - - -第 2 页,共 18 页 - - - - - - - - - - 五子棋设计4:UML 5: 应用设计模式轻量级模式 ( 享元模式 ) Flyweight在拳击比赛中指最轻量级,即蝇量级 ,有些作者翻译为羽量级。这里使用 享元模式 更能反映模式的用意。享元模式以共享的方式高效地支持大量的细粒度对象。享元对象能做到共享的关键就是区分内蕴状态(Internal State)与外蕴状态 (External State)。内蕴状态就是存储在享元对象内部并且不会随环境改变而改变。因此内蕴状态并可以共享。精品资料 - - - 欢迎下载 - - - - -
5、 - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 3 页,共 18 页 - - - - - - - - - - 五子棋设计外蕴状态就是随环境改变而改变的、不可以共享的状态。享元对象的外蕴状态必须由客户端保存,并在享元对象被创建之后,在需要使用的时候再传入到享元对象内部。外蕴状态与内蕴状态就是相互独立的。享元模式的应用享元模式在编辑器系统中大量使用。一个文本编辑器往往会提供很多种字体,而通常的做法就就是将每一个字母做成一个享元对象。享元对象的内蕴状态就就是这个字母 ,而字母在文本中的位置与字模风格等其她信息则就是外蕴状态。 比如 ,字母 a 可能出现在文本的
6、很多地方,虽然这些字母a 的位置与字模风格不同 ,但就是所有这些地方使用的都就是同一个字母对象。这样一来,字母对象就可以在整个系统中共享。6: 经验总结与体会网络五子棋的开发让我感受到软件的开发就是十分辛苦的工作,尤其就是一个人独立开发更就是困难,因为一个人的知识与能力就是有限的,一个好的软件需要一个好的团队,集合大家的知识与力量来共同完成。现在把一些开发的经验总结如下: 在工程开发中, 系统的分析就是整个开发的核心, 只有前期进行很好的分析、规划 , 才能做出好的软件产品, 这个阶段要进行很好的策划, 精密的分析。尤其就是流程的设计, 直接关系到系统功能与编码的成败。良好的程序设计风格很重要
7、。这在一个比较大的工程中, 程序设计的风格非常重要 , 这影响到软件的测试以及后期功能扩展, 在增量型的开发模型中,混乱的代码会使维护变的十分困难。在多人合作团队开发的时候, 您的代码要影响到全局 , 必须了解到 : 您的代码就是写给别人瞧。运用高效的测试手段。测试要占开发很大的时间, 软件编码以后, 并非总能百分百的成功, 那就要进行测试。在大程序中, 多写异常处理的代码, 以及变量合法的检验等,DEBUG中混合使用断点测试以及报告函数, 以提高DEBUG效率。善于捕捉最新的技术资料。在每个软件开发过程中, 资料就是必不可少的, 虽然书本上有比较系统的资料, 但就是真正能运用的还就是不多。在
8、开发时 ,不要急于设计编码, 应该学会先查找软件开发中涉及到的各种最新资料, 学习她们关于本系统的一些开发经验。学会在编码前, 吸取别人的代码的一些优点,然后改进设计 , 使之更加的完善。网络五子棋的开发让我体会到,要做好软件必须要学会抽象思维, 要练好精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 4 页,共 18 页 - - - - - - - - - - 五子棋设计抽象思维 ,还要学会使用UML 软件之类的工具,用 UML 建模工具建设的时候要一个一个模块设计好,搞清楚 , 尽可能的把所有的功能分开
9、, 如果有相似性那么就需要抽象然后继承重写来实现自己的功能。7: 代码Client、 java import java、 awt 、BorderLayout; import java、 awt 、Color; import java、 awt 、Frame; import java、 awt 、event、 WindowAdapter; import java、 awt 、event、 WindowEvent; publicclass Client extends Frame JavaChessFive p; Client(String s) super(s); p =new JavaChes
10、sFive(); setLayout(new BorderLayout(); setBounds(100,100,620,418); add(p ); setBackground(Color、 WHITE ); validate(); setVisible(true); addWindowListener(new WindowAdapter() publicvoid windowClosing(WindowEvent e) dispose(); System、 exit(0); ); publicstaticvoid main(String a) new Client( 五子棋 ); 精品资料
11、 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 5 页,共 18 页 - - - - - - - - - - 五子棋设计 Concretenut、 java import java、 awt 、Graphics; import java、 awt 、Image; import java、 awt 、Toolkit; import java、 awt 、image、 ImageObserver; publicclass ConcreteNut extends Nut Toolkit t = getToolkit()
12、; private String key ; Image img ; public ConcreteNut(String str) key = str; void draw(Graphics g, int x, int y, ImageObserver obs) if (key 、 equals(black) img = t 、 getImage(images/black、 gif); else img = t 、 getImage(images/white、 gif); g 、 drawImage(img , x, y, 24, 24, obs); JavaChessFive、 javaim
13、port java、 awt 、BorderLayout; import java、 awt 、Button; import java、 awt 、Color; import java、 awt 、FlowLayout; import java、 awt 、Frame; import java、 awt 、Graphics; import java、 awt 、GridLayout; import java、 awt 、Panel; import java、 awt 、TextArea; import java、 awt 、TextField; import java、 awt 、event、
14、 MouseAdapter; import java、 awt 、event、 MouseEvent; 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 6 页,共 18 页 - - - - - - - - - - 五子棋设计import java、 awt 、event、 WindowAdapter; import java、 awt 、event、 WindowEvent; import java、 awt 、geom 、Ellipse2D; import java、 rmi、Naming; impor
15、t java、 util、 ArrayList; import java、 util、 List; import javax、 swing、 JOptionPane; publicclass JavaChessFive extends Panel List points = new ArrayList(); booleanisMy = false, win = false; booleanflag = true; / 棋子重叠判定NutFactory nutFactory = new NutFactory();/ 享元类MyRemote hello; /TextArea t ; TextFie
16、ld tt; Button b1 , b2 ; JavaChessFive() / this、 frame = frame;setLayout(new BorderLayout(); setSize(620,450); setBackground(Color、 gray); t = new TextArea(10,25); tt = new TextField(1); b1 = new Button( 接收消息 ); b2 = new Button( 发送消息 ); Panel p1=new Panel(); p1 、 setLayout(new GridLayout(2,1); p1 、 a
17、dd(t ); p1 、 add(tt); add(East,p1); Panel p2=new Panel(); p2 、 add(b1 ); p2 、 add(b2 ); add(South,p2); 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 7 页,共 18 页 - - - - - - - - - - 五子棋设计try hello = (MyRemote) Naming、lookup( rmi:/localhost:8808/RMI_Hello); System、 out 、 println(
18、hello、 sayHello(); System、 out 、 println(hello、 fromstr(); catch (Exception e) e、 printStackTrace(); b1 、 addMouseListener(new MouseAdapter() publicvoid mousePressed(MouseEvent e) try t 、 append(hello、 fromstr() + rn); System、 out 、 println(hello、 sayHello(); System、 out 、 println(hello、 fromstr();
19、catch (Exception ee) System、 out 、 println(error); ); b2 、 addMouseListener(new MouseAdapter() publicvoid mousePressed(MouseEvent e) try hello、 sendTo(tt、 getText(); System、 out 、 println(hello、 sayHello(); System、 out 、 println(hello、 fromstr(); catch (Exception ee) System、 out 、 println(error); );
20、 this、 addMouseListener(new MouseAdapter() publicvoid mousePressed(MouseEvent event) int x = event、 getX(); int y = event、 getY(); paintItem(x, y); 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 8 页,共 18 页 - - - - - - - - - - 五子棋设计repaint(); ); void paintItem(int x, int y) if (
21、x = 30 & x = 30 & y = 300) int X = (x + 15) / 30; int Y = (y + 15) / 30; for (Point point : points) if (point、 getX() = X & point、 getY() = Y) flag = false; break; if (flag) points、 add(new Point(X, Y); flag = true; publicvoid paint(Graphics g) for (int i = 30; i = 300; i = i + 30) g、 drawLine(30, i
22、, 300, i); g、 drawLine(i, 30, i, 300); isMy = false; for (int i = 0; i = 9) if (!win ) 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 9 页,共 18 页 - - - - - - - - - - 五子棋设计if (win = winJudge(points、 get(i) System、 out 、 println(black win); else / 享元模式方法nutFactory、 getFlyWeight(wh
23、ite) 、 draw(g, points、 get(i)、getX() * 30 - 12, points、 get(i)、getY() * 30 - 12, this); if (points、 size() 9) if (!win ) if (win = winJudge(points、 get(i) System、 out 、 println(white win); if (win ) if (isMy) winDialog( 黑棋 ); else winDialog( 白棋 ); publicboolean winJudge(Point point) int count = 1; i
24、nt star = 1;/ 白棋if (isMy) / 黑棋star = 0; for (int i = 1; i 5; i+) / 纵向往上扫描for (int j = star; j = 5) returntrue; for (int i = 1; i 5; i+) / 纵向往下扫描for (int j = star; j = 5) returntrue; for (int i = 1; i 5; i+) / 横向往左扫描for (int j = star; j = 5) returntrue; for (int i = 1; i 5; i+) / 纵向往右扫描for (int j = s
25、tar; j = 5) returntrue; for (int i = 1; i 5; i+) / 向往左上扫描for (int j = star; j = 5) returntrue; for (int i = 1; i 5; i+) / 向往右下扫描for (int j = star; j = 5) returntrue; for (int i = 1; i 5; i+) / 向往左下扫描for (int j = star; j = 5) returntrue; for (int i = 1; i 5; i+) / 向往右上扫描for (int j = star; j = 5) retu
26、rntrue; returnfalse; publicvoid init() points = new ArrayList(); isMy = false; win = false; flag = true; publicvoid winDialog(String p) int confirm = JOptionPane、 showConfirmDialog( null, p + 获胜 n点 就是 重新来一局n 点 否 退出 , 胜利 , JOptionPane、 YES_NO_OPTION); if (confirm = JOptionPane、 YES_OPTION) init(); 精品
27、资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 14 页,共 18 页 - - - - - - - - - - 五子棋设计repaint(); elseif (confirm = JOptionPane、 NO_OPTION ) System、 exit(0); MyRemote 、java import java、 rmi、Remote; import java、 rmi、RemoteException; publicinterface MyRemote extends Remote public Stri
28、ng fromstr() throws RemoteException; publicvoid sendTo(String to) throws RemoteException; public String sayHello() throws RemoteException; MyRemoyeImpl 、java import java、 rmi、RemoteException; import java、 rmi、server、 UnicastRemoteObject; publicclass MyRemoteImpl extends UnicastRemoteObject implement
29、sMyRemote private String fromstr = hello!; public MyRemoteImpl() throws RemoteException public String fromstr() returnfromstr; publicvoid sendTo(String to) fromstr = to; public String sayHello() returnHello, Im server、 ; Nut 、 java import java、 awt 、Canvas; import java、 awt 、Graphics; 精品资料 - - - 欢迎下
30、载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 15 页,共 18 页 - - - - - - - - - - 五子棋设计import java、 awt 、GraphicsConfiguration; import java、 awt 、Image; import java、 awt 、Toolkit; import java、 awt 、image、 ImageObserver; publicabstractclass Nut extends Canvas abstractvoid draw(Graphics g, int x,
31、 int y,ImageObserver obs); NutFactory、 java import java、 util、 Hashtable; publicclass NutFactory /按钮工厂private Hashtable nuts = new Hashtable(); public NutFactory() public Nut getFlyWeight(String key) Nut nut = (Nut) nuts、get(key); if (nut = null) nut = new ConcreteNut(key); nuts、 put(key, nut); retu
32、rn nut; Point、java publicclass Point privateintx , y; public Point(int x, int y) super(); this、 x = x; this、 y = y; publicint getX() returnx ; publicvoid setX(int x) this、 x = x; 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 16 页,共 18 页 - - - - - - - - - - 五子棋设计 publicint getY
33、() returny ; publicvoid setY(int y) this、 y = y; RMIServer、java import java、 rmi、*; import java、 rmi、registry、*; publicclass RMIServer publicstaticvoid main(String args) try LocateRegistry、 createRegistry(8808); MyRemote hello = new MyRemoteImpl(); Naming、 rebind( /localhost:8808/RMI_Hello, hello);
34、System、 out 、 println(= Hello server Ready = ); catch (Exception exception) exception、 printStackTrace(); 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 17 页,共 18 页 - - - - - - - - - - 五子棋设计精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 18 页,共 18 页 - - - - - - - - - -