【Java开源代码栏目提醒】:网学会员在Java开源代码频道为大家收集整理了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);
}
}
上一篇:
CarAction.java
下一篇:
致享和威驰哪个好点?冲着安全和空间 推荐致享