资源预览内容
第1页 / 共19页
第2页 / 共19页
第3页 / 共19页
第4页 / 共19页
第5页 / 共19页
第6页 / 共19页
第7页 / 共19页
第8页 / 共19页
第9页 / 共19页
第10页 / 共19页
亲,该文档总共19页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
JAVA程序设计课程设计题 目: 五子棋小游戏 专 业: 信息与计算科学 学 号: 070930205等 姓 名: 指导教师: 成 绩: 二00九 年 十二 月 九 日1.课程设计研究背景及意义五子棋是一种两人对弈的纯策略型棋类游戏,是起源于中国古代的传统黑白棋种之一。发展于日本,流行于欧美。容易上手,老少皆宜,而且趣味横生,引人入胜;不仅能增强思维能力,提高智力,而且富含哲理,有助于修身养性。然则看似很简单的一个小游戏,却对我们这组刚接触JAVA编程的成员来说却是一个不错的挑战,由于水平不限不能做成和电脑进行对战,也对于和其它电脑联机对战的模式不太清楚,故做成一个自己和自己对战的五子棋来考验我们的JAVA的技术。2.课程设计题目描述和要求题目:五子棋小游戏游戏主要界面如下:游戏规则:1,棋子分为黑白两色,采用1919棋盘。2,自己和自己对战,白子和黑子交替下,直到白子或黑子一方有五粒子连在一起,最先完成五粒子连在一起的一方为胜利的一方(可以是横、竖、斜、反斜)。3,允许悔棋,且允许一直悔到棋盘上没有棋子了,悔棋后允许恢复。当悔棋后下子了,则不允许再恢复了。4,有棋子的地方不允许再下棋子了5,落子后不能移动或拿掉。7,胜利后,棋局重新开始。主要功能:1,鼠标点棋盘上的任意一点,棋子会落入离这点最近的一个交叉点处。2,白子和黑子交替下。3,当下到一半时,可以保存进度。4,关闭再打开后,可以重新读取进度再接着下。5,允许悔棋,且允许一直悔到棋盘上没有棋子了。6,悔棋后允许恢复。当悔棋后下子了,则不允许再恢复了。7,下棋的过程中,随时可以重新开始。8,有棋子的地方不允许再下子了。9,当悔到没有棋子的时候会弹出消息。10,任意一方胜利后会弹出消息11,恢复的步数超过了悔棋的步数的时候会弹出消息12,当任意一方胜利后,棋局重新开始。13,设有菜单栏,玩家可以点菜单来完成某种操作。14,当最小化后,能重新还原棋子(棋子不会消失)。15,点菜单栏的“帮助”“关于”会显示这个课程设计小组的成员。3.课程设计报告内容3.1 题目求解的理论依据及算法1,利用JAVA的Swing组件可以实现游戏主界面的设置和菜单的添加。本次发开的小游戏界面比较简单,就一个面板外加一个菜单栏,在面板中绘图。菜单条中有三项分别为:文件(保存进度、读取进度、退出),编辑(悔棋、恢复、重来),帮助(关于)。2,利用JAVA的输入输出类库和文件操作来完成文件的读写来完成保存进度和读取进度的功能。3,利用JAVA的事件处理来完成鼠标,菜单的事件处理。4,利用JAVA的类来生成棋子5,利用JAVA的类的继承和多态,自定义Mypanel来继承JPanel,在Mypanel 中重写paintComponent()方法来实现画在面板中图形的重绘。6,利用JAVA的绘图类Graphics在面板中绘制棋盘,当点鼠标的时候绘制棋子,以及完成重绘。7,利用JAVA的动态数组ArrayList来存储棋子的坐标等等信息。8,建立一个19*19的矩阵来存储棋盘上黑白棋子的信息,初始值全为0,例如:当每12行7列下了一个黑子后,hflag127=1。如果是白子则bflag127=1下一个棋子便对胜负进行一次判断,当hflag或bflag有五个1连在一起的时候则判hflag和bflag对应的一方胜利。9,建立一个棋子的类,有属性:X:棋子在棋盘上的横坐标、Y: 棋子在棋盘上的纵坐标num:这是玩家下的第几个棋子xflag:矩阵的行、yflag:矩阵的列当下一个棋子后产生一个棋子实例,将棋子在棋盘的位置和这是下的第几个子以及第几行和第几列分别赋值给x,y,num,xflag,yflag。10,当num % 2=0的时候画白子,当num % 2=1的时候画黑子。3.2 主要事件处理:1,鼠标事件处理(MouseListener):public void mouseClicked(MouseEvent e) int x = e.getX();/*棋子在棋盘上的横坐标*/int y = e.getY()/*棋子在棋盘上的纵坐标*/;int it = 0, jt = 0; /*矩阵的行和列*/绝对定位棋子即当点在交叉点附近,棋子会落在交叉点if (y 53) /下子不会落到菜单栏上,菜单和标题共高53个像素for (int i = 0; i 19; i+) for (int j = 0; j 19; j+) if (pal.henij - 13 = x& (y - 53 = pal.shuij - 13) & (y - 53 = pal.shuij + 13) x = (int) pal.henij;y = (int) pal.shuij;it = i; jt = j;/当绝对定位交叉处没有棋子时画棋子if (bflagitjt = 0 & hflagitjt = 0) if (a % 2 = 0) pal.drawBai(x, y);bflagitjt = 1;/下了一子后这点便不能下子了if (a % 2 = 1) pal.drawHei(x, y);hflagitjt = 1; /下了一子后这点便不能下子了Qizi qi = new Qizi(x, y); /将信息保存在棋子属性中qi.setFlagx(it); qi.setFlagy(jt);qi.setX(x); qi.setY(y); qi.setNum(a);pal.list.add(qi);/ 把棋子实例保存到动态数组中huiqiNum = 0;/下子后,便不能悔棋了,悔棋步数重置为0a+;Shengfu();/每下一子对胜负情况进行判断2、动作事件处理(点菜单的时候)(ActionListener):public void actionPerformed(ActionEvent e) if (e.getActionCommand().equals(保存进度) handleSave();if (e.getActionCommand().equals(读取进度) handleRead();if (e.getActionCommand().equals(退出) System.exit(0);if (e.getActionCommand().equals(悔棋) handleHuiqi();if (e.getActionCommand().equals(恢复) handleHuifu();if (e.getActionCommand().equals(重来) Restart();if (e.getActionCommand().equals(关于.) handleAbout();3、窗口事件处理(WindowAdapter):public void windowClosing(WindowEvent e) System.exit(0);3.3 简要的操作流程(要求画流程图)界面大体构造RestarthandleHuifuhandleHuiqihandleReadhandleSavehandAboutExit(0)退出读取进度保存进度悔棋恢复关于重来帮助文件编辑窗口事件处理(关闭)窗口菜单鼠标事件处理(下子)简要的设计流程:创建窗口初始化菜单、面板对各个菜单项添加事件监听以及鼠标事件监听窗口事件处理动作事件处理鼠标事件处理完成java源代码编写调试修改程序,完善功能3.4事件处理的几个重要方法:1、保存进度(handleSave)public void handleSave() int temp = filec.showSaveDialog(this);if (temp = JFileChooser.APPROVE_OPTION) String path=filec.getSelectedFile().getAbsolutePath();file = new File(path);try file.createNewFile();FileOutputStream fout = new FileOutputStream(file);DataOutputStream dout = new DataOutputStream(fout);for (int i = 0; i pal.list.size(); i+) dout.writeInt(pal.list.get(i).getFlagx();dout.writeInt(pal.list.get(i).getFlagy();dout.writeInt(pal.list.get(i).getNum();dout.writeInt(pal.list.get(i).getX();dout.writeInt(pal.list.get(i).getY();fout.close(); catch (FileNotFoundException e) e.printStackTrace(); catch (IOException e) e.printStackTrace();2、读取进度(handleRead)public void handleRead() int temp = filec.showOpenDialog(this);if (temp = JFileChooser.APPROVE_OPTION) Restart();/读取进程前必须清空所有变量String path = filec.getSelectedFile().getAbsolutePath();file = new File(path);try FileInputStream fout = new FileInputStream(file);Data
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号