⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 card.java

📁 《MIDP手机游戏设计》是一本运用MIDP进行J2ME手机游戏编程的JAVA书籍
💻 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 + -