JAVA五子棋课程设计报告书.docx
《JAVA五子棋课程设计报告书.docx》由会员分享,可在线阅读,更多相关《JAVA五子棋课程设计报告书.docx(18页珍藏版)》请在冰点文库上搜索。
![JAVA五子棋课程设计报告书.docx](https://file1.bingdoc.com/fileroot1/2023-5/16/62f7fdf5-6d33-4a6f-b501-08534582ed38/62f7fdf5-6d33-4a6f-b501-08534582ed381.gif)
JAVA五子棋课程设计报告书
2011—2012学年第一学期
《Java程序设计》课程大作业
题目:
五子棋
专业:
计算机
班级:
09计算机2班
学号:
090400509
:
翔
教师:
树林
日期:
2011年12月22日
项目
容
单项分值
总分
选题
1.题目明确,系统功能较集中
4
8
2.题目难度适宜,有一定的综合性
4
功能实现
3.功能完整,能够正确运行
6
24
4.模块划分合理,程序结构清晰
6
5.界面设计合理、易用、协调
6
6.设计与实现程序
6
规性及文档
7.代码规性及注释
5
10
8.文档容齐全,格式规
5
总体效果
9.完成总体质量
6
12
10.软件功能及技术水平
6
答辩
11.讲解清楚明了,功能演示流畅
6
6
评语
总分
题目:
五子棋
作者:
翔
一.引言
五子棋游戏是常见的经典游戏,在19*19的棋盘方格上进行对弈,由于时间与基础知识的掌握程度限制,现初步完成简易五子棋的实现。
本程序完全由JAVA语言编写而成,单击“开始游戏按钮”将弹出确认对话框,当点击对话框上的“确认”按钮,游戏正式开始;“认输”按钮表示当对弈双方有一方认输时,结束比赛并且输出结果;“关于”按钮的功能可以由制作者自己添加,主要表示游戏的版本等级;“退出”按钮单击时推出对弈比赛。
2.系统概述
本程序分为两类ChessBoardFrame类和ChessBoardPanel类
游戏开始弹出对话框显示游戏开始途中如果某一方认输便可点击认输按钮之后显示黑棋/白棋认输白棋/黑棋获胜点击退出按钮即可退出整个程序
4.系统功能结构设计
自定义类说明
类名:
ChessBoardFrame
作用:
显示五子棋游戏的主界面在整个屏幕中的位置与大小
继承的父类:
JFrame
实现接口:
无
publicclassChessBoardFrameextendsJFrame
{
}
//自定义一个继承于Jframe的类用于获取五子棋背景图的大小,在整个屏幕上的显示位置
类名:
ChessBoardPanel
作用:
实现五子棋的各个功能,通过画直线的成员函数画出棋盘、通过判断函数对鼠标的判断以保证正确落子、在判断函数中还包括了对输与赢的判断、加上清屏函数、每次重新开始时进行清屏。
在此类中主要使用了JAVA本身所具有的一些功能,如:
鼠标适配器、鼠标单击时间的捕捉、窗口重绘、颜色填充等功能。
继承的父类:
JPanel
实现接口:
无
publicclassChessBoardPanelextendsJPanel
{
}
//完成五子棋的主要功能
5.主要界面
6.使用说明
点击开始游戏便可在棋盘进行游戏如其中一方获胜游戏会自动弹出结果若想继续游戏便可再次点击开始游戏如退出游戏点击“退出”再选定“是”便可退出游戏途中若有一方认输点击认输按钮即可
附件(程序清单)
ChessBoardFrame类
importjava.awt.Color;
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);
//将面板放于窗口中
setBackground(Color.pink);
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,"JAVA简易五子棋程序");
}
//退出
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);
//画游戏开始外框
g.drawLine(400,50,470,50);
g.drawLine(400,80,470,80);
g.drawLine(400,50,400,80);
g.drawLine(470,50,470,80);
//画认输外框
g.drawLine(400,250,470,250);
g.drawLine(400,280,470,280);
g.drawLine(400,250,400,280);
g.drawLine(470,250,470,280);
//画关于外框
g.drawLine(400,300,470,300);
g.drawLine(400,330,470,330);
g.drawLine(400,300,400,330);
g.drawLine(470,300,470,330);
//画退出外框
g.drawLine(400,350,470,350);
g.drawLine(400,380,470,380);
g.drawLine(400,350,400,380);
g.drawLine(470,350,470,380);
//鼠标事件框文字
g.drawString("游戏开始",410,70);
g.drawString("认输",420,270);
g.drawString("关于",420,320);
g.drawString("退出",420,370);
//绘制棋盘
//横向
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;
}
}