Java创新实习课程设计报告.docx
- 文档编号:23649714
- 上传时间:2023-05-19
- 格式:DOCX
- 页数:15
- 大小:53.84KB
Java创新实习课程设计报告.docx
《Java创新实习课程设计报告.docx》由会员分享,可在线阅读,更多相关《Java创新实习课程设计报告.docx(15页珍藏版)》请在冰豆网上搜索。
Java创新实习课程设计报告
Java创新实习课程设计报告
题目:
简易五子棋游戏开发
院(系):
理学院
年级专业:
信息与计算科学07级
学生姓名:
陈良燕、姚世杰
学生学号:
200707119006、200707119032
指导老师:
裴老师
实习时间:
2010.5.29--31、2010.6.6
成绩评定:
设计报告(40%)
程序演示(20%)
回答问题(40%)
总成绩:
目录
1.摘要-----------------------------------------------------2
2.概要设计--------------------------------------------------2
3.详细设计--------------------------------------------------2
4.测试分析--------------------------------------------------9
5.参考文献--------------------------------------------------9
一、摘要
五子棋游戏是常见的经典游戏,在19*19的棋盘方格上进行对弈,由于时间与基础知识的掌握程度限制,现初步完成简易五子棋的实现。
本程序完全有面向对象的JAVA语言编写而成,单击“开始游戏按钮”将弹出确认对话框,当点击对话框上的“确认”按钮,游戏正式开始;“认输”按钮表示当对弈双方有一方认输时,结束比赛并且输出结果;“关于”按钮的功能可以由制作者自己添加,主要表示游戏的版本等级;“退出”按钮单击时推出对弈比赛。
二、概要设计
(一)自定义类说明
类名:
ChessBoardFrame
作用:
显示五子棋游戏的主界面在整个屏幕中的位置与大小
继承的父类:
Jframe
实现接口:
无
publicclassChessBoardFrameextendsJFrame
{
}//自定义一个继承于Jframe的类用于获取五子棋背景图的大小,在整个屏幕上的显示位置
类名:
ChessBoardPanel
作用:
实现五子棋的各个功能,通过面板继承来进行背景图片载入、通过画直线的成员函数画出棋盘、通过判断函数对鼠标的判断以保证正确落子、在判断函数中还包括了对输与赢的判断、加上清屏函数、每次重新开始时进行清屏。
在此类中主要使用了JAVA本身所具有的一些功能,如:
异常抛出、鼠标适配器、鼠标单击时间的捕捉、窗口重绘、颜色填充等功能。
继承的父类:
JPanel
实现接口:
无
publicclassChessBoardPanelextendsJPanel
{
}//完成五子棋的主要功能
(二)程序流程图
三、详细设计
一、ChessBoardFrame类
importjava.awt.Dimension;
importjava.awt.Toolkit;
importjavax.swing.JFrame;
publicclassChessBoardFrameextendsJFrame{
publicChessBoardFrame(){
//设置标题
this.setTitle("五子棋");
intwidth=500;
intheight=456;
//窗口起点坐标
Toolkitkit=Toolkit.getDefaultToolkit();
Dimensiondimension=kit.getScreenSize();
doublescreenWidth=dimension.getWidth();
doublescreenHeight=dimension.getHeight();
intx=(int)(screenWidth-width)/2;
inty=(int)(screenHeight-height)/2;
//设置窗口大小和位置
this.setBounds(x,y,width,height);
//设置窗口大小不可改变
this.setResizable(false);
//设置默认关闭选项
this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
//将面板放于窗口中
//注意:
这句话在ChessBoardFrame的构造方法中
this.add(newChessBoardPanel());
this.setVisible(true);
}
publicstaticvoidmain(String[]args){
newChessBoardFrame();
}
}
二、ChessBoardPanel类
importjava.awt.Color;
importjava.awt.Cursor;
importjava.awt.Graphics;
importjava.awt.Image;
importjava.awt.event.MouseAdapter;
importjava.awt.event.MouseEvent;
importjava.awt.event.MouseMotionAdapter;
importjava.io.File;
importjava.io.IOException;
importjavax.imageio.ImageIO;
importjavax.swing.JOptionPane;
importjavax.swing.JPanel;
publicclassChessBoardPanelextendsJPanel{
//保存棋子,1表示黑棋,-1表示白棋,0表示没有棋
int[][]arr=newint[19][19];
//是否开始游戏
booleanstart;
//棋子
intchess=1;
publicChessBoardPanel(){
this.addMouseListener(ma);
this.addMouseMotionListener(mma);
}
MouseMotionAdaptermma=newMouseMotionAdapter(){
@Override
publicvoidmouseMoved(MouseEvente){
intx=e.getX();
inty=e.getY();
if((x>=400&&x<=470&&y>=50&&y<=80)
||(x>=400&&x<=470&&y>=250&&y<=280)
||(x>=400&&x<=470&&y>=300&&y<=330)
||(x>=400&&x<=470&&y>=350&&y<=380)){
setCursor(newCursor(Cursor.HAND_CURSOR));
}else{
setCursor(newCursor(Cursor.DEFAULT_CURSOR));
}
}
};
//棋盘:
10,50;370,410
//开始游戏:
400,50;470,80
//认输:
400,250;470,280
//关于:
400,300;470,330
//退出:
400,350;470,380
MouseAdapterma=newMouseAdapter(){
@Override
publicvoidmouseClicked(MouseEvente){
intx=e.getX();
inty=e.getY();
if(start==true){
if(x>=10&&x<=370&&y>=50&&y<=410){
inti=(x-10)/20;
intj=(y-50)/20;
if((x-10)%20>10){
i=i+1;
}
if((y-50)%20>10){
j=j+1;
}
if(arr[i][j]==0){
arr[i][j]=chess;
}
//判断输赢
if(isWin(chess)==true){
if(chess==1){
JOptionPane.showMessageDialog(null,"黑棋获胜");
}else{
JOptionPane.showMessageDialog(null,"白棋获胜");
}
start=false;
}
//改棋子颜色
chess=chess*(-1);
}
}
//开始游戏
if(x>=400&&x<=470&&y>=50&&y<=80){
//清空数组,清盘
for(inti=0;i<19;i++){
for(intj=0;j<19;j++){
arr[i][j]=0;
}
}
start=true;
JOptionPane.showMessageDialog(null,"游戏开始!
");
}
//认输
if(x>=400&&x<=470&&y>=250&&y<=280){
intoption=JOptionPane.showConfirmDialog(null,"确定要认输吗?
",
"确认框",JOptionPane.YES_NO_OPTION);
if(option==0){
if(chess==1){
JOptionPane.showMessageDialog(null,"黑棋认输,白棋胜");
}else{
JOptionPane.showMessageDialog(null,"白棋认输,黑棋胜");
}
start=false;
}
}
//关于
if(x>=400&&x<=470&&y>=300&&y<=330){
JOptionPane.showMessageDialog(null,"简易五子棋1.0版");
}
//退出
if(x>=400&&x<=470&&y>=350&&y<=380){
intoption=JOptionPane.showConfirmDialog(null,"确定要退出吗?
",
"对话框",JOptionPane.YES_NO_OPTION);
if(option==0){
//退出
System.exit(0);
}
}
}
};
@Override
publicvoidpaint(Graphicsg){
super.paint(g);
//构造背景图的Image对象
Imageimg=null;
try{
img=ImageIO.read(newFile(System.getProperty("user.dir")
+"/background.jpg"));
}catch(IOExceptione){
e.printStackTrace();
}
//绘制背景图
g.drawImage(img,0,0,this);
//绘制棋盘
//横向
for(inti=0;i<19;i++){
g.drawLine(10,50+i*20,370,50+i*20);
}
//纵向
for(inti=0;i<19;i++){
g.drawLine(10+i*20,50,10+i*20,410);
}
//遍历数组
for(inti=0;i<19;i++){
for(intj=0;j<19;j++){
if(arr[i][j]!
=0){
if(arr[i][j]==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);
}else{
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();
}
//判断输赢
//横向
publicbooleanisH(intchess){
for(inti=0;i<19;i++){
for(intj=2;j<17;j++){
if(arr[i][j-2]==chess&&arr[i][j-1]==chess
&&arr[i][j]==chess&&arr[i][j+1]==chess
&&arr[i][j+2]==chess){
returntrue;
}
}
}
returnfalse;
}
//纵向
publicbooleanisV(intchess){
for(inti=2;i<17;i++){
for(intj=0;j<19;j++){
if(arr[i-2][j]==chess&&arr[i-1][j]==chess
&&arr[i][j]==chess&&arr[i+1][j]==chess
&&arr[i+2][j]==chess){
returntrue;
}
}
}
returnfalse;
}
//东南
publicbooleanisEastSouth(intchess){
for(inti=2;i<17;i++){
for(intj=2;j<17;j++){
if(arr[i-2][j-2]==chess&&arr[i-1][j-1]==chess
&&arr[i][j]==chess&&arr[i+1][j+1]==chess
&&arr[i+2][j+2]==chess){
returntrue;
}
}
}
returnfalse;
}
//东北
publicbooleanisEastNorth(intchess){
for(inti=2;i<17;i++){
for(intj=2;j<17;j++){
if(arr[i-2][j+2]==chess&&arr[i-1][j+1]==chess
&&arr[i][j]==chess&&arr[i+1][j-1]==chess
&&arr[i+2][j-2]==chess){
returntrue;
}
}
}
returnfalse;
}
publicbooleanisWin(intchess){
if((isH(chess)==true)||(isV(chess)==true)
||(isEastSouth(chess)==true)||(isEastNorth(chess)==true)){
returntrue;
}
returnfalse;
}
}
四、测试分析
(1)程序运行情况:
程序正常的响应按钮事件,鼠标点击的范围严格受到g.getwidth()与g.getheiht()的限定,当在加载图片的时候可能由于图片在不同的机器上的存储位置的不同而需要进行异常处理,当用户将图片存储在不同的地方时,通过得到用户的计算机在所存位置处的图片而进行异常处理。
(2)程序异常处理:
当所存储的背景图片与程序中的不符合时就抛出一个任意字符作为异常对象,然后使用try-catch去捕捉这个异常,异常的处理如下:
try{
img=ImageIO.read(newFile(System.getProperty("user.dir")+"/background.jpg"));
}
catch(IOExceptione){e.printStackTrace();
}//如果出现异常则初始化效果如同clear键
五、参考文献
1.、《Java自学手册》明日科技主编人民邮电出版社
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 创新 实习 课程设计 报告