没有标题写的那么大……真要用Java重写太阁五不说别的,光整理原图就够累死我的……
游戏截图:
只是一个太阁五中加农业水平小游戏的再现……用本人loonframework-game包进行图形处理,算是一个对jar包的测试程序,完整程序下载地址,仅将使用到的类和图形打包:
http://looframework.sourceforge.net/download/Tg.jar
源码如下:
TgIrrigationScript.java
package
org.loon.framework.test.tg;

import
java.awt.Color;
import
java.awt.Frame;
import
java.awt.Graphics;
import
java.awt.Image;
import
java.awt.Panel;
import
java.awt.event.KeyEvent;
import
java.awt.event.KeyListener;
import
java.awt.event.WindowAdapter;
import
java.awt.event.WindowEvent;
import
java.util.Random;

import
javax.swing.JOptionPane;


import
org.loon.framework.game.collection.SimpleArray;
import
org.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
*/

public
class
TgIrrigationScript
extends
Panel
implements
KeyListener
...
{


/***//**
*
*/
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%……争取过年写,明年年底前一定发布整套源码……残念……||||
游戏截图:
只是一个太阁五中加农业水平小游戏的再现……用本人loonframework-game包进行图形处理,算是一个对jar包的测试程序,完整程序下载地址,仅将使用到的类和图形打包:
http://looframework.sourceforge.net/download/Tg.jar
源码如下:
TgIrrigationScript.java
package
org.loon.framework.test.tg;
import
java.awt.Color;
import
java.awt.Frame;
import
java.awt.Graphics;
import
java.awt.Image;
import
java.awt.Panel;
import
java.awt.event.KeyEvent;
import
java.awt.event.KeyListener;
import
java.awt.event.WindowAdapter;
import
java.awt.event.WindowEvent;
import
java.util.Random;
import
javax.swing.JOptionPane;

import
org.loon.framework.game.collection.SimpleArray;
import
org.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
*/

public
class
TgIrrigationScript
extends
Panel
implements
KeyListener
...
{

/***//**
*
*/
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重写太阁立志传中灌溉小游戏的项目。该项目利用loonframework-game包进行图形处理,并实现了游戏的主要功能。文章提供了完整的源代码及下载链接。

被折叠的 条评论
为什么被折叠?



