📄 gamescreen.java
字号:
/************************************************************************
*
* $Id: GameScreen.java,v 1.2 2001/11/06 00:39:19 akhil Exp $
*
* Copyright (c) 2001 Sun Microsystems, Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. The end-user documentation included with the redistribution,
* if any, must include the following acknowledgment:
* "This product includes software developed by the
* Sun Microsystems, Inc. for Project JXTA."
* Alternately, this acknowledgment may appear in the software itself,
* if and wherever such third-party acknowledgments normally appear.
*
* 4. The names "Sun", "Sun Microsystems, Inc.", "JXTA" and "Project JXTA"
* must not be used to endorse or promote products derived from this
* software without prior written permission. For written
* permission, please contact Project JXTA at http://www.jxta.org.
*
* 5. Products derived from this software may not be called "JXTA",
* nor may "JXTA" appear in their name, without prior written
* permission of Sun.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL SUN MICROSYSTEMS OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of Project JXTA. For more
* information on Project JXTA, please see
* <http://www.jxta.org/>.
*
* This license is based on the BSD license adopted by the Apache
* Foundation.
**********************************************************************/
/*
* Created: Tue May 1 2001 by Rami Honig
*/
package net.jxme.demo.blackjack.client.gui;
import javax.microedition.lcdui.*;
import net.jxme.demo.blackjack.share.*;
import net.jxme.demo.blackjack.client.logic.*;
import java.io.IOException;
import java.util.*;
/**
The player places a bet with this screen
*/
public class GameScreen extends Canvas implements CommandListener, ResponseListener
{
private static int SCREEN_WIDTH;
private static int SCREEN_HEIGHT;
//Coordinates of the screen title
private int TITLE_X;
private int TITLE_Y;
//Coordinates of the information message
int INFO_X;
int INFO_Y;
//Coordinates of the line under the screen title
private int LINE_X;
private int LINE_Y;
//Coordinates of the player image
private int PLAYER_IMAGE_X;
private int PLAYER_IMAGE_Y;
//Dimensions of the player image
private int PLAYER_IMAGE_WIDTH;
private int PLAYER_IMAGE_HEIGHT;
//Coordinates of the card for the current player
private int BIG_CARD_X;
private int BIG_CARD_Y;
//Dimensions of the card for the current player
private int BIG_CARD_WIDTH;
private int BIG_CARD_HEIGHT;
//Coordinate offset from big card coordinates of the suit icon for the current player
private int BIG_IMAGE_XOFFSET = 3;
private int BIG_IMAGE_YOFFSET = 13;
//Dimensions of the suit icon for the current player
private int BIG_IMAGE_WIDTH;
private int BIG_IMAGE_HEIGHT;
//Coordinates of the symbol icons for the current player
private int BIG_SYM_X;
private int BIG_SYM_Y;
//Coordinates of name for other players
private int NAME_X;
private int NAME_Y;
//Coordinates of bet for other players
private int BET_X;
private int BET_Y;
//Coordinates of suit for other players
private int SMALL_SUIT_X;
private int SMALL_SUIT_Y;
//Dimensions of the suit icons for the other players
private int SMALL_SUIT_WIDTH;
private int SMALL_SUIT_HEIGHT;
//Coordinates of symbol for other players
private int SMALL_SYM_X;
private int SMALL_SYM_Y;
//Dimensions of the symbol icons for the other players
private int SMALL_SYM_WIDTH;
private int SMALL_SYM_HEIGHT;
//Coordiantes of the final status indication
private int STATUS_X;
private int STATUS_Y;
private int colorBlack = 0x00000000;
private int colorWhite = 0x00FFFFFF;
private Command cmdCard = null;
private Command cmdHold = null;
private Command cmdNewGame = null;
private Command cmdExit = null;
private Image smallSuit = null;
private Image smallSpade = null;
private Image smallHeart = null;
private Image smallDiamond = null;
private Image smallClub = null;
private Image bigSuit = null;
private Image bigSpade = null;
private Image bigHeart = null;
private Image bigDiamond = null;
private Image bigClub = null;
//An information message
private String info = "";
public GameScreen()
{
super();
SCREEN_WIDTH = getWidth();
SCREEN_HEIGHT = getHeight();
// Debug.println("width="+SCREEN_WIDTH+" height="+SCREEN_HEIGHT);
cmdCard = new Command(Constants.STR_CARD, Command.SCREEN, 1);
cmdHold = new Command(Constants.STR_HOLD, Command.SCREEN, 1);
cmdNewGame = new Command(Constants.STR_NEW_GAME, Command.SCREEN, 1);
cmdExit = new Command(Constants.STR_EXIT, Command.SCREEN, 2);
addCommand(cmdExit);
setCommandListener(this);
// loadImages();
}
public void setActive()
{
Game.instance.setResponseListener((ResponseListener)this);
//Player 1 starts the game
Game.instance.setTurn(1);
Game.instance.checkBets();
BlackjackMidlet.instance.display.setCurrent(this);
}//setActive
public void commandAction(Command c, Displayable s)
{
if(c == cmdCard)
{
info = Constants.STR_DEALING;
repaint(0, LINE_Y, SCREEN_WIDTH, Font.getDefaultFont().getHeight() );
serviceRepaints();
Game.instance.card();
}
else if(c == cmdHold)
{
info = Constants.STR_HOLDING;
repaint(0, LINE_Y, SCREEN_WIDTH, Font.getDefaultFont().getHeight() );
serviceRepaints();
Game.instance.hold();
}
else if(c == cmdExit)
{
info = "Exiting";
repaint(0, LINE_Y, SCREEN_WIDTH, Font.getDefaultFont().getHeight() );
serviceRepaints();
Game.instance.reset();
BlackjackMidlet.instance.notifyDestroyed();
}
else if(c == cmdNewGame)
{
info = "Restarting";
repaint(0, LINE_Y, SCREEN_WIDTH, Font.getDefaultFont().getHeight() );
serviceRepaints();
Game.instance.newGame();
}
else
{
Debug.println("Unhandled command");
}
}
public void onResponse(int code, String data)
{
// Debug.println("GameScreen.onResponse: code = "+code+" Data = "+data);
switch(code)
{
//Server is notifying each player's bet
case ProtocolConstants.R_BETS_IN:
{
// Debug.println("GameScreen.onResponse: R_BETS_IN Data = "+data);
//Expecting data = ID,bet#ID,bet#....
//Parse the betting data and set it into the players
int beginIndex = 0;
int endIndex = data.indexOf(ProtocolConstants.FIELD_DELIMITER, beginIndex);
int id = ProtocolConstants.NO_ID;
int bet = 0;
int endData = data.length();
while(beginIndex < endData)
{
//if we're on the last card we adjust endIndex to the end of the string
if(endIndex == -1)
{
endIndex = endData;
}
String betString = data.substring(beginIndex, endIndex);
// Debug.println("Bet String is: "+betString);
//Bet String should be id,bet
//Get the id
id = Character.digit(betString.charAt(0), 10);
//Get the card
bet = Integer.parseInt(betString.substring(2));
// Debug.println("id is: "+id);
// Debug.println("bet is: "+bet);
Player player = Game.instance.getPlayer(id);
player.setBet(bet);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -