沒有標題寫的那么大……真要用Java重寫太閣五不說別的,光整理原圖就夠累死我的……
游戲截圖:

只是一個太閣五中加農(nóng)業(yè)水平小游戲的再現(xiàn)……用本人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>
*
* @author chenpeng
* @email:ceponline@yahoo.com.cn
* @version 0.1
*/
public class TgIrrigationScript extends Panel implements KeyListener {

/**
*
*/
private static final long serialVersionUID = 1L;

// 生成緩存用背景Image
Image _screen = new Bitmap(640, 480, 1).getImage();

//獲得畫布
Graphics _graphics = _screen.getGraphics();

final private int _rs = 6;

private int[][] _chess = null;

private int[] _obj_block = null;
// Bitmap為loonframework提供類,內(nèi)部混合封裝了Image和BufferedImage,提供了通用的處理方式
// 背景圖
Bitmap _back_bitmap = null;

// 出水圖1
Bitmap _water_start = null;

// 出水圖2
Bitmap _water_start2 = null;

// 左邊框圖
Bitmap _left_box = null;

// 左側(cè)輔助框
Bitmap[] _leftnew_sprites = null;

// 磚塊地圖
Bitmap[][] _character_sprites = null;

// 光標
Bitmap _cursor = null;

Bitmap bitmap = null;

/**
* 構(gòu)造函數(shù)
*
*/
public TgIrrigationScript() {
initialize();
}

/**
* 初始化
*
*/
public void initialize() {
setBackground(Color.BLACK);
setSize(640, 480);

_leftnew_sprites = new Bitmap[4];

_character_sprites = new Bitmap[_rs][_rs];

_back_bitmap = new Bitmap("./image/pano.png");

_water_start = new Bitmap("./image/water_start.png");

_water_start2 = new Bitmap("./image/spr16.png");

_left_box = new Bitmap("./image/left_box.png");

_cursor = new Bitmap("./image/choose_box.png");

bitmap = new Bitmap("./image/mud.png");
// 出水圖繪制坐標
_water_start.setDrawXY(272, 2);
// 左邊框繪制坐標
_left_box.setDrawXY(25, 20);
_water_start2.setDrawXY(308, 45);
//游標繪制坐標
_cursor.setDrawXY(308, 91);
for (int i = 0; i < _leftnew_sprites.length; i++) {
_leftnew_sprites[i] = new Bitmap("./image/mud.png");
_leftnew_sprites[i].setDrawXY(42, 204 - i * 56);
}
_leftnew_sprites[0].setDrawY(212);
for (int i = 0; i <_rs; i++) {
for (int j = 0; j < _rs; j++) {
_character_sprites[i][j] = new Bitmap("./image/mud.png");
_character_sprites[i][j].setDrawXY(i * 48 + 164, j * 48 + 91);
}
}

_chess = new int[_rs][_rs];

_obj_block = new int[4];
// 左側(cè)輔助欄讀取圖形
for (int i = 0; i < 4; i++) {
down();
}
// 設(shè)定監(jiān)聽
setFocusable(true);
addKeyListener(this);
}

public void update(Graphics g) {
paint(g);
}

public void paint(Graphics g) {

// 背景繪制
_back_bitmap.draw(_graphics);
// 出水圖繪制
_water_start.draw(_graphics);
//
_water_start2.draw(_graphics);
// 左邊框圖繪制
_left_box.draw(_graphics);
// 左側(cè)輔助框繪制
for (int i = 0; i < _leftnew_sprites.length; i++) {
_leftnew_sprites[i].draw(_graphics);
}
// 繪制磚塊
for (int i = 0; i < _character_sprites.length; i++) {
for (int j = 0; j < _character_sprites[i].length; j++) {
_character_sprites[i][j].draw(_graphics);
}
}
// 繪制選中光標
_cursor.draw(_graphics);
g.drawImage(_screen, 0, 0, this);
}


public void down() {
int steps = 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 = new int[] {3,5,6,7,9,10,11,12,13,14,15};
// 隨即選取
int tmpint = tmparr[new Random().nextInt(11)];

_obj_block[3] = tmpint;

_leftnew_sprites[3].setBufferedImage(new Bitmap("./image/spr"
+ tmpint + ".png").getBufferedImage());
} else {
_obj_block[3] = 0;
_leftnew_sprites[3].setBufferedImage(bitmap.getBufferedImage());
}
steps += 1;
}

