www.pudn.com > 手机网游源码.rar > MainCanvas.java
package com.dfun.blackjack;
import javax.microedition.lcdui.*;
import java.util.Vector;
import com.nokia.mid.ui.FullCanvas;
/*************************************************
* @author Beetle
* 类功能介绍:游戏主屏幕
**************************************************/
public class MainCanvas
extends FullCanvas
implements Runnable {
/*******************************************************
* 定义公共变量
*******************************************************/
private int softOne = -6, softTwo = -7; //设置软按扭的键值
private int width, height; //屏幕宽高
private int bgWidth, bgHeight; //画布宽高
private Display display; //显示管理器
private Image bufferImg; //双缓存图片
private Graphics bg; //双缓存画布
private Thread refresh; //刷新线程
private Connection conn; //网络连接对象
private boolean isRefresh; //是否进行刷新
private Image img[]; //图片数组
private Main main; //主程序
private String[][] houseUserList; //用户列表
private int[][] dealList; //发牌列表
private String[][] jettonList; //筹码列表
private String[] messageList; //消息列表
private int cardsState[][] = {
{
0, 0, 0}
, {
0, 0, 0}
}; //牌的状态(分牌:分数,张数,是否停牌)
private String houseName; //房间名称
private int showPageNumber; //显示第几页(第几个用户)
private int myPageNumber; //当前手机的在第几页
private int gameState; //游戏状态
private String message; //要在消息栏显示的消息
private int times; //计时器
private int currentUserId; //当前用户id
private boolean isSpread = false; //是否分牌
private boolean isShowMenu; //是否显示菜单
private String gameValue[]; //游戏结果
private int menuIndex; //标识当前选中的菜单项
/*******************************************************
* 功能介绍:构造函数
* 输入参数:初始化类别(0新游戏开始或1用户中途加入)显示管理,连接对
* 象,手机号码,主程序
*******************************************************/
public MainCanvas(int type, Display display, Connection conn, Main main, String[][] houseUserList, String[][] jettonList, String houseName, int currentUserId) {
/*******************************************************
* 初始化公共变量
*******************************************************/
this.main = main;
this.display = display; //初始化显示管理器
this.conn = conn;
this.houseUserList = houseUserList; //用户列表
this.jettonList = jettonList; //筹码列表
this.houseName = houseName; //房间名称
this.currentUserId = currentUserId; //当前用户id
isShowMenu = false; //默认不显示菜单
img = main.loadImg(2);
isRefresh = true; //默认持继刷新
bgWidth = 176; //画布宽
bgHeight = 208; //画布高
width = getWidth(); //初始化屏幕宽度
height = getHeight(); //初始化屏幕高度
menuIndex = 1; //菜单选项默认为1
bufferImg = Image.createImage(bgWidth, bgHeight); //创建双缓存图像
try {
bg = bufferImg.getGraphics(); //创建双缓存画布
}
catch (Exception e) {
System.out.println("load image error");
}
bg.setFont(Font.getFont(Font.FACE_PROPORTIONAL, Font.STYLE_PLAIN, Font.SIZE_SMALL));
getUserPage(); //取得当前手机用户所在的页码,把当前显示设为当前用户
if (type == 0) { //用户当前为普通用户
gameState = 1;
//message = "游戏开始请下注";
message = "please chip in";
times = 200;
}
else if (type == 1) { //用户当前为观众
gameState = 10;
//message = "您现在是观众请等待局开始";
message = "please wait";
times = 0;
}
refresh = new Thread(this); //进行持续刷新
refresh.start(); //启动刷新
}
public void paint(Graphics g) {
try {
if (isRefresh == true) {
showBack(); //显示背景
if (gameState != 1) {
showUserCards();
}
if (gameState == 5) { //显示结果
showValue();
}
//判断是否显示菜单
if (isShowMenu) {
showMenu();
}
g.drawImage(bufferImg, width / 2, height / 2, Graphics.HCENTER | Graphics.VCENTER); //将双缓存图片绘到屏幕上
}
}
catch (Exception e) {
System.out.println("paint error " + e.getMessage());
}
}
/*****************************************************
* 功能介绍:公用的线程方法,根据Thread.currentThread判别
* 用户调用的是哪个线程
* 输入参数:无
* 输出参数:无
*****************************************************/
public void run() {
if (Thread.currentThread() == refresh) { //刷新线程
try {
while (isRefresh) {
Thread.sleep(80); //按指定毫秒刷一次屏
if (times != 0) {
times--;
}
repaint();
}
}
catch (Exception e) {
}
}
}
/*****************************************************
* 功能介绍:取得指定用户id的分数及牌数
* 输入参数:用户id
* 输出参数:用户分数数组(分牌1,分牌2),分牌的牌数
*****************************************************/
private int[][] getPoint(int userId) {
int oneCount = 0, twoCount = 0, oneCards = 0, twoCards = 0, oneA = 0, twoA = 0;
int userCars[][] = getUserCards(userId); //取得该用户所有的牌
if (userCars == null) { //如果该用户没牌则返回空
return null;
}
for (int i = 0; i < userCars.length; i++) {
int intTmp = userCars[i][0];
//先将牌的值转成正常的数值
if (intTmp > 13 && intTmp <= 26) { //红桃
intTmp -= 13;
}
else if (intTmp > 26 && intTmp <= 39) { //草花
intTmp -= 26;
}
else if (intTmp > 39 && intTmp <= 52) { //方块
intTmp -= 39;
}
if (userCars[i][1] == 0) {
oneCards++; //统计分牌1的牌数
switch (intTmp) { //统计分牌1的分数
case 1:
oneCount += 11;
oneA++;
break;
case 11:
oneCount += 10;
break;
case 12:
oneCount += 10;
break;
case 13:
oneCount += 10;
break;
default:
oneCount += intTmp;
break;
}
}
else if (userCars[i][1] == 1) {
twoCards++; //分牌2的牌数
switch (intTmp) { //统计分牌2的分数
case 1:
twoCount += 11;
twoA++;
break;
case 11:
twoCount += 10;
break;
case 12:
twoCount += 10;
break;
case 13:
twoCount += 10;
break;
default:
twoCount += intTmp;
break;
}
}
}
//计算出分牌1和分牌2的最高分数
for (int i = 0; i < oneA; i++) {
if (oneCount > 21) {
oneCount -= 10;
}
}
for (int i = 0; i < twoA; i++) {
if (twoCount > 21) {
twoCount -= 10;
}
}
int[][] arrTmp = {
{
0, 0}
, {
0, 0}
};
arrTmp[0][0] = oneCount;
arrTmp[0][1] = oneCards;
arrTmp[1][0] = twoCount;
arrTmp[1][1] = twoCards;
return arrTmp;
}
/*****************************************************
* 功能介绍:显示当前页用户的牌
* 输入参数:无
* 输出参数:无
*****************************************************/
private void showUserCards() {
//取得当前页的用户id
if (dealList == null) {
return;
}
int userId = Integer.parseInt(houseUserList[showPageNumber][0]);
int oneArea = 20, twoArea = 20;
//找出该用户所有的牌
int userCars[][] = getUserCards(userId);
if (userCars == null) {
return;
}
for (int i = 0; i < userCars.length; i++) {
if (userCars[i][1] == 0) {
showCard(userCars[i][0], oneArea, 51);
oneArea += 30;
}
else if (userCars[i][1] == 1) {
showCard(userCars[i][0], twoArea, 97);
twoArea += 30;
}
}
int arrTmp[][] = getPoint(userId);
if (arrTmp == null) { //如果该用户没牌则不显示
return;
}
bg.setColor(0x000000);
//画分牌1的值
bg.drawString(arrTmp[0][0] + "", 11, 69, Graphics.HCENTER | Graphics.TOP);
//如果有分牌2则画它的值
if (arrTmp[1][0] > 0) {
bg.drawString(arrTmp[1][0] + "", 11, 116, Graphics.HCENTER | Graphics.TOP);
}
}
/*****************************************************
* 功能介绍:显示一张牌
* 输入参数:要显示的牌,x轴,y轴
* 输出参数:无
*****************************************************/
private void showCard(int i, int x, int y) {
if (i <= 13) { //黑桃
bg.setColor(0x000000);
bg.drawImage(img[1], x, y, Graphics.LEFT | Graphics.TOP);
}
else if (i <= 26) { //红桃
i -= 13;
bg.setColor(0xFF0000);
bg.drawImage(img[2], x, y, Graphics.LEFT | Graphics.TOP);
}
else if (i <= 39) { //草花
i -= 26;
bg.setColor(0x000000);
bg.drawImage(img[3], x, y, Graphics.LEFT | Graphics.TOP);
}
else if (i <= 52) { //方块
i -= 39;
bg.setColor(0xFF0000);
bg.drawImage(img[4], x, y, Graphics.LEFT | Graphics.TOP);
}
String strNumber = "";
switch (i) {
case 1:
strNumber = "A";
break;
case 11:
strNumber = "J";
break;
case 12:
strNumber = "Q";
break;
case 13:
strNumber = "K";
break;
default:
strNumber = Integer.toString(i);
break;
}
bg.drawString(strNumber, x + 15, y + 5, Graphics.HCENTER | Graphics.TOP); //显示牌数
}
/*****************************************************
* 功能介绍:显示背景
* 输入参数:无
* 输出参数:无
*****************************************************/
private void showBack() {
bg.setColor(0xffffff);
bg.fillRect(0, 0, getWidth(), getHeight());
bg.setColor(0x000000);
bg.drawImage(img[0], 0, 0, Graphics.TOP | Graphics.LEFT); //显示背景
bg.drawString(houseName, bgWidth / 2, 6, Graphics.HCENTER | Graphics.TOP);
if (myPageNumber == showPageNumber) { //如果当前页属于用户则名字用其它颜色表示
bg.setColor(0x3AA23F);
}
else {
bg.setColor(0x000000);
}
bg.drawString(houseUserList[showPageNumber][1] + "-" + jettonList[showPageNumber][1] + "-" + jettonList[showPageNumber][2], bgWidth / 2, 23, Graphics.HCENTER | Graphics.TOP);
bg.setColor(0x000000);
switch (gameState) {
case 1: //下注
//下注
bg.drawString("chip in", 35, 192, Graphics.HCENTER | Graphics.TOP);
//开始
bg.drawString("begin", 140, 192, Graphics.HCENTER | Graphics.TOP);
if (times != 0) {
bg.drawString(times + "", bgWidth / 2, bgHeight / 2, Graphics.HCENTER | Graphics.TOP);
}
else {
if (gameState == 1) {
stopChipIn(); //停止下注
}
}
break;
case 2: //等待开牌
break;
case 3:
//要牌
bg.drawString("next", 35, 192, Graphics.HCENTER | Graphics.TOP);
//停牌
bg.drawString("stop", 140, 192, Graphics.HCENTER | Graphics.TOP);
//message = "双倍下注请按1";
message = "double NO 1";
break;
case 4:
//message = "正在等待其它玩家要完牌";
message = "waiting deal over for other user";
break;
case 5:
if (times != 0) {
bg.drawString(times + "", bgWidth / 2, bgHeight / 2, Graphics.HCENTER | Graphics.TOP);
}
else {
reBegin(); //游戏重新开始
}
//返回
bg.drawString("back", 35, 192, Graphics.HCENTER | Graphics.TOP);
//继续
bg.drawString("continue", 140, 192, Graphics.HCENTER | Graphics.TOP);
message = "game over please choice.";
//message = "游戏结束请选择.";
break;
}
bg.drawString(message, bgWidth / 2, 162, Graphics.HCENTER | Graphics.BOTTOM);
}
/*****************************************************
* 功能介绍:刷新用户列表
* 输入参数:用户列表
* 输出参数:无
*****************************************************/
public void refreshHouseUserList(String[][] houseUserList) {
this.houseUserList = houseUserList;
getUserPage(); //重新定位当前用户的页
}
/*****************************************************
* 功能介绍:刷新发牌列表
* 输入参数:发牌列表
* 输出参数:无
*****************************************************/
public void refreshDeal(int[][] dealList) {
this.dealList = dealList;
int arrTmp[][] = getPoint(currentUserId); //取得分数
//如果该用户没牌则不处理
if (arrTmp == null) {
return;
}
cardsState[0][0] = arrTmp[0][0];
cardsState[0][1] = arrTmp[0][1];
cardsState[1][0] = arrTmp[1][0];
cardsState[1][1] = arrTmp[1][1];
//如21点就停牌(分牌1)
if (cardsState[0][0] == 21) {
cardsState[0][2] = 2;
}
else if (cardsState[0][0] > 21) {
cardsState[0][2] = 4;
}
//如暴了或21点就停牌(分牌2)
if (cardsState[1][0] == 21 && isSpread) {
cardsState[1][2] = 2;
}
else if (cardsState[1][0] > 21 && isSpread) {
cardsState[1][2] = 4;
}
//发牌后检测游戏是否结束
if (cardsState[0][2] != 0) {
if (isSpread) {
//如果第一分牌结束第二分牌也结束则进入等待
if (cardsState[1][2] != 0) {
if (gameState != 4) {
conn.sendOneData("12");
}
gameState = 4;
}
}
else {
//如果第一分牌结束没有第二分牌则进入等待
if (gameState != 4) {
conn.sendOneData("12");
}
gameState = 4;
}
}
//如果原本处在押分后等待阶段则接到牌后改为3(要牌阶段)
if (gameState == 2) {
gameState = 3;
}
}
/*****************************************************
* 功能介绍:刷新筹码列表
* 输入参数:筹码列表
* 输出参数:无
*****************************************************/
public void refreshJetton(String[][] jettonList) {
this.jettonList = jettonList;
}
/*****************************************************
* 功能介绍:刷新消息列表
* 输入参数:消息列表
* 输出参数:无
*****************************************************/
public void refreshMessage(String[] messageList) {
this.messageList = messageList;
}
/*****************************************************
* 功能介绍:滚动屏幕查看其它玩家
* 输入参数:方向
* 输出参数:无
*****************************************************/
private void rollCanvas(int orientation) {
if (orientation == Canvas.UP) {
showPageNumber--;
if (showPageNumber < 0) {
showPageNumber = houseUserList.length - 1;
}
}
else if (orientation == Canvas.DOWN) {
showPageNumber++;
if (showPageNumber > houseUserList.length - 1) {
showPageNumber = 0;
}
}
}
/*****************************************************
* 功能介绍:下注
* 输入参数:无
* 输出参数:无
*****************************************************/
private void chipIn() {
int intTmpOne = Integer.parseInt(jettonList[myPageNumber][1]);
int intTmpTwo = Integer.parseInt(jettonList[myPageNumber][2]);
if (intTmpOne == 0) {
message = "您已没有筹码不能下注!";
return;
}
intTmpOne = intTmpOne + intTmpTwo;
intTmpTwo = intTmpTwo + 10;
if (intTmpTwo > 100 || intTmpTwo > intTmpOne) {
intTmpTwo = 10;
}
intTmpOne = intTmpOne - intTmpTwo;
jettonList[myPageNumber][1] = Integer.toString(intTmpOne);
jettonList[myPageNumber][2] = Integer.toString(intTmpTwo);
}
/*****************************************************
* 功能介绍:停止下注并把所下的注发往服务器
* 输入参数:无
* 输出参数:无
*****************************************************/
private void stopChipIn() {
times = 0;
gameState = 2;
//message = "正在等待其它闲家下注!";
message = "waiting chip in over for other user!";
conn.sendOneData("07" + jettonList[myPageNumber][2]); //下注
}
/*****************************************************
* 功能介绍:要牌
* 输入参数:第几分牌
* 输出参数:无
*****************************************************/
private void getCard(int number) {
conn.sendOneData("09" + number);
}
/*****************************************************
* 功能介绍:停牌
* 输入参数:第几分牌
* 输出参数:无
*****************************************************/
private void stand(int number) {
cardsState[number][2] = 1;
//停牌判断发牌是否结束(如果结束则进入等待状态)
if (cardsState[0][2] != 0 && !isSpread) {
gameState = 4;
conn.sendOneData("12");
}
if (cardsState[1][2] != 0 && isSpread) {
gameState = 4;
conn.sendOneData("12");
}
}
/*****************************************************
* 功能介绍:分牌
* 输入参数:第几分牌
* 输出参数:无
*****************************************************/
private void spread() {
int userCards[][] = getUserCards(currentUserId);
if (userCards == null) {
return;
}
//如果第一分牌的两张牌不相同则不能分牌
if (getCardNum(userCards[0][0]) != getCardNum(userCards[1][0])) {
return;
}
//只有在没有第二轮发牌,且没有分牌的情况下才可分牌
if (cardsState[0][1] == 2 && !isSpread) {
conn.sendOneData("10");
isSpread = true;
gameState = 3;
}
}
/*****************************************************
* 功能介绍:加倍下注
* 输入参数:第几分牌
* 输出参数:无
*****************************************************/
private void doubleCard(int number) {
//双倍下注后该分牌就停止了
cardsState[number][2] = 1;
conn.sendOneData("11" + number);
}
/*****************************************************
* 功能介绍:如数返回牌面的值
* 输入参数:未处理的数
* 输出参数:正常的牌面值
*****************************************************/
private int getCardNum(int num) {
if (num > 13 && num <= 26) {
num -= 13;
}
else if (num > 26 && num <= 39) {
num -= 26;
}
else if (num > 39 && num <= 52) {
num -= 39;
}
return num;
}
/*****************************************************
* 功能介绍:取得指定用户牌的列表
* 输入参数:用户id
* 输出参数:用户牌的列表
*****************************************************/
private int[][] getUserCards(int userId) {
//先测出该用户有几条记录
int j = 0;
for (int i = 0; i < dealList.length; i++) {
if (dealList[i][0] == userId) {
j++;
}
}
if (j == 0) {
return null;
}
//定义一个相应记录数的临时数组(牌数,第几付牌,不包括用户id)
int userCars[][] = new int[j][2];
int l = 0;
for (int i = 0; i < dealList.length; i++) {
if (dealList[i][0] == userId) {
userCars[l][0] = dealList[i][1];
userCars[l][1] = dealList[i][2];
l++;
}
}
return userCars;
}
/*****************************************************
* 功能介绍:当用户按下中间键则弹出菜单
* 输入参数:无
* 输出参数:无
*****************************************************/
public void showMenu() {
int dfColor = bg.getColor();
bg.drawImage(img[5], bgWidth / 2, bgHeight / 2 + 5, Graphics.HCENTER | Graphics.TOP);
bg.setColor(0xffffff);
bg.drawRect(65, 104 + 11 * menuIndex, 44, 11);
bg.setColor(dfColor);
}
/*****************************************************
* 功能介绍:显示游戏结果
* 输入参数:无
* 输出参数:无
*****************************************************/
public void showValue() {
int tmp;
int dfColor = bg.getColor(); //默认颜色
int yellow = 0xE4F807;
int red = 0xF80729;
int green = 0x08B124;
if (gameValue == null) { //观众不必显示游戏结果
return;
}
if (times == 0) {
return;
}
bg.drawImage(img[7], bgWidth / 2, bgHeight / 2 - 27, Graphics.HCENTER | Graphics.TOP);
if (gameValue.length == 1) { //只有一个分牌
tmp = Integer.parseInt(gameValue[0]);
if (tmp > 0) {
bg.setColor(dfColor);
bg.drawString("win", bgWidth / 2 - 10, bgHeight / 2, Graphics.HCENTER | Graphics.TOP);
bg.setColor(yellow);
bg.drawString(gameValue[0], bgWidth / 2 + 10, bgHeight / 2, Graphics.HCENTER | Graphics.TOP);
}
else if (tmp < 0) {
bg.setColor(dfColor);
bg.drawString("lost", bgWidth / 2 - 10, bgHeight / 2, Graphics.HCENTER | Graphics.TOP);
bg.setColor(red);
bg.drawString(gameValue[0], bgWidth / 2 + 10, bgHeight / 2, Graphics.HCENTER | Graphics.TOP);
}
else if (tmp == 0) {
bg.setColor(dfColor);
bg.drawString("tie", bgWidth / 2 - 10, bgHeight / 2, Graphics.HCENTER | Graphics.TOP);
bg.setColor(green);
bg.drawString(gameValue[0], bgWidth / 2 + 10, bgHeight / 2, Graphics.HCENTER | Graphics.TOP);
}
}
else if (gameValue.length == 2) { //两个分牌
tmp = Integer.parseInt(gameValue[0]);
if (tmp > 0) {
bg.setColor(dfColor);
bg.drawString("win", bgWidth / 2 - 10, bgHeight / 2, Graphics.HCENTER | Graphics.TOP);
bg.setColor(yellow);
bg.drawString(gameValue[0], bgWidth / 2 + 10, bgHeight / 2, Graphics.HCENTER | Graphics.TOP);
}
else if (tmp < 0) {
bg.setColor(dfColor);
bg.drawString("lost", bgWidth / 2 - 10, bgHeight / 2, Graphics.HCENTER | Graphics.TOP);
bg.setColor(red);
bg.drawString(gameValue[0], bgWidth / 2 + 10, bgHeight / 2, Graphics.HCENTER | Graphics.TOP);
}
else if (tmp == 0) {
bg.setColor(dfColor);
bg.drawString("tie", bgWidth / 2 - 10, bgHeight / 2, Graphics.HCENTER | Graphics.TOP);
bg.setColor(green);
bg.drawString(gameValue[0], bgWidth / 2 + 10, bgHeight / 2, Graphics.HCENTER | Graphics.TOP);
}
tmp = Integer.parseInt(gameValue[1]);
if (tmp > 0) {
bg.setColor(dfColor);
bg.drawString("win", bgWidth / 2 - 10, bgHeight / 2 + 10, Graphics.HCENTER | Graphics.TOP);
bg.setColor(yellow);
bg.drawString(gameValue[1], bgWidth / 2 + 10, bgHeight / 2 + 10, Graphics.HCENTER | Graphics.TOP);
}
else if (tmp < 0) {
bg.setColor(dfColor);
bg.drawString("lost", bgWidth / 2, bgHeight / 2 - 10, Graphics.HCENTER | Graphics.TOP);
bg.setColor(red);
bg.drawString(gameValue[1], bgWidth / 2, bgHeight / 2 + 10, Graphics.HCENTER | Graphics.TOP);
}
else if (tmp == 0) {
bg.setColor(dfColor);
bg.drawString("tie", bgWidth / 2, bgHeight / 2 - 10, Graphics.HCENTER | Graphics.TOP);
bg.setColor(green);
bg.drawString(gameValue[1], bgWidth / 2, bgHeight / 2 + 10, Graphics.HCENTER | Graphics.TOP);
}
}
bg.setColor(dfColor);
}
/*****************************************************
* 功能介绍:游戏结束
* 输入参数:分牌一的得分结果,分牌2的得分结果
* 输出参数:无
*****************************************************/
public void gameOver(String inputStr) {
gameValue = main.split(inputStr, ",");
gameState = 5; //将游戏状态设置为游戏结束等待用户先择继续或退出
times = 200; //80秒显示游戏结果并让用户选择下一步
}
/*****************************************************
* 功能介绍:游戏重新开始
* 输入参数:无
* 输出参数:无
*****************************************************/
public void reBegin() {
dealList = null;
cardsState[0][2] = 0;
cardsState[1][2] = 0;
times = 200;
gameState = 1;
}
/*****************************************************
* 功能介绍:取得当前用户所在的页码
* 输入参数:无
* 输出参数:无
*****************************************************/
public void getUserPage() {
for (int i = 0; i < houseUserList.length; i++) { //把默认显示的页转到当前用户本身
String strTmp = String.valueOf(currentUserId);
if (houseUserList[i][0].equals(strTmp)) {
myPageNumber = i;
showPageNumber = myPageNumber;
}
}
}
/*****************************************************
* 功能介绍:退出当前游戏
* 输入参数:无
* 输出参数:无
*****************************************************/
public void outGame() {
isRefresh=false;
main.house.outHouse(main.house.houseId);
System.gc(); //注消内存
}
public void keyPressed(int keyCode) {
if (getGameAction(keyCode) == Canvas.FIRE) {
if (isShowMenu == true) {
switch (menuIndex) {
case 1: //聊天
main.msg.showForm();
break;
case 2: //返回
break;
case 3: //退出
outGame();
break;
case 4: //帮助
break;
}
isShowMenu=false;
}
else {
isShowMenu = true;
}
return;
}
if (getGameAction(keyCode) == Canvas.UP) { //向上
if (isShowMenu) {
menuIndex--;
if (menuIndex < 1) {
menuIndex = 4;
}
return;
}
rollCanvas(Canvas.UP); //滚动屏幕
return;
}
else if (getGameAction(keyCode) == Canvas.DOWN) { //向下
if (isShowMenu) { //显示菜单时按了向下
menuIndex++;
if (menuIndex > 4) {
menuIndex = 1;
}
return;
}
rollCanvas(Canvas.DOWN); //滚动屏幕
return;
}
else if (getGameAction(keyCode) == Canvas.LEFT) { //向左
return;
}
else if (getGameAction(keyCode) == Canvas.RIGHT) { //向右
return;
}
if (myPageNumber != showPageNumber) {
message = "当前不是您所在的页!";
return;
}
switch (gameState) {
case 1: //下注或开始
if (keyCode == softOne) {
chipIn(); //下注
}
else if (keyCode == softTwo) {
stopChipIn(); //停止下注
}
break;
case 2: //等待开牌
break;
case 3: //要牌或停牌(无分牌)
if (keyCode == softOne) { //按了要牌键
if (cardsState[0][2] == 0) {
getCard(0);
}
else if (cardsState[0][2] != 0 && cardsState[1][2] == 0 && isSpread) {
getCard(1);
}
}
else if (keyCode == softTwo) { //按了停牌键
if (cardsState[0][2] == 0) {
stand(0);
}
else if (cardsState[0][2] != 0 && cardsState[1][2] == 0 && isSpread) {
stand(1);
}
}
else if (keyCode == Canvas.KEY_NUM1) { //按了双倍下注键
if (cardsState[0][2] == 0) {
doubleCard(0);
}
else if (cardsState[0][2] != 0 && cardsState[1][2] == 0 && isSpread) {
doubleCard(1); ;
}
}
else if (keyCode == Canvas.KEY_NUM2) { //按了分牌键
//如果第一付牌现在是两张牌,而且还没分过牌就可以分牌
spread();
}
break;
case 4: //要完牌(进入等待其它人)
break;
case 5: //显示发牌结果,并且让用户选择继续或离开
if (keyCode == softOne) { //返回大厅
outGame();
}
else if (keyCode == softTwo) { //继续游戏
reBegin(); //游戏重新开始
}
break;
}
}
}