?? main.java
字號:
package com.dfun.blackjack;
import javax.microedition.lcdui.*;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;
import javax.microedition.rms.RecordStore;
import java.util.*;
import java.io.*;
/**************************************************
* @author Beetle
* 類功能介紹:主控類,用于控制調用各個模塊
**************************************************/
public class Main
extends MIDlet
implements CommandListener, Runnable {
private Display display;
private TextField phoneNumber;
private TextField password;
private TextField userName;
private Command cmdOk;
private Command cmdHelp;
private String url; //連接地址
private Connection conn; //連接對象
private MainCanvas mainCanvas; //游戲主界面
//刷新狀態(tài),0為刷新大廳,1為刷新房間用戶列表第一次接到房間用戶列表時將狀態(tài)值改為1
//并且建立房間,狀態(tài)值為1后只刷新房間列表不建立,2為刷新mainCanvas 的用戶列表
public int refreshState;
public Hall hall; //游戲大廳
public House house;
public Form register;
public String strPhoneNumber; //用戶手機號
public String strPassword; //用戶密碼
public String strUserName; //用戶昵稱
public long userId; //當次游戲用戶的唯一id
public int userCount; //用戶總分
public Msg msg;
public Thread getTwoData;
public String[][] jettonList; //籌碼列表
/*******************************************************
* 功能介紹:構造函數
* 輸入參數:無
*******************************************************/
public Main() {
phoneNumber = new TextField("請輸入您的手機號碼它將用于兌獎,請保證正確無誤!", "", 11, TextField.NUMERIC);
password = new TextField("登陸密碼", "", 6, TextField.PASSWORD);
userName = new TextField("用戶昵稱", "", 10, TextField.ANY);
cmdOk = new Command("注冊", Command.OK, Command.OK);
cmdHelp = new Command("幫助", Command.OK, Command.HELP);
register = new Form("注冊");
register.addCommand(cmdOk);
register.addCommand(cmdHelp);
register.append(phoneNumber);
register.append(password);
register.append(userName);
register.setCommandListener(this);
refreshState = 0; //默認為刷新房間列表
}
protected void destroyApp(boolean arg0) throws MIDletStateChangeException {
}
protected void pauseApp() {
}
protected void startApp() throws MIDletStateChangeException {
display = Display.getDisplay(this);
conn = new Connection(this); // 初始化網絡
msg = new Msg(this, display, conn); // 初始化聊天室
getTwoData = new Thread(this);
hall = new Hall(display, conn, strPhoneNumber, this);
house = new House(display, conn, strPhoneNumber, this, hall);
if (getUserInfo()) { //檢測是否注冊
display.setCurrent(new Welcom(display, conn, this));
}
else {
showRegister();
}
}
/*****************************************************
* 功能介紹:取得手機號碼
* 輸入參數:無
* 輸出參數:手機號碼
*****************************************************/
public boolean getUserInfo() {
RecordStore rs;
byte[] data1, data2, data3;
try {
rs = RecordStore.openRecordStore("userInfo", false);
if (rs.getNumRecords() == 0) {
return false;
}
else {
data1 = rs.getRecord(1);
data2 = rs.getRecord(2);
data3 = rs.getRecord(3);
}
rs.closeRecordStore();
strPhoneNumber = new String(data1);
strPassword = new String(data2);
ByteArrayInputStream bis = new ByteArrayInputStream(data3);
DataInputStream is = new DataInputStream(bis);
strUserName = is.readUTF();
return true;
}
catch (Exception e) {
System.out.println(e.getMessage());
return false;
}
}
/*****************************************************
* 功能介紹:設置手機號碼
* 輸入參數:手機號碼
* 輸出參數:無
*****************************************************/
public void setUserInfo(String phoneNumber, String password, String userName) {
try {
this.strPhoneNumber = phoneNumber;
this.strPassword = password;
this.strUserName = userName;
RecordStore rs = null;
byte data1[] = phoneNumber.getBytes();
byte data2[] = password.getBytes();
ByteArrayOutputStream bos = new ByteArrayOutputStream();
DataOutputStream dos = new DataOutputStream(bos);
dos.writeUTF(userName);
byte data3[] = bos.toByteArray();
rs = RecordStore.openRecordStore("userInfo", true);
for (int i = 1; i <= rs.getNumRecords(); i++) {
rs.deleteRecord(1);
}
if (rs.getNumRecords() == 0) {
rs.addRecord(data1, 0, data1.length);
rs.addRecord(data2, 0, data2.length);
rs.addRecord(data3, 0, data3.length);
}
rs.closeRecordStore();
}
catch (Exception e) {
System.out.println(e.toString());
}
}
/*****************************************************
* 功能介紹:裝入指定的圖片
* 輸入參數:無
* 輸出參數:無
****************************************************/
public Image[] loadImg(int gameType) {
Image img[];
if (gameType == 1) { //歡迎圖片
try {
img = new Image[2];
img[0] = Image.createImage("/welcomone.png");
img[1] = Image.createImage("/welcomtwo.png");
return img;
}
catch (Exception e) {
System.out.println("load image error");
return null;
}
}
else if (gameType == 2) {
try {
img = new Image[8];
img[0] = Image.createImage("/backdrop.png");
img[1] = Image.createImage("/heitao.png");
img[2] = Image.createImage("/hongxin.png");
img[3] = Image.createImage("/caohua.png");
img[4] = Image.createImage("/fangkuai.png");
img[5] = Image.createImage("/caidan.png");
img[6] = Image.createImage("/message.png");
img[7] = Image.createImage("/gameover.png");
return img;
}
catch (Exception e) {
System.out.println("load image error");
return null;
}
}
else if (gameType == 3) {
try {
img = new Image[5];
img[0] = Image.createImage("/fangjian.png");
return img;
}
catch (Exception e) {
System.out.println("load image error");
return null;
}
}
else if (gameType == 4) {
try {
img = new Image[5];
img[0] = Image.createImage("/renwu.png");
return img;
}
catch (Exception e) {
System.out.println("load image error");
return null;
}
}
return null;
}
public void showMainCanvas(int type) {
mainCanvas = new MainCanvas(type, display, conn, this, house.houseUserList, jettonList, hall.houseList[hall.choHouseList.getSelectedIndex()][1], (int) userId);
refreshState = 2;
display.setCurrent(mainCanvas);
}
public void showRegister() {
display.setCurrent(register);
return;
}
public void showHall() {
getTwoData.start();
hall.showHall();
}
/*****************************************************
* 功能介紹:退出整個程序
* 輸入參數:無
* 輸出參數:無
*****************************************************/
public void exit() {
try {
destroyApp(false);
notifyDestroyed();
}
catch (Exception e) {
}
}
/*****************************************************
* 功能介紹:根據間隔字符將一字符串切成數組
* 輸入參數:要切的字符串,間隔字符
* 輸出參數:字符串數組
*****************************************************/
public String[] split(String str, String pre) {
Vector veTmp = new Vector();
while (str.indexOf(pre) != -1) {
veTmp.addElement(str.substring(0, str.indexOf(pre)));
str = str.substring(str.indexOf(pre) + 1, str.length());
}
if (veTmp.size() == 0) {
return null;
}
String arrTmp[] = new String[veTmp.size()];
for (int i = 0; i < arrTmp.length; i++) {
arrTmp[i] = (String) veTmp.elementAt(i);
}
veTmp = null;
return arrTmp;
}
/*****************************************************
* 功能介紹:根據間隔字符將一字符串切成數組
* 輸入參數:要切的字符串,間隔字符
* 輸出參數:字符串數組
*****************************************************/
public String[][] split(String str, String pre, int col) {
Vector veTmp = new Vector();
while (str.indexOf(pre) != -1) {
veTmp.addElement(str.substring(0, str.indexOf(pre)));
str = str.substring(str.indexOf(pre) + 1, str.length());
}
if (veTmp.size() == 0) {
return null;
}
String arrTmp[][] = new String[veTmp.size() / col][col];
int n = 0;
for (int i = 0; i < arrTmp.length; i++) {
for (int j = 0; j < col; j++) {
arrTmp[i][j] = (String) veTmp.elementAt(n);
n++;
}
}
veTmp = null;
return arrTmp;
}
/*****************************************************
* 功能介紹:刷新用戶牌公共方法
* 輸入參數:服務端發(fā)下的籌碼數據
* 輸出參數:無
*****************************************************/
private void refreshCards(String inputStr) {
String cardsTmp[][] = split(inputStr, ",", 3);
if (cardsTmp==null){
return;
}
int cards[][] = new int[cardsTmp.length][3];
for (int i = 0; i < cardsTmp.length; i++) {
cards[i][0] = Integer.parseInt(cardsTmp[i][0]);
cards[i][1] = Integer.parseInt(cardsTmp[i][1]);
cards[i][2] = Integer.parseInt(cardsTmp[i][2]);
}
mainCanvas.refreshDeal(cards);
}
public void run() {
String inputStr;
int order;
while (true) {
inputStr = conn.getTwoData();
order = Integer.parseInt(inputStr.substring(0, 2));
inputStr = inputStr.substring(2, inputStr.length());
switch (order) {
case 5: //如果用戶列表有變動則主動將它發(fā)下來
if (inputStr.equals("full")) {
display.setCurrent(new Alert("系統提示", "房間人數已滿或游戲已開始", null, AlertType.INFO));
}
else {
house.refreshUserList(inputStr);
}
break;
case 7: //游戲開始
String arrTmp[] = split(inputStr, "*");
house.refreshUserList(arrTmp[0]);
this.jettonList = split(arrTmp[1], ",", 3);
showMainCanvas(0);
break;
case 8: //所有玩家下注完畢后發(fā)牌
refreshCards(inputStr); //刷新發(fā)牌列表
break;
case 9:
String arrJetton[][] = split(inputStr, ",", 3);
mainCanvas.refreshJetton(arrJetton); //刷新籌碼列表
break;
case 10:
refreshCards(inputStr); //刷新發(fā)牌列表
break;
case 11:
refreshCards(inputStr); //刷新發(fā)牌列表
break;
case 12: //該用戶要牌完畢
refreshCards(inputStr); //刷新發(fā)牌列表
break;
case 13: // 聊天消息
msg.addMsg(inputStr);
if (display.getCurrent() == house.houseForm || display.getCurrent() == mainCanvas) {
msg.showForm();
}
break;
case 14: //游戲結束顯示游戲結果
mainCanvas.gameOver(inputStr);
break;
case 15: //新用戶加入刷新
String arrAddUser[] = split(inputStr, "*");
house.refreshUserList(arrAddUser[0]);
String t0[][] = split(arrAddUser[0], ",", 3);
String t1[][] = split(arrAddUser[1], ",", 3);
mainCanvas.refreshHouseUserList(t0); //刷新用戶列表
mainCanvas.refreshJetton(t1); //刷新籌碼列表
break;
case 16: //加入已開始的游戲
String arr[] = split(inputStr, "*");
house.refreshUserList(arr[0]);
this.jettonList = split(arr[1], ",", 3);
showMainCanvas(1);
refreshCards(arr[2]);
break;
case 17: //刷新用戶列表
house.refreshUserList(inputStr);
String houseUserList[][] = split(inputStr, ",", 3);
mainCanvas.refreshHouseUserList(houseUserList);
break;
case 18: //刷新大廳
hall.refreshHall(inputStr);
break;
}
}
}
public void commandAction(Command c, Displayable d) {
if (d == register && c == cmdOk) {
strPhoneNumber = phoneNumber.getString();
strUserName = userName.getString();
strPassword = password.getString();
if (strPhoneNumber.length() < 11) {
display.setCurrent(new Alert("系統提示", "手機號碼長度必須是11位!", null, AlertType.ERROR));
return;
}
if (strPassword.length() <= 0) {
display.setCurrent(new Alert("系統提示", "您還未填寫登陸密碼!", null, AlertType.ERROR));
return;
}
if (strUserName.length() <= 0) {
display.setCurrent(new Alert("系統提示", "您還未填寫昵稱!", null, AlertType.ERROR));
return;
}
setUserInfo(strPhoneNumber, strPassword, strUserName);
display.setCurrent(new Welcom(display, conn, this));
}
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -