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

📄 gamecanvas.java

📁 几个不错的手机程序例子
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
/*
 * GameCanvas.java
 *
 * Copyright 2001 SkyArts. All Rights Reserved.
 */
import javax.microedition.lcdui.*;
import java.util.*;

/**
 * PokerMachine的游戏内容描绘与操作所用的类
 *
 * @author  Hideki Yonekawa
 * @version 1.0
 */
class GameCanvas extends Canvas implements Runnable, CommandListener {
	/** 用来储存横向长度的变量 */
	private int					screenWidth;
	/** 用来储存纵向长度的变量 */
	private int					screenHeight;

	/** 储存了PokerMachine对象的变量 */
	private PokerMachine		pokerMachine;

	/** Start指令变量 */
	private Command				startCmd		= new Command("Start", Command.SCREEN, 1);
	/** Exit指令变量 */
	private Command				exitCmd			= new Command("Exit", Command.SCREEN, 1);
	/** OK指令变量 */
	private Command				okCmd			= new Command("OK", Command.SCREEN, 1);
	/** Quit指令变量 */
	private Command				quitCmd			= new Command("Quit", Command.SCREEN, 1);

	/** 储存了默认字体的变量 */
	private Font				defFont				= Font.getDefaultFont();

	/** 代表标题显示状态的常量 */
	private static final short	TITLE			= 0;
	/** 代表下注画面显示状态的常量 */
	private static final short	BET			= 1;
	/** 代表扑克牌分配画面显示状态的常量 */
	private static final short	DEAL			= 2;
	/** 代表扑克牌选择显示状态的常量 */
	private static final short	SELECT			= 3;
	/** 代表扑克牌的交换画面显示状态的常量 */
	private static final short	RE_DEAL			= 4;
	/** 代表结果显示画面之显示状态的常量 */
	private static final short	RESULT			= 5;
	/** 代表游戏结束状态的常量 */
	private static final short	GAME_OVER		= 9;
	/** 代表停止赌注状态的常量 */
	private static final short	BE_PLAYED_OUT		= 99;
	/** 代表储存现在显示状态的变量 */
	private short		gameState;

	/** Royal Straight Flush的赔率常量 */
	private static final short	Royal_Flush_Rate	= 400;
	/** Five Card的赔率常量 */
	private static final short	Five_of_a_Kind_Rate	= 100;
	/** Straight Flash的赔率常量 */
	private static final short	Straight_Flush_Rate	= 50;
	/** Four Card的赔率常量 */
	private static final short	Four_of_a_Kind_Rate	= 25;
	/** Full House的赔率常量 */
	private static final short	Full_House_Rate		= 8;
	/** Flush的赔率常量 */
	private static final short	Flush_Rate		= 5;
	/** Straight的赔率常量 */
	private static final short	Straight_Rate		= 4;
	/** Three Card的赔率常量 */
	private static final short	Three_of_a_Kind_Rate    = 3;
	/** Two Pair的赔率常量 */
	private static final short	Two_Pair_Rate		= 2;
	/** One Pair的赔率常量 */
	private static final short	Jacks_or_Better_Rate    = 1;
	/** 扑克牌没有符合任何牌面时的赔率常量 */
	private static final short	NOTHING			= -1;

	/** 用来在准备扑克牌时使用的Random对象 */
	private Random			random			= new Random();

	/** 储存了默认所持金额的常量 */
	private static final int	DEFAULT_CASH		= 100;

	/** 储存了停止赌注金额的常量 */
	private static final int	MAX_CASH		= 9999999;

	/** 储存有现在所持金额的变量 */
	private int				cash;

	/** 在下注的时候暂时储存所持金额的变量 */
	private int				cash4Bet;

	/** 储存下注的变量 */
	private int				betCash;

	/** 储存下注的字符串的变量,使用在改变下注的时候 */
	private String				betCashSt;

	/** 储存赌金的变量 */
	private int				cashPrize;

	/** 储存了默认所持金额的常量 */
	private short				winning;

	/** 将游戏中所使用的值初始化的方法 */
	private Card[]				cards;

	/** 储存选取牌张数的变量 */
	private int				selectCardCount;

	/** 用来储存使用在标题画面中的图像的变量 */
	private Image				titleImg;

	/**
	 * 构造函数
	 * @param pokerMachine	PokerMachine对象
	 */
	GameCanvas(PokerMachine	pokerMachine) {
		this.pokerMachine = pokerMachine;

		//取得画面的可描绘范围
		screenWidth = getWidth();
		screenHeight = getHeight();

		//登录指令监听
		setCommandListener(this);

		//取得标题图像
		try {
			titleImg = Image.createImage("/title.png");

		}catch(Exception e) {}

		//制作扑克牌
		cards = new Card[5];
		//先传递要描绘的X,Y坐标
		int tmpDrawX = (screenWidth - Card.WIDTH * cards.length) /2;
		int tmpDrawY = screenHeight - Card.HEIGHT -5;
		for(int i=0; i < cards.length; i++) {
			cards[i] = new Card();
			cards[i].setDrawX(tmpDrawX);
			cards[i].setDrawY(tmpDrawY);

			tmpDrawX = tmpDrawX + Card.WIDTH;
		}

		//将游戏的状态显示在标题
		doTitle();
	}

	/** 将游戏中所使用的值初始化的方法 */
	private void doGameInit() {
		//将所持金额变为默认值
		cash = DEFAULT_CASH;
	}

	/** 在每一回合结束后进行值的初始化的方法 */
	private void doTurnInit() {
		//将牌盖起来
		for(int i=0; i < cards.length; i++) {
			cards[i].setCardState(Card.BACK_STATE);
		}
		//抽取新的牌
		setNewCards();

		betCash = 0;
		cashPrize = 0;
		selectCardCount = 0;
		betCashSt = "0";
		cash4Bet = cash;
	}

	/** 进行标题显示的方法 */
	private void doTitle() {
		//将游戏状态变为显示标题
		gameState = TITLE;

		//以防万一先将游戏中的指令删除
		removeCommand(okCmd);
		removeCommand(quitCmd);

		//显示标题画面
		repaint();
		//新增指令
		addCommand(exitCmd);
		addCommand(startCmd);
	}

	/** 启动描绘线程的方法 */
	private void doThreadStart() {
		new Thread(this).start();
	}

