人物拼图java_JAVA实现拼图游戏

packageorg.test;

01.gif/*** 

Title: LoonFramework

Description:拼图图像处理[未优化](优化算法已内置于loonframework-game框架中。)

Copyright: Copyright (c) 2007

Company: LoonFramework

*@authorchenpeng

* @email:ceponline@yahoo.com.cn

*@version0.1*/importjava.awt.Canvas;importjava.awt.Color;importjava.awt.Event;importjava.awt.Frame;importjava.awt.Graphics;importjava.awt.Image;importjava.awt.MediaTracker;importjava.awt.image.BufferedImage;importorg.loon.framework.game.helper.ImageHelper;publicclassBlockImageextendsCanvas {/****/privatestaticfinallongserialVersionUID=1L;privateImage _img;privateImage _img2;privateGraphics bg;privateImage backimage;privateintblocks[];privatebooleanisEvent;privateMediaTracker mt;privateint_width;privateint_height;privateint_RS;privateint_CS;privateImage screen=null;privateGraphics later=null;privateint_objWidth;privateint_objHeight;privateint_COUNT;/*** 析构函数,内部调用init方法。

*

*@parambImage

*@paramoverImage

*@paramcs

*@paramrs*/publicBlockImage(Image bImage, Image overImage,intcs,intrs) {

init(bImage, overImage, cs, rs);

}/*** 初始化拼图参数。

*

*@parambImage

*@paramoverImage

*@paramcs

*@paramrs*/publicvoidinit(Image bImage, Image overImage,intcs,intrs) {//列数_CS=cs;//行数_RS=rs;//加载拼图用图像。_img=bImage;//获得实际窗体宽。_width=_img.getWidth(null);//获得实际窗体高。_height=_img.getHeight(null);//获得单块图像宽。_objWidth=_width/_CS;//获得单块图像高。_objHeight=_height/_RS;//本程序直接使用backimage上一块图形区域缓冲选择项,所以实际背景图像高=图形高+额外图块高。backimage=newBufferedImage(_width, _height+_objHeight,1);//获得生成的图形later=backimage.getGraphics();//再创建一块图像区域,作为图像缓存用。screen=newBufferedImage(_width, _height,1);//获得缓存的图形bg=screen.getGraphics();//获得等同图片总数的数组。_COUNT=_CS*_RS;

blocks=newint[_COUNT];//初始化为非点击。isEvent=false;//加载完成拼图的显示图。_img2=overImage;//初始化图块参数。for(inti=0; i<_count>

blocks[i]=i;

}//载入MediaTracker,用以跟踪图像状态。mt=newMediaTracker(this);//加载被跟踪的图像。mt.addImage(_img,0);

mt.addImage(_img2,0);//同步载入。try{

mt.waitForID(0);

}catch(InterruptedException interruptedexception) {return;

}//随机生成图像面板内容。rndPannel();

}/*** 描绘窗体图像。*/publicvoidpaint(Graphics g) {//检查图像载入。if(mt.checkID(0)) {//描绘底层背景。bg.drawImage(backimage,0,0,null);//判断是否触发完成事件。if(!isEvent) {//设置背景色。bg.setColor(Color.black);//循环绘制小图片于背景缓存中。for(inti=0; i<_cs>

bg.drawRect(i*_objWidth, j*_objHeight, _objWidth,

_objHeight);

}

}//仅当完成事件触发并且有胜利图片时,载入完成提示。if(isEvent&&_img2!=null) {

bg.drawImage(_img2,0,0,null);

}

}//举凡绘制图像时,应遵循显示图像仅绘制一次的基本原则,一次性的将背景绘制到窗体。//简单来说,也就是采取[双缓存]的方式,所有复杂操作皆在缓存区完成,也只有这样才能避免产生延迟闪烁。g.drawImage(screen,0,0,this);

g.dispose();

}/*** 变更图像。*/publicvoidupdate(Graphics g) {

paint(g);

}/*** 鼠标点击事件。*/publicbooleanmouseDown(Event event,inti,intj) {if(isEvent)returntrue;//换算点击位置与小图片。intk=i/_objWidth;intl=j/_objHeight;

copy(0,0,0, _RS);

copy(k, l,0,0);

copy(0, _RS, k, l);inti1=blocks[0];//换算选中图片存储区。blocks[0]=blocks[l*_CS+k];

blocks[l*_CS+k]=i1;intj1;for(j1=0; j1<_count>

}

}if(j1==_COUNT)

isEvent=true;

repaint();returntrue;

}publicbooleanmouseUp(Event event,inti,intj) {returntrue;

}publicbooleanmouseDrag(Event event,inti,intj) {returntrue;

}/*** copy换算后的图像区域。

*

*@parami

*@paramj

*@paramk

*@paraml*/voidcopy(inti,intj,intk,intl) {

later.copyArea(i*_objWidth, j*_objHeight, _objWidth, _objHeight,

(k-i)*_objWidth, (l-j)*_objHeight);

}/*** 事件触发状态。

*@return*/publicbooleanisEvent() {returnisEvent;

}publicvoidsetEvent(booleanisEvent) {this.isEvent=isEvent;

}/*** 随机生成面板图片。

**/voidrndPannel() {

later.drawImage(_img,0,0,this);for(inti=0; i

copy(j, k,0, _RS);

copy(l, i1, j, k);

copy(0, _RS, l, i1);intj1=blocks[k*_CS+j];

blocks[k*_CS+j]=blocks[i1*_CS+l];

blocks[i1*_CS+l]=j1;

}

}publicstaticvoidmain(String[] args) {

Frame frm=newFrame("简单的JAVA拼图效果实现[由Loonframework框架提供]");

frm.setSize(480,500);

frm.setResizable(false);/*** PS:ImageHelper.loadImage为Loonframework框架中helper下方法,为不依赖于javax扩展包而开发。

* 可使用ImageIO相关方法代替。*///加载图像。Image backImage=ImageHelper.loadImage("C:/backimage.jpg",true);

Image overImage=ImageHelper.loadImage("C:/over.gif",true);//BlockImage中参数分别为 用于分解的拼图,完成后显示文字,拆分图片为分几列,分拆分图片为几行。//建议使用正方形图片作为背景图。frm.add(newBlockImage(backImage, overImage,4,4));

backImage=null;

overImage=null;//显示窗体。frm.setVisible(true);

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值