Java拼图程序报告.docx
《Java拼图程序报告.docx》由会员分享,可在线阅读,更多相关《Java拼图程序报告.docx(19页珍藏版)》请在冰点文库上搜索。
Java拼图程序报告
Java
课
程
设
计
Java拼图程序
目录
1.程序介绍
2.程序任务
3.程序设计思想
4.程序要求
5.程序使用的基本方法
6.遇到的问题
7.程序界面
8.对原有程序的改变
9.程序流程图
10.感想
11.程序代码
一.程序介绍:
将一个图片分为15个部分并随机排列,游戏任务是将这15个部分还原成为原图片,游戏结束。
二.程序任务:
用鼠标拖动小图片进行拼接,将15个小图片还原成初始的左边,将这15个小图片拼成一幅完整的原始图片。
三.程序设计思想:
将一个大图片通过随机方法,分为15个有随机坐标的小图片,通过在游戏中不断移动图片,使其回到初始的坐标,当15个小图片都被还原为初始坐标时,游戏结束。
四.程序要求:
命令1:
初始化主界面。
管理屏幕显示。
使用Graphics类。
命令2:
选择一张执行的图像。
并产生随机数,确定图片摆放的随意性。
getImage()需要指明图像路径和名称。
并产生随机数,确定图片摆放的随意性。
initgame()是自写函数,通过调用Math.random()产生随机数。
命令3:
鼠标事件的监听。
addMouseListener(this);
addMouseMotionListener(this);
确立单击鼠标产生的事件,鼠标移动产生的事件,按下鼠标产生的事件,拖动鼠标产生的事件等等。
命令4:
改变坐标。
通过拖动鼠标改变图片的位置。
命令5:
判断游戏是否结束。
若通过改变是图片坐标和初始设置时一样则宣布游戏结束。
五.程序使用的基本方法:
Graphics类
管理屏幕显示
getImage()
指明图像路径名称
Math.random()
产生随机数
addMouseListener(this)
设置鼠标监听器
Image类
导入图片
MouseEvent类
处理鼠标事件
Point类
转换坐标
六.遇到的问题:
1.缺省包
importjava.awt.*;
importjava.applet.*;
importjava.awt.event.*;
这个是指引入的是缺省包,但是我一开始把这个class建在package中,所以编译就出错了。
解决方法:
应该直接把这个class直接建在Javaproject中才能编译通过。
2.载入图片
pic[0]=getImage(getCodeBase(),"PICTURE0.JPG");
getImage()方法是在Java小程序插入图片。
getImage(getCodeBase()),getImage(getDocumentBase())方法基本相同,这个方法指出引用图片路径和名称。
一开始一直不直到引用的图片应该放在哪里,导致程序运行时该出现图片的地方时一片空白。
解决办法:
getImage方法引用的图片应与这个程序.class文件放在一个文件夹中,图片才是真正被引用。
3.计时器
这个至今没有做出来,因为在写计时器的时候,不知道该从程序的哪里开始,哪里结束。
单独的计时器程序可以运行,但是不会与已有的程序相结合。
七.程序界面:
八.对原有程序的改变:
我目前只是改动了原有程序的表面,比如字体,颜色,界面大小,界面设置等等。
并没有真正改变程序的核心。
九.程序流程图:
10.感想
就我目前的水平而言,要想完全独立的写一个程序很难很难。
编程不是一个简单的东西,要多看多了解,勇于尝试,不怕犯错。
错过之后再改反而记得更加清楚。
有问题多问老师,多查资料,不要局限于自己,学会利用各种资源。
解决一个问题的办法可能有许多种,不能局限于一个方法。
要善于发现更好的方法。
十一.程序代码:
importjava.awt.*;
importjava.applet.*;
importjava.awt.event.*;
publicclasspintuextendsApplet
implementsMouseListener,MouseMotionListener
{
privateImagepicture;
privateGraphicsbuffer;
privateImagepic[];
privateImageoff_pic[];
privateGraphicsoff_buf[];
privateImageoff_screen;
privateGraphicsoff_buffer;
privateImageoff_drag;
privateGraphicsoff_drag_buf;
privateintmap[][];
privateintran[];
privateintwidth=0;
privateintheight=0;
privateintlastx;
privateintlasty;
privateintlast_downx;
privateintlast_downy;
privateintstepx;
privateintstepy;
privatebooleanchoose;
privatebooleanclick[][];
privatebooleanm_down;
privatebooleanm_drag;
privatebooleannot_redraw;
privatebooleanable;
Fontfont1,font2;
//程序的初始化
publicvoidinit()
{
resize(800,640);
pic=newImage[3];
off_pic=newImage[16];
off_buf=newGraphics[16];
map=newint[4][4];
ran=newint[15];
for(inta=0;a<16;a++)
map[a/4][a%4]=a;
for(inta=0;a<15;a++)
ran[a]=a;
click=newboolean[4][4];
MediaTrackertracker=newMediaTracker(this);
//要载入的图片
pic[0]=getImage(getCodeBase(),"PICTURE0.JPG");
pic[1]=getImage(getCodeBase(),"PICTURE1.JPG");
pic[2]=getImage(getCodeBase(),"PICTURE2.JPG");
tracker.addImage(pic[0],0);
tracker.addImage(pic[1],0);
tracker.addImage(pic[2],0);
try{
tracker.waitForID(0);
}catch(InterruptedExceptione){}
//设置字体
font1=newFont("GungsuhChe",Font.BOLD,60);
font2=newFont("Georgia",Font.BOLD,48);
width=800;
height=640;
//初始化主界面
initForm();
//添加鼠标监听事件
addMouseListener(this);
addMouseMotionListener(this);
}
//面板初始化
voidinitForm()
{
this.setBackground(Color.pink);
if(off_drag==null){
off_drag=createImage(width/4,height/4);
off_drag_buf=off_drag.getGraphics();
}
}
//设置每一个图片面板初始化
publicvoidpaint(Graphicsg){
if(off_screen==null)
{
off_screen=createImage(width,height);
off_buffer=off_screen.getGraphics();
}
if(able){
off_buffer.setColor(Color.white);
for(inta=0;a<4;a++)
for(intb=0;b<4;b++)
{
if(map[a][b]!
=15)
off_buffer.drawImage(off_pic[map[a][b]],b*width/4,a*height/4,this);
if(map[a][b]==15)
off_buffer.fillRect(b*width/4,a*height/4,width/4,height/4);
for(intc=0;c<2;c++)
off_buffer.drawRect(b*width/4+c,a*height/4+c,width/4-c,height/4-c);
if(click[a][b])
{
off_buffer.setColor(Color.black);
for(intd=0;d<2;d++)
off_buffer.drawOval(b*width/4-d,a*height/4-d,width/4+d,height/4+d);
off_buffer.setColor(Color.red);
}
}
}
else{
off_buffer.setColor(Color.pink);
off_buffer.fillRect(0,0,800,640);
off_buffer.setFont(font1);
off_buffer.setColor(Color.black);
off_buffer.drawImage(pic[2],30,50,250,180,this);
off_buffer.drawImage(pic[0],370,160,250,180,this);
off_buffer.drawImage(pic[1],60,270,250,180,this);
off_buffer.drawString("ChooseOne!
",320,100);
}
g.drawImage(off_screen,0,0,this);
}
publicvoidrepaint(){
paint(this.getGraphics());
}
//单击鼠标时产生的事件
publicvoidmouseClicked(MouseEventevt){}
//鼠标进入某个区域时产生的事件
publicvoidmouseEntered(MouseEventevt){}
//鼠标退出某个区域时产生的事件
publicvoidmouseExited(MouseEventevt){}
//移动鼠标时产生的事件
publicvoidmouseMoved(MouseEventevt){
if(!
able){
Pointpoint;
point=evt.getPoint();
if(point.x>30&&point.x<280&&point.y>50&&point.y<230)
{
off_buffer.setColor(Color.pink);
off_buffer.fillRect(0,0,800,640);
off_buffer.setFont(font1);
off_buffer.drawImage(pic[2],25,45,250,180,this);
off_buffer.drawImage(pic[0],370,160,250,180,this);
off_buffer.drawImage(pic[1],60,270,250,180,this);off_buffer.setColor(Color.black);
off_buffer.fillRect(30,225,250,5);
off_buffer.fillRect(275,50,5,176);
off_buffer.setColor(Color.black);
off_buffer.drawString("picture2!
",320,100);
this.getGraphics().drawImage(off_screen,0,0,this);
}
elseif(point.x>370&&point.x<620&&point.y>160&&point.y<340)
{
off_buffer.setColor(Color.pink);
off_buffer.fillRect(0,0,800,640);
off_buffer.setFont(font1);
off_buffer.drawImage(pic[2],30,50,250,180,this);
off_buffer.drawImage(pic[0],365,155,250,180,this);
off_buffer.drawImage(pic[1],60,270,250,180,this);off_buffer.setColor(Color.black);
off_buffer.fillRect(370,335,250,5);
off_buffer.fillRect(615,160,5,175);
off_buffer.setColor(Color.black);
off_buffer.drawString("picture0!
",320,100);
this.getGraphics().drawImage(off_screen,0,0,this);}
elseif(point.x>60&&point.x<310&&point.y>270&&point.y<450)
{
off_buffer.setColor(Color.pink);
off_buffer.fillRect(0,0,800,640);
off_buffer.setFont(font1);
off_buffer.drawImage(pic[2],30,50,250,180,this);
off_buffer.drawImage(pic[0],370,160,250,180,this);
off_buffer.drawImage(pic[1],55,265,250,180,this);off_buffer.setColor(Color.black);
off_buffer.fillRect(60,445,250,5);
off_buffer.fillRect(305,270,5,175);
off_buffer.setColor(Color.black);
off_buffer.drawString("picture1!
",320,100);
this.getGraphics().drawImage(off_screen,0,0,this);
}
else{
repaint();
}
}
}
//拖动鼠标时产生的事件
publicvoidmouseDragged(MouseEventevt){
if(!
able)
return;
if(m_down){
Pointpoint;
Pointtemp;
point=evt.getPoint();
m_drag=true;
repaint();
Graphicsdavid=this.getGraphics();
if(!
not_redraw)
off_drag_buf.drawImage(off_pic[map[last_downy][last_downx]],0,0,this);
david.drawImage(off_drag,point.x+stepx,point.y+stepy,this);
not_redraw=true;
}
}
//按下鼠标时产生的事件
publicvoidmousePressed(MouseEventevt){
if(!
able)
return;
Pointpoint;
Pointtemp;
point=evt.getPoint();
if(getarea(point)==point)
return;
else{
temp=getarea(point);
if(!
m_down){
if(map[temp.y][temp.x]==15)
return;
else{
m_down=true;
last_downx=temp.x;
last_downy=temp.y;
stepx=temp.x*200-point.x;
stepy=temp.y*160-point.y;
}
}
elseif(m_down){
m_down=false;
}
}
}
//放开鼠标时产生的事件
publicvoidmouseReleased(MouseEventevt){
if(able){
if(m_drag){
m_down=false;m_drag=false;not_redraw=false;
Pointpoint;
Pointtemp;
point=evt.getPoint();
if(getarea(point)==point)
{repaint();
return;}
else{
temp=getarea(point);
if(map[temp.y][temp.x]!
=15){
repaint();return;}
else{
if(Math.abs(last_downx-temp.x)==1&&last_downy-temp.y==0)
{
intdavid;
david=map[last_downy][last_downx];map[last_downy][last_downx]=15;
map[temp.y][temp.x]=david;
if(wingame())
able=false;
repaint();
return;
}
elseif(last_downx-temp.x==0&&Math.abs(last_downy-temp.y)==1)
{
intdavid;
david=map[last_downy][last_downx];map[last_downy][last_downx]=15;
map[temp.y][temp.x]=david;
if(wingame())
able=false;
repaint();
return;
}
else{repaint();return;}
}
}
}
}
else{
Pointpoint;
point=evt.getPoint();
if(point.x>30&&point.x<280&&point.y>50&&point.y<230)
{able=true;initmap
(2);}
if(point.x>370&&point.x<620&&point.y>160&&point.y<340)
{able=true;initmap(0);}
if(point.x>60&&point.x<310&&point.y>270&&point.y<450)
{able=true;initmap
(1);}
elsereturn;
}
}
//转换坐标
publicPointgetarea(Pointpoint){
if(point.x>800||point.y>640)
returnpoint;
elsereturnpoint=newPoint(point.x/200,point.y/160);
}
//图片初始化
voidinitmap(intstage){
picture=createImage(width,height);
buffer=picture.getGraphics();
buffer.drawImage(pic[stage],0,0,800,640,this);
for(inta=0;a<15;a++)
{
off_pic[a]=createImage(width/4,height/4);
off_buf[a]=