/**
* 放下事件處理
* @param x
* @param y
*/
public void putCase(int x, int y) {
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時代表數(shù)據(jù)讀完
if (_obj_block[0] == 0) {
endCase();
}
}
}


/**
* 判斷選中圖形能否貫通
* @param x
* @param y
* @param dire
* @return
*/
public boolean crossInclude(int x, int y, int dire) {
boolean flag = false;

switch (dire) {
case 1:
flag = SimpleArray.include("3,5,7,9,11,13,15", _chess[x][y]);
break;
case 2:
flag = SimpleArray.include("3,6,7,10,11,14,15", _chess[x][y]);
break;
case 3:
flag = SimpleArray.include("5,6,7,12,13,14,15", _chess[x][y]);
break;
case 4:
flag = SimpleArray.include("9,10,11,12,13,14,15", _chess[x][y]);
break;
}

return flag;
}

public int tableToObject(int x, int y) {
return (y * _rs) + x;
}

public int[] objectToTable(int pos) {
int iy = pos / _rs;
int ix = pos - (iy * _rs);
return new int[] { ix, iy };
}



public void keyPressed(KeyEvent e) {
int keyCode = e.getKeyCode();

switch (keyCode) {

case KeyEvent.VK_LEFT:

if (this._cursor.getDrawX() > 164) {
_cursor.setDrawX(_cursor.getDrawX() - 48);
}

break;

case KeyEvent.VK_RIGHT:

if (this._cursor.getDrawX() < (_rs * 48 + 164 - 48)) {
_cursor.setDrawX(_cursor.getDrawX() + 48);
}
break;

case KeyEvent.VK_UP:

if (this._cursor.getDrawY() > 91) {
_cursor.setDrawY(_cursor.getDrawY() - 48);
}

break;

case KeyEvent.VK_DOWN:
if (this._cursor.getDrawY() < (_rs * 48 + 91 - 48)) {
_cursor.setDrawY(_cursor.getDrawY() + 48);
}

break;

case KeyEvent.VK_ENTER:
putCase((_cursor.getDrawX() - 164) / 48,
(_cursor.getDrawY() - 91) / 48);
break;
case KeyEvent.VK_ESCAPE:
endCase();
break;

}

repaint();

}

public void keyReleased(KeyEvent e) {

}

public void keyTyped(KeyEvent e) {


}

public void endCase() {

int allscore = 0;
int allsum = _rs * _rs;
//SimpleArray為loonframework-game提供集合類,以字符串方式操作字符數(shù)組
SimpleArray sia1=new SimpleArray(0,35);
SimpleArray sia2=new SimpleArray();
_water_start2.setBufferedImage(new Bitmap("./image/wspr16.png")
.getBufferedImage());
if (crossInclude(3, 0, 1)) {
sia2.pushAll(sia1.delete(tableToObject(3, 0)));
}
while ((sia2.all()!=null)) {
int tmp = Integer.parseInt(sia2.pop());
int[] result = objectToTable(tmp);
int tx = result[0];
int ty = 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)));
}
}
int tmpint = _chess[tx][ty];
_character_sprites[tx][ty].setBufferedImage(new Bitmap(
"./image/wspr" + tmpint + ".png").getBufferedImage());
allscore = allscore+1;

}

