汉诺塔课程设计报告Word文件下载.docx

上传人:b****4 文档编号:16989571 上传时间:2022-11-27 格式:DOCX 页数:35 大小:352.01KB
下载 相关 举报
汉诺塔课程设计报告Word文件下载.docx_第1页
第1页 / 共35页
汉诺塔课程设计报告Word文件下载.docx_第2页
第2页 / 共35页
汉诺塔课程设计报告Word文件下载.docx_第3页
第3页 / 共35页
汉诺塔课程设计报告Word文件下载.docx_第4页
第4页 / 共35页
汉诺塔课程设计报告Word文件下载.docx_第5页
第5页 / 共35页
点击查看更多>>
下载资源
资源描述

汉诺塔课程设计报告Word文件下载.docx

《汉诺塔课程设计报告Word文件下载.docx》由会员分享,可在线阅读,更多相关《汉诺塔课程设计报告Word文件下载.docx(35页珍藏版)》请在冰豆网上搜索。

汉诺塔课程设计报告Word文件下载.docx

把B杆上的n-1个盘子借助A杆移到B杆。

概要设计:

1.课程设计内容:

有三个表示塔的对象,分别命名为A、B和C。

A塔上有若干个盘子,盘子的大小不等,并按着大小顺序依次摆放在A塔上,大盘在下,小盘在上。

用户可以用鼠标拖动盘子,把A塔上的盘子全部移动到另外两个塔中的任何一个塔上。

要求每次只能移动一个盘子,在任何时候不允许大盘压在小盘的上面。

用户也可以选择让程序自动演示。

选择自动演示后,程序将以动画形式演示把A塔上的盘子全部移到C塔的过程。

2.课程设计功能:

(1)设计GUI界面的汉诺塔。

汉诺塔中有三个座,名字分别是A、B和C。

初始状态是A座上有四个大小不等的盘子,这些盘子从座底到座顶按着大小顺序依次摆放在A座上。

(2)程序要求用户在移动盘子过程中,不允许把大盘子放在小盘子的上面,用户最终要完成的是把A座上的全部盘子移动到B座或C座上。

(3)用户可以通过单击汉诺塔菜单栏的菜单提供的按钮,让程序自动完成把A座上的盘子全部移动到B座或C座上。

(4)用户在移动盘子的过程中,可以随时单击汉诺塔菜单栏的菜单提供的按钮,重新开始游戏。

3.流程图:

程序的调试与分析:

1.游戏主界面

图1主界面

此时游戏的初始盘子为4个,用户直接点击方块进行拖拽移动,移动到所需要的位置。

2.移动盘子

图2拖拽盘子

依次拖拽盘子,直至盘子移动到B塔或者C塔。

3.移动成功

图3移动成功

将所有的盘子移动到B塔或者C塔,就会自动弹出“亲,恭喜你完成游戏!

”。

4.重新开始

图4-1点击“重新开始”

点击“游戏”->

“重新开始”,就会弹出窗口,如图4-2

图4-2重新开始

点击“是”,会重新绘制盘子,回复的初始位置;

点击“否”,游戏将继续

5.难易程度

图5-1点击“难易程度”

点击“游戏”->

“难易程度”就会弹出窗口5-2

图5-2选择难以级别

在“难易程度”窗口中点击下拉按钮就会出现图5-3

图5-3难以程度

6.四种级别比较

图6-1简单:

四层图6-2中等:

五层

图6-3困难:

五层图6-4中等:

超难

7.游戏攻略

图7-1点击游戏攻略“简单:

四层”

“难易程度”->

“简单:

四层”,游戏就会自动演示游戏攻略

8.游戏介绍

图8游戏介绍

点击“确定”按钮或者是点击“关闭”按钮,“游戏介绍”窗口将关闭

9.工作人员

图8工作人员

点击“确定”按钮或者是点击“关闭”按钮,“工作人员”窗口将关闭

10.课程设计时遇到的困难及解决方法

