📄 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; //游戏主界面
//刷新状态,0为刷新大厅,1为刷新房间用户列表第一次接到房间用户列表时将状态值改为1
//并且建立房间,状态值为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;
}
/*****************************************************
* 功能介绍:刷新用户牌公共方法
* 输入参数:服务端发下的筹码数据
* 输出参数:无
*****************************************************/
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: //如果用户列表有变动则主动将它发下来
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: //所有玩家下注完毕后发牌
refreshCards(inputStr); //刷新发牌列表
break;
case 9:
String arrJetton[][] = split(inputStr, ",", 3);
mainCanvas.refreshJetton(arrJetton); //刷新筹码列表
break;
case 10:
refreshCards(inputStr); //刷新发牌列表
break;
case 11:
refreshCards(inputStr); //刷新发牌列表
break;
case 12: //该用户要牌完毕
refreshCards(inputStr); //刷新发牌列表
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 + -