资源描述
单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,单击此处编辑母版标题样式,电脑基础实例上机系列丛书,Java程序设计教程,清华大学出版社,第13章 项目设计案例,学习目标,本章要点,习 题,学习目标,通过前面的讲解,已经学习Java基本概念、知识和基本操作,有了一定的Java编程基础。为更近一步了解Java程序开发的完整过程,本章介绍网络围棋游戏项目的整个开发流程,通过这个实例对前面所学的知识进行全面的应用和巩固。,本章要点,功能需求分析,总体设计,详细设计,编码实现,程序运行与发布,功能需求分析,本章将设计一款网络围棋游戏,该程序应该具备以下的功能。,该游戏的棋盘与标准围棋棋盘相同,由纵横各十九条相互平行、垂直交叉的直线组成,共有361个交叉点(以下称为“点”)。棋盘上由九个小黑圆点,代表星位。,功能需求分析,游戏规则遵循围棋标准规则,即一个棋盘上的棋子必需落在点上,与棋子相邻的空点称为它的“气”。在棋子直线相邻的点上,如果有同色的棋子存在,则它们便连成一个整体,它们的气也一并计算,反之,如果是异色棋子,则它的气就不复存在。如果所有的气被对方占据,则称为死棋,应被提掉。,功能需求分析,该游戏能满足一个人单机游戏,也能与其它计算机联机进行两人对弈。,棋子分为黑棋和白棋两种,黑棋先下,黑棋和白棋必须交替落子,直到游戏结束。,在玩家决定游戏结束后,则进行数子,所占的点大于180又1/2的一方为胜。,总 体 设 计,总体设计阶段,需要对该游戏的逻辑结构做出一个整体的设计。,该游戏共由4个模块组成,分别是主模块、监听模块、点模块和棋盘模块。其中主模块是游戏的开始模块,其余三个均是它的下级模块,供主模块调用。,模块间的逻辑关系图,总 体 设 计,主模块(MainWindow):该模块为整个游戏的入口和开始界面,玩家在该模块上实现游戏前的各项设置。该模块界面包含了棋盘画面,整个游戏过程都在该界面完成。,总 体 设 计,监听模块(Liston):该模块用于在联机状态下,接收对方电脑信息。,点模块(CrossPoint):用来传回棋盘上各点的状态信息。,棋盘模块(Board):用来封装棋盘的属性和方法。,详 细 设 计,在详细设计阶段要求完成每个模块的设计方案。,主模块(MainWindow),监听模块(Liston),点模块(CrossPoint),棋盘模块(Board),主模块(MainWindow),主模块是整个游戏的主界面,它由棋盘区和控制区两部分组成。,主模块界面容器与组件结构图,主模块(MainWindow),由上图可以看出,主界面为面板Panel1,棋盘区和控制区分别是面板Panel2和Panel3,面板Panel1包含了面板Panel2和Panel3,而Panel2包含了棋盘,Panel3又包含了所有游戏操作的基本控件。同时,Panel1包含于Frame窗体中。,主模块(MainWindow),在该界面上的控件组中,应提供控制单机和联机游戏的按钮,输入对方IP地址的对话框,用于建立连接的按钮,开始/退出按钮以及一些标示性的标签组件。,网络围棋游戏主模块信息表,系统名:网络围棋游戏,设计人:,模块名:MainWindow,日期:,模块编号:1,文件名:MainWindow.java,上层调用模块:无,下层调用模块:Liston、CrossPoint,输入数据:对方联机电脑的IP号,输出数据:连接成功提示信息,控件信息:Panel1(总面板)、Panel2(棋盘区面板)、Panel3(控件区面板)、label1(显示提示信息)、label2(显示所选棋子颜色)、checkbox1(“单机”选择按钮)、checkbox2(“联机”选择按钮)、textField1(联机对方IP地址)、button1(提交连接请求)和button2(“开始/退出”按钮)。,注释:联机对方IP号错误,开始后将无法继续进行游戏。,监听模块(Liston),该模块用于接收对方电脑信息。,系统名:网络围棋游戏,设计人:,模块名:Liston,日期:,模块编号:2,文件名:Liston.java,上层调用模块:MainWindow,下层调用模块:无,输入数据:接收对方服务器信息,输出数据:响应事件,成员变量:socket(用于创建客户端的Socket)、mainWindow(用来生成客户端的游戏窗口),成员方法:Liston(成员变量初始化)、run(接收信息服务器端信息,并将结果显示到游戏窗口),注释:联机对方IP号错误,开始后将无法继续进行游戏。,点模块(CrossPoint),该模块用来封装棋盘交叉点的状态和属性。,系统名:网络围棋游戏,设计人:,模块名:CrossPoint,日期:,模块编号:3,文件名:CrossPoint.java,上层调用模块:MainWindow,下层调用模块:无,输入数据:,输出数据:,网络围棋游戏点模块信息表,成员变量:BLACK(常量,值为1,表示黑色)、WHITE(常量,值为2,表示白色)、BLANK(常量,值为0,表示无色)、pointAround(相邻店的逻辑位置)、whichStep(所对应的步数)、color(交叉点颜色)、posX/posy(交叉点的X、Y坐标),成员方法:无,注释:联机对方IP号错误,开始后将无法继续进行游戏。,棋盘模块(Board),该模块用来封装棋盘的属性和方法,其具体信息如下表所示。,系统名:网络围棋游戏,设计人:,模块名:Board,日期:,模块编号:4,文件名:Board.java,上层调用模块:MainWindow,下层调用模块:无,输入数据:玩家游戏信息,输出数据:已落下的子的信息,网络围棋游戏棋盘模块信息表,成员变量:whichStep(当前所走步数)、myHash(哈希表)、pointNow(当前点坐标)、STARTPOINT(棋盘格子左上角点的坐标)、INTERVAL(棋盘格子的宽度)、vec(存放校验的棋子)、robPoint(打劫点坐标)、mousePoint(鼠标点坐标)和errorFlag(出错标志),成员方法:Board(构造函数)、IniyMyHash(初始化变量MyHash)、paint(绘制棋盘)、paintChessboard(绘制平行线、星位)、paintChessMan(绘制棋子)、doStep(模仿棋手下棋过程)、isRob(判断是否因打劫所指点位不能下棋)、getRival(判断是否可以执行吃子)、makeRobber(建立打劫点)、isRemove(判断是否可以吃子)、doRemove(执行消子)、isLink(判断是否有气)、updateHash(更新给定交叉点属性)和showError(在棋盘的下方显示错误信息),注释:联机对方IP号错误,开始后将无法继续进行游戏。,编 码 实 现,本节将给出该游戏各模块的详细代码,可以在该代码上进行进一步的完善。,主模块(MainWindow.java),监听模块(Liston.java),点模块(CrossPoint.java),棋盘模块(Board.java),主模块(MainWindow.java),主模块的详细代码如下(光盘:源文件第13章 MainWindow.java):,监听模块(Liston.java),监听模块的详细代码如下(光盘:源文件第13章 Liston.java):,点模块(CrossPoint.java),点模块的详细代码如下(光盘:源文件第13章 CrossPoint.java):,棋盘模块(Board.java),棋盘模块的详细代码如下(光盘:源文件第13章 Board.java):,程序运行与发布,下面将具体讲解程序的运行与发布。,程序运行,程序发布,程序运行,在NetBeans中运行该程序,只需将以上4个文件封装在同一个项目的包中,然后运行主类即可。,程序发布,用文本编辑器(例如记事本)编写一个文件Manifest.mf,在文件中加入下面的内容:,Main-Class:MainWindow,文件输完后将其保存在字节码(.class)文件所在的目录下。,生成JAR文件。在字节码文件所在的目录下,输入下面的命令:,jar cfm WQ.jar Manifest.mf *.class,程序发布,其中,各参数的含义如下所示。,参数c:表示要生成一个新的JAR文件。,参数f:表示要生成JAR文件的名字,命令中的WQ.jar对应着参数f。,程序发布,参数m:表示文件清单的名字,Manifest.mf对应着参数m。,*.class:表示将当前目录下的所有字节码文件压缩成一个JAR文件。,在图形界面操作系统中,双击WQ.jar文件即可运行网络围棋游戏了。,习 题,试设计一个俄罗斯方块游戏,要求按照下述的功能需求内容进行编写,可以自行添加功能,更进一步的完善程序(光盘:源文件第13章Game.txt)。,习 题,功能需求分析如下:,在一个二维空间里面用各种随机方块堆积木,每填满一行即消去一行,当所堆积木达到空间顶部的时候,游戏结束。游戏结束后可按“F1”键重新开始。,玩家能通过方向键来控制方块移动,Enter键控制转动。,习 题,每种方块有不同颜色,游戏有预览功能,能告诉玩家下一个将出现的方块类型。,游戏开始前,游戏主界面应显示“请按空格键开始”的提示信息。当游戏结束后,显示“请按F1重新开始”的提示信息。,习 题,在设计中可以使用内部类来简化代码结构,以及使用线程的相关知识。,
展开阅读全文