www.pudn.com > 红心大战 游戏源码.rar > ScoreCanvas.java


package com.skybright.pig; 
 
import javax.microedition.lcdui.*; 
 
 
public class ScoreCanvas extends Canvas implements CommandListener 
{ 
    private Command cmdContinue; //继续,在一局没有结束 
    private Command cmdNextGame; //一局结束后,再开一局 
     private Command exitCommand; 
    private Duel duel; 
 
    public ScoreCanvas(Duel d) 
    { 
        cmdContinue = new Command("\u7EE7\u7EED", 4, 1); 
        cmdNextGame = new Command("\u518d\u62f1\u4e00\u5c40", Command.SCREEN, 1); 
 
        exitCommand = new Command("\u9000\u51fa", Command.EXIT, 1); 
 
        duel = d; 
        addCommand(cmdContinue); 
         addCommand(exitCommand); 
        setCommandListener(this); 
    } 
 
    public void show() 
    { 
        PigMiDlet.display.setCurrent(this); 
    } 
 
    public void paint(Graphics g) 
    { 
        g.setColor(Config.BACKGROUND[0], Config.BACKGROUND[1], 
                   Config.BACKGROUND[2]); 
        g.fillRect(0, 0, getWidth(), getHeight()); 
 
        if (duel == null) 
        { 
            return; 
        } 
 
        if (duel.getStatus() != Config.STATUS_GAMEOVER) 
        { 
            return; 
        }else 
        { 
            drawTitle(g); 
 
            // play1 win all 
            if (duel.getPlayer1().getScore() == 26) 
            { 
                CardHand h = duel.getPlayer1(); 
                drawScore(g, h, Config.SCORE1[0], Config.SCORE1[1], 0); 
                h = duel.getPlayer2(); 
                drawScore(g, h, Config.SCORE2[0], Config.SCORE2[1], 26); 
                h = duel.getPlayer3(); 
                drawScore(g, h, Config.SCORE3[0], Config.SCORE3[1], 26); 
                h = duel.getPlayer4(); 
                drawScore(g, h, Config.SCORE4[0], Config.SCORE4[1], 26); 
 
                return; 
            } 
 
            //play2 win all 
            if (duel.getPlayer2().getScore() == 26) 
            { 
                CardHand h = duel.getPlayer1(); 
                drawScore(g, h, Config.SCORE1[0], Config.SCORE1[1], 26); 
                h = duel.getPlayer2(); 
                drawScore(g, h, Config.SCORE2[0], Config.SCORE2[1], 0); 
                h = duel.getPlayer3(); 
                drawScore(g, h, Config.SCORE3[0], Config.SCORE3[1], 26); 
                h = duel.getPlayer4(); 
                drawScore(g, h, Config.SCORE4[0], Config.SCORE4[1], 26); 
 
                return; 
            } 
 
            //play3 win all 
            if (duel.getPlayer3().getScore() == 26) 
            { 
                CardHand h = duel.getPlayer1(); 
                drawScore(g, h, Config.SCORE1[0], Config.SCORE1[1], 26); 
                h = duel.getPlayer2(); 
                drawScore(g, h, Config.SCORE2[0], Config.SCORE2[1], 26); 
                h = duel.getPlayer3(); 
                drawScore(g, h, Config.SCORE3[0], Config.SCORE3[1], 0); 
                h = duel.getPlayer4(); 
                drawScore(g, h, Config.SCORE4[0], Config.SCORE4[1], 26); 
 
                return; 
            } 
 
            //play4 win all 
            if (duel.getPlayer4().getScore() == 26) 
            { 
                CardHand h = duel.getPlayer1(); 
                drawScore(g, h, Config.SCORE1[0], Config.SCORE1[1], 26); 
                h = duel.getPlayer2(); 
                drawScore(g, h, Config.SCORE2[0], Config.SCORE2[1], 26); 
                h = duel.getPlayer3(); 
                drawScore(g, h, Config.SCORE3[0], Config.SCORE3[1], 26); 
                h = duel.getPlayer4(); 
                drawScore(g, h, Config.SCORE4[0], Config.SCORE4[1], 0); 
 
                return; 
            } 
 
            CardHand h = duel.getPlayer1(); 
            drawScore(g, h, Config.SCORE1[0], Config.SCORE1[1]); 
            h = duel.getPlayer2(); 
            drawScore(g, h, Config.SCORE2[0], Config.SCORE2[1]); 
            h = duel.getPlayer3(); 
            drawScore(g, h, Config.SCORE3[0], Config.SCORE3[1]); 
            h = duel.getPlayer4(); 
            drawScore(g, h, Config.SCORE4[0], Config.SCORE4[1]); 
 
            return; 
        } 
    } 
 
    private void drawTitle(Graphics g) 
    { 
        String t = "\u5f97\u5206: \u672c\u5c45\u5f97\u5206/\u603b\u5206"; 
 
        String n = duel.getScore().whoOver(); 
 
        if (n == null) 
        { 
             g.setColor(Config.FONT_COLOR); 
            g.drawString(t, 20, 3, 20); 
 
            return; 
        }else 
        { 
             g.setColor(Config.FONT_COLOR); 
 
            t = String.valueOf(String.valueOf(n)) 
                      .concat("\u5931\u8D25\uFF0C\u6E38\u620F\u7ED3\u675F\uFF01"); 
            g.drawString(t, 20, 3, 20); 
 
 
            //更换标签按钮 
            addCommand(cmdNextGame); 
            removeCommand(cmdContinue); 
            setCommandListener(this); 
 
            return; 
        } 
    } 
 
    /** 
     * 原来程序中CardHand getScore没有考虑到全收后,应该显示0,而不是26 
     * @param g 
     * @param h 
     * @param x1 
     * @param y1 
     * @param curScore 实际的分数 
     */ 
    private void drawScore(Graphics g, CardHand h, int x1, int y1, int curScore) 
    { 
      g.setColor(Config.FONT_COLOR); 
 
        //add pic 
        g.drawString(String.valueOf(String.valueOf(h.getName())).concat(":"), 
                     x1, y1, 20); 
 
        //  g.drawImage(h.getHeader(), x1, y1, 20); 
        Card[] cards = h.getScoreCards(); 
        int x = x1 + 30; 
        int y = y1; 
 
        for (int i = 0; i < cards.length; i++) 
        { 
            if (cards[i] != null) 
            { 
                g.drawImage(cards[i].getImage(), x, y, 20); 
                x += 8; 
            } 
        } 
 
 
        //   int i=h.getScore(); 
        g.setColor(255, 255, 255); 
        g.drawString(String.valueOf(String.valueOf((new StringBuffer("")).append( 
                                                           curScore) 
                                                                         .append("/") 
                                                                         .append(duel.getScore( 
                                                                                         h.getName())))), 
                     x + 7, y, 20); 
    } 
 
    private void drawScore(Graphics g, CardHand h, int x1, int y1) 
    { 
        g.setColor(Config.FONT_COLOR); 
 
        //add pic 
        g.drawString(String.valueOf(String.valueOf(h.getName())).concat(":"), 
                     x1, y1, 20); 
 
        //  g.drawImage(h.getHeader(), x1, y1, 20); 
   /*     Card[] cards = h.getScoreCards(); 
        int x = x1 + 30; 
        int y = y1; 
 
        for (int i = 0; i < cards.length; i++) 
        { 
            if (cards[i] != null) 
            { 
                g.drawImage(cards[i].getImage(), x, y, 20); 
                x += 8; 
            } 
        } 
        */ 
        g.setColor(Config.FONT_COLOR); 
        g.drawString(String.valueOf(String.valueOf((new StringBuffer("")).append( 
                                                           h.getScore()) 
                                                                         .append("/") 
                                                                         .append(duel.getScore( 
                                                                                         h.getName())))), 
                     x1 + 30, y1, 20); 
    } 
 
 
    public void commandAction(Command c, Displayable p) 
    { 
        //  String n = duel.getScore().whoOver(); 
        //   if (n == null) //如果一局没有结束 
        //  { 
        if (c == cmdContinue) 
        { 
            duel.nextMatch(); 
        }else if (c == cmdNextGame) 
        { 
            //add cmdContinue 
            addCommand(cmdContinue); 
            //remove next game cmd 
            removeCommand(cmdNextGame); 
            setCommandListener(this); 
 
            duel.nextMatch(); 
        }else if (c == exitCommand) 
        { 
        	 duel.quit(); 
         // PigMiDlet.display.setCurrent(null); 
        } 
 
        //  }else  //如果结束了 
        //  { 
        // } 
    } 
}