兹撰写GM.java类别和RC.java类别,其代码如下:
/*---- GM.java ----*/
package GameFramework;
import java.util.Random;
public class GM {
public String state_var;
public int current_amount = -1;;
public int current_rank = -1;
public Boolean status = null;
//----------------------------------------------
public GM(){ this.go_state_0(); }
public void go_state_0(){ state_var = "0"; }
public void go_connected_state_1(int amt){
if(! state_var.contains("0")){
status = false;
return; }
state_var = "1";
current_amount = amt;
this.go_state_2();
}
public void go_state_2(){
state_var = "2";
status = true;
}
public void go_prizes_state_3(int amt, int bet){
if(! state_var.contains("2")){
status = false; return; }
state_var = "3";
// 计算奖金
RC obj = new RC();
current_rank = obj.getRandomInt(0, 1000);
int prize = current_rank * bet;
if(prize > 0) amt += bet;
current_amount = amt + prize;
this.go_state_2();
}
public void go_finished_state_4(){
if(! state_var.contains("2")){
status = false; return; }
state_var = "4";
this.go_state_2();
}
public class RC{
public int getRandomInt(int min,int max) {
try { Thread.sleep(2);
} catch (InterruptedException ex) { ex.printStackTrace(); }
Random randomizer = new Random(System.currentTimeMillis());
int k = randomizer.nextInt(max-min+1)+min;
if(k < 500) return 0;
if(k<750) return 1;
if(k<875) return 2;
if(k<938) return 3;
if(k<969) return 4;
if(k<984) return 5;
if(k<994) return 6;
if(k<1000) return 7;
return 0; }
}}
此RC类别是依据随机值而换算出获奖的奖项(Rank),其实各家游戏场都有不一样的奖项决定规则,而且随时都可能更换新的奖项规则。上述RC类别只是一个简单范例而已。接着,兹撰写smConsoleStub类别,其程序代码如下:
/*---- smConsoleStub.java ----*/
package GameFramework;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import com.google.appengine.api.users.User;
import com.google.appengine.api.users.UserService;
import com.google.appengine.api.users.UserServiceFactory;
@SuppressWarnings("serial")
public abstract class smConsoleStub extends HttpServlet {
private GM gm = null;
private User user = null;
private String strResult;
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
UserService userService = UserServiceFactory.getUserService();
user = userService.getCurrentUser();
gm = new GM(); String gm_state = null;
HttpSession session = req.getSession();
Object obj = session.getAttribute("gmState");
if(obj != null ){
gm_state = (String)obj;
gm.state_var = gm_state; }
String strCode = req.getParameter("code");
String sv1 = req.getParameter("value1");
String sv2 = req.getParameter("value2");
int code = Integer.valueOf(strCode);
if(code == 0) {
process(sv1);
if(gm.status == false) strResult = "Fail:99,99"; }
else strResult = Test(sv1, sv2);
session.setAttribute("gmState", gm.state_var);
resp.setContentType("text/plain");
resp.getWriter().println(strResult);
}
private void process(String msg){
char cmd = msg.charAt(0);
if(cmd == 'I'){
gm.go_state_0();
gm.go_connected_state_1(onInitialAmount(user));
String strAmt = String.valueOf(gm.current_amount);
strResult = "Init:" + strAmt + ",99";
}
if(cmd == 'B'){
int idx = msg.indexOf(",");
String str_a = msg.substring(5, idx);
String str_b = msg.substring(idx+1);
int amt = Integer.parseInt(str_a); int bet = Integer.parseInt(str_b);
gm.go_prizes_state_3(amt, bet);
String strAmt = String.valueOf(gm.current_amount);
strResult = "Bett:" + strAmt + "," + String.valueOf(gm.current_rank);
}
if(cmd == 'F'){
int idx = msg.indexOf(",");
String str_amt = msg.substring(5, idx);
int amt = Integer.parseInt(str_amt);
boolean ret = onFinished(user, amt);
if(ret){
gm.go_finished_state_4();
strResult = "Fini:99,99"; }
else strResult = "Fail:99,99";
}}
private String Test(String sv1, String sv2) { return "***"; }
abstract protected int onInitialAmount(User user);
abstract protected boolean onFinished(User user, int final_amount);
}