Java拼图课程设计.docx

上传人:b****5 文档编号:6898400 上传时间:2023-01-12 格式:DOCX 页数:11 大小:558KB
下载 相关 举报
Java拼图课程设计.docx_第1页
第1页 / 共11页
Java拼图课程设计.docx_第2页
第2页 / 共11页
Java拼图课程设计.docx_第3页
第3页 / 共11页
Java拼图课程设计.docx_第4页
第4页 / 共11页
Java拼图课程设计.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

Java拼图课程设计.docx

《Java拼图课程设计.docx》由会员分享,可在线阅读,更多相关《Java拼图课程设计.docx(11页珍藏版)》请在冰豆网上搜索。

Java拼图课程设计.docx

Java拼图课程设计

 

面向对象程序设计及课程设计

 

项目名称:

拼图 

系部:

计算机系

班级:

云计算二班

姓名:

李东辉

学号:

14001433

指导教师:

李双月

开课学期:

2015-2016学年第一学期

课程成绩:

二○一五年十二月

 

一、项目功能:

3X3拼图游戏:

随机去除一张图片,点击空格附近的图片可将其移动至空格处。

如果8张图按顺序拼接则视为拼图成功,游戏结束。

点击“开始”键打乱图片,开始游戏;游戏内可随时点击“查看”键查看完整原图;可点击“选择”键换图;按顺序拼接8张图片后弹窗提示成功。

二、使用的软件:

开发环境:

Javase6.5

运行环境:

MyEclipse6.5

 

三、程序代码:

ImagePieceTogether.java

importjava.awt.*;

importjavax.swing.*;

importjava.awt.event.*;

publicclassImagePieceTogetherextendsJFrameimplementsActionListener{//操作实现拼图的游戏的类

PanelOfImageimagePanel;//声明图片面板

JPanelpanelOfSouth,panelOfLook;//声明南侧面板和查看面板

ButtonstartButton;//声明开始按钮

ButtonlookButton;//声明查看按钮

ButtonchooseButton;//选择按钮

Containercontainer;//容器,得到内容面板

publicstaticvoidmain(String[]args){//java程序主入口处

newImagePieceTogether();//实例化对象

}

publicImagePieceTogether(){//构造方法进行初始化

container=this.getContentPane();//获得内容面板

startButton=newButton("开始");//创建开始按钮

startButton.addActionListener(this);//添加监听事件

lookButton=newButton("查看");

lookButton.addActionListener(this);

chooseButton=newButton("选择");

chooseButton.addActionListener(this);

panelOfLook=newJPanel();//创建查看面板

panelOfLook.setLayout(null);//设置布局

Iconicon=newImageIcon("picture/pic_"+PanelOfImage.currentPID+".jpg");//创建图标

JLabellabel=newJLabel(icon);//创建图标标签

label.setBounds(0,0,1215,717);//设置标签的位置

panelOfLook.add(label);//添加标签

panelOfSouth=newJPanel();//创建南侧面板

panelOfSouth.setBackground(Color.black);//设置背景颜色

panelOfSouth.add(startButton);//添加开始按钮

panelOfSouth.add(lookButton);//添加查看按钮

panelOfSouth.add(chooseButton);//添加选择按钮

imagePanel=newPanelOfImage();//创建图片面板

container.add(imagePanel,BorderLayout.CENTER);

container.add(panelOfSouth,BorderLayout.SOUTH);

this.setTitle("Puzzle");//设置标题

this.setLocation(100,30);//设置位置

this.setSize(1220,780);//设置大小

this.setResizable(false);//设置是否可以通过某个用户操作调整

this.setVisible(true);//设置可视

this.setDefaultCloseOperation(3);//设置默认关闭操作

}

publicvoidactionPerformed(ActionEventevent){//按钮触发的事件

Buttonbutton=(Button)event.getSource();//获得事件按钮源

if(button==startButton){//如果是开始按钮

imagePanel.breakRank();//调用图片方格打乱方法

}elseif(button==lookButton){//如果是查看事件

if(button.getLabel()=="查看"){//如果按钮标签为"查看"

container.remove(imagePanel);//容器移除图片面板

container.add(panelOfLook);//容器添加查看标签

panelOfLook.updateUI();//不用调整大小就可以出现新增删的组件

container.repaint();//重绘

button.setLabel("返回");//设置按钮标签

}else{

container.remove(panelOfLook);//容器移除查看面板

container.add(imagePanel);//容器添加图片面板

container.repaint();//重绘

button.setLabel("查看");

}

}elseif(button==chooseButton){//如果是选择按钮

Choicechoice=newChoice();//创建选择器

choice.add("--Darius--");//添加列表项

choice.add("--Yasuo--");

choice.add("--Riven--");

choice.add("--Pantheon--");

choice.add("--Lux--");

inti=JOptionPane.showConfirmDialog(this,choice,"选择图片",JOptionPane.OK_CANCEL_OPTION);//弹出对话框

if(i==JOptionPane.YES_OPTION){//选择对话框的确定按钮

PanelOfImage.currentPID=choice.getSelectedIndex()+1;//获得列表项的编号

imagePanel.reLoadPictrue();//图片重载

Iconicon=newImageIcon("picture/pic_"+PanelOfImage.currentPID+".jpg");//获得图片图标

JLabellabel=newJLabel(icon);//根据图标设置标签

label.setBounds(0,0,1215,717);//设置标签的方位

panelOfLook.removeAll();

panelOfLook.add(label);

panelOfLook.repaint();

}

}

}

}

 

