五子棋设计文档文档格式.docx

上传人:b****5 文档编号:19151848 上传时间:2023-01-04 格式:DOCX 页数:19 大小:152.42KB
下载 相关 举报
五子棋设计文档文档格式.docx_第1页
第1页 / 共19页
五子棋设计文档文档格式.docx_第2页
第2页 / 共19页
五子棋设计文档文档格式.docx_第3页
第3页 / 共19页
五子棋设计文档文档格式.docx_第4页
第4页 / 共19页
五子棋设计文档文档格式.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

五子棋设计文档文档格式.docx

《五子棋设计文档文档格式.docx》由会员分享,可在线阅读,更多相关《五子棋设计文档文档格式.docx(19页珍藏版)》请在冰豆网上搜索。

五子棋设计文档文档格式.docx

⑶用户界面需求

  ①界面友好、亲切

  ②界面简洁、不花哨

③操作界面直观、不繁琐

3:

程序运行

4:

UML

5:

应用设计模式

轻量级模式(享元模式)

Flyweight在拳击比赛中指最轻量级,即"

蝇量级"

,有些作者翻译为"

羽量级"

这里使用"

享元模式"

更能反映模式的用意。

享元模式以共享的方式高效地支持大量的细粒度对象。

享元对象能做到共享的关键是区分内蕴状态(InternalState)和外蕴状态(ExternalState)。

内蕴状态是存储在享元对象内部并且不会随环境改变而改变。

因此内蕴状态并可以共享。

外蕴状态是随环境改变而改变的、不可以共享的状态。

享元对象的外蕴状态必须由客户端保存,并在享元对象被创建之后,在需要使用的时候再传入到享元对象内部。

外蕴状态与内蕴状态是相互独立的。

享元模式的应用

享元模式在编辑器系统中大量使用。

一个文本编辑器往往会提供很多种字体,而通常的做法就是将每一个字母做成一个享元对象。

享元对象的内蕴状态就是这个字母,而字母在文本中的位置和字模风格等其他信息则是外蕴状态。

比如,字母a可能出现在文本的很多地方,虽然这些字母a的位置和字模风格不同,但是所有这些地方使用的都是同一个字母对象。

这样一来,字母对象就可以在整个系统中共享。

6:

经验总结和体会

网络五子棋的开发让我感受到软件的开发是十分辛苦的工作,尤其是一个人独立开发更是困难,因为一个人的知识和能力是有限的,一个好的软件需要一个好的团队,集合大家的知识和力量来共同完成。

现在把一些开发的经验总结如下:

①在工程开发中,系统的分析是整个开发的核心,只有前期进行很好的分析、规划,才能做出好的软件产品,这个阶段要进行很好的策划,精密的分析。

尤其是流程的设计,直接关系到系统功能和编码的成败。

②良好的程序设计风格很重要。

这在一个比较大的工程中,程序设计的风格非常重要,这影响到软件的测试以及后期功能扩展,在增量型的开发模型中,混乱的代码会使维护变的十分困难。

在多人合作团队开发的时候,你的代码要影响到全局,必须了解到:

你的代码是写给别人看。

③运用高效的测试手段。

测试要占开发很大的时间,软件编码以后,并非总能百分百的成功,那就要进行测试。

在大程序中,多写异常处理的代码,以及变量合法的检验等,DEBUG中混合使用断点测试以及报告函数,以提高DEBUG效率。

④善于捕捉最新的技术资料。

在每个软件开发过程中,资料是必不可少的,虽然书本上有比较系统的资料,但是真正能运用的还是不多。

在开发时,不要急于设计编码,应该学会先查找软件开发中涉及到的各种最新资料,学习他们关于本系统的一些开发经验。

学会在编码前,吸取别人的代码的一些优点,然后改进设计,使之更加的完善。

网络五子棋的开发让我体会到,要做好软件必须要学会抽象思维,要练好抽象思维,还要学会使用UML软件之类的工具,用UML建模工具建设的时候要一个一个模块设计好,搞清楚,尽可能的把所有的功能分开,如果有相似性那么就需要抽象然后继承重写来实现自己的功能。

7:

代码

Client.java

importjava.awt.BorderLayout;

importjava.awt.Color;

importjava.awt.Frame;

importjava.awt.event.WindowAdapter;

importjava.awt.event.WindowEvent;

publicclassClientextendsFrame{

JavaChessFivep;

Client(Strings)

{

super(s);

p=newJavaChessFive();

setLayout(newBorderLayout());

setBounds(100,100,620,418);

add(p);

setBackground(Color.WHITE);

validate();

setVisible(true);

addWindowListener(newWindowAdapter(){

publicvoidwindowClosing(WindowEvente){

dispose();

System.exit(0);

}

});

}

publicstaticvoidmain(String[]a)

newClient("

五子棋"

);

}

Concretenut.java

importjava.awt.Graphics;

importjava.awt.Image;

importjava.awt.Toolkit;

importjava.awt.image.ImageObserver;

publicclassConcreteNutextendsNut{

Toolkitt=getToolkit();

privateStringkey;

Imageimg;

publicConcreteNut(Stringstr){

key=str;

voiddraw(Graphicsg,intx,inty,ImageObserverobs){

if(key.equals("

black"

)){

img=t.getImage("

images/black.gif"

}else{

images/white.gif"

}

g.drawImage(img,x,y,24,24,obs);

JavaChessFive.java

importjava.awt.Button;

importjava.awt.FlowLayout;

importjava.awt.GridLayout;

importjava.awt.Panel;

importjava.awt.TextArea;

importjava.awt.TextField;

importjava.awt.event.MouseAdapter;

importjava.awt.event.MouseEvent;

importjava.awt.geom.Ellipse2D;

importjava.rmi.Naming;

importjava.util.ArrayList;

importjava.util.List;

importjavax.swing.JOptionPane;

 

publicclassJavaChessFiveextendsPanel{

List<

Point>

points=newArrayList();

booleanisMy=false,win=false;

booleanflag=true;

//棋子重叠判定

NutFactorynutFactory=newNutFactory();

//享元类

MyRemotehello;

//

TextAreat;

TextFieldtt;

Buttonb1,b2;

JavaChessFive(){

//this.frame=frame;

setSize(620,450);

setBackground(Color.gray);

t=newTextArea(10,25);

tt=newTextField

(1);

b1=newButton("

接收消息"

b2=newButton("

发送消息"

Panelp1=newPanel();

p1.setLayout(newGridLayout(2,1));

p1.add(t);

p1.add(tt);

add("

East"

p1);

Panelp2=newPanel();

p2.add(b1);

p2.add(b2);

South"

p2);

try{

hello=(MyRemote)Naming.lookup("

rmi:

//localhost:

8808/RMI_Hello"

System.out.println(hello.sayHello());

System.out.println(hello.fromstr());

}catch(Exceptione){

e.printStackTrace();

b1.addMouseListener(newMouseAdapter(){

publicvoidmousePressed(MouseEvente){

try{

t.append(hello.fromstr()+"

\r\n"

System.out.println(hello.sayHello());

System.out.println(hello.fromstr());

}catch(Exceptionee){

System.out.println("

error"

}

b2.addMouseListener(newMouseAdapter(){

hello.sendTo(tt.getText());

this.addMouseListener(newMouseAdapter(){

publicvoidmousePressed(MouseEventevent){

intx=event.getX();

inty=event.getY();

paintItem(x,y);

repaint();

voidpaintItem(intx,inty){

if(x>

=30&

&

x<

=300&

y>

y<

=300){

intX=(x+15)/30;

intY=(y+15)/30;

for(Pointpoint:

points){

if(point.getX()==X&

point.getY()==Y){

flag=false;

break;

if(flag){

points.add(newPoint(X,Y));

flag=true;

publicvoidpaint(Graphicsg){

for(inti=30;

i<

=300;

i=i+30){

g.drawLine(30,i,300,i);

g.drawLine(i,30,i,300);

isMy=false;

for(inti=0;

points.size();

i++){

isMy=!

isMy;

if(isMy){

//享元模式方法

nutFactory.getFlyWeight("

).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("

blackwin"

}

}

}else{

white"

9){

whitewin"

if(win){

winDialog("

黑棋"

}else{

白棋"

publicbooleanwinJudge(Pointpoint){

intcount=1;

intstar=1;

//白棋

if(isMy){//黑棋

star=0;

for(inti=1;

5;

i++){//纵向往上扫描

for(intj=star;

j<

j+=2){

if(point.getY()+i==points.get(j).getY()

&

point.getX()==points.get(j).getX()){

count++;

if(count!

=i+1){

count=1;

break;

if(count>

=5){

returntrue;

i++){//纵向往下扫描

if(point.getY()-i==points.get(j).getY()

i++){//横向往左扫描

if(point.getX()-i==points.get(j).getX()

point.getY()==points.get(j).getY()){

i++){//纵向往右扫描

if(point.getX()+i==points.get(j).getX()

i++){//向往左上扫描

point.getY()-i==points.get(j).getY()){

i++){//向往右下扫描

point.getY()+i==points.get(j).getY()){

i++){//向往左下扫描

i++){//向往右上扫描

returnfalse;

publicvoidinit(){

points=newArrayList();

win=false;

flag=true;

publicvoidwinDialog(Stringp){

intconfirm=JOptionPane.showConfirmDi

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1