📄 gamescreen.java
字号:
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import javax.microedition.lcdui.game.*;
import java.util.Random;
public class GameScreen extends GameCanvas implements Runnable,CommandListener {
private Puke midlet;
private int counter =0;
private int sW,sH,Total,count,t,r,RobSlec;
private boolean Pause,turn;
private boolean isLoaded = false;
private Image im_load,im_hand,im_back,im_card,im_figure,im_chioce;
private Sprite hand;
private Sprite[] chioce;
private Card[] icard;
private Card[] hcard;
private Random random=new Random();
//主状态
private int GameState;
private static final int LOADING=0;
private static final int START=1;
private static final int PLAY=2;
private static final int PAUSE=3;
private static final int NEXT=4;
private static final int EXIT=5;
//游戏中
private int PlayState;
private static final int GET=0;
private static final int CHOOSE=1;
private static final int WAIT=2;
private static final int COMPARE=3;
private static final int ACCOUNT=4;
//选择
private int PressChoose;
private static final int NULL=0;
private static final int FOLLOW=1;
private static final int COMPETE=2;
private static final int DISCARD=3;
class Loading implements Runnable {
//内线程
Thread innerThread = null;
public Loading() {
innerThread = new Thread(this);
innerThread.start();
}
public void run(){
while (counter<=11) {
counter++;;
try {
Thread.sleep(10);
}
catch (Exception ex) {}
}
//loading结束
isLoaded = true;
}
}
private Loading loading = null;
public GameScreen(Puke midlet){
super(true);
setFullScreenMode(true);
this.midlet = midlet;
/////////////////////////////////////////////
sW=getWidth();
sH=getHeight();
Total=0;
count=0;
try{
im_load = Image.createImage("/load.png");
im_hand = Image.createImage("/hand.png");
im_back = Image.createImage("/back.png");
im_card = Image.createImage("/card.png");
im_figure = Image.createImage("/figure.png");
im_chioce = Image.createImage("/chioce.png");
}catch(java.io.IOException e){}
hand = new Sprite (im_hand,20,29);
hand.setPosition(sW/2,sH/2);
//**********************//
icard = new Card[]{
new Card(im_back),
new Card(im_back),
new Card(im_back),
};
hcard = new Card[]{
new Card(im_back),
new Card(im_back),
new Card(im_back),
};
chioce =new Sprite[]{
new Sprite(im_chioce,18,13),
new Sprite(im_chioce,18,13),
new Sprite(im_chioce,18,13),
};
GameState=LOADING;
PlayState=GET;
PressChoose=NULL;
//////////////////////////////////////////////
loading = new Loading();
startThread();
setCommandListener(this);
}
private void startThread(){
Pause=false;
Thread th=new Thread(this);
th.start();
}
public void commandAction(Command c, Displayable d){
}
protected void keyPressed(int keyCode){
switch(keyCode){
case -6://左
switch(PlayState){//堆栈
case GET://抓牌
if(turn){
if(t==0&&hand.collidesWith(icard[0],true)){
icard[0].Pressed=!icard[0].Pressed;
icard[0].PressAndRelese();
if(icard[0].Goted){
icard[0].setImage(im_card,30,48);
icard[0].setFrame(icard[0].Col*12+icard[0].Num);
r=0;
turn=false;
}
if(icard[0].Pressed){
hand.setFrame(1);
}
if(!icard[0].Pressed){
hand.setFrame(0);
}break;
}
if(t==1&&hand.collidesWith(icard[1],true)){
icard[1].Pressed=!icard[1].Pressed;
icard[1].PressAndRelese();
if(icard[1].Goted){
icard[1].setImage(im_card,30,48);
icard[1].setFrame(icard[1].Col*12+icard[1].Num);
r=1;
turn=false;
}
if(icard[1].Pressed){
hand.setFrame(1);
}
if(!icard[1].Pressed){
hand.setFrame(0);
}break;
}
if(t==2&&hand.collidesWith(icard[2],true)){
icard[2].Pressed=!icard[2].Pressed;
icard[2].PressAndRelese();
if(icard[2].Goted){
icard[2].setImage(im_card,30,48);
icard[2].setFrame(icard[2].Col*12+icard[2].Num);
r=2;
turn=false;
}
if(icard[2].Pressed){
hand.setFrame(1);
}
if(!icard[2].Pressed){
hand.setFrame(0);
}break;
}
}
break;
case CHOOSE://比牌
if(PressChoose==COMPETE&&hand.collidesWith(icard[0],true)&&!icard[0].Sended){
icard[0].Selected=!icard[0].Selected;
icard[0].SelectAndRelese();
}
if(PressChoose==FOLLOW&&Total>10){//跟牌
PressChoose=NULL;
PlayState=WAIT;
turn=false;
}
break;
}
break;
case -7://右
Pause=true;
if(midlet.BackTo==1)
midlet.mainMenuScreenShow();
break;
}
}
private void input() {
int keyStates = getKeyStates();
if((keyStates & FIRE_PRESSED) != 0){
//中
if(GameState==PLAY&&PlayState==CHOOSE){
for(int i=0;i<3;i++)
if(hand.collidesWith(chioce[i],true)){
PressChoose=i+1;
}
if(PressChoose==COMPETE){//发出
if(icard[0].Selected){
icard[0].SendCard();
PressChoose=NULL;
PlayState=COMPARE;
}
}
}
}else if((keyStates & UP_PRESSED) != 0){
//上
if(hand.getY()>0)
hand.move(0,-4);
if(PlayState==GET){
for(int i=0;i<3;i++)
if(icard[i].getY()>0)
icard[i].MoveCard(0,-4);
}
if(GameState==PLAY&&PlayState==CHOOSE&&PressChoose==FOLLOW){
hand.move(0,4);
Total++;
}
}else if ((keyStates & DOWN_PRESSED) !=0 ){
//下
if(hand.getY()<(sW+hand.getHeight()))
hand.move(0,4);
if(PlayState==GET){
for(int i=0;i<3;i++)
if(icard[i].getY()<sW)
icard[i].MoveCard(0,4);
}
if(GameState==PLAY&&PlayState==CHOOSE&&PressChoose==FOLLOW){
hand.move(0,-4);
Total--;
}
}else if ((keyStates & LEFT_PRESSED) !=0 ){
//左
if(hand.getX()>0)
hand.move(-4,0);
if(PlayState==GET){
for(int i=0;i<3;i++)
if(icard[i].getX()>0)
icard[i].MoveCard(-4,0);
}
if(GameState==PLAY&&PlayState==CHOOSE&&PressChoose==FOLLOW){
hand.move(4,0);
Total--;
}
}else if ((keyStates & RIGHT_PRESSED) !=0 ){
//右
if(hand.getX()<(sW-hand.getWidth()))
hand.move(4,0);
if(PlayState==GET){
for(int i=0;i<3;i++)
if(icard[i].getX()<(sW-icard[i].getWidth()))
icard[i].MoveCard(4,0);
}
if(GameState==PLAY&&PlayState==CHOOSE&&PressChoose==FOLLOW){
hand.move(-4,0);
Total++;
}
}
}
public void run(){
Graphics g = getGraphics();
while(!Pause){
switch(GameState){
case LOADING:
if (isLoaded) {
loading = null;
im_load = null;
GameState = START;
}
drawScreen(g);
break;
case START:
for(int i=0;i<3;i++)
{
icard[i].init();
icard[i].Num=random.nextInt(13);
icard[i].Col=random.nextInt(4);
icard[i].setImage(im_back,30,48);
}
for(int i=0;i<3;i++){
hcard[i].init();
hcard[i].setImage(im_back,30,48);
hcard[i].Num=random.nextInt(13);
hcard[i].Col=random.nextInt(4);
}
turn=true;
Total=10;//Time=?
hand.setPosition(83,115);
chioce[0].setPosition(88,100);
chioce[0].setFrame(0);
chioce[1].setPosition(115,100);
chioce[1].setFrame(1);
chioce[2].setPosition(144,100);
chioce[2].setFrame(2);
count=0;
for(int i=0;i<3;i++){
chioce[i].setVisible(false);
}
drawScreen(g);
try{Thread.sleep(1000);}catch (Exception e){}
GameState=PLAY;
PlayState=GET;
PressChoose=NULL;
break;
case PLAY:////////////////游戏中/////////////////////////////////////
drawScreen(g);
try{Thread.sleep(10);}catch (Exception e){}
switch(PlayState){//***********
case GET:
input();
robotget();
break;
case CHOOSE:
input();
switch(PressChoose){//选项
case FOLLOW:
break;
case COMPETE:
break;
case DISCARD:
GameState=NEXT;
break;
}
break;
case WAIT:
robot();
try{Thread.sleep(1000);}catch (Exception e){}
drawScreen(g);
try{Thread.sleep(1000);}catch (Exception e){}
PlayState=CHOOSE;
break;
case COMPARE:
try{Thread.sleep(1000);}catch (Exception e){}
compare();
PlayState=ACCOUNT;
break;
case ACCOUNT:
account();
try{Thread.sleep(1000);}catch (Exception e){}
GameState=NEXT;
}//********************************
break;////////////////////////////////////////////////////////////
case PAUSE:
drawScreen(g);
try{Thread.sleep(20);}catch (Exception e){}
break;
case NEXT:
drawScreen(g);
try{Thread.sleep(20);}catch (Exception e){}
GameState=START;
break;
}//最外的switch
}
}
public void drawScreen(Graphics g) {
g.setColor(0x006633);
g.fillRect(0,0,sW,sH);
g.setColor(0xffffff);
switch(GameState){
case LOADING:
g.setColor(0x000000);
g.fillRect(0,0,sW,sH);
g.drawImage(im_load,30,103,Graphics.TOP|Graphics.LEFT);
g.setColor(0xffffff);
g.drawLine(30,117,30+10*counter,117);
break;
case START:
g.drawImage(im_figure,0,0,Graphics.TOP|Graphics.LEFT);
g.drawImage(im_back,81,96,Graphics.TOP|Graphics.LEFT);
break;
case PLAY:
g.drawImage(im_figure,0,0,Graphics.TOP|Graphics.LEFT);
for(int i=0;i<3;i++){
icard[i].paint(g);
}
for(int i=0;i<3;i++){
hcard[i].paint(g);
}
for(int i=0;i<3;i++){
chioce[i].paint(g);
}
hand.paint(g);
if(PlayState==GET){
}else if(PlayState==CHOOSE){
}else if(PlayState==WAIT){
}else if(PlayState==COMPARE){
}else if(PlayState==ACCOUNT){
}
break;
case PAUSE:
break;
case NEXT:
break;
}
flushGraphics();
}
public void compare(){
}
public void robotget(){
if(!turn){
switch(r){
case 0:
System.out.println(9999);
hcard[0].setImage(im_card,30,48);
hcard[0].setFrame(hcard[0].Col*12+hcard[0].Num);
hcard[0].setPosition(4,42);
turn=true;
t=1;
break;
case 1:
hcard[1].setImage(im_card,30,48);
hcard[1].setFrame(hcard[1].Col*12+hcard[1].Num);
hcard[1].setPosition(39,42);
turn=true;
t=2;
break;
case 2:
hcard[2].setImage(im_card,30,48);
hcard[2].setFrame(hcard[2].Col*12+hcard[2].Num);
hcard[2].setPosition(75,42);
r=0;t=0;
turn=true;
PlayState=CHOOSE;
for(int k=0;k<3;k++)
chioce[k].setVisible(true);
break;
}
}
}
public void robot(){
if(!turn){
RobSlec=random.nextInt(3)+1;//并无逻辑
RobSlec=1;
System.out.println(4444);
switch(RobSlec){
case FOLLOW:
Total+=10;
turn=true;
break;
case COMPETE:
turn=true;
break;
case DISCARD:
break;
}
}
}
public void account(){
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -