《Java语言程序设计》
课程设计报告
分 院: 电 信 分 院 班 级: 电子商务2班 _ * 名: *** 学 号: ************** 指导教师: *** 课设时间: 2011-12-20 至2011-12-31
二O一一 年 十 二月 二十 日
10电商2班26号黄永强 Java课程设计报告
目录
目录 ................................................................................................ - 1 - 一、课程设计要求 ........................................................................ - 2 - 二、设计步骤 ................................................................................ - 2 - 三、设计正文 ................................................................................ - 5 - 1、源代码: ............................................................................ - 5 - 2、运行结果: ......................................................................- 15 - 四、课程设计心得体会 ..............................................................- 19 - 五、参考文献 ..............................................................................- 20 -
- 1 -
10电商2班26号黄永强 Java课程设计报告
《Java语言程序设计课程设计》
一、课程设计要求
设计一个15╳15围棋棋盘,由两玩家交替进行对战,并可以实现以下功能: 1.选择落子的先后顺序 2.重置棋盘 3.刷新重新开始 4.退出提示
并且规定退出者判为负,但退出过程中要有提示。以防不小心点错了。 最后判断某一方是否为五子连珠。
实现一个简单的多用户五子棋的游戏程序,包括如下两个界面 (1)选择对弈桌(执黑、执白)。
(2)在游戏界面,有开始,退出(游戏未结束、点退出自动判负);
二、设计步骤
五子棋游戏的功能:
1.鼠标点击棋盘时可以在相应的位置显示棋子;
2.可以判断游戏是否结束,判断是黑方或白方获得胜利; 3.可以设置游戏时间,超时及判定为输;
一、首先设置游戏的背景图片
利用BufferedImage和ImageIO来添加图片作为背景
- 2 -
10电商2班26号黄永强 Java课程设计报告
然后绘制棋盘,设置的棋盘是19*19横线、纵线相距20像素,高和宽各为360像素利用for循环来实现。
二、鼠标在棋盘上点击,显示黑设或白色棋子
黑色棋子:用一个实心的黑色圆来表示;
白色棋子:用一个空心的黑色圆和一个实心的白色圆表示;
三、保存之前下过的棋子
通过一个二维的数组来保存之前下过的棋子;
保存之前下过棋子的坐标,0表示没棋子,1黑子,2白子 int[][] allChess=new int[19][19];
四、判断胜负,是白方胜还是黑方胜
五个方向的判断:1、横向 2、纵向3、右上方+左下方4、右下方+左上方 依据五子棋的游戏规则,判断同一色棋子是否连成五个
五、解决屏幕闪烁问题
通过双缓冲技术来解决屏幕闪烁问题
- 3 -
10电商2班26号黄永强 Java课程设计报告
BufferedImage bi=new BufferedImage(500,500,BufferedImage.TYPE_4BYTE_ABGR); Graphics g2=bi.createGraphics();
六、实现各个按钮的功能
开始游戏:重新开始游戏; 其中重新开始游戏说需要的操作:
1、
把棋盘清空;2、将游戏信息改为初始状态;
游戏设置:设置游戏时间;
退出:退出程序;
认输:表示一方投子认输;
- 4 -
10电商2班26号黄永强 Java课程设计报告
三、设计正文
1、源代码:
import java.awt.*; import java.awt.event.*;
import java.awt.event.InputEvent; import java.io.*; import javax.imageio.*; import javax.swing.*;
import java.awt.image.BufferedImage; public class FiveChessFrame {
public static void main(String []args) { } }
class MyChessFrame extends JFrame implements MouseListener,Runnable {
//保存棋子坐标
MyChessFrame my=new MyChessFrame();
int x=0;
int y=0;
//保存之前下过棋子的坐标,0表示没棋子,1黑子,2白子 int[][] allChess=new int[19][19]; //标识是黑子还是白子下下一步 boolean isBlack=true; //判断游戏是否继续 boolean canPlay=true; //信息指示
String message=\"游戏开始,黑方先下\";
- 5 -
10电商2班26号黄永强 Java课程设计报告
//保存拥有多少时间(秒) int maxTime=0; //倒计时线程类
Thread t=new Thread(this); public MyChessFrame() {
//取得屏幕的宽度
int height=Toolkit.getDefaultToolkit().getScreenSize().height; //取得屏幕的高度
int width=Toolkit.getDefaultToolkit().getScreenSize().width; //设置标题
this.setTitle(\"五子棋\"); //设置窗体大小
this.setSize(500,500); //设置窗体是不可以改变大小 this.setResizable(false); //设置窗体关闭,同时关闭程序
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //设置窗体出事显示位置
this.setLocation((width-500)/2,(height-500)/2); this.addMouseListener(this); //为窗体加入监听器
this.addMouseListener(this); //设置窗体是否显示 this.setVisible(true); t.start(); t.interrupt();
}
public void paint(Graphics g) {
//利用双缓冲技术解决屏幕闪烁问题 BufferedImage
bi=new
BufferedImage(500,500,BufferedImage.TYPE_4BYTE_ABGR);
- 6 -
10电商2班26号黄永强 Java课程设计报告
Graphics g2=bi.createGraphics(); //背景图片
BufferedImage image=null; try {
image=ImageIO.read(new
File(\"D:/
图
片
/3b0fb53827f9fddfd562258c.jpg\"));
}catch(IOException e) { }
g2.drawImage(image,0,0,this); //输出标题
g2.setColor(Color.BLACK);
g2.setFont(new Font(\"宋体\g2.drawString(\"五子棋:\"+message,60,50); //输出时间信息
g2.setFont(new Font(\"宋体\g2.drawString(\"黑方时间:\g2.drawString(\"白方时间:\//绘制棋盘
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,430); e.printStackTrace();
//标注点位
g2.fillOval(68,128,4,4); g2.fillOval(308,128,4,4); g2.fillOval(308,368,4,4); g2.fillOval(68,368,4,4); g2.fillOval(308,248,4,4); g2.fillOval(188,128,4,4);
- 7 -
10电商2班26号黄永强 Java课程设计报告
}
public void mousePressed(MouseEvent e)//监听鼠标按下事件 {
- 8 -
g2.fillOval(68,248,4,4); g2.fillOval(188,368,4,4); g2.fillOval(188,248,4,4); for(int i=0;i<19;i++) { }
g.drawImage(bi,0,0,this);
for(int j=0;j<19;j++) { }
if(allChess[i][j]==1) { }
if(allChess[i][j]==2) { }
//白子
int tempX=i*20+10; int tempY=j*20+70; g2.setColor(Color.WHITE);
g2.fillOval(tempX-7,tempY-7,14,14); g2.setColor(Color.BLACK);
g2.drawOval(tempX-7,tempY-7,14,14); //黑子
int tempX=i*20+10; int tempY=j*20+70; g2.setColor(Color.BLACK);
g2.fillOval(tempX-7,tempY-7,14,14); g2.drawOval(tempX-7,tempY-7,14,14);
10电商2班26号黄永强 Java课程设计报告
if(canPlay==true) {
x=(x-10)/20; y=(y-70)/20;
if(allChess[x][y]==0) {
{ } else { }
//判断棋子是否五连,游戏是否结束 boolean win=this.Win(); if(win==true) {
JOptionPane.showMessageDialog(this,\"游戏结束allChess[x][y]=2; isBlack=true; message=\"轮到黑方下\"; allChess[x][y]=1; isBlack=false; message=\"轮到白方下\"; if(isBlack==true)
x=e.getX(); y=e.getY();
if(x>=10&&x<=370&&y>=70&&y<=430) {
\"+(allChess[x][y]==1?\"黑方\":\"白方\")+\"获胜\");
} else
- 9 -
}
canPlay=false;
你?\");
10电商2班26号黄永强 Java课程设计报告
{
}
}
}
this.repaint();//重新执行paint的方法 //System.out.println(isBlack);
//System.out.println(\"点击位置:X-->\"+e.getX()); //System.out.println(\"点击位置:Y-->\"+e.getY()); //游戏开始
if(e.getX()>=380&&e.getX()<=490&&e.getY()>=60&&e.getY()<=100) {
int result=JOptionPane.showConfirmDialog(this,\"是否重新开始游戏 if(result==0) { for(int i=0;i<19;i++) { for(int j=0;j<19;j++) { allChess[i][j]=0;
}
}
message=\"黑方先行\"; isBlack=true;
}
}
//游戏设置
if(e.getX()>=380&&e.getX()<=490&&e.getY()>=130&&e.getY()<=170) { String input=JOptionPane.showInputDialog(\"请输入时间(分钟)\"); maxTime=Integer.parseInt(input)*60;
- 10 -
10电商2班26号黄永强 Java课程设计报告
} //认输
if(e.getX()>=380&&e.getX()<=490&&e.getY()>=370&&e.getY()<=410) {
int result=JOptionPane.showConfirmDialog(this,\"是否重新开始游戏
你?\"); \"); \");
}
public void mouseReleased(MouseEvent e) //监听鼠标抬起事件 { }
public void mouseEntered(MouseEvent e) //监听鼠标进入事件
- 11 -
if(result==0) {
if(isBlack) {
JOptionPane.showMessageDialog(this,\"黑方认输,游戏结束
} else {
JOptionPane.showMessageDialog(this,\"白方认输,游戏结束
}
}
}
canPlay=false;
//退出游戏 { }
JOptionPane.showMessageDialog(this,\"游戏结束\"); System.exit(0);
if(e.getX()>=380&&e.getX()<=490&&e.getY()>=430&&e.getY()<=470)
10电商2班26号黄永强 Java课程设计报告
{ }
public void mouseExited(MouseEvent e) //监听鼠标离开事件 { }
public void mouseClicked(MouseEvent e) //监听鼠标点击事件 { }
private boolean Win() {
boolean MyWin=false; //横向判断 int i=1; int count=1;
while(allChess[x][y]==allChess[x+i][y]) { } i=1;
while(allChess[x][y]==allChess[x-i][y]) { }
if(count>=5) { }
//纵向判断 int i2=1; int count2=1;
while(allChess[x][y]==allChess[x][y+i2])
- 12 -
count++; i++;
count++; i++;
MyWin=true;
10电商2班26号黄永强 Java课程设计报告
{ } i2=1;
while(allChess[x][y]==allChess[x][y-i2]) { }
if(count2>=5) { }
//斜方向判断(右下+左上) int i3=1; int count3=1;
while(allChess[x][y]==allChess[x+i3][y+i3]) { } i3=1;
while(allChess[x][y]==allChess[x-i3][y-i3]) { }
if(count3>=5) { }
//斜方向判断(右上+左下)
- 13 -
count2++; i2++;
count2++; i2++;
MyWin=true;
count3++; i3++;
count3++; i3++;
MyWin=true;
10电商2班26号黄永强 Java课程设计报告
}
}
public void run() { }
int i4=1; int count4=1;
while(allChess[x][y]==allChess[x+i4][y-i4]) { } i4=1;
while(allChess[x][y]==allChess[x-i4][y+i4]) { }
if(count4>=5) { }
return MyWin;
MyWin=true; count4++; i4++; count4++; i4++;
- 14 -
10电商2班26号黄永强 Java课程设计报告
2、运行结果:
(1)输赢的判断 A、横向
B、纵向
- 15 -
10电商2班26号黄永强 Java课程设计报告
C、右上方+左下方
D、右下方+左上方
- 16 -
10电商2班26号黄永强 Java课程设计报告
(2)游戏的重置
- 17 -
10电商2班26号黄永强 Java课程设计报告
(3)游戏退出
- 18 -
10电商2班26号黄永强 Java课程设计报告
四、课程设计心得体会
通过这次的课程设计,我不仅拓宽了自己的知识面,还在实践过程中巩固和加深了自己所学的理论知识,使自己的技术素质和实践能力有了进一步的提高,同时我的专业水平也有了很大的进步。
同时,在软件开发方面也累积了不少经验,对的知识重要性的认识更深了。通过设计过程的锻炼,自己分析问题和解决问题的能力都得到了锻炼和提高,完善了自己的知识结构,加深了对所学知识的理解。在学与做的过程中,取长补短,不断学习新的知识,吸取经验,达到进步的目的。在学与做的过程中自身的努力以及相关图书资料的帮助,对JAVA理解也从能够使用提高到了熟练使用,对程序开发的一般过程和对数据库知识的运用也有了进一步的了解。
通过课程设计,我学习到不少的JAVA编程语言的知识,但由于自己的理论知识水平有限,实践知识和设计经验不足,在设计过程中难免存在一些问题,甚至错误。这些我会在以后的工作学习和实践中加以改进和提高。
通过这次课程设计使我获得了很多东西。其一编程的重要步骤是分析。分析问题的本身和现实要求。分析过程中采用画图的方法能使我的思路特别清晰。拿到一个题目不要仅仅局限在一种思想上,要尽量的多尝试其他的做法,然后比较,集各家之所长,拿出最优秀的程序来。其二,也是最重要的就是我们应当打开我们的视野,不要仅仅局限于电脑方面,要放眼整个世界。各种语言仅今年是我们手中的工具,我们应当从我们生活的这个世界中去领悟解决问题的思想和方法。因此我在今后的学习中,要加强对思想的培养和积累,打破学科界限,吸取各家思想,将各门课程融会贯通,从而从中获得益处。
- 19 -
10电商2班26号黄永强 Java课程设计报告
五、参考文献
[1] 谭浩强编著,java程序设计,[M],清华大学出版社,1991年7月 [2] 姜仲秋编著,java程序设计, [M],南京大学出版社,1998年1月 [3] 刘瑞挺主编,计算机二级教程, [M],南开大学出版社,1996年10月 [4] 陈朔鹰编著,java程序设计基础教程, [M],兵器工业出版社,1994年9月 [5] 李虹主编,java程序设计,[M],南京大学出版社,2010年2月
- 20 -
因篇幅问题不能全部显示,请点此查看更多更全内容