《java五子棋课程设计报告(9页).docx》由会员分享,可在线阅读,更多相关《java五子棋课程设计报告(9页).docx(9页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、-java五子棋课程设计报告-第 9 页Java课程设计报告 题目:用java编写五子棋游戏姓名:曾磊学号:20141387036专业:物联网工程要求: 1.用java编写五子棋的游戏 2.该程序拥有简洁美观的图形化界面,且界面主要由棋盘、标题和游戏操作的按钮三部分组成。另外,该游戏界面的大小是不可变的,程序会自动获取电脑屏幕的大小信息,并且计算出合适的位置居中显示。因为考虑到棋盘和背景图片的显示问题,为防止出现排列错乱,故采用这样的设计方式。3.标题位于界面的最上方;棋盘为19*19的围棋棋盘,位于左下方;按钮包括:“开始游戏” “退出游戏” “游戏说明”,共3个,位于棋盘的右侧4. 在单击
2、鼠标时,在相应的位置显示棋子 ,还能够显示轮到哪一方下棋(规定黑子先下)5. 可以保存棋局,即保存之前下过的棋子6.能够判断游戏胜负,并且弹出窗口提示。一局结束后可以通过“开始游戏”按钮清空棋盘界面,进行下一局。设计思想:本程序主要用到以下3种技术: Swing编程 ImageIO类的使用 Graphics图片的绘制对于这样一个五子棋游戏程序。1.首先我们要用java.Swing和java.awt工具包来设计游戏的用户界面并且绘制图像图形,如制作棋盘。2.此外还要用到ImageIO类来导入和显示图片用作游戏界面的背景,背景图片可以自己设计。3主体界面制作好了以后,我们就可以添加事件监听,用与监
3、听鼠标相关的类 MouseListener来在指定区域和位置内利用鼠标点击产生棋子进行游戏。4. 接下来就可以开始设计判定胜负的算法了。5.然后就是按钮功能的实现。6.最后就是调试和测验,看程序有没有什么bug。具体会用到的类和方法会在下面的主程序中一一给予介绍编程过程导入java.awt、java.io和javax.swing工具包,它们包含用于创建用户界面、绘制图形图像、图像导入,鼠标监听的所有分类。import java.awt.Color; /color类用于对游戏界面进行配色import java.awt.Font; /font类提供与字体相关的类和接口。import java.aw
4、t.Graphics; /Graphics类提供执行实际的绘制、着色及文本输出的操作功能的基类import java.awt.Toolkit;import java.awt.event.MouseEvent;import java.awt.event.MouseListener; /与监听鼠标相关的类import java.awt.image.BufferedImage; /导入图片的处理类import java.io.File; / 文件和目录路径名的抽象表示形式。import java.io.IOException; /异常类import javax.imageio.ImageIO; /显
5、示图片的类import javax.swing.JFrame; /创建窗体,并且设置其大小,位置等属性import javax.swing.JOptionPane; /与对话框相关的类public class FiveChessFrame extends JFrame implements MouseListener, Runnable / 获取屏幕的宽度和高度,用以计算出合适的位置将游戏界面居中显示int width = Toolkit.getDefaultToolkit().getScreenSize().width;int height = Toolkit.getDefaultToolk
6、it().getScreenSize().height;/ 先将背景图片定义为空BufferedImage bgImage = null;/这里定义的x,y用来保存棋子的坐标int x = 0;int y = 0; 定义一个19*19的二维数组来表示棋盘,其中数据内容 0: 表示这个点并没有棋子, 1: 表示这个点是黑子, 2:表示这个点是白子int allChess = new int1919;/ 标识当前应该黑棋还是白棋下下一步boolean isBlack = true;/ 标识当前游戏是否可以继续boolean canPlay = true;/ 保存显示的提示信息,这个信息是用来在界面
7、的棋盘上方显示的String message = 黑方先行;设置五子棋游戏界面的主窗体(位置、大小、居中显示等属性) public FiveChessFrame() this.setTitle(五子棋-曾磊);this.setSize(500, 500);this.setLocation(width - 500) / 2, (height - 500) / 2);this.setResizable(false);/ 将窗体的关闭方式设置为默认关闭后程序结束this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);/ 为窗体加入鼠标监听器this.a
8、ddMouseListener(this);/ 将窗体显示出来this.setVisible(true);下面是导入事先设计好的图片作为游戏界面的背景,运用到io流操作,通过ImageIo类来实现背景图片由磁盘向程序中的导入,并且用到try IOException来捕获异常。try bgImage = ImageIO.read(new File(E:image128.jpg); catch (IOException e) e.printStackTrace();/ 刷新屏幕,防止开始游戏时出现无法显示的情况.this.repaint();public void paint(Graphics g
9、) / 绘制背景g.drawImage(bgImage, 1, 20, this);/ 输出标题信息g.setFont(new Font(黑体, Font.BOLD, 20);g.drawString( : + message, 130, 60); / 绘制棋盘,在背景图片流出的棋盘区域绘制棋盘的线,利用一个for循环实现棋盘线的绘制,横扫都18等分,很容易可以计算出来for (int i = 0; i 19; i+) g2.drawLine(10, 70 + 20 * i, 370, 70 + 20 * i);g2.drawLine(10 + 20 * i, 70, 10 + 20 * i,
10、 430); / 使用Graphics类的fillOver方法来标注围棋棋盘上的九个点位(只演示一个,其余类似)可以先用鼠标监听的方法获取点位的坐标,然后再进行绘制g2.fillOval(68, 128, 4, 4);下面提供绘制棋子的程序代码,即通过鼠标监听器判断在什么位置产生什么颜色的棋子。参数传递1表示黑子,2表示白子。for (int i = 0; i 19; i+) for (int j = 0; j = 10 & x = 70 & y = 400 & e.getX() = 70& e.getY() = 400 & e.getX() = 170& e.getY() = 400 & e
11、.getX() = 370& e.getY() = 5) flag = true;return flag;判断胜负,此处为整个五子棋游戏最核心的代码,也是最复杂的,这里我们通过一个算法将判断是否有五子相连的问题写成一个方法,然后对于水平、竖直、斜向四个方向的判断就可以直接调用方法,避免相近程序代码的反复出现,降低代码效率。private int checkCount(int xChange, int yChange, int color) int count = 1;int tempX = xChange;int tempY = yChange;while (x + xChange = 0 & x + xChange = 0& y + yChange 0)yChange+;else yChange-;xChange = tempX;yChange = tempY;while (x - xChange = 0 & x - xChange = 0& y - yChange 0)yChange+;else yChange-;return count;运行截图
限制150内