五子棋设计文档(14页).doc

上传人:1595****071 文档编号:35627440 上传时间:2022-08-22 格式:DOC 页数:14 大小:324.50KB
返回 下载 相关 举报
五子棋设计文档(14页).doc_第1页
第1页 / 共14页
五子棋设计文档(14页).doc_第2页
第2页 / 共14页
点击查看更多>>
资源描述

《五子棋设计文档(14页).doc》由会员分享,可在线阅读,更多相关《五子棋设计文档(14页).doc(14页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、-五子棋设计文档-第 14 页1:序言程序简介:随着计算机网络的迅猛发展,异地计算机之间的通信变得十分便捷。这也为异地间的用户通过网络来进行下棋提供了可能。网络五子棋软件利用TCP/IP协议,在异地的玩家之间建立起TCP连接,并用它来交换棋局的各种数据信息。所以,网络五子棋软件在下棋以前必须要对相关的网络参数进行设置,才能实现玩家双方的成功连接。连接成功后,玩家双方轮流下棋,并将每一步下棋的信息通过网络传送给对方,使得双方棋盘上的棋子保持一致。与单机版五子棋软件相同,网络版五子棋软件也提供了倒计时器、“认输”、“和棋”和“悔棋”等功能。但这些功能的都是通过网络来实现的,所以,实现过程较单机版要

2、复杂。在胜负判别方面,单机版五子棋软件与网络版五子棋软件并没有什么不同,只是网络版的玩家双方各自有一套胜负判别的程序。当一方玩家下一步棋后,他的胜负判别程序就执行一次,然后再将落子的信息传送给对方,对方的胜负判别程序也将执行一次。这样就完成一次胜负的判别过程。另外,网络版五子棋的双方可能相距邀远,双方的语言交流没有单机版方便。所以,网络版五子棋还必须提供聊天功能。2:需求分析功能需求能通过网络进行下棋符合五子棋的基本规则提供水平坐标和垂直坐标功能提供双方的倒计时功能能在棋子上显示的落子的顺序数提供玩家之间的聊天功能环境需求10/10Mbps共享式HUB一台装有Windows95/98/NT/X

3、P操作系统的计算机两台计算机的CPU不低于PII450,内存不小于64M10/10Mbps自适应网卡每台计算机各一块,SB兼容声卡各一块,5类双绞线若干米每台计算机都应配置有TCP/IP协议用户界面需求界面友好、亲切界面简洁、不花哨操作界面直观、不繁琐3:程序运行4:UML5:应用设计模式轻量级模式(享元模式)Flyweight在拳击比赛中指最轻量级,即蝇量级,有些作者翻译为羽量级。这里使用享元模式更能反映模式的用意。享元模式以共享的方式高效地支持大量的细粒度对象。享元对象能做到共享的关键是区分内蕴状态(Internal State)和外蕴状态(External State)。内蕴状态是存储在

4、享元对象内部并且不会随环境改变而改变。因此内蕴状态并可以共享。外蕴状态是随环境改变而改变的、不可以共享的状态。享元对象的外蕴状态必须由客户端保存,并在享元对象被创建之后,在需要使用的时候再传入到享元对象内部。外蕴状态与内蕴状态是相互独立的。享元模式的应用享元模式在编辑器系统中大量使用。一个文本编辑器往往会提供很多种字体,而通常的做法就是将每一个字母做成一个享元对象。享元对象的内蕴状态就是这 个字母,而字母在文本中的位置和字模风格等其他信息则是外蕴状态。比如,字母a可能出现在文本的很多地方,虽然这些字母a的位置和字模风格不同,但是所有 这些地方使用的都是同一个字母对象。这样一来,字母对象就可以在

5、整个系统中共享。6:经验总结和体会网络五子棋的开发让我感受到软件的开发是十分辛苦的工作,尤其是一个人独立开发更是困难,因为一个人的知识和能力是有限的,一个好的软件需要一个好的团队,集合大家的知识和力量来共同完成。现在把一些开发的经验总结如下:在工程开发中,系统的分析是整个开发的核心,只有前期进行很好的分析、规划,才能做出好的软件产品,这个阶段要进行很好的策划,精密的分析。尤其是流程的设计,直接关系到系统功能和编码的成败。良好的程序设计风格很重要。这在一个比较大的工程中,程序设计的风格非常重要,这影响到软件的测试以及后期功能扩展,在增量型的开发模型中,混乱的代码会使维护变的十分困难。在多人合作团

6、队开发的时候,你的代码要影响到全局,必须了解到:你的代码是写给别人看。运用高效的测试手段。测试要占开发很大的时间,软件编码以后,并非总能百分百的成功,那就要进行测试。在大程序中,多写异常处理的代码,以及变量合法的检验等,DEBUG中混合使用断点测试以及报告函数,以提高DEBUG效率。善于捕捉最新的技术资料。在每个软件开发过程中,资料是必不可少的,虽然书本上有比较系统的资料,但是真正能运用的还是不多。在开发时,不要急于设计编码,应该学会先查找软件开发中涉及到的各种最新资料,学习他们关于本系统的一些开发经验。学会在编码前,吸取别人的代码的一些优点,然后改进设计,使之更加的完善。网络五子棋的开发让我

7、体会到,要做好软件必须要学会抽象思维,要练好抽象思维,还要学会使用UML软件之类的工具,用UML建模工具建设的时候要一个一个模块设计好,搞清楚,尽可能的把所有的功能分开, 如果有相似性那么就需要抽象然后继承重写来实现自己的功能。7:代码import java.awt.BorderLayout;import java.awt.Color;import java.awt.Frame;importer;import java.awt.event.WindowEvent;public class Client extends Frame JavaChessFive p;Client(String s)

8、super(s);p=new JavaChessFive();setLayout(new BorderLayout();setBounds(100,100,620,418);add(p);setBackground(Color.WHITE); validate();setVisible(true);addWindowListener(new WindowAdapter() public void windowClosing(WindowEvent e) dispose();System.exit(0);public static void main(String a)new Client(五子

9、棋);Concretenut.javaimport java.awt.Graphics;import java.awt.Image;import java.awt.Toolkit;import java.awt.image.ImageObserver;public class ConcreteNut extends Nut Toolkit t = getToolkit();private String key;Image img;public ConcreteNut(String str) key = str;void draw(Graphics g, int x, int y, ImageO

10、bserver obs) if (key.equals(black) img = t.getImage(images/black.gif);elseimg = t.getImage(images/white.gif);g.drawImage(img, x, y, 24, 24, obs);JavaChessFive.javaimport java.awt.BorderLayout;import java.awt.Button;import java.awt.Color;import ;import ;import java.awt.Graphics;import java.awt.GridLa

11、yout;import java.awt.Panel;import java.awt.TextArea;import java.awt.TextField;import java.awt.event.MouseAdapter;import java.awt.event.MouseEvent;import ;import ;import ;import java.rmi.Naming;import java.util.ArrayList;import java.util.List;import javax.swing.JOptionPane;public class JavaChessFive

12、extends Panel List points = new ArrayList();boolean isMy = false, win = false;boolean flag = true;/ 棋子重叠判定NutFactory nutFactory = new NutFactory();/ 享元类MyRemote hello;TextArea t;TextField tt;Button b1, b2;JavaChessFive() / this.frame = frame;setLayout(new BorderLayout();setSize(620,450);setBackgroun

13、d(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.add(t);p1.add(tt);add(East,p1);Panel p2=new Panel();p2.add(b1);p2.add(b2);add(South,p2);try hello = (MyRemote) Naming.lookup(rmi:/localhost

14、:8808/RMI_Hello);System.out.println(hello.sayHello();System.out.println(hello.fromstr(); catch (Exception e) e.printStackTrace();b1.addMouseListener(new MouseAdapter() public void mousePressed(MouseEvent e) try t.append(hello.fromstr() + rn);System.out.println(hello.sayHello();System.out.println(hel

15、lo.fromstr(); catch (Exception ee) System.out.println(error);b2.addMouseListener(new MouseAdapter() public void 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);this.addMous

16、eListener(new MouseAdapter() public void mousePressed(MouseEvent event) int x = event.getX();int y = event.getY();paintItem(x, y);repaint();void paintItem(int x, int y) if (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.

17、getY() = Y) flag = false;break;if (flag) points.add(new Point(X, Y);flag = true;public void paint(Graphics g) for (int i = 30; i = 300; i = i + 30) g.drawLine(30, i, 300, i);g.drawLine(i, 30, i, 300);isMy = false;for (int i = 0; i = 9) if (!win) if (win = winJudge(points.get(i) System.out.println(bl

18、ack win); else / 享元模式方法nutFactory.getFlyWeight(white).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(黑棋);elsewinDialog(白棋);public boolean winJudge(P

19、oint point) int count = 1;int star = 1;/ 白棋if (isMy) / 黑棋star = 0;for (int i = 1; i 5; i+) / 纵向往上扫描for (int j = star; j = 5) return true;for (int i = 1; i 5; i+) / 纵向往下扫描for (int j = star; j = 5) return true;for (int i = 1; i 5; i+) / 横向往左扫描for (int j = star; j = 5) return true;for (int i = 1; i 5;

20、i+) / 纵向往右扫描for (int j = star; j = 5) return true;for (int i = 1; i 5; i+) / 向往左上扫描for (int j = star; j = 5) return true;for (int i = 1; i 5; i+) / 向往右下扫描for (int j = star; j = 5) return true;for (int i = 1; i 5; i+) / 向往左下扫描for (int j = star; j = 5) return true;for (int i = 1; i 5; i+) / 向往右上扫描for

21、(int j = star; j = 5) return true;return false;public void init() points = new ArrayList();isMy = false;win = false;flag = true;public void winDialog(String p) int confirm = JOptionPane.showConfirmDialog(null, p + 获胜 n点是重新来一局n点否退出, 胜利,JOptionPane.YES_NO_OPTION);if (confirm = JOptionPane.YES_OPTION)

22、init();repaint(); else if (confirm = JOptionPane.NO_OPTION) System.exit(0);import java.rmi.Remote;import java.rmi.RemoteException;public interface MyRemote extends Remote public String fromstr() throws RemoteException;public void sendTo(String to) throws RemoteException;public String sayHello() thro

23、ws RemoteException;import java.rmi.RemoteException;import java.rmi.server.UnicastRemoteObject;public class MyRemoteImpl extends UnicastRemoteObject implements MyRemote private String fromstr = hello!;public MyRemoteImpl() throws RemoteException public String fromstr() return fromstr;public void send

24、To(String to) fromstr = to;public String sayHello() return Hello, Im server.;import java.awt.Canvas;import java.awt.Graphics;import ;import ;import ;import java.awt.image.ImageObserver;public abstract class Nut extends Canvas abstract void draw(Graphics g, int x, int y,ImageObserver obs);import java

25、.util.Hashtable;public class 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);return nut;public class Point private int x,y;public Point(int x,

26、int y) super();this.x = x;this.y = y;public int getX() return x;public void setX(int x) this.x = x;public int getY() return y;public void setY(int y) this.y = y;import java.rmi.*;import java.rmi.registry.*;public class RMIServer public static void main(String args) try LocateRegistry.createRegistry(8808);MyRemote hello = new MyRemoteImpl();Naming.rebind(/localhost:8808/RMI_Hello, hello);System.out.println(= Hello server Ready = ); catch (Exception exception) exception.printStackTrace();

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 单元课程

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