




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Java创新实习课程设计报告 题 目: 简易五子棋游戏开发 院(系): 年级专业: 学生姓名: 学生学号: 指导老师: 实习时间: 成绩评定: 设计报告(40%) 程序演示(20%) 回答问题(40%) 总成绩: 目 录1 摘 要 -22 概要设计- 23 详细设计- 24 测试分析- 95 参考文献-9一、 摘 要五子棋游戏是常见的经典游戏,在19*19的棋盘方格上进行对弈,由于时间与基础知识的掌握程度限制,现初步完成简易五子棋的实现。本程序完全有面向对象的JAVA语言编写而成,单击“开始游戏按钮”将弹出确认对话框,当点击对话框上的“确认”按钮,游戏正式开始;“认输”按钮表示当对弈双方有一方
2、认输时,结束比赛并且输出结果;“关于”按钮的功能可以由制作者自己添加,主要表示游戏的版本等级;“退出”按钮单击时推出对弈比赛。二、 概要设计(一) 自定义类说明类名:ChessBoardFrame作用:显示五子棋游戏的主界面在整个屏幕中的位置与大小继承的父类:Jframe实现接口:无public class ChessBoardFrame extends JFrame/自定义一个继承于Jframe的类用于获取五子棋背景图的大小,在整个屏幕上的显示位置类名:ChessBoardPanel作用:实现五子棋的各个功能,通过面板继承来进行背景图片载入、通过画直线的成员函数画出棋盘、通过判断函数对鼠标的
3、判断以保证正确落子、在判断函数中还包括了对输与赢的判断、加上清屏函数、每次重新开始时进行清屏。在此类中主要使用了JAVA本身所具有的一些功能,如:异常抛出、鼠标适配器、鼠标单击时间的捕捉、窗口重绘、颜色填充等功能。继承的父类:JPanel实现接口:无public class ChessBoardPanel extends JPanel/完成五子棋的主要功能(二) 程序流程图x = 10 & x = 50 & y 10(y - 50) % 20 10i = i + 1;j = j + 1;arrij = 0;arrij= chess;游戏结束三、 详细设计一、ChessBoardFrame类im
4、port java.awt.Dimension;import java.awt.Toolkit;import javax.swing.JFrame;public class ChessBoardFrame extends JFrame public ChessBoardFrame() / 设置标题this.setTitle(五子棋);int width = 500;int height = 456;/ 窗口起点坐标Toolkit kit = Toolkit.getDefaultToolkit();Dimension dimension = kit.getScreenSize();double
5、screenWidth = dimension.getWidth();double screenHeight = dimension.getHeight();int x = (int) (screenWidth - width) / 2;int y = (int) (screenHeight - height) / 2;/ 设置窗口大小和位置this.setBounds(x, y, width, height);/ 设置窗口大小不可改变this.setResizable(false);/ 设置默认关闭选项this.setDefaultCloseOperation(JFrame.DISPOSE_
6、ON_CLOSE);/ 将面板放于窗口中/ 注意:这句话在ChessBoardFrame的构造方法中this.add(new ChessBoardPanel();this.setVisible(true);public static void main(String args) new ChessBoardFrame();二、ChessBoardPanel类import java.awt.Color;import java.awt.Cursor;import java.awt.Graphics;import java.awt.Image;import java.awt.event.MouseA
7、dapter;import java.awt.event.MouseEvent;import java.awt.event.MouseMotionAdapter;import java.io.File;import java.io.IOException;import javax.imageio.ImageIO;import javax.swing.JOptionPane;import javax.swing.JPanel;public class ChessBoardPanel extends JPanel / 保存棋子,1表示黑棋,-1表示白棋,0表示没有棋int arr = new in
8、t1919;/ 是否开始游戏boolean start;/ 棋子int chess = 1;public ChessBoardPanel() this.addMouseListener(ma);this.addMouseMotionListener(mma);MouseMotionAdapter mma = new MouseMotionAdapter() Overridepublic void mouseMoved(MouseEvent e) int x = e.getX();int y = e.getY();if (x = 400 & x = 50 & y = 400 & x = 250
9、& y = 400 & x = 300 & y = 400 & x = 350 & y = 10 & x = 50 & y 10) i = i + 1;if (y - 50) % 20 10) j = j + 1;if (arrij = 0) arrij = chess;/ 判断输赢if (isWin(chess) = true) if (chess = 1) JOptionPane.showMessageDialog(null, 黑棋获胜); else JOptionPane.showMessageDialog(null, 白棋获胜);start = false;/ 改棋子颜色chess =
10、 chess * (-1);/ 开始游戏if (x = 400 & x = 50 & y = 80) / 清空数组,清盘for (int i = 0; i 19; i+) for (int j = 0; j = 400 & x = 250 & y = 400 & x = 300 & y = 400 & x = 350 & y = 380) int option = JOptionPane.showConfirmDialog(null, 确定要退出吗?,对话框, JOptionPane.YES_NO_OPTION);if (option = 0) / 退出System.exit(0);Overr
11、idepublic void paint(Graphics g) super.paint(g);/ 构造背景图的Image对象Image img = null;try img = ImageIO.read(new File(System.getProperty(user.dir)+ /background.jpg); catch (IOException e) e.printStackTrace();/ 绘制背景图g.drawImage(img, 0, 0, this);/ 绘制棋盘/ 横向for (int i = 0; i 19; i+) g.drawLine(10, 50 + i * 20
12、, 370, 50 + i * 20);/ 纵向for (int i = 0; i 19; i+) g.drawLine(10 + i * 20, 50, 10 + i * 20, 410);/ 遍历数组for (int i = 0; i 19; i+) for (int j = 0; j 19; j+) if (arrij != 0) if (arrij = 1) g.setColor(Color.BLACK);g.fillOval(3 + i * 20, 43 + j * 20, 14, 14);g.drawOval(3 + i * 20, 43 + j * 20, 14, 14); el
13、se g.setColor(Color.WHITE);g.fillOval(3 + i * 20, 43 + j * 20, 14, 14);g.setColor(Color.BLACK);g.drawOval(3 + i * 20, 43 + j * 20, 14, 14);/ 让窗口重绘this.repaint();/ 判断输赢/ 横向public boolean isH(int chess) for (int i = 0; i 19; i+) for (int j = 2; j 17; j+) if (arrij - 2 = chess & arrij - 1 = chess& arri
14、j = chess & arrij + 1 = chess& arrij + 2 = chess) return true;return false;/ 纵向public boolean isV(int chess) for (int i = 2; i 17; i+) for (int j = 0; j 19; j+) if (arri - 2j = chess & arri - 1j = chess& arrij = chess & arri + 1j = chess& arri + 2j = chess) return true;return false;/ 东南public boolea
15、n isEastSouth(int chess) for (int i = 2; i 17; i+) for (int j = 2; j 17; j+) if (arri - 2j - 2 = chess & arri - 1j - 1 = chess& arrij = chess & arri + 1j + 1 = chess& arri + 2j + 2 = chess) return true;return false;/ 东北public boolean isEastNorth(int chess) for (int i = 2; i 17; i+) for (int j = 2; j
16、 17; j+) if (arri - 2j + 2 = chess & arri - 1j + 1 = chess& arrij = chess & arri + 1j - 1 = chess& arri + 2j - 2 = chess) return true;return false;public boolean isWin(int chess) if (isH(chess) = true) | (isV(chess) = true)| (isEastSouth(chess) = true) | (isEastNorth(chess) = true) return true;return false;四、 测试分析(1)程序运行情况: 程序正常的响应按钮事件,鼠标点击的范围严格受到g.getwidth()与g.getheiht()的限定,当在加载图片的时候可能由于图片在不同的机器上的存储位置的不同而需要进行异常处理,当用户将图片存储在不同的地方时,通过得到用户的计算机在所存位置处的图片
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论