PanelOfImage.java

importjava.awt.*;

importjavax.swing.*;

importjava.awt.event.*;

classPaneButtonextendsJButton{//继承按钮类实现加图片的方格

PaneButton(Iconicon){//构造方法进行初始化,设置图标

super(icon);

this.setSize(405,239);//设置每个方格的大小

}

publicvoidmove(Stringdirection,intsleep){//方格的移动

if(direction=="UP"){//方格向上移动

this.setLocation(this.getBounds().x,this.getBounds().y-239);

}elseif(direction=="DOWN"){//方格向下移动

this.setLocation(this.getBounds().x,this.getBounds().y+239);

}elseif(direction=="LEFT"){//方格向左移动

this.setLocation(this.getBounds().x-405,this.getBounds().y);

}else{//方格向右移动

this.setLocation(this.getBounds().x+405,this.getBounds().y);

}

}

}

publicclassPanelOfImageextendsJPanelimplementsMouseListener{//图片面板加载方格对象

booleanhasAddActionListener=false;//设置方格动作监听器的标识

PaneButtonpane[];//声明方格

RectanglenullPanel;//声明空方格,没有添图片

publicstaticintcurrentPID=1;//当前选择的图片编号

publicPanelOfImage(){//构造方法进行初始化

this.setLayout(null);//设置面板的布局为空

this.setSize(810,478);//设置面板的大小

nullPanel=newRectangle(810,478,405,239);//设置空方格的位置

pane=newPaneButton[9];//创建九个方格

Iconicon;//声明图标

for(inti=0;i<3;i++){//循环为每个方格加载图片

for(intj=0;j<3;j++){//循环列

icon=newImageIcon("picture/pic_"+currentPID+"_"

+(i*3+j+1)+".jpg");//创建图标

pane[i*3+j]=newPaneButton(icon);//创建方格在方格中加载图片

pane[i*3+j].setLocation(j*405,i*239);//设置方格的位置

this.add(pane[i*3+j]);//面板添加方格

}

}

this.remove(pane[8]);//移除多余的方格

}

publicbooleanisFinish(){//判断是否拼凑成功

for(inti=0;i<8;i++){

intx=pane[i].getBounds().x;

inty=pane[i].getBounds().y;

if(y/239*3+x/405!

=i)

returnfalse;

}

returntrue;

}

publicvoidreLoadPictrue(){//重新加载图片在重新选择图片时

Iconicon;

for(inti=0;i<3;i++){//循环为每个方格加载图片

for(intj=0;j<3;j++){

icon=newImageIcon("picture/pic_"+currentPID+"_"

+(i*3+j+1)+".jpg");

pane[i*3+j].setIcon(icon);

}

}

}

publicvoidbreakRank(){//方格打乱重新排序

while(pane[0].getBounds().x<=405&&pane[0].getBounds().y<=239){//当第一个方格距左上角近时

intx=nullPanel.getBounds().x;

inty=nullPanel.getBounds().y;

intdirection=(int)(Math.random()*4);//随机产生一个数字对应空方格的上下左右移动

if(direction==0){//空方格左移动,与左侧方格互换位置,左侧方格右移动

x-=405;//空主格左移

if(test(x,y)){

for(intj=0;j<8;j++){//循环寻打左侧的按钮

if((pane[j].getBounds().x==x)

&&(pane[j].getBounds().y==y)){//依次寻找左侧的按钮

pane[j].move("RIGHT",405);//方格向右移动一格

nullPanel.setLocation(x,y);//重新设置空方格的位置

break;//跳出循环

}

}

}

}elseif(direction==1){//空方格右移动

x+=405;

if(test(x,y)){

for(intj=0;j<8;j++){

if((pane[j].getBounds().x==x)

&&(pane[j].getBounds().y==y)){

pane[j].move("LEFT",405);//方格向左移动一格

nullPanel.setLocation(x,y);

break;

}

}

}

}elseif(direction==2){//空方格上移动

y-=239;

if(test(x,y)){

for(intj=0;j<8;j++){

if((pane[j].getBounds().x==x)

&&(pane[j].getBounds().y==y)){

pane[j].move("DOWN",239);//方格向下移动一格

nullPanel.setLocation(x,y);

break;

}

}

}

}else{//空方格下移动

y+=239;

if(test(x,y)){

for(intj=0;j<8;j++){

if((pane[j].getBounds().x==x)

&&(pane[j].getBounds().y==y)){

pane[j].move("UP",239);//方格向上移动一格

nullPanel.setLocation(x,y);

break;

}

}

}

}

}

if(!

hasAddActionListener)//判断是否添加动作事件

for(inti=0;i<8;i++){//循环为每个方格添加动作事件

pane[i].addMouseListener(this);

}

hasAddActionListener=true;

}

privatebooleantest(intx,inty){//检测方格是否在指定的范围内移动

if((x>=0&&x<=405)||(y>=0&&y<=239))

returntrue;

else

returnfalse;

}

publicvoidmouseClicked(MouseEventarg0){//鼠标点击时调用

}

publicvoidmouseEntered(MouseEventarg0){//鼠标进入组件区域时调用

}

publicvoidmouseExited(MouseEventarg0){//控制鼠标不能移动出面板的范围

}

publicvoidmouseReleased(MouseEventarg0){//鼠标按键在组件上释放时调用

}

publicvoidmousePressed(MouseEventevent){//鼠标按下时调用

PaneButtonbutton=(PaneButton)event.getSource();//获得鼠标按的方格按钮

intx1=button.getBounds().x;//获得该方格按钮的横坐标

inty1=button.getBounds().y;//获得该方格按钮的纵坐标

intnullDir_X=nullPanel.getBounds().x;//得到空方格的横坐标

intnullDir_Y=nullPanel.getBounds().y;//得到空方格的纵坐标

if(x1==nullDir_X&&y1-nullDir_Y==239)//进行比较果满足条件则交换

button.move("UP",239);//方格向上移动

elseif(x1==nullDir_X&&y1-nullDir_Y==-239)

button.move("DOWN",239);//方格向下移动

elseif(x1-nullDir_X==405&y1==nullDir_Y)

button.move("LEFT",405);//方格向左移动

elseif(x1-nullDir_X==-405&&y1==nullDir_Y)

button.move("RIGHT",405);//方格向右移动

else

return;

nullPanel.setLocation(x1,y1);//重新设置空方格的位置

this.repaint();//重新加载

if(this.isFinish()){//进行是否完成的判断

JOptionPane.showMessageDialog(this,"Congratulations!

");

for(inti=0;i<8;i++){//循环撤消鼠标事件

pane[i].removeMouseListener(this);

}

hasAddActionListener=false;

}

}

}

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

当前位置:首页 > 成人教育 > 电大

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

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