// 刷新
repaint();
int pscore = allscore * 100 / allsum;
int rscore = pscore < 70 ? 1 : (pscore < 82 ? 2 : (pscore < 92 ? 3
: (pscore < 100 ? 4 : 5)));
String result = "";
switch (rscore) {
case 1:
result = "完成率:"
+ pscore
+ "% 級別:[小白] 你在挑戰(zhàn)小白的極致嗎?!!!!";
break;
case 2:
result = "完成率:" + pscore
+ "% 級別:[庸才] 嗯,我想你對這個游戲的規(guī)則已經(jīng)基本了解,剩下的可能只是積累經(jīng)驗了。";
break;
case 3:
result = "完成率:"
+ pscore
+ "% 級別:[中智] 作為一個普通人,我覺得你在這個游戲來說做的已經(jīng)不錯了,但是你相信你或許是個天才么?記得不要只看著即將落下的那塊,也要多考慮以后的情況喲^_^";
break;
case 4:
result = "完成率:"
+ pscore
+ "% 級別:[上品] 你離開盡善盡美只有一步之遙,除了運氣以外,你可能還需要掌握一個訣竅:為最后幾塊留下一個萬能的空格。";
break;
case 5:
result = "完成率:" + pscore + "% 級別:[天之驕子] 想當年我玩太閣,也就這樣了……(^^)b";
break;

}
//雖然做了Message類,但是為了演示打包方便所以不用……(其實是關(guān)聯(lián)太雜不好單用|||)
JOptionPane.showMessageDialog(this,result, "完成", JOptionPane.INFORMATION_MESSAGE);
}
public static void main(String[] args) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
Frame frm = new Frame("Java模擬太閣立志傳灌溉游戲");
frm.add(new TgIrrigationScript());
frm.setResizable(false);
frm.setSize(640, 480);
frm.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
frm.setLocationRelativeTo(null);
frm.setVisible(true);
}
});
}

}
PS:自從9月發(fā)布loonframework-game包的演示例子以后,超過3個月一直沒有連續(xù)的時間寫,所以一直沒動手完成,目前完成率只有大約45%……爭取過年寫,明年年底前一定發(fā)布整套源碼……殘念……||||
游戲截圖:

只是一個太閣五中加農(nóng)業(yè)水平小游戲的再現(xiàn)……用本人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>
*
* @author chenpeng
* @email:ceponline@yahoo.com.cn
* @version 0.1
*/
public class TgIrrigationScript extends Panel implements KeyListener {
/**
*
*/
private static final long serialVersionUID = 1L;
// 生成緩存用背景Image
Image _screen = new Bitmap(640, 480, 1).getImage();
//獲得畫布
Graphics _graphics = _screen.getGraphics();
final private int _rs = 6;
private int[][] _chess = null;
private int[] _obj_block = null;
// Bitmap為loonframework提供類,內(nèi)部混合封裝了Image和BufferedImage,提供了通用的處理方式
// 背景圖
Bitmap _back_bitmap = null;
// 出水圖1
Bitmap _water_start = null;
// 出水圖2
Bitmap _water_start2 = null;
// 左邊框圖
Bitmap _left_box = null;
// 左側(cè)輔助框
Bitmap[] _leftnew_sprites = null;
// 磚塊地圖
Bitmap[][] _character_sprites = null;
// 光標
Bitmap _cursor = null;
Bitmap bitmap = null;
/**
* 構(gòu)造函數(shù)
*
*/
public TgIrrigationScript() {
initialize();
}
/**
* 初始化
*
*/
public void initialize() {
setBackground(Color.BLACK);
setSize(640, 480);
_leftnew_sprites = new Bitmap[4];
_character_sprites = new Bitmap[_rs][_rs];
_back_bitmap = new Bitmap("./image/pano.png");
_water_start = new Bitmap("./image/water_start.png");
_water_start2 = new Bitmap("./image/spr16.png");
_left_box = new Bitmap("./image/left_box.png");
_cursor = new Bitmap("./image/choose_box.png");
bitmap = new Bitmap("./image/mud.png");
// 出水圖繪制坐標
_water_start.setDrawXY(272, 2);
// 左邊框繪制坐標
_left_box.setDrawXY(25, 20);
_water_start2.setDrawXY(308, 45);
//游標繪制坐標
_cursor.setDrawXY(308, 91);
for (int i = 0; i < _leftnew_sprites.length; i++) {
_leftnew_sprites[i] = new Bitmap("./image/mud.png");
_leftnew_sprites[i].setDrawXY(42, 204 - i * 56);
}
_leftnew_sprites[0].setDrawY(212);
for (int i = 0; i <_rs; i++) {
for (int j = 0; j < _rs; j++) {
_character_sprites[i][j] = new Bitmap("./image/mud.png");
_character_sprites[i][j].setDrawXY(i * 48 + 164, j * 48 + 91);
}
}
_chess = new int[_rs][_rs];
_obj_block = new int[4];
// 左側(cè)輔助欄讀取圖形
for (int i = 0; i < 4; i++) {
down();
}
// 設(shè)定監(jiān)聽
setFocusable(true);
addKeyListener(this);
}
public void update(Graphics g) {
paint(g);
}
public void paint(Graphics g) {

// 背景繪制
_back_bitmap.draw(_graphics);
// 出水圖繪制
_water_start.draw(_graphics);
//
_water_start2.draw(_graphics);
// 左邊框圖繪制
_left_box.draw(_graphics);
// 左側(cè)輔助框繪制
for (int i = 0; i < _leftnew_sprites.length; i++) {
_leftnew_sprites[i].draw(_graphics);
}
// 繪制磚塊
for (int i = 0; i < _character_sprites.length; i++) {
for (int j = 0; j < _character_sprites[i].length; j++) {
_character_sprites[i][j].draw(_graphics);
}
}
// 繪制選中光標
_cursor.draw(_graphics);
g.drawImage(_screen, 0, 0, this);
}

public void down() {
int steps = 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 = new int[] {3,5,6,7,9,10,11,12,13,14,15};
// 隨即選取
int tmpint = tmparr[new Random().nextInt(11)];
_obj_block[3] = tmpint;
_leftnew_sprites[3].setBufferedImage(new Bitmap("./image/spr"
+ tmpint + ".png").getBufferedImage());
} else {
_obj_block[3] = 0;
_leftnew_sprites[3].setBufferedImage(bitmap.getBufferedImage());
}
steps += 1;
}
/**
* 放下事件處理
* @param x
* @param y
*/
public void putCase(int x, int y) {
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時代表數(shù)據(jù)讀完
if (_obj_block[0] == 0) {
endCase();
}
}
}

/**
* 判斷選中圖形能否貫通
* @param x
* @param y
* @param dire
* @return
*/
public boolean crossInclude(int x, int y, int dire) {
boolean flag = false;
switch (dire) {
case 1:
flag = SimpleArray.include("3,5,7,9,11,13,15", _chess[x][y]);
break;
case 2:
flag = SimpleArray.include("3,6,7,10,11,14,15", _chess[x][y]);
break;
case 3:
flag = SimpleArray.include("5,6,7,12,13,14,15", _chess[x][y]);
break;
case 4:
flag = SimpleArray.include("9,10,11,12,13,14,15", _chess[x][y]);
break;
}
return flag;
}
public int tableToObject(int x, int y) {
return (y * _rs) + x;
}
public int[] objectToTable(int pos) {
int iy = pos / _rs;
int ix = pos - (iy * _rs);
return new int[] { ix, iy };
}


public void keyPressed(KeyEvent e) {
int keyCode = e.getKeyCode();
switch (keyCode) {
case KeyEvent.VK_LEFT:
if (this._cursor.getDrawX() > 164) {
_cursor.setDrawX(_cursor.getDrawX() - 48);
}
break;
case KeyEvent.VK_RIGHT:
if (this._cursor.getDrawX() < (_rs * 48 + 164 - 48)) {
_cursor.setDrawX(_cursor.getDrawX() + 48);
}
break;
case KeyEvent.VK_UP:
if (this._cursor.getDrawY() > 91) {
_cursor.setDrawY(_cursor.getDrawY() - 48);
}
break;
case KeyEvent.VK_DOWN:
if (this._cursor.getDrawY() < (_rs * 48 + 91 - 48)) {
_cursor.setDrawY(_cursor.getDrawY() + 48);
}
break;
case KeyEvent.VK_ENTER:
putCase((_cursor.getDrawX() - 164) / 48,
(_cursor.getDrawY() - 91) / 48);
break;
case KeyEvent.VK_ESCAPE:
endCase();
break;
}
repaint();
}
public void keyReleased(KeyEvent e) {
}
public void keyTyped(KeyEvent e) {

}
public void endCase() {
int allscore = 0;
int allsum = _rs * _rs;
//SimpleArray為loonframework-game提供集合類,以字符串方式操作字符數(shù)組
SimpleArray sia1=new SimpleArray(0,35);
SimpleArray sia2=new SimpleArray();
_water_start2.setBufferedImage(new Bitmap("./image/wspr16.png")
.getBufferedImage());
if (crossInclude(3, 0, 1)) {
sia2.pushAll(sia1.delete(tableToObject(3, 0)));
}
while ((sia2.all()!=null)) {
int tmp = Integer.parseInt(sia2.pop());
int[] result = objectToTable(tmp);
int tx = result[0];
int ty = 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)));
}
}
int tmpint = _chess[tx][ty];
_character_sprites[tx][ty].setBufferedImage(new Bitmap(
"./image/wspr" + tmpint + ".png").getBufferedImage());
allscore = allscore+1;
}
// 刷新
repaint();
int pscore = allscore * 100 / allsum;
int rscore = pscore < 70 ? 1 : (pscore < 82 ? 2 : (pscore < 92 ? 3
: (pscore < 100 ? 4 : 5)));
String result = "";
switch (rscore) {
case 1:
result = "完成率:"
+ pscore
+ "% 級別:[小白] 你在挑戰(zhàn)小白的極致嗎?!!!!";
break;
case 2:
result = "完成率:" + pscore
+ "% 級別:[庸才] 嗯,我想你對這個游戲的規(guī)則已經(jīng)基本了解,剩下的可能只是積累經(jīng)驗了。";
break;
case 3:
result = "完成率:"
+ pscore
+ "% 級別:[中智] 作為一個普通人,我覺得你在這個游戲來說做的已經(jīng)不錯了,但是你相信你或許是個天才么?記得不要只看著即將落下的那塊,也要多考慮以后的情況喲^_^";
break;
case 4:
result = "完成率:"
+ pscore
+ "% 級別:[上品] 你離開盡善盡美只有一步之遙,除了運氣以外,你可能還需要掌握一個訣竅:為最后幾塊留下一個萬能的空格。";
break;
case 5:
result = "完成率:" + pscore + "% 級別:[天之驕子] 想當年我玩太閣,也就這樣了……(^^)b";
break;
}
//雖然做了Message類,但是為了演示打包方便所以不用……(其實是關(guān)聯(lián)太雜不好單用|||)
JOptionPane.showMessageDialog(this,result, "完成", JOptionPane.INFORMATION_MESSAGE);
}
public static void main(String[] args) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
Frame frm = new Frame("Java模擬太閣立志傳灌溉游戲");
frm.add(new TgIrrigationScript());
frm.setResizable(false);
frm.setSize(640, 480);
frm.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
frm.setLocationRelativeTo(null);
frm.setVisible(true);
}
});
}
}
PS:自從9月發(fā)布loonframework-game包的演示例子以后,超過3個月一直沒有連續(xù)的時間寫,所以一直沒動手完成,目前完成率只有大約45%……爭取過年寫,明年年底前一定發(fā)布整套源碼……殘念……||||

浙公網(wǎng)安備 33010602011771號