📄 maincanvas.java
字号:
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;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -