CardCanvas.java
上传用户:whhzxy
上传日期:2009-12-31
资源大小:269k
文件大小:5k
源码类别:

J2ME

开发平台:

Java

  1. import java.util.Timer;
  2. import javax.microedition.lcdui.*;
  3. /**
  4.  * 卡片画板。
  5.  * @author SoftStar,嘟嘟熊
  6.  * @version 1.0
  7.  */
  8. public class CardCanvas extends Canvas
  9.     implements CommandListener
  10. {
  11.   /**
  12.    * 画板宽度
  13.    */
  14.     public int canvasWidth;
  15.     /**
  16.      * 画板高度
  17.      */
  18.     public int canvasHeight;
  19.     /**
  20.      * richMan实例
  21.      */
  22.     KMRichMan richMan;
  23.     /**
  24.      * 卡片
  25.      */
  26.     int cardIDs[];
  27.     /**
  28.      * 卡片序号
  29.      */
  30.     int cardIndex;
  31.     /**
  32.      * 卡片记数
  33.      */
  34.     int kardCount;
  35.     /**
  36.      * 卡片名称
  37.      */
  38.     String kardNames[] = {
  39.         "偷盗卡", "均富卡", "强占卡", "睡眠卡", "免罪卡", "怪兽卡", "天使卡", "现金卡", "财神卡", "衰神卡"
  40.     };
  41.     /**
  42.      * 卡片图片
  43.      */
  44.     Image cardImages[];
  45.     /**
  46.      * 单个卡片图片
  47.      */
  48.     Image cardImage;
  49.     /**
  50.      * 标题条图片
  51.      */
  52.     Image barImage;
  53.     /**
  54.      * 构造一个对象
  55.      * @param kmrichMan richman对象
  56.      * @param cardIDs 卡片ID
  57.      * @param cardIndex 卡片序号
  58.      * @param isComputerActor 是否是电脑角色
  59.      */
  60.     public CardCanvas(KMRichMan kmrichman, int cardIDs[], int cardIndex, boolean isComputerActor)
  61.     {
  62.         kardCount = 0;
  63.         cardImages = null;
  64.         cardImage = null;
  65.         barImage = null;
  66.         richMan = kmrichman;
  67.         this.cardIDs = cardIDs;
  68.         this.cardIndex = cardIndex;
  69.         canvasWidth = getWidth();
  70.         canvasHeight = getHeight();
  71.         if(cardIDs != null)
  72.         {
  73.           for(int j = 0; j < 5; j++)
  74.             if(cardIDs[j] != 16)
  75.               kardCount++;
  76.         }
  77.         setCommandListener(this);
  78.         try
  79.         {
  80.           barImage = Image.createImage("/res/image/barbw.png");
  81.         }
  82.         catch(Exception exception) { }
  83.         if(cardIDs != null) //表示查看卡片
  84.         {
  85.           if (!isComputerActor) {
  86.             addCommand(new Command("使用", 8, 1));
  87.             addCommand(new Command("详情", 8, 2));
  88.             addCommand(new Command("返回", 8, 0));
  89.           }
  90.           cardImages = new Image[cardIDs.length];
  91.           try
  92.           {
  93.             for(int i = 0; i < kardCount + 1; i++)
  94.               cardImages[i] = Image.createImage(String.valueOf((new StringBuffer("/res/image/card")).append(cardIDs[i]).append(".png")));
  95.           }
  96.           catch(Exception exception1) { }
  97.         }
  98.         else //获得卡片等等
  99.         {
  100.           if (!isComputerActor) {
  101.             addCommand(new Command("返回", 8, 0));
  102.           }
  103.           try
  104.           {
  105.             cardImage = Image.createImage(String.valueOf((new StringBuffer("/res/image/card")).append(cardIndex).append(".png")));
  106.           }
  107.           catch(Exception exception2)
  108.           {
  109.           }
  110.         }
  111.         // 如果是电脑角色,则自动
  112.         if(isComputerActor)
  113.           (new Timer()).schedule(new Controlor(this), 2000L);
  114.       }
  115.       /**
  116.        * 使用或显示卡片
  117.        */
  118.       void useCard_ComputerActor()
  119.       {
  120.         if(cardIDs != null)
  121.         {
  122.           richMan.useCard(cardIDs[cardIndex]);
  123.           setNull();
  124.         } else
  125.         {
  126.           setNull();
  127.           richMan.confirmMessage(); // 获得一张卡片(偷或走到?号处)返回
  128.         }
  129.       }
  130.       /**
  131.        * 处理按键
  132.        * @param key 按键值
  133.        */
  134.     public void keyPressed(int key)
  135.     {
  136.       if(cardIDs == null)
  137.         return;
  138.       switch(getGameAction(key))
  139.       {
  140.         case 6:
  141.         case 5: //下
  142.           cardIndex++;
  143.           if(cardIndex == kardCount)
  144.             cardIndex = 0;
  145.           repaint();
  146.           break;
  147.         case 1:
  148.         case 2: //上
  149.           cardIndex--;
  150.           if(cardIndex == -1)
  151.             cardIndex = kardCount - 1;
  152.           repaint();
  153.           break;
  154.       }
  155.     }
  156.     /**
  157.      * 处理COOMMAND
  158.      * @param command 按键
  159.      * @param displayable displayable
  160.      */
  161.     public void commandAction(Command command, Displayable displayable)
  162.     {
  163.       if(command.getLabel() == "使用")
  164.         richMan.useCard(cardIDs[cardIndex]);
  165.       if(command.getLabel() == "详情")
  166.         richMan.showCardDetail(cardIDs, cardIndex);
  167.       if(command.getLabel() == "返回" && cardIDs == null)
  168.         richMan.confirmMessage(); //好象现在的程序不能走到这条语句
  169.       if(command.getLabel() == "返回")
  170.         richMan.setDisplayToPlayCanvas1();
  171.     }
  172.     /**
  173.      * 清空变量
  174.      */
  175.     private void setNull()
  176.     {
  177.       cardIDs = null;
  178.       cardImages = null;
  179.       cardImage = null;
  180.       barImage = null;
  181.     }
  182.     /**
  183.      * 绘制画板
  184.      * @param g 句柄
  185.      */
  186.     protected void paint(Graphics g)
  187.     {
  188.       //这一段希奇古怪的,反正是绘制卡片,很好理解。
  189.       //就留着这样吧。
  190.       char c = 'e';
  191.       byte byte0 = 80;
  192.       g.setColor(0);
  193.       g.fillRect(0, 0, canvasWidth, canvasHeight);
  194.       g.setClip((canvasWidth - c) / 2, (canvasHeight - byte0) / 2, c, byte0);
  195.       g.translate((canvasWidth - c) / 2, (canvasHeight - byte0) / 2);
  196.       g.setColor(255, 255, 255);
  197.       g.fillRect(0, 0, c, byte0);
  198.       g.setColor(0);
  199.       if(cardIDs == null)
  200.       {
  201.         g.drawImage(cardImage, c / 2, byte0 / 2, 3);
  202.         g.drawString(kardNames[cardIndex], c / 2, byte0 / 2 + 25, 0x10 | 0x1);
  203.       } else
  204.       if(cardImages[cardIndex] != null)
  205.       {
  206.         g.drawImage(cardImages[cardIndex], c / 2, byte0 / 2, 3);
  207.         g.drawString(kardNames[cardIDs[cardIndex]], c / 2, byte0 / 2 + 25, 0x10 | 0x1);
  208.       }
  209.       g.drawImage(barImage, 0, 0, 20);
  210.     }
  211. }