`
mmdev
  • 浏览: 12924085 次
  • 性别: Icon_minigender_1
  • 来自: 大连
文章分类
社区版块
存档分类
最新评论

Java仿太阁立志传5

 
阅读更多
没有标题写的那么大……真要用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%……争取过年写,明年年底前一定发布整套源码……残念……||||
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics