课程设计
设计课程: java程序设计报告
题 目 java三子棋程序
学生姓名
学 号
学 院
专 业
指导教师
二O一三 年 9 月 23 日
目录
1、简单程序概述…………………………………1
2、程序设计目的…………………………………1
3、程序设计要求…………………………………1
4、程序总框架……………………………………2
5、主要设计………………………………………2
6、运行效果………………………………………12
7、问题探讨………………………………………14
8、参考文献………………………………………14
一、 简单程序概述
l 三子棋游戏又称井字形游戏。
l 棋盘大小为3×3,在方格内下棋。
l 只要有一方有3颗棋子连成一条线(行、列及对角线),则该方获胜,且游戏结束。
l 如果所有位置都已经下满棋子,且没有哪一方能够赢就是和局。
二、 程序设计目的
通过学习java,了解java中类的概念。快速熟悉类与对象,继承,接口,组件及事件处理等概念,在编程的同时,掌握输入输出流,数据库,多线程机制这些比较难理解的内容,编写出界面友好的java Applet程序。发现自己的不足,从软件开发实例中真正的对java环境熟悉,并能较好的运用它。
三、 程序设计要求
1.初始化界面时棋盘的规格;
2.响应鼠标点击并在相应位置画出棋子;
3.有一定的智能(可以判断胜负);
4.利用java语言放置棋盘显示棋子
四、 程序总框架
五、 主要设计
1. 引入含有各种类的包,方便类调用各种方法。
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;
2. 主方法
public static void main(String[]args) {
Game6 game2 = new Game6();
}
3. 图标,菜单,按钮,文本框等等重要组件和容器的声明
Container cp;
JLabel lbl;
JButton [] btn = new JButton[9]; //设置九宫格来纺织按钮,通过点击按钮来实现下棋
JButton btn_start; //声明按钮类
JPanel jp1,jp2;
int count = 0;
ImageIcon icon1,icon2; //声明图标
JMenuBar mBar; //菜单条
JMenu JMenu1,JMenu2,JMenu3; //声明菜单
JMenuItem mItem1,mItem2,mItem3,mItem4; //声明菜单项
4. 主类的构造方法
l 窗口的设计
setSize(300,400);
setLocation(312,234);
setVisible(true);
l 九宫格和整个窗口内容的设计
cp = getContentPane();
cp.setLayout(new BorderLayout());
mItem1 = new JMenuItem("开始");//以下是创建对象
mItem2 = new JMenuItem("退出");
JMenu3 = new JMenu("帮助");
mItem3 = new JMenuItem("游戏介绍");
mItem4 = new JMenuItem("作者介绍");
mItem3.addActionListener(this);//创建监视器
mItem4.addActionListener(this);
JMenu1 = new JMenu("游戏");
JMenu2 = new JMenu("帮助");
mBar = new JMenuBar();
JMenu1.add(mItem1);//add是把组件添加到容器中,就是把开始菜单项添加到游戏菜单中
JMenu1.addSeparator(); //分隔线
JMenu1.add(mItem2);//在游戏菜单中添加退出菜单项
JMenu2.add(JMenu3);
JMenu3.add(mItem3);
JMenu3.add(mItem4);
mBar.add(JMenu1);//把游戏添加到菜单条
mBar.add(JMenu2);
setJMenuBar(mBar);//将菜单条放入窗口中
mItem1.addActionListener(this);//创建监视器
mItem2.addActionListener(this);
lbl = new JLabel("红方先手");
cp.add(lbl,BorderLayout.NORTH);//通过布局管理器把标签放在最上面
jp1 = new JPanel();
jp1.setLayout(new GridLayout(3,3));//创建格子九宫格布局
for (int i = 0; i<9; i++) {
btn[i] = new JButton();
jp1.add(btn[i]);
btn[i].addActionListener(this);//在每一格中放入放入一个按钮,并且设置监视器,按钮一旦触动就会产生事件
}
cp.add(jp1,BorderLayout.CENTER);//在容器中间放入九宫格面板
btn_start = new JButton("重新开始");
jp2 = new JPanel();
cp.add(jp2,BorderLayout.SOUTH);
jp2.add(btn_start);//在底部显示重新开始按钮
this.setResizable(false);
icon1 = new ImageIcon("001.jpg");
icon2 = new ImageIcon("002.jpg");
btn_start.addActionListener(this);//创建按钮的监视器,一旦点击确定按钮产生事
l 点击确定按钮和帮助按钮出现的效果
if (e.getSource() == mItem1) {
this.dispose();
new Game6();
}//开始游戏
if (e.getSource() == mItem2) {
this.dispose();
System.exit(0);//点击退出按钮,释放空间,什么也不做
}
else if (e.getSource() == mItem3) //如果点击帮助按钮
JOptionPane.showMessageDialog(null,"游戏规则:"+"\n"
+"先用三种同色的子连成一线就算胜,如同五子棋下法");
else if (e.getSource() == mItem4)
JOptionPane.showMessageDialog(null,"作者:沈倩文");
else if (e.getSource() == btn_start) {
this.dispose(); //销毁当前对象
new Game6();
}
l 点击九宫格会出现的情况
else {
count++;
if (count%2 == 1) {
lbl.setText("绿方下");
for (int i = 0; i<9; i++) {
if (e.getSource() == btn[i]) {
btn[i].setIcon(icon1);
btn[i].removeActionListener(this);//撤销监视器组件
// btn[i].setEnabled(false); //这样会使按钮图片变灰;
this.win();
}
}
}
else if (count%2 == 0) {
lbl.setText("红方下");
for (int i = 0; i<9; i++) {
if (e.getSource() == btn[i]) {
btn[i].setIcon(icon2);
btn[i].removeActionListener(this);
// btn[i].setEnabled(false); //这样会使按钮图片变灰;
this.win();
}
}
}
}
l 游戏方法设计
public void win() {
for (int j = 0; j<9; j=j+3) {
if (btn[j].getIcon()==btn[j+1].getIcon() && btn[j+1].getIcon()==btn[j+2].getIcon())
{
if (btn[j].getIcon() == icon1) this.bbb();
else if (btn[j].getIcon() == icon2) this.ccc();
}
}
for (int j = 0; j<3; j++) {
if (btn[j].getIcon()==btn[j+3].getIcon() && btn[j+3].getIcon()==btn[j+6].getIcon())
{
if (btn[j].getIcon() == icon1) this.bbb();
else if (btn[j].getIcon() == icon2) this.ccc();
}
}
if (btn[0].getIcon()==btn[4].getIcon() && btn[4].getIcon()==btn[8].getIcon())
{
if (btn[0].getIcon() == icon1) this.bbb();
else if (btn[0].getIcon() == icon2) this.ccc();
}
if (btn[2].getIcon()==btn[4].getIcon() && btn[4].getIcon()==btn[6].getIcon())
{
if (btn[2].getIcon() == icon1) this.bbb();
else if (btn[2].getIcon() == icon2) this.ccc();
}
}
public void bbb() {
lbl.setText("游戏结束了!!!");
JOptionPane.showMessageDialog(null, "帅胜利!将要加油哦!");
for (int i = 0; i<9; i++) btn[i].removeActionListener(this);
}
public void ccc() {
lbl.setText("game is over!");
JOptionPane.showMessageDialog(null,"将胜利,帅要加油哦!”);
for (int i = 0; i<9; i++) btn[i].removeActionListener(this);
}
六、运行效果
七、问题探讨
通过本次程序的编写,我发现了很多问题,当然这个程序也并非我一下子编写出来的,我还请教了中兴公司的一个学长,参考了百度文库的一些内容,然后自己加以理解,然后编写而成。进一步学习和巩固了java的知识,但是其中一些地方仍然不是很好,需要进一步改进。
八、参考文献
Java课程书
百度文库
豆丁网
第二篇:java项目的工作计划
20##年7月15日工作总结
软件开发
·开发人员:
琳、玥
·工作环境:
Windows版本:
Windows7家庭普通版
版权所有©2009 Microsoft Corporation。保留所有权利。
Service Pack 1
系统:
制造商:Dell
型号:N5110
处理器:Intel(R) Core(TM) i5-2430M CPU @ 2.30GHz 2.40GHz
安装内存(RAM):4.00GB
系统类型:64位操作系统
笔和触摸:没有可用于此显示器的笔或触控输入
·开发模块
主框架模块
菜单模块
选择分类模块
结果显示模块
·开发模块用到的类
JPanel\JButton\JScrollPane\JTabbedPane\JMenuBar\JMenu\JMenuItem
·模块开发历时
10:30-12:30 AM
13:30-17:30PM
·模块开发步骤
? 如何编写数据模块展开讨论
? 开始编写程序
? 进行内部调试
? 提交结果
? 进行工作总结
·所使用数据类型
标量型
复合型
·数据库版本
MySQL5.0
·完成进度
部分完成
·预估全部完成所需时间
5小时
·待解决问题
未实现模块间的组合及总体调试
·工作总结
完成主框架的编写,实现部分模块的基本功能,仍未完成模块间的整合和调试故程序未实现最终理想的运行结果,要完善各项功能和美化界面仍需时间。
测试环境及质量管理
·测试及管理人员:
薇、君
·工作环境:
Windows版本:
Windows7家庭普通版
版权所有©2009 Microsoft Corporation。保留所有权利。
Service Pack 1
系统:
制造商:Dell
型号:N5110
处理器:Intel(R) Core(TM) i5-2430M CPU @ 2.30GHz 2.40GHz
安装内存(RAM):4.00GB
系统类型:64位操作系统
笔和触摸:没有可用于此显示器的笔或触控输入
·测试模块:
主框架模块
菜单模块
选择分类模块
·涉及方法及类名:
JPanel\JButton\JScrollPane\ JMenu\JMenuItem
·测试步骤:
? 根据所得到的程序进行初步功能测试
? 分析运行结果
? 进行故障分析
? 进行工作总结
·测试结果:
分类模块不能正确显示数据
·bug类型:
引用方法错误
·工作总结:
经测试部分模块未能实现理想运行效果,要进行完整测试仍需部分时间。
环境配置
·配置人员:
阳、平
·工作环境:
系统:
Microsoft windows XP
Professinal
版本2002
Service Pack3
注册到
User
China
76481-640-8834005-23520
AMD Athlon? 64 X2 Dual
Core Processor 4400+
2.30 GHz,1.96GB的内存
物理地址扩展
·配置次数
5
·配置缘由:
为实现开发及测试人员工作环境的统一
·故障分析:
未发现故障
·待解决配置问题:
无
·工作总结:
实现开发及测试人员工作环境的统一且未出现故障。