没有标题写的那么大……真要用Java重写太阁五不说别的,光整理原图就够累死我的……
游戏截图:
只是一个太阁五中加农业水平小游戏的再现……用本人loonframework-game包进行图形处理,算是一个对jar包的测试程序,完整程序下载地址,仅将使用到的类和图形打包:
http://looframework.sourceforge.net/download/Tg.jar源码如下:
TgIrrigationScript.java
packageorg.loon.framework.test.tg;
importjava.awt.Color;
importjava.awt.Frame;
importjava.awt.Graphics;
importjava.awt.Image;
importjava.awt.Panel;
importjava.awt.event.KeyEvent;
importjava.awt.event.KeyListener;
importjava.awt.event.WindowAdapter;
importjava.awt.event.WindowEvent;
importjava.util.Random;
importjavax.swing.JOptionPane;
importorg.loon.framework.game.collection.SimpleArray;
importorg.loon.framework.game.image.Bitmap;
/***//**
*<p>
*Title:LoonFramework
*</p>
*<p>
*Description:[太阁立志传小游戏Java模拟之水渠贯通]loonframework-game包由于标准类及接口未完成暂不开源(我懒……目前只完成大约45%而已|||三月没动……)
*</p>
*<p>
*Copyright:Copyright(c)2007
*</p>
*<p>
*Company:LoonFramework
*</p>
*
*@authorchenpeng
*@email:ceponline@yahoo.com.cn
*@version0.1
*/
publicclassTgIrrigationScriptextendsPanelimplementsKeyListener...{
/***//**
*
*/
privatestaticfinallongserialVersionUID=1L;
//生成缓存用背景Image
Image_screen=newBitmap(640,480,1).getImage();
//获得画布
Graphics_graphics=_screen.getGraphics();
finalprivateint_rs=6;
privateint[][]_chess=null;
privateint[]_obj_block=null;
//Bitmap为loonframework提供类,内部混合封装了Image和BufferedImage,提供了通用的处理方式
//背景图
Bitmap_back_bitmap=null;
//出水图1
Bitmap_water_start=null;
//出水图2
Bitmap_water_start2=null;
//左边框图
Bitmap_left_box=null;
//左侧辅助框
Bitmap[]_leftnew_sprites=null;
//砖块地图
Bitmap[][]_character_sprites=null;
//光标
Bitmap_cursor=null;
Bitmapbitmap=null;
/***//**
*构造函数
*
*/
publicTgIrrigationScript()...{
initialize();
}
/***//**
*初始化
*
*/
publicvoidinitialize()...{
setBackground(Color.BLACK);
setSize(640,480);
_leftnew_sprites=newBitmap[4];
_character_sprites=newBitmap[_rs][_rs];
_back_bitmap=newBitmap("./image/pano.png");
_water_start=newBitmap("./image/water_start.png");
_water_start2=newBitmap("./image/spr16.png");
_left_box=newBitmap("./image/left_box.png");
_cursor=newBitmap("./image/choose_box.png");
bitmap=newBitmap("./image/mud.png");
//出水图绘制坐标
_water_start.setDrawXY(272,2);
//左边框绘制坐标
_left_box.setDrawXY(25,20);
_water_start2.setDrawXY(308,45);
//游标绘制坐标
_cursor.setDrawXY(308,91);
for(inti=0;i<_leftnew_sprites.length;i++)...{
_leftnew_sprites[i]=newBitmap("./image/mud.png");
_leftnew_sprites[i].setDrawXY(42,204-i*56);
}
_leftnew_sprites[0].setDrawY(212);
for(inti=0;i<_rs;i++)...{
for(intj=0;j<_rs;j++)...{
_character_sprites[i][j]=newBitmap("./image/mud.png");
_character_sprites[i][j].setDrawXY(i*48+164,j*48+91);
}
}
_chess=newint[_rs][_rs];
_obj_block=newint[4];
//左侧辅助栏读取图形
for(inti=0;i<4;i++)...{
down();
}
//设定监听
setFocusable(true);
addKeyListener(this);
}
publicvoidupdate(Graphicsg)...{
paint(g);
}
publicvoidpaint(Graphicsg)...{
//背景绘制
_back_bitmap.draw(_graphics);
//出水图绘制
_water_start.draw(_graphics);
//
_water_start2.draw(_graphics);
//左边框图绘制
_left_box.draw(_graphics);
//左侧辅助框绘制
for(inti=0;i<_leftnew_sprites.length;i++)...{
_leftnew_sprites[i].draw(_graphics);
}
//绘制砖块
for(inti=0;i<_character_sprites.length;i++)...{
for(intj=0;j<_character_sprites[i].length;j++)...{
_character_sprites[i][j].draw(_graphics);
}
}
//绘制选中光标
_cursor.draw(_graphics);
g.drawImage(_screen,0,0,this);
}
publicvoiddown()...{
intsteps=0;
_obj_block[0]=_obj_block[1];
_leftnew_sprites[0].setBufferedImage(_leftnew_sprites[1]
.getBufferedImage());
_obj_block[1]=_obj_block[2];
_leftnew_sprites[1].setBufferedImage(_leftnew_sprites[2]
.getBufferedImage());
_obj_block[2]=_obj_block[3];
_leftnew_sprites[2].setBufferedImage(_leftnew_sprites[3]
.getBufferedImage());
if(steps<(_rs*_rs))...{
//位图
int[]tmparr=newint[]...{3,5,6,7,9,10,11,12,13,14,15};
//随即选取
inttmpint=tmparr[newRandom().nextInt(11)];
_obj_block[3]=tmpint;
_leftnew_sprites[3].setBufferedImage(newBitmap("./image/spr"
+tmpint+".png").getBufferedImage());
}else...{
_obj_block[3]=0;
_leftnew_sprites[3].setBufferedImage(bitmap.getBufferedImage());
}
steps+=1;
}
/***//**
*放下事件处理
*@paramx
*@paramy
*/
publicvoidputCase(intx,inty)...{
if(this._chess[x][y]==0)...{
_character_sprites[x][y].setBufferedImage(_leftnew_sprites[0]
.getBufferedImage());
_chess[x][y]=_obj_block[0];
down();
//_obj_block[0]为最后的渠道方块,所以为0时代表数据读完
if(_obj_block[0]==0)...{
endCase();
}
}
}
/***//**
*判断选中图形能否贯通
*@paramx
*@paramy
*@paramdire
*@return
*/
publicbooleancrossInclude(intx,inty,intdire)...{
booleanflag=false;
switch(dire)...{
case1:
flag=SimpleArray.include("3,5,7,9,11,13,15",_chess[x][y]);
break;
case2:
flag=SimpleArray.include("3,6,7,10,11,14,15",_chess[x][y]);
break;
case3:
flag=SimpleArray.include("5,6,7,12,13,14,15",_chess[x][y]);
break;
case4:
flag=SimpleArray.include("9,10,11,12,13,14,15",_chess[x][y]);
break;
}
returnflag;
}
publicinttableToObject(intx,inty)...{
return(y*_rs)+x;
}
publicint[]objectToTable(intpos)...{
intiy=pos/_rs;
intix=pos-(iy*_rs);
returnnewint[]...{ix,iy};
}
publicvoidkeyPressed(KeyEvente)...{
intkeyCode=e.getKeyCode();
switch(keyCode)...{
caseKeyEvent.VK_LEFT:
if(this._cursor.getDrawX()>164)...{
_cursor.setDrawX(_cursor.getDrawX()-48);
}
break;
caseKeyEvent.VK_RIGHT:
if(this._cursor.getDrawX()<(_rs*48+164-48))...{
_cursor.setDrawX(_cursor.getDrawX()+48);
}
break;
caseKeyEvent.VK_UP:
if(this._cursor.getDrawY()>91)...{
_cursor.setDrawY(_cursor.getDrawY()-48);
}
break;
caseKeyEvent.VK_DOWN:
if(this._cursor.getDrawY()<(_rs*48+91-48))...{
_cursor.setDrawY(_cursor.getDrawY()+48);
}
break;
caseKeyEvent.VK_ENTER:
putCase((_cursor.getDrawX()-164)/48,
(_cursor.getDrawY()-91)/48);
break;
caseKeyEvent.VK_ESCAPE:
endCase();
break;
}
repaint();
}
publicvoidkeyReleased(KeyEvente)...{
}
publicvoidkeyTyped(KeyEvente)...{
}
publicvoidendCase()...{
intallscore=0;
intallsum=_rs*_rs;
//SimpleArray为loonframework-game提供集合类,以字符串方式操作字符数组
SimpleArraysia1=newSimpleArray(0,35);
SimpleArraysia2=newSimpleArray();
_water_start2.setBufferedImage(newBitmap("./image/wspr16.png")
.getBufferedImage());
if(crossInclude(3,0,1))...{
sia2.pushAll(sia1.delete(tableToObject(3,0)));
}
while((sia2.all()!=null))...{
inttmp=Integer.parseInt(sia2.pop());
int[]result=objectToTable(tmp);
inttx=result[0];
intty=result[1];
if(crossInclude(tx,ty,1)&&ty>0)...{
if(crossInclude(tx,ty-1,3)&&(sia1.include(tableToObject(tx,ty-1))))...{
sia2.pushAll(sia1.delete(tableToObject(tx,ty-1)));
}
}
if(crossInclude(tx,ty,2)&&tx<_rs-1)...{
if(crossInclude(tx+1,ty,4)&&(sia1.include(tableToObject(tx+1,ty))))...{
sia2.pushAll(sia1.delete(tableToObject(tx+1,ty)));
}
}
if(crossInclude(tx,ty,3)&&ty<_rs-1)...{
if(crossInclude(tx,ty+1,1)&&sia1.include(tableToObject(tx,ty+1)))...{
sia2.pushAll(sia1.delete(tableToObject(tx,ty+1)));
}
}
if(crossInclude(tx,ty,4)&&tx>0)...{
if(crossInclude(tx-1,ty,2)&&sia1.include(tableToObject(tx-1,ty)))...{
sia2.pushAll(sia1.delete(tableToObject(tx-1,ty)));
}
}
inttmpint=_chess[tx][ty];
_character_sprites[tx][ty].setBufferedImage(newBitmap(
"./image/wspr"+tmpint+".png").getBufferedImage());
allscore=allscore+1;
}
//刷新
repaint();
intpscore=allscore*100/allsum;
intrscore=pscore<70?1:(pscore<82?2:(pscore<92?3
:(pscore<100?4:5)));
Stringresult="";
switch(rscore)...{
case1:
result="完成率:"
+pscore
+"%级别:[小白] 你在挑战小白的极致吗?!!!!";
break;
case2:
result="完成率:"+pscore
+"%级别:[庸才] 嗯,我想你对这个游戏的规则已经基本了解,剩下的可能只是积累经验了。";
break;
case3:
result="完成率:"
+pscore
+"%级别:[中智] 作为一个普通人,我觉得你在这个游戏来说做的已经不错了,但是你相信你或许是个天才么?记得不要只看着即将落下的那块,也要多考虑以后的情况哟^_^";
break;
case4:
result="完成率:"
+pscore
+"%级别:[上品] 你离开尽善尽美只有一步之遥,除了运气以外,你可能还需要掌握一个诀窍:为最后几块留下一个万能的空格。";
break;
case5:
result="完成率:"+pscore+"%级别:[天之骄子] 想当年我玩太阁,也就这样了……(^^)b";
break;
}
//虽然做了Message类,但是为了演示打包方便所以不用……(其实是关联太杂不好单用|||)
JOptionPane.showMessageDialog(this,result,"完成",JOptionPane.INFORMATION_MESSAGE);
}
publicstaticvoidmain(String[]args)...{
java.awt.EventQueue.invokeLater(newRunnable()...{
publicvoidrun()...{
Framefrm=newFrame("Java模拟太阁立志传灌溉游戏");
frm.add(newTgIrrigationScript());
frm.setResizable(false);
frm.setSize(640,480);
frm.addWindowListener(newWindowAdapter()...{
publicvoidwindowClosing(WindowEvente)...{
System.exit(0);
}
});
frm.setLocationRelativeTo(null);
frm.setVisible(true);
}
});
}
}
PS:自从9月发布loonframework-game包的演示例子以后,超过3个月一直没有连续的时间写,所以一直没动手完成,目前完成率只有大约45%……争取过年写,明年年底前一定发布整套源码……残念……||||
分享到:
相关推荐
java仿Windows计算器,java仿Windows计算器,java仿Windows计算器,java仿Windows计算器
Java 高仿QQ聊天即时通软件+mysql数据库 完整运行!!
java 最终仿windows标准计算器 英杰
java 仿淘宝购物系统 可以实现下订单,更新货物
使用Java 多线程,IO流,网络编程,GUI,集合等知识实现一个Java JDK版仿QQ聊天室,实现了单独聊天和群聊。
Java+oracle 制作的仿QQ系统,源代码和数据库,Java初学者的最爱
很全,什么都有了,感谢.javaNetty仿微信源码j
Java swing写的仿QQ连连看的整个工程代码
Java仿QQ聊天程序源代码 HAHA CHAT Java仿QQ聊天程序源代码,使用了比较多的图片资源 ,因此程序比较大,初步完成的效果,文件夹结构还有些乱。这个聊天程序有着QQ一样的隐藏窗体,程序有服务端和QQ登录端,同时还有...
重大学生Java仿QQ该程序界面类似qq的界面, 并且在代码中有详细的解释,可供Java初学者参考。
使用java jsp开发的仿美团网的小项目
java仿百度文库、豆丁在线阅读,流程如下:Txt/Word/Excel/PPT=>PDF(OpenOffice+JodConverter)=>SWF(pdf2swf)=>FlexPaper浏览,本人用过,很好用
java仿2048游戏实例源码,网上看到的,觉得不错上传出来,供大家一起共同分享学习。
仿QQ聊天系统,运用技术java swing,其中用到了大量的线程,socket,特别适合j2se的初学者!内含数据库
java 仿QQ登陆界面 主界面java 仿QQ登陆界面 主界面java 仿QQ登陆界面 主界面 效果可以去我QQ空间看 http://user.qzone.qq.com/309306055/infocenter#!app=2&pos=1337351044
Java 仿超级玛丽的游戏完整代码
Java仿千千静听音乐播放器源代码