?? card.java
字號:
/*
* Card.java
*
* Copyright 2001 SkyArts. All Rights Reserved.
*/
import javax.microedition.lcdui.*;
/**
* PokerMachine的卡片資訊與描繪所用的類
*
* @author Hideki Yonekawa
* @version 1.0
*/
class Card {
/** 用來儲存撲克牌數字的變量 */
private short cardNo;
/** 用來儲存撲克牌種類(黑桃,方塊,紅心,梅花)的變量 */
private short cardKind;
/** 用來儲存撲克牌編號的變量 */
private int uniqueNo;
/** 儲存總撲克牌數的變量 */ //52張+2張鬼牌
static final int CARD_TOTAL = 54;
/** 代表黑桃的常量 */
private static final short SPADE = 0;
/** 代表方塊的常量 */
private static final short DIA = 1;
/** 代表紅心的常量 */
private static final short HEART = 2;
/** 代表梅花的常量 */
private static final short CLOVER = 3;
/** 代表鬼牌的常量 */
private static final short JOKER = 9;
/** 儲存各種撲克牌(黑桃、方塊、紅心、梅花)之圖像的常量 */
private static Image[] KIND_IMAGES = new Image[5];
/** 儲存撲克牌背面圖像的常量 */
private static Image CARD_BACK_IMAGE;
/** 儲存鬼牌圖像的常量 */
private static Image JOKER_IMAGE;
/** 儲存撲克牌顯示狀態的變量 */
private short cardState;
/** 代表以正面來顯示的常量 */
static final short COVER_STATE = 0;
/** 代表以正面的反轉來顯示的常量 */
static final short SELECT_STATE = 1;
/** 代表以反面來顯示的常量 */
static final short BACK_STATE = 3;
/** 用來儲存顯示于撲克牌的字符串的常量 */
private static final String[] CARD_STRINGS = new String[] {
"A", "2", "3", "4", "5",
"6", "7", "8", "9", "10",
"J", "Q", "K"
};
/** 儲存用來進行描繪之X坐標的變量 */
private int drawX;
/** 儲存用來進行描繪之Y坐標的變量 */
private int drawY;
/** 儲存撲克牌寬度的常量 */
static final int WIDTH = 22;
/** 儲存撲克牌高度的常量 */
static final int HEIGHT = 32;
/** 建構式 */
Card() {
if(CARD_BACK_IMAGE == null) {
//當沒有讀入圖像時
try {
//取得撲克牌種類的圖像
KIND_IMAGES[SPADE] = Image.createImage("/spade.png");
KIND_IMAGES[DIA] = Image.createImage("/dia.png");
KIND_IMAGES[HEART] = Image.createImage("/heart.png");
KIND_IMAGES[CLOVER] = Image.createImage("/clover.png");
//取得撲克牌的背面圖像
CARD_BACK_IMAGE = Image.createImage("/back.png");
//取得鬼牌圖像
JOKER_IMAGE = Image.createImage("/joker.png");
}catch(Exception e) {}
}
}
/**
* 用來設定撲克牌顯示狀態的方法
* @param state COVER_STATE丄SELECT_STATE丄BACK_STATE的任一個
*/
void setCardState(short state) {
this.cardState = state;
}
/**
* 傳回被設定的撲克牌顯示狀態的方法
* @return short COVER_STATE丄SELECT_STATE丄BACK_STATE的任一個
*/
short getCardState() {
return cardState;
}
/**
* 用來設定進行描繪的X坐標的方法
* @param x 進行描繪的X坐標
*/
void setDrawX(int x) {
this.drawX = x;
}
/**
* 傳回用來進行描繪的X坐標的方法
* @return int 進行描繪的X坐標
*/
int getDrawX() {
return drawX;
}
/**
* 用來設定進行描繪的Y坐標的方法
* @param y 進行描繪的Y坐標
*/
void setDrawY(int y) {
this.drawY = y;
}
/**
* 傳回用來進行描繪的Y坐標的方法
* @return int 進行描繪的Y坐標
*/
int getDrawY() {
return drawY;
}
/**
* 用來設定撲克牌的獨一無二編號的方法
* @param no 獨一無二的編號
*/
void setUniqueNo(int no) {
this.uniqueNo = no;
if(uniqueNo > 51) {
//鬼牌時
cardKind = JOKER;
}else {
//鬼牌以外時
cardNo = (short)(uniqueNo % 13);
switch(uniqueNo / 13) {
case 0: //黑桃
cardKind = SPADE;
break;
case 1: //方塊
cardKind = DIA;
break;
case 2: //紅心
cardKind = HEART;
break;
case 3: //梅花
cardKind = CLOVER;
break;
}
}
}
/**
* 傳回被設定的撲克牌獨一無二編號的方法
* @return int 被設定的獨一無二編號
*/
int getUniqueNo() {
return uniqueNo;
}
/**
* 進行撲克牌描繪的方法
* @param g 進行描繪時所使用的Graphics
*/
void doDraw(Graphics g) {
int tmpX;
int tmpY;
switch(cardState) {
case COVER_STATE://代表正面的狀態
case SELECT_STATE://代表正面的反轉的狀態
//描繪撲克牌的底圖
if(cardState == COVER_STATE) {
//顯示正面
g.setColor(0x00FFFFFF);
}else {
//顯示正面的反轉
g.setColor(0x00A2A2FF);
}
g.fillRoundRect(drawX +1, drawY +1, WIDTH, HEIGHT, 6, 6);
if(cardKind == JOKER) {
//鬼牌的時候
tmpX = drawX +
(WIDTH - JOKER_IMAGE.getWidth()) / 2 +1;
tmpY = drawY +
(HEIGHT - JOKER_IMAGE.getHeight()) / 2;
g.drawImage(JOKER_IMAGE, tmpX, tmpY, Graphics.TOP|Graphics.LEFT);
}else {
//鬼牌以外的時候
tmpX = drawX +
(WIDTH - KIND_IMAGES[cardKind].getWidth()) / 2 +1;
g.drawImage(KIND_IMAGES[cardKind], tmpX, drawY+3, Graphics.TOP|Graphics.LEFT);
switch(cardKind) {
case SPADE:
case CLOVER:
//為黑桃、梅花的時候設為黑色
g.setColor(0x00000000);
break;
case HEART:
case DIA:
//為紅心、方塊的時候設為紅色
g.setColor(0x00FF0000);
break;
}
//描繪撲克牌的字串
tmpX = drawX +
(WIDTH - Font.getDefaultFont().stringWidth(CARD_STRINGS[cardNo])) / 2 +1;
g.drawString(CARD_STRINGS[cardNo],
tmpX,
drawY+HEIGHT -Font.getDefaultFont().getHeight(),
Graphics.TOP|Graphics.LEFT);
}
break;
case BACK_STATE://顯示反面的狀態
//描繪撲克牌的底圖
g.setColor(0x00FFFFFF);
g.fillRoundRect(drawX +1, drawY +1, WIDTH, HEIGHT, 6, 6);
tmpX = drawX +
(WIDTH - CARD_BACK_IMAGE.getWidth()) / 2 +1;
tmpY = drawY +
(HEIGHT - CARD_BACK_IMAGE.getHeight()) / 2 +1;
g.drawImage(CARD_BACK_IMAGE, tmpX, tmpY, Graphics.TOP|Graphics.LEFT);
break;
}
//描繪撲克牌的邊框
g.setColor(0x00000000);
g.drawRoundRect(drawX, drawY, WIDTH, HEIGHT, 8, 8);
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -