没有标题写的那么大……真要用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 Swing实现仿Chrome浏览器跳跳龙小游戏 Java Swing实现仿Chrome浏览器跳跳龙小游戏 Java Swing实现仿Chrome浏览器跳跳龙小游戏 Java Swing实现仿Chrome浏览器跳跳龙小游戏 Java Swing实现仿Chrome浏览器跳跳龙小...
仿redis缓存Java版轻量级缓存组件LocalCache,基于JVM内存实现数据缓存及过期机制
扫雷java java扫雷 仿windows扫雷 源代码
Java仿QQ聊天程序源代码 HAHA CHAT Java仿QQ聊天程序源代码,使用了比较多的图片资源 ,因此程序比较大,初步完成的效果,文件夹结构还有些乱。这个聊天程序有着QQ一样的隐藏窗体,程序有服务端和QQ登录端,同时还有...
【标题】"仿QQ聊天系统(java swing)"是一个基于Java Swing开发的桌面应用程序,它模仿了QQ的基本功能,提供了用户间的实时通讯服务。Swing是Java标准版(J2SE)的一部分,用于构建图形用户界面(GUI)的库,具有...
一款仿QQ应用,可以直接运行,规范的编程,对于初学或者进阶的你来说很不错~
这是Java仿QQ1.0版的改进版,有全新美观的界面,更好的用户体验和视觉体验。 代码已开源,具体使用请看README,欢迎fork与star。https://github.com/jie12366/imitate-qq
java源码 仿360buy京东商城源码 京东JavaWeb项目源代码.zipjava源码 仿360buy京东商城源码 京东JavaWeb项目源代码.zipjava源码 仿360buy京东商城源码 京东JavaWeb项目源代码.zipjava源码 仿360buy京东商城源码 京东...
Java课设-仿2048游戏.zipJava课设-仿2048游戏.zipJava课设-仿2048游戏.zip Java课设-仿2048游戏.zipJava课设-仿2048游戏.zipJava课设-仿2048游戏.zip Java课设-仿2048游戏.zipJava课设-仿2048游戏.zipJava课设-仿...
Java仿2048游戏是一款基于Java编程语言实现的经典数字拼图游戏,灵感来源于2014年风靡全球的2048游戏。在这个游戏中,玩家需要通过滑动屏幕来合并数字,目标是达到2048这个数值。下面我们将深入探讨这款Java实现的...
仿QQ游戏
java 仿QQ登陆界面 主界面java 仿QQ登陆界面 主界面java 仿QQ登陆界面 主界面 效果可以去我QQ空间看 http://user.qzone.qq.com/309306055/infocenter#!app=2&pos=1337351044
JAVA源码Java仿千千静听音乐播放器源代码
5. **转换流程**: - 第一步,将TXT/Word/Excel/PPT等文件通过OpenOffice和JodConverter转换为PDF。 - 第二步,使用Swftools的`pdf2swf`工具将PDF转换为SWF。 - 第三步,使用FlexPaper在网页中展示SWF文件,实现...
Java仿QQ聊天程序
JAVA源码Java仿Vista界面风格的登录窗口
仿飞鸽传书java版,局域网聊天,互传文件。
Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有帮助。 Java聊天程序,包括服务端和...
在本文中,我们将深入探讨如何使用Java来实现一个仿百度文库的功能,这将涉及到文件解析、在线预览以及用户交互等多个方面的技术。百度文库作为一个知名的文档分享平台,其核心功能包括文档上传、存储、搜索以及在线...