《Java大作业报告兰.doc》由会员分享,可在线阅读,更多相关《Java大作业报告兰.doc(18页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、北方民族大学大作业报告(游戏程序设计) 系(部、中心) 计算机科学与工程学院 姓 名 学 号 专 业 班 级 2012级 班 课程名称 Java语言程序设计 作业题目名称 五子棋游戏程序设计 起止时间 2014年4月21日2014年5 月21日 成 绩 指导教师签名 贾艳波 、林淑飞 五子棋游戏程序设计一、 游戏的基本规则无禁手玩法:黑先白后,谁先连五谁胜禁手玩法:黑先行棋,黑棋只能走冲四活三胜,黑双活三禁手 双冲四禁手 四三三禁手 四四三禁手 六连长连禁手;白后手,白棋无任何禁手,还可以抓黑棋的禁手点取胜 职业规则玩法:三手交换五手两打,黑棋有禁手,意思是下到第三手棋执白方有权选择交换下黑棋
2、或者继续行棋,下到第五手时执黑方给出两个打点让执白方选择去掉一个打点下剩下的打点。五子棋第一子下天元 第三手确定一个开局,正规开局26种 直指13种 斜指13种,有些开局即便在职业规则下已经必胜了,或者必败了,还有一些平衡局 黑优局 白优局,职业规则的交换就限制了开局方(一开始执黑方)开必胜或着开黑优会被另一方交换掉,所以职业规则下 大家基本都选择平衡局来行棋 二、主要实现思想和算法设计思想:(1)能够显示棋盘和棋子图片;(2)能够接收用户鼠标输入,并把相应的坐标转化为行列数据填充到棋子数组中;(3)能够调用规则类判断胜负;(4)能够支持清空游戏棋盘上的旗子显示。三、游戏软件系统的设计给出程序
3、的功能模块,一般需要有功能模块图综述程序结构,由几个类构成,每个类的功能是什么。这部分一般还需给出类之间的关系图。四、程序关键类的实现对每个关键类的构成详细描述,包括域成员和成员方法的解释。除了给出成员方法的功能外,还要给出成员方法的执行流程。例如:对于账户类,类图如下: Account-balance:double+public void deposit(double)+public void withdraw(double)+public double getBalance()(注意此类图不是规范的类图,只是给大家提供一个分析的实例)描述:该类的包括一个域成员balance,代表账户余额;
4、包括三个成员方法,deposit()方法功能是存款,withdraw()方法的功能是取款,getBalance()方法是获取账户余额。另外,对于功能复杂的方法请给出方法的流程图。FiveChessFrame()方法的功能是設置標題paint(Graphics g) 方法的功能是双缓冲技术 防止画面闪烁mouseClicked(MouseEvent e) mousePressed(MouseEvent e) mouseReleased(MouseEvent e)鼠标处理事件五、游戏软件的主要界面截图主要的功能界面截图要加文字描述。六、程序代码:这部分的要求附完整的程序代码,并且代码中必须加必要的
5、注释。import java.awt.Color;import java.awt.Font;import java.awt.Graphics;import java.awt.HeadlessException;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.imagei
6、o.ImageIO;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.getDefaultToolkit().getScreenSize().height;/ 背景图片Buffered
7、Image bgimage = null;/ 保存棋子坐标int x = 0;int y = 0;/ 保存之前下過的全部棋子的座標/ 其中數據內容0 表示 這個點並沒有棋子,1 表示這個點是黑子, 2表示這個點是白點int allChess = new int1919;/ 标示当前是黑棋boolean isBlack = true;/ 标识当前游戏是否可以继续boolean canPlay = true;/提示信息String message=黑方先行;/保存最多拥有时间(秒)int maxTime= 0;/做倒计时的线程类Thread t=new Thread(this);/保存黑白与白方的
8、剩余时间int blackTime=0;int whiteTime=0;/保存时间信息String blackMessage=无限制;String whiteMessage=无限制;public FiveChessFrame() / 設置標題this.setTitle(五子棋);/ 設置窗體大小this.setSize(500, 500);/ 設置窗體出現位置this.setLocation(width - 500) / 2, (height - 500) / 2);/ 大小不可變this.setResizable(false);/ 關閉this.setDefaultCloseOperatio
9、n(JFrame.EXIT_ON_CLOSE);/ 顯示this.setVisible(true);/将窗体加入监听器this.addMouseListener(this);t.start();t.suspend();/刷新屏幕,防止游戏打开时 无法显示。this.repaint();try bgimage = ImageIO.read(new File(F:/background.jpg); catch (IOException e) / TODO Auto-generated catch blocke.printStackTrace();public void paint(Graphics
10、 g) /双缓冲技术 防止画面闪烁BufferedImage bi=new BufferedImage(500, 500,BufferedImage.TYPE_INT_ARGB );Graphics g2=bi.createGraphics();g2.drawImage(bgimage, 3, 22, this);g2.setFont(new Font(宋体, Font.BOLD, 20);g2.setColor(Color.black);g2.drawString(游戏信息:+message, 120, 60);g2.setFont(new Font(华文行楷, 0, 18);/ 设置时间界
11、面g2.drawString(黑方时间:+blackMessage, 28, 470);g2.drawString(白方时间:+whiteMessage, 250, 470);for (int i = 0; i 19; i+) / 画棋盘线g2.drawLine(13, 72 + 20 * i, 373, 72 + 20 * i);g2.drawLine(13 + 20 * i, 72, 13 + 20 * i, 432);/ 标注点位g2.fillOval(71, 130, 4, 4);g2.fillOval(71, 370, 4, 4);g2.fillOval(311, 130, 4, 4
12、);g2.fillOval(311, 370, 4, 4);g2.fillOval(191, 250, 5, 5);g2.fillOval(71, 250, 4, 4);g2.fillOval(311, 250, 4, 4);g2.fillOval(191, 130, 4, 4);g2.fillOval(191, 370, 4, 4);/ 繪製棋子/* * x= (x-13)/20*20+10; y=(y-72)/20*20+70; g.fillOval(x-4, y-4, 10,10); */ 繪製全部棋子for (int i = 0; i 19; i+) for (int j = 0; j
13、 = 13 & x = 73 & y =404&e.getX()=74&e.getY()=104)int result=JOptionPane.showConfirmDialog(this, 是否重新开始游戏?);if(result=0)/现在重新开始游戏/重新开始游戏所需的操作,1.把棋盘清空 allcChess这个数组中的数全部归零;/2 将游戏信息设置为 初始位置;/ 3 将下一步器=棋设置为 黑方开始;for (int i=0;i19;i+)for(int j=0;j0)blackMessage=maxTime/3600+:+(maxTime/60-maxTime/3600*60)+:
14、+(maxTime-maxTime/60*60);whiteMessage=maxTime/3600+:+(maxTime/60-maxTime/3600*60)+:+(maxTime-maxTime/60*60);t.resume();elseblackMessage=无限制;whiteMessage=无限制;this.repaint();/点击游戏设置if(e.getX()=404&e.getX()=124&e.getY()=154)String input=JOptionPane.showInputDialog(请输入游戏最大时间,(单位:分钟),如果输入0,表示时间为无限制!);try
15、 maxTime=Integer.parseInt(input)*60;if(maxTime0)JOptionPane.showMessageDialog(this, 请输入正确信息,不允许输入负数!);if(maxTime=0)int result=JOptionPane.showConfirmDialog(this, 设置完成,是否重新开始游戏?);if(result=0)for (int i=0;i19;i+)for(int j=0;j0)int result=JOptionPane.showConfirmDialog(this, 设置完成,是否重新开始游戏?);if(result=0)
16、for (int i=0;i19;i+)for(int j=0;j=404&e.getX()=175&e.getY()=404&e.getX()=275&e.getY()=404&e.getX()=325&e.getY()=404&e.getX()=375&e.getY()= 5) flag = true; */* * /縱方向的 int i2= 1; int count2=1; while (color = allChessxy+i2) * count2+; i2+; i2=1; while (color=allChessxy-i2); count2+; * i2+; if(count2=5
17、) flag=true; /判斷斜右上的左下 int i3= 1; int count3 * =1; while (color = allChessx+iy-i) count3+; i3+; i3=1; * while (color=allChessx-iy+i); count3+; i3+; if(count3=5) * flag=true; /斜下左上右下 int i4= 1; int count4 =1; while (color = * allChessx+iy+i) count4+; i4+; i4=1; while * (color=allChessx-iy-i); count4+
18、; i4+; if(count4=5) * flag=true; */ 判斷橫向count = this.checkChess(1, 0, color);if (count = 5) flag = true; else / 判斷縱向count = this.checkChess(0, 1, color);if (count = 5) flag = true; else / 判斷右上、左下count = this.checkChess(1, -1, color);if (count = 5) flag = true; else / 判斷右下、左上count = this.checkChess(1
19、, 1, color);if (count = 5) flag = true;return flag;private int checkChess(int xChange, int yChange, int color) int count = 1;int tempX = xChange;int tempY = yChange;while (x+xChange=0&x+xChange=0&y+yChange0)yChange+;elseyChange-;xChange = tempX;yChange = tempY;while (x-xChange=0&x- xChange = 0&y- yC
20、hange0)yChange+;elseyChange-;return count;Overridepublic void mouseEntered(MouseEvent e) / TODO Auto-generated method stubOverridepublic void mouseExited(MouseEvent e) / TODO Auto-generated method stubOverridepublic void run() / TODO Auto-generated method stub/判断是否有时间限制if(maxTime0)while(true)if(isBl
21、ack)blackTime-;if(blackTime=0)JOptionPane.showMessageDialog(this, 黑方超時,游戏结束); elsewhiteTime-;if(whiteTime=0)JOptionPane.showMessageDialog(this, 白方超时,游戏结束);blackMessage=blackTime/3600+:+(blackTime/60-blackTime/3600*60)+:+(blackTime-blackTime/60*60);whiteMessage=whiteTime/3600+:+(whiteTime/60-whiteTim
22、e/3600*60)+:+(whiteTime-whiteTime/60*60);this.repaint();try Thread.sleep(1000); catch (InterruptedException e) / TODO Auto-generated catch blocke.printStackTrace();/System.out.println(blackTime+-+whiteTime);public static void main(String args) FiveChessFrame ff= new FiveChessFrame();package com.test
23、3_1;import java.awt.Color;import java.awt.Font;import java.awt.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;import javax.swing.JFra
24、me;public class Mychessframe extends JFrame implements MouseListenerpublic Mychessframe()JFrame fr=new JFrame();this.setSize(500, 500);this.setTitle(五子棋);this.setResizable(false);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);int width=Toolkit.getDefaultToolkit().getScreenSize().width;int heigh
25、t=Toolkit.getDefaultToolkit().getScreenSize().height;/System.out.println(width);/System.out.println(height);this.setLocation(width- 500)/2, (height-500)/2 );this.addMouseListener(this);this.setVisible(true);public void paint(Graphics g)/*g.drawString(五子棋游戏,40,40);*/*g.drawOval(30,39,40,40);g.fillOva
26、l(100,40, 40,40);*/g.drawRect(30,40,30,30);/g.fillRect(70, 40,30,30);/g.drawLine(30,80,30,20);BufferedImage image= null;try image=ImageIO.read(new File(F:/background.jpg) ); catch (IOException e) / TODO Auto-generated catch blocke.printStackTrace();g.drawImage(image,2,22,this);g.drawRect(30,40,30,30
27、);g.fillRect(70, 40,30,30);g.setColor(Color.red);g.setFont(new Font(宋体, 40,40);g.drawString(五子棋游戏,40,100);Overridepublic void mouseClicked(MouseEvent e) / TODO Auto-generated method stub/System.out.println(鼠标点击);/JOptionPane.showMessageDialog(this,鼠标点击);Overridepublic void mousePressed(MouseEvent e) / TODO Auto-generated method stub/System.out.println(鼠标按下);/JOptionPane.showMessageDialog(this,鼠标按下);/System.out.println(鼠标点击位置X+e.getX();/System.out.println(鼠标点击位置Y+e.getY();Overridepublic void mouseReleased(MouseEvent e) / TODO Auto-generate
限制150内