www.pudn.com > Puke.rar > 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()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(){ 
   	     
   	     
   	     
   } 
    
 
 
 
 
 
}