	/**
	 * 进行描绘的方法,通常不会从类本身调用
	 * @param	g	Graphics对象
	 */
	protected void paint(Graphics g) {
		//设定字体
		g.setFont(defFont);

		String drawSt;
		String drawSt2 = null;
		int drawX, drawY, stWidth, drawHeight, tmpDrawX, tmpDrawY;

		int stHeight = defFont.getHeight();

		//根据游戏的状态来改变描绘内容
		switch(gameState) {
			case TITLE:		//显示标题
				//以绿色清除背景
				g.setColor(0x00FFFFFF);
				g.fillRect(0, 0, screenWidth, screenHeight);

				//描绘标题图像
				drawX = (screenWidth - titleImg.getWidth()) /2;
				g.drawImage(titleImg, drawX, 0, Graphics.TOP|Graphics.LEFT);

				//显示着作权
				g.setColor(0x00000000);
				drawSt = "Copyright 2001";
				drawX = (screenWidth - defFont.stringWidth(drawSt)) / 2;
				drawY = getHeight() - stHeight *2;
				g.drawString(drawSt, drawX, drawY, Graphics.TOP|Graphics.LEFT);

				drawSt = "SkyArts.com";
				drawX = (screenWidth - defFont.stringWidth(drawSt)) / 2;
				drawY = drawY + stHeight;
				g.drawString(drawSt, drawX, drawY, Graphics.TOP|Graphics.LEFT);
			break;

			case BET:		//显示下注画面
				//以绿色清除背景
				g.setColor(0x00009900);
				g.fillRect(0, 0, screenWidth, screenHeight);

				drawHeight = stHeight * 4 +8;
				drawX = 0;
				drawY = 0;
				//底色
				g.setColor(0x00000000);
				g.fillRoundRect(drawX, drawY, screenWidth, drawHeight, 7, 7);
				g.setColor(0x00FFFFFF);
				g.fillRoundRect(drawX+2, drawY+2, screenWidth-4, drawHeight-4, 7, 7);
				//第1列
				drawX = 4;
				drawY = 3;
				drawSt = "请选择";
				g.setColor(0x00000000);
				//第2列
				g.drawString(drawSt, drawX, drawY, Graphics.TOP|Graphics.LEFT);
				drawSt = "下注";
				g.drawString(drawSt, drawX, drawY +stHeight, Graphics.TOP|Graphics.LEFT);


				//Cash
				drawSt = "所持金额:";
				g.drawString(drawSt, drawX, drawY+stHeight*2, Graphics.TOP|Graphics.LEFT);

				drawSt = String.valueOf(cash4Bet);
				tmpDrawX = screenWidth -drawX -defFont.stringWidth(drawSt) -2;
				tmpDrawY = drawY + stHeight*2;
				g.drawString(drawSt, tmpDrawX, tmpDrawY, Graphics.TOP|Graphics.LEFT);

				//Bet
				drawSt = "下注金额:";
				g.drawString(drawSt, drawX, drawY+defFont.getHeight()*3, Graphics.TOP|Graphics.LEFT);
				drawSt = betCashSt;
				tmpDrawX = screenWidth -drawX -defFont.stringWidth(drawSt) -2;
				tmpDrawY = drawY + stHeight*3;
				g.drawString(drawSt, tmpDrawX, tmpDrawY, Graphics.TOP|Graphics.LEFT);

				g.setStrokeStyle(Graphics.DOTTED);
				tmpDrawY = tmpDrawY + defFont.getBaselinePosition() +1;
				g.drawLine(tmpDrawX, tmpDrawY, tmpDrawX + defFont.stringWidth(drawSt),tmpDrawY);

				g.setStrokeStyle(Graphics.SOLID);
			break;

			case DEAL:	//显示扑克牌分配画面
			case RE_DEAL:	//显示扑克牌的交换
				drawCards(g);
			break;

			case SELECT:	//显示扑克牌选择画面
				drawCards(g);
				drawHeight = stHeight * 2 +6;
				drawX = 0;
				drawY = 0;
				//底色
				g.setColor(0x00000000);
				g.fillRoundRect(drawX, drawY, screenWidth, drawHeight, 7, 7);
				g.setColor(0x00FFFFFF);
				g.fillRoundRect(drawX+2, drawY+2, screenWidth-4, drawHeight-4, 7, 7);
				//第1列
				drawX = 4;
				drawY = 3;
				drawSt = "请选择";
				g.setColor(0x00000000);
				//第2列
				g.drawString(drawSt, drawX, drawY, Graphics.TOP|Graphics.LEFT);
				drawSt = "要交换的扑克牌";
				g.drawString(drawSt, drawX, drawY +stHeight, Graphics.TOP|Graphics.LEFT);

				//在扑克牌上
				g.setColor(0x00FFFFFF);
				drawY = screenHeight - Card.HEIGHT -7 -stHeight;
				tmpDrawX = (screenWidth - Card.WIDTH * cards.length) /2;
				int cardsLeng = cards.length;
				for(int i=0; i < cardsLeng; i++) {
					drawSt = String.valueOf(i +1);
					drawX = tmpDrawX + (Card.WIDTH - defFont.stringWidth(drawSt)) / 2;
					g.drawString(drawSt, drawX, drawY, Graphics.TOP|Graphics.LEFT);
					tmpDrawX = tmpDrawX + Card.WIDTH;
				}
			break;

			case RESULT:		//显示结果
			case GAME_OVER:		//游戏结束状态
			case BE_PLAYED_OUT:	//停止赌注状态
				drawCards(g);

				drawHeight = stHeight * 3 +6;
				drawX = 0;
				drawY = 0;
				//底色
				g.setColor(0x00000000);
				g.fillRoundRect(drawX, drawY, screenWidth, drawHeight, 7, 7);
				g.setColor(0x00FFFFFF);
				g.fillRoundRect(drawX+2, drawY+2, screenWidth-4, drawHeight-4, 7, 7);
				switch(winning) {		//根据牌面来改变消息
					case Royal_Flush_Rate:
						drawSt = "Royal Straight";
						drawSt2 = "Flush!!!!!!!!";
					break;

					case Five_of_a_Kind_Rate:
						drawSt = "Five Card!";
						drawSt2 = "Excellent!!";
					break;

					case Straight_Flush_Rate:
						drawSt = "Straight Flush!";
						drawSt2 = "Great!!";
					break;

					case Four_of_a_Kind_Rate:
						drawSt = "Four Card!";
						drawSt2 = "Great job!!";
					break;

					case Full_House_Rate:
						drawSt = "Full House!";
						drawSt2 = "Nice hand!!";
					break;

					case Flush_Rate:
						drawSt = "Flush!";
						drawSt2 = "Wow!!";
					break;

					case Straight_Rate:
						drawSt = "Straight!";
						drawSt2 = "Wonderful!!";
					break;

					case Three_of_a_Kind_Rate:
						drawSt = "Three Card!";
						drawSt2 = "Oh happy day!!";
					break;

					case Two_Pair_Rate:
						drawSt = "Two Pair!";
						drawSt2 = "Lucky you!!";
					break;

					case Jacks_or_Better_Rate:
						drawSt = "One Pair!";
						drawSt2 = "You are good!!";
					break;

					default:
						drawSt = "Nothing!";
					break;

				}
				g.setColor(0x00000000);
				//第1列
				drawX = 4;
				drawY = 3;
				g.drawString(drawSt, drawX, drawY, Graphics.TOP|Graphics.LEFT);
				//第2列

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -