Java程序设计实训教程完整版课件全套ppt教程

上传人:汽*** 文档编号:570054925 上传时间:2024-08-01 格式:PPT 页数:91 大小:2.64MB
返回 下载 相关 举报
Java程序设计实训教程完整版课件全套ppt教程_第1页
第1页 / 共91页
Java程序设计实训教程完整版课件全套ppt教程_第2页
第2页 / 共91页
Java程序设计实训教程完整版课件全套ppt教程_第3页
第3页 / 共91页
Java程序设计实训教程完整版课件全套ppt教程_第4页
第4页 / 共91页
Java程序设计实训教程完整版课件全套ppt教程_第5页
第5页 / 共91页
点击查看更多>>
资源描述

《Java程序设计实训教程完整版课件全套ppt教程》由会员分享,可在线阅读,更多相关《Java程序设计实训教程完整版课件全套ppt教程(91页珍藏版)》请在金锄头文库上搜索。

1、实训一扫雷游戏1.1系统设计需求分析随机布雷实现扫雷功能标记小方块选择游戏的难度显示剩余雷数显示已使用时间最好成绩记录重新开始加快扫雷进程加入声音1.1系统设计类的设计MineFrameMinePanelBlockBlockTypeBlockStateRecordGradeTimer对话框类监听器类1.2创建主窗口创建Java项目Saolei创建子文件夹image,将需要的图标复制到该文件夹创建MineFrame类publicclassMineFrameextendsJFrameJMenuBarmenuBar;JMenumenu;JMenuItemmenuItems;StringmenuIte

2、mNames=初级,中级,高级,自定义,排行榜,退出;JTextFieldminesRemained;/显示剩余雷数的文本框JButtonreStart;/重新开始按钮JTextFieldtimeUsed;/显示游戏使用时间的文本框Iconface; /按钮上的图标JPanelupPanel;/计时区域创建主程序类Saolei1.3MinePanel类和Block类BlockType类publicclassBlockTypestaticfinalintZERO=0;/周围的雷数staticfinalintONE=1;staticfinalintTWO=2;staticfinalintTHREE

3、=3;staticfinalintFOUR=4;staticfinalintFIVE=5;staticfinalintSIX=6;staticfinalintSEVEN=7;staticfinalintEIHHT=8;staticfinalintMINE=9;/是雷1.3MinePanel类和Block类BlockState类publicclassBlockStatestaticfinalintORIGINAL=0;/初始状态staticfinalintOPEN=1;/翻开状态staticfinalintMINE_FLAG=2;/标记为雷staticfinalintQUESTION_FLAG=

4、3;/标记为问号staticfinalintEXPLODED=4;/爆炸状态Grade类publicclassGradepublicstaticfinalintLOWER=1;/初级publicstaticfinalintMEDIAL=2;/中级publicstaticfinalintHIGHER=3;/高级publicstaticfinalintSELF_DEFINE=4;/自定义1.3MinePanel类和Block类Block类属性privateMinePanelminePanel;privateintrow;/在雷区的行号privateintcol;/在雷区的列号publicfinal

5、intWIDTH=19;/方块的宽度publicfinalintHEIGHT=19;/方块的高度privateinttype;/0,1,2,3,4,5,6,7,8,(9雷)privateintstate;/0原始状态,1翻开,2标记为雷,3标记为问号publicstaticToolkittk;publicstaticfinalImagenumberImage;/08publicstaticfinalImageflagImage;/0标记为雷、1标记为问号publicstaticfinalImagebombImage;/0未爆炸、1已爆炸publicstaticfinalImagebackIma

6、ge;/未翻开时的背面1.3MinePanel类和Block类Block类方法publicbooleanopen()/翻开,遇雷失败publicvoiddraw(Graphicsg)/画出不同类型、不同状态的方块构造方法、get、set方法1.3MinePanel类和Block类MinePanel类属性publicfinalintGRID_WIDTH=20;/方格的宽度publicfinalintGRID_HEIGHT=20;/方格的高度privateMineFramemf;privateintcols;/雷区的列数privateintrows;/雷区的行数privateintmines;/雷

7、区的雷数privateintremainedMines;/未标记的雷数privateintopenedBlocks;/已经翻开的方块数privateBlockblocks;/方块数组1.3MinePanel类和Block类MinePanel类方法publicvoidinitMinePanel(introws,intcols,intmines)/初始化参数privatevoidcreateBlocks()/创建小方块privatevoidlayMines()/随机布雷privatevoidcountMines(introw,intcol)/计算指定方块周围的雷数publicvoidpaint(G

8、raphicsg)/画出雷区publicDimensiongetPreferredSize()1.3MinePanel类和Block类将雷区加入到MineFrame中在MineFrame类中添加属性MinePanelminePanel;privateintrows;privateintcols;privateintmines;添加initParameter方法privatevoidinitParameter(introws,intcols,intmines)this.rows=rows;this.cols=cols;this.mines=mines;1.3MinePanel类和Block类将雷

9、区加入到MineFrame中修改构造方法publicMineFrame()createMenu();createUpPanel();initParameter(10,10,10);minePanel = new MinePanel(this, rows,cols,mines);Containerc=this.getContentPane();c.add(upPanel,BorderLayout.NORTH);c.add(minePanel,BorderLayout.CENTER);this.setDefaultCloseOperation(EXIT_ON_CLOSE);this.pack();

10、this.setLocationRelativeTo(null);this.setResizable(false);this.setVisible(true);1.4实现扫雷功能翻开小方块在MineFrame类中添加属性privatebooleangamming;/正在扫雷?privatebooleanstoped;/游戏已停止?在MineFrame类中添加set、get方法修改MineFrame类的initParameter()方法MinePanel类添加鼠标监听器类MinePanel类添加Open()方法注册鼠标监听器1.4实现扫雷功能处理输赢以及搜索方法wins()方法lose()方法s

11、earch()方法在open()方法中调用wins()方法、lose()方法、search()方法1.4实现扫雷功能加快扫雷进程右键单击已经翻开的方块,如果该方块临近的雷已经全部标识出来,则翻开尚未翻开的相邻方块。1.4实现扫雷功能重新开始游戏在“开始”按钮监听器中填写处理代码。1.5选择游戏难度级别MineFrame添加grade属性添加grade属性添加get和set方法自定义难度对话框完善菜单监听器类在选择难度级别的菜单处理分支添加相应的代码。1.6实现计时功能UpdateTimeTask类创建UpdateTimeTask类添加UpdateTimeTask类型的属性(MinePanel类

12、中)启动计时与终止计时启动计时:鼠标监听器中,翻开第一个小方块开始计时。终止计时:wins()方法、lose()方法的开始处、重新开始按钮监听器中、选择难度级别菜单后。1.7扫雷排行榜Record类RecordDao类用于输入游戏者名字的对话框类显示排行榜的对话框类实现排行榜功能读入排行榜数据记录排行榜数据显示排行榜数据1.8加入声音在MinePanel类中添加播放音频的sound()方法准备音频文件播放音频文件扫雷成功时扫雷失败时一次翻开对个方块时实训二 网络五子棋界面程序网络编程多线程输入输出客户端服务器涉及知识(java)异常处理输入输出(文件)多线程数据库界面网络程序2.1 单机版五子

13、棋游戏黑子先下,两人轮流下一个棋子。先连成五个的一方胜利。连成五个子的方向可以是水平,垂直,以及两个斜线方向。2.1单机版五子棋游戏1. 创建窗口及工具栏Five 类Five Extends JFrameprivate JToolBar toolbar; private JButton startButton;private JButton backButton;private JButton exitButton;2. 创建棋盘类ChessBoard 类public static final int MARGIN=15;/边距 public static final int GRID_SPA

14、N=20;/网格间距 public static final int ROWS=18;/棋盘行数 public static final int COLS=18;/棋盘列数Image img;在Five类加入: private ChessBoard boardPanel; 准备图片Boad.jpgToolkit getDefaultToolkit() getImage()paintComponent()getPreferredSize():(Jfram在pack时,要知道board的大小)。3. 创建棋子类(1)Chess 类private int col; /棋子在棋盘中的列索引 priva

15、te int row; /棋子在棋盘中的行索引 private Color color;/颜色 public static final int DIAMETER=GRID_SPAN-2; ChessBoard cb; /棋子是要画在棋盘中,需要一个棋盘的引用public void draw(Graphics g)在ChessBoard类加入: Chess c = new Chess(this,2,3,Color.BLACK);c.draw(g);Chess c1 = new Chess(this,5,2,Color.WHITE);c1.draw(g);测试棋子画出的效果。intxPos=col

16、*cb.GRID_SPAN + cb.MARGIN; intyPos=row*cb.GRID_SPAN + cb.MARGIN; 将棋盘行列转换为像素坐标:将棋盘行列转换为像素坐标:Ellipse2D.Float是Ellipse2D的内部类Ellipse2De=newEllipse2D.Float(xPos-DIAMETER/2, yPos-DIAMETER/2, ,DIAMETER, DIAMETER);RadialGradientPaintpaint=new RadialGradientPaint( x, y, 15, f, c ); intx=xPos+DIAMETER/4; inty=

17、yPos-DIAMETER/4; floatf=0f,1f;Colorc=Color.WHITE, Color.BLACK;白色点的位置白色点的位置3. 创建棋子类(2)4. 实现单击鼠标下子ChessBoard 类Chess chessList; /记录棋子的数组 int chessCount; /当前棋盘棋子的个数 boolean isBlack=true; /默认开始是黑棋先 private boolean hasChess(int col,int row) / (col,row) 处是否已经有处是否已经有棋子棋子内部类:class MouseMonitor extends MouseA

18、daptermousePressed(MouseEvent e)方法中,在鼠标按下的位置创建一个棋子并添加到chessList中。将鼠标点的像素坐标转换成棋盘的行列int col=(e.getX()-MARGIN+GRID_SPAN/2)/GRID_SPAN; int row=(e.getY()-MARGIN+GRID_SPAN/2)/GRID_SPAN; 在paintComponent方法中将chessList中棋子全部画出来。5. 添加判断胜利的功能ChessBoard 类boolean isGamming=true; /游戏是否结束 private boolean isWin(isWin

19、(int col, int row)private Chess getChess(int col, int row, Color color) 在mousePressed方法中调用isWin(int col, int row),进行游戏结束处理每下一个棋子,都需要在四个方向上判断是否形成了5个子连成一线,如果发现已经有5子连成一线了,则输出赢棋信息,并将isGamming设置设置为为false。在mousePressed方法开始加入if(!isGamming) return; 6. 实现工具栏上的功能ChessBoard 类public void restartGame() public vo

20、id goback() Five类 内部类class ActionMonitor implements ActionListener重新开始重新开始悔棋悔棋退出退出7. 改变鼠标指针的形状ChessBoard 类内部类:class MouseMotionMonitor extends MouseMotionAdapter 可以下棋的地方显示不可以下棋的地方显示2.2 服务器端界面制作FiveServer类2.3 客户端界面背景图片board.jpgPanelBoard类FiveClient类1.创建主窗口和棋盘图标:black.jpg,white.jpgPanelTiming类PanelUse

21、rList类PanelMessage类修改FiveClient类2.3 客户端界面2.创建客户端界面右侧的三个类PanelControl类修改FiveClient类2.3 客户端界面3.创建控制面板类2.4实现“连接主机”按钮的功能add AClient AClient BServerconnectClient Cadd AtellName, add Badd Cclientsadd 1. 连接服务器获取用户名服务器端(FiveServer)内部类Client增加属性添加两个方法startServer()tellName()客户端(FiveClient)内部监听器类ActionMonitor注

22、册监听设置按钮的状态服务器端服务器端:ServerSocket构造方法的参数:端口号客户端客户端:Socket构造方法的参数:服务器ip,端口号本机ip:127.0.0.12. 将已经连接的客户端添加到用户列表中创建Command类,修改程序中的命令服务器类添加方法addAllUserToMe()addMeToAllUser()修改startServer()方法创建Communication类客户端类添加connect()方法Communication添加内部线程类ReceaveThread2.5 实现“加入游戏”按钮的功能(3)refuse:A(2) Join:AClient AClient

23、 BServer(1) Join:CClient C(4) refuse拒绝的情况(3) agree:A(2) Join:A(5) Change:A:playing Change:C:playingClient AClient BServer(1) Join:CClient C(5) guessColor(4) 猜先(5) guessColor2.5实现“加入游戏”按钮的功能同意的情况1. 客户端申请加入后对方选择同意或拒绝2.5实现“加入游戏”按钮的功能Command类中增加以命令常量在客户端加入“加入游戏”按钮处理“加入游戏”按钮监听器FiveClient类中添加方法join()Commu

24、nication类中,添加join()方法服务器接收jion命令并发送给对手,ClientThread类对手接到命令将选择结果发送给服务器创建计时对话框类TimeDialog修改Communication类2. 完成猜棋并准备好下棋2.5实现“加入游戏”按钮的功能服务器收到拒绝或同意的处理拒绝处理:将拒绝信息发给客户端同意处理:猜先,将结果发给客户端客户端收到拒绝的处理-显示信息框客户端收到同意的处理PanelBoard类加入属性idGoingCommunication类处理同意情况修改PanelBoard类的内部类MouseMonitor2.6实现下棋功能1. 客户端向服务器发送下棋消息2.

25、6实现下棋功能在Command类中添加命令在Communication类中添加方法go()wins()在PanelBoard类中调用上面两个方法PanelBoard添加FiveClient类的引用在PanelBoard类中调用go()方法和wins()方法2. 服务器接收消息并处理2.6实现下棋功能Communication类接收消息PanelBoard类添加方法addOpponentChess()winsGame()lossesGame()resetGame()3.客户端接收消息并处理2.7实现“放弃游戏”的功能1. Command类添加常量2. 添加“放弃游戏”的监听代码3. 在Commu

26、nication类中天 添加geveup()方法4. 服务器接收giveup命令并处理2.7实现“放弃游戏”的功能1. 设计计时线程类2. 猜先后启动倒计时线程2.8加入计时功能2.9完善“关闭程序”按钮的功能1. 在Command类中添加命令2. 客户端向服务器发送命令 修改“关闭程序”按钮的响应代码 Communication类添加方法disConnect()3. 服务器处理quit命令4. 客户端处理delete命令2.9完善“关闭程序”按钮的功能1目前的程序每方总的用时是在程序中指定的,如果用户希望在申请对局时自己指定用时时间,程序中应如何处理?2在我们的程序中,对于异常处理只是调用p

27、rintStackTrace()方法输出异常信息,并没有进行实质上的处理,这显然是不够的。比如在服务器还没有启动时,当客户端程序启动后,单击“连接服务器”按钮,就会产生异常,客户端程序应该显示未连接成功的提示信息,这时不能进行已连接成功的相关处理。应该如何改进程序,较好的处理这个异常问题?作业1. 用户A向另用户B申请后,B答复之前,又有用户C向用户A发出申请。如何处理?2. 用户注册,登录,记录用户的成绩,级别等。3. 记录棋谱。4. 棋谱回放。其他问题实训三 棋谱的保存与回放注册注册登录登录保存棋谱保存棋谱棋谱回放棋谱回放3.1 创建数据库 1.设计数据库fiveChess2.设计User

28、表字段名类型长度允许空备注useridINT否主键,自动增长nameVARCHAR10否用户名passwordVARCHAR10否密码emailVARCHAR30否邮箱levelINT否级别regdateDate否注册日期3.1 创建数据库 3. 设计game表字段名类型长度允许空备注gameidINT否主键,自动增长gameDateDate否下棋日期playerBlackVARCHAR10否黑方playerWhiteVARCHAR10否白方winnerVARCHAR10否赢棋方manualFileNameVARCHAR100否记录棋谱的文件名3.1 创建数据库 4. 配置mysql-conn

29、ector-java5. 类CreateDatabase3.2 用户管理1.创建DBConnection类2.User类3.创建UserDao类4.创建临时的Test类(后面删除)3.3用户注册和登录1. 准备工作(1) Command类添加命令常量(2)“connectButton”改为“loginButton”(3)FiveClient类中添加getC()方法 2.用户登录 (1) Communication类添加登录方法 (2)创建登录对话框类DialogLogin(3)显示登录对话框 ( fiveClient中修改登录按钮的监听程序段)(4)服务器处理login命令 (修改startS

30、erver()方法)(5)删除静态成员clientNameNum 3. 用户注册3. 用户注册(1)创建注册对话框类DialogRegister(2)修改登录对话框中的注册按钮坚挺 if (注册.equals(str) DialogRegister rd = new DialogRegister(this,ip); (3)服务器处理注册命令(修改startServer()方法)3.4 记录棋局和棋谱ClientServer数据文件win数据库SavechessmanualSavechessgame棋谱文件名的格式:棋谱文件名的格式:黑棋用户名白棋用户名结束时间(日期时分)棋谱文件的格式:棋谱文

31、件的格式:直接写一个Object黑棋用户名白棋用户名结束时间(日期时分)步数赢棋方1. 记录棋局(1)棋局管理设计Game类,GameDao类(game包)Test类:用于测试Game类和GameDao类1. 记录棋局(2)记录棋局到数据库修改FiveServer的内部类Client,增加属性修改猜先程序段,给属性chessColor赋值修改go程序段,记录每一步棋的坐标ClientThread类中添加保存棋局的方法修改win程序段,调用保存棋局的方法2. 记录棋普(1)棋谱管理创建Manual类创建ManualDao类(2)记录棋谱到文件在ClientThread类中添加记录棋谱的方法rec

32、ordManual()修改win程序段,调用recordManual()保存棋谱3.5 查询棋局和棋谱欣赏ClientServert数据文件game:userName数据库getManualgetGameGamelistgame:Gamelistmanual:fileNamemanualmanual:manual注:目前只查询自注:目前只查询自己下过的棋局己下过的棋局1. 查询棋局 (1)PanelControl类:添加“棋谱欣赏”按钮(2)FiveClient类:添加“棋谱欣赏”按钮的监听(3)Communication类:添加getGemes方法(4)FiveServer类:添加消息处理(

33、game命令)(5)客户端接收棋局并显示DialogGames类FiveClient类添加showGames方法Communication类接收并处理game消息2. 棋谱欣赏2. 棋谱欣赏(1)向服务器发送manual命令Communication类中添加getManual()方法修改DialogGames的按钮注册监听器(2)服务器接收manual命令并处理添加处理manual命令的程序分支2. 棋谱欣赏(3)客户端接收棋谱并显示在 棋 盘 类 中 添 加 方 法 getChessCount(),setChessCount棋谱回放对话框DialogPlayback()FiveClient类

34、添加playBakc方法Communication类处理manual命令实现GamePlayback类中两个按钮的监听完善遗留的问题1.对话框在父窗口居中作业1如果将登录对话框,注册对话框在其父窗口中居中显示,应该如何处理?2目前的程序,用户A登录后,再启动一个客户端,用户A还可以登录,即同一个用户可以同时多次登录。如果禁止一个用户同时多次登录,应如何处理。3异常处理,在ManualDao类的getManual()方法中,如果参数指定的棋谱文件不存在,会产生一个异常,目前程序没有很好地处理这一异常,请改进程序,处理好这个异常,能够提示用户棋谱文件不存在的信息。4异常处理,下棋结束后,在保存谱时

35、,如果指定的文件夹“D:fivegame”不存在,则产生异常,且不能创建棋谱文件。修改程序,如果指定的文件夹不存在,程序能够自动创建该文件夹。实训四成绩管理系统4.1系统设计需求分析班级管理学生管理课程管理成绩录入成绩修改成绩查询4.1系统设计数据库设计班级表class学生表student字段名字段名类型(长度)类型(长度)可否为空可否为空是否主键是否主键含义含义idCHAR(3)不可以是班级号nameVARCHAR(30)不可以不是班级名字段名字段名类型(长度)类型(长度)可否为空可否为空是否主键是否主键含义含义idCHAR(6)不可以是学号nameCHAR(10)不可以不是姓名gender

36、CHAR(2)不可以不是性别telCHAR(11)不可以不是电话birthdayDATE不可以不是出生日期classCHAR(3)不可以不是班级号4.1系统设计数据库设计课程表course成绩表score字段名字段名类型(长度)类型(长度)可否为空可否为空是否主键是否主键含义含义idCHAR(3)不可以是课程号nameVARCHAR(30)不可以不是课程名schoolHourINT不可以不是学时creditINT不可以不是学分字段名字段名类型(长度)类型(长度)可否为空可否为空是否主键是否主键含义含义class_idCHAR(3)不可以不是班级号stu_idCHAR(6)不可以与course_

37、id联合主键学号course_idCHAR(3)不可以与stu_id联合主键课程号scoreINT不可以不是成绩4.1系统设计类的设计l 实体类:ClassEntity、Student、Course、Scorel数据访问类:ClassDao、StudentDao、CourseDao、ScoreDaol对话框类:ClassManage、StudentManage、CourseManage、ScoreDialog、ScoreQueryByCourse、ScoreQueryByStudentl工具类:DBConnection、CreateDatabasel主窗口类:MainFrame4.2工具类创建

38、Java项目Score建立配置文件database.properties配置数据库驱动程序util包创建DBConnection类创建CreateDatabase类4.3实体类建立entity包ClassEntityStudentCourseScore4.4数据访问类dao包ClassDaoStudentDaoCourseDaoScoreDao4.5主窗口类包结构4.5主窗口类MainFrameScoreSystempublicclassScoreSystempublicstaticvoidmain(Stringargs)newMainFrame();缺省包缺省包4.6班级管理MyTableM

39、odel(dialog.table子包):实现单元格不可编辑publicbooleanisCellEditable(introw,intcolumn)returnfalse;ClassManage(dialog包)4.7学生管理StudentManage(dialog包)4.8成绩管理1. 准备准备工作工作(dialog. scoreTable包包)ScoreTable:单击单元格,立即进入编辑状态。单元格失去焦点结束编辑,保存数据ScoreTableModel控制单元格能否编辑设置每列的数据类型CreateTableModel创建ScoreTableModel对象4.8成绩管理2. 成绩录入与修改(dialog包包)ScoreDialog成绩录入与修改的对话框ScoreInputMonitor成绩录入监听器ScoreEditMonitor成绩修改监听器4.8成绩管理3. 成绩查询(dialog包包)ScoreQueryByCourse查询课程成绩ScoreQueryByStudent查询学生成绩

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 工作计划

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号