10.1课程设计时遇到的困难

10.1.1课程设计过程中原想盘子通过图片形式显示,但是实现不了

10.1.2课程设计过程中盘子的位置不好控制

10.1.3课程设计过程中显示字体用标签形式显示,但是这样有的不太协调

10.1.4课程设计过程中原本要加入移动盘子的步数和所用时间,但是不太容易解决

10.2课程设计时遇到困难的解决方法

10.2.1为了解决盘子的显示,将盘子的显示方式改为二维作图方式

10.2.2为了解决控制盘子的位置,将盘子放置在一个四边形的容器中,然后通过四边形容器的左上角坐标和四边形容器的宽和高来空值盘子的位置

10.2.3为了解决显示文字的位置协调问题,将文字通过二维作图方式绘制

10.2.4由于时间和精力有限,用户移动盘子的步数和所用时间从功能中删除

程序清单:

源代码:

packagehannuota;

importjava.awt.*;

importjava.awt.event.*;

importjavax.swing.*;

//游戏界面

publicclassHannuotaextendsJFrameimplementsActionListener,Runnable

{

JFramef;

HannoiTowertower=null;

chartowerName[]={'

A'

'

B'

C'

};

intDiskCount,DiskWidth,DiskHeight;

Threadthread;

//定义声明菜单栏及菜单栏内的菜单,菜单项

JMenuBarcaidanlan=newJMenuBar();

JMenuyouxi=newJMenu("

游戏"

);

JMenuItemchongxinkaishi=newJMenuItem("

重新开始"

JMenuItemnanyichengdu=newJMenuItem("

难易程度"

JMenuItemtuichu=newJMenuItem("

退出"

JMenubangzhu=newJMenu("

帮助"

JMenuItemyouxijieshao=newJMenuItem("

游戏介绍"

JMenuItemgongzuorenyuan=newJMenuItem("

工作人员"

JMenuyouxigonglue=newJMenu("

游戏攻略"

JMenuItemjiandan=newJMenuItem("

简单:

四层"

JMenuItemzhongdeng=newJMenuItem("

中等:

五层"

JMenuItemkunnan=newJMenuItem("

困难:

六层"

JMenuItemchaonan=newJMenuItem("

超难:

七层"

publicHannuota()

{

thread=newThread(this);

DiskCount=4;

DiskWidth=150;

DiskHeight=20;

tower=newHannoiTower(DiskCount,DiskWidth,DiskHeight,towerName);

//声明字体设置的初始值

Fontfont=newFont("

宋体"

Font.PLAIN,14);

Fontfont1=newFont("

Font.PLAIN,16);

//设置布局格式和各个组件的位置

add(tower,BorderLayout.CENTER);

//添加菜单栏中的菜单和菜单项

setJMenuBar(caidanlan);

caidanlan.add(youxi);

caidanlan.add(bangzhu);

youxi.add(chongxinkaishi);

youxi.addSeparator();

youxi.add(nanyichengdu);

youxi.add(tuichu);

bangzhu.add(youxigonglue);

bangzhu.addSeparator();

bangzhu.add(youxijieshao);

bangzhu.add(gongzuorenyuan);

youxigonglue.add(jiandan);

youxigonglue.add(zhongdeng);

youxigonglue.add(kunnan);

youxigonglue.add(chaonan);

//给菜单项注册事件监听者

chongxinkaishi.addActionListener(this);

nanyichengdu.addActionListener(this);

tuichu.addActionListener(this);

youxijieshao.addActionListener(this);

gongzuorenyuan.addActionListener(this);

jiandan.addActionListener(this);

zhongdeng.addActionListener(this);

kunnan.addActionListener(this);

chaonan.addActionListener(this);

//设置菜单及菜单项的字体、字形、字号

youxi.setFont(font);

bangzhu.setFont(font);

chongxinkaishi.setFont(font);

nanyichengdu.setFont(font);

tuichu.setFont(font);

youxijieshao.setFont(font);

gongzuorenyuan.setFont(font);

youxigonglue.setFont(font);

jiandan.setFont(font);

zhongdeng.setFont(font);

kunnan.setFont(font);

chaonan.setFont(font);

}

publicvoidrun()

this.remove(tower);

tower=newHannoiTower(DiskCount,DiskWidth,DiskHeight,towerName);

validate();

tower.zidongyanshi(DiskCount,towerName[0],towerName[1],towerName[2]);

//点击事件响应

publicvoidactionPerformed(ActionEvente)

Stringcmd=e.getActionCommand();

Stringtitle="

"

;

Stringmessage="

inttype;

//定义弹出对话框的类型对象

if(cmd.equals("

))

{

intresponse=JOptionPane.showConfirmDialog(this,

"

立即开始一个新游戏吗?

重新开始提示消息"

JOptionPane.YES_NO_OPTION,

JOptionPane.INFORMATION_MESSAGE);

if(response==JOptionPane.NO_OPTION)

return;

else

{

if(!

(thread.isAlive()))

{

this.remove(tower);

tower=newHannoiTower(DiskCount,DiskWidth,DiskHeight,towerName);

add(tower,BorderLayout.CENTER);

validate();

}

}

}

intmessageType=JOptionPane.QUESTION_MESSAGE;

Stringresult="

String[]values={"

"

title="

message="

请选择游戏的难以级别:

result=(String)JOptionPane.showInputDialog(this,message,title,messageType,null,values,values[0]);

if(result=="

{

DiskCount=4;

this.remove(tower);

tower=newHannoiTower(DiskCount,DiskWidth,DiskHeight,towerName);

add(tower,BorderLayout.CENTER);

validate();

DiskCount=5;

DiskCount=6;

}

DiskCount=7;

您要退出游戏吗?

退出提示消息"

else

System.exit(0);

type=JOptionPane.PLAIN_MESSAGE;

游戏介绍:

汉诺塔又称河内塔,汉诺塔是源于印度一个古老的益智传说:

\n"

+

上帝创造世界的时候做了三根金刚石柱,在一根柱子上从下往\n"

+

上按大小顺序摞着64片黄金圆盘。

上帝命令婆罗门把圆盘从下\n"

面开始按大小顺序重新摆放在另一根柱子上。

并且规定,在小\n"

圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。

\n操作说明:

直接通过鼠标左击按下鼠标,然后进行拖拽,拖到相应的位置\n"

JOptionPane.showMessageDialog(this,message,title,type);

设计者组长:

李万东\n"

组员:

袁雪娇\n"

张瑜\n"

if(e.getSource()==jiandan)

DiskCount=4;

this.remove(tower);

tower=newHannoiTower(DiskCount,DiskWidth,DiskHeight,towerName);

add(tower,BorderLayout.CENTER);

validate();

if(!

thread=newThread(this);

try

thread.start();

catch(Exceptioneee)

if(e.getSource()==zhongdeng)

DiskCount=5;

if(e.getSource()==kunnan)

DiskCount=6;

if(e.getSource()==chaonan)

DiskCount=7;

//主方法

publicstaticvoidmain(String[]args)

Hannuotaf=newHannuota();

f.setTitle("

汉诺塔游戏"

f.setBounds(300,200,800,450);

f.setVisible(true);

}

//手动搬运盘子

classDiskextendsButton

intnumber;

booleanTopDisk=false;

publicDisk(intnumber,HannoiTowercon)

this.number=number;

setBackground(Color.black);

addMouseMotionListener(con);

addMouseListener(con);

publicbooleangetTopDisk()//getTopDisk:

获得上方的盘子

returnTopDisk;

publicvoidsetTopDisk(booleanb)//setTopDisk:

放置上方的盘子

TopDisk=b;

publicintgetNumber()//getNumber:

获得盘子的数量

returnnumber;

}

classTowerPoint

intx,y;

booleanHDi

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 中考

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1