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

📄 playcanvas.java.bak

📁 一款运行于诺基亚6688上的手机游戏——大富翁源代码
💻 BAK
📖 第 1 页 / 共 5 页
字号:

import java.io.*;
import java.util.*;
import javax.microedition.lcdui.*;
import javax.microedition.rms.*;
/**
 * 游戏画板。这是这个游戏最关键的一个类
 * @author SoftStar,嘟嘟熊
 * @version 1.0
 */

public class PlayCanvas extends Canvas
    implements Runnable
{
  /**
   * 画板宽度
   */
  public int canvasWidth;
  /**
   * 画板高度
   */
  public int canvasHeight;
  /**
   * richMan实例
   */
  private KMRichMan richMan;
  /**
   * 地图第1部分
   */
  private Image mapImage1;
  /**
   * 地图第2部分
   */
  private Image mapImage2;
  /**
   * 游戏控制面板
   */
  private Image gamePanelImage;
  /**
   * 线程
   */
  private volatile Thread thread;
  /**
   * 控制面板的选择序号(1-色子,2-卡片,3-其他(玩家信息,股票信息)4-系统
   */

  private static int choiceIndex = 0;
  /**
   * 游戏角色要走的步数
   */

  private static int steps = 0;
  /**
   * 游戏进行的轮数
   */

  private static int turnCount = 0;
  /**
   * 游戏状态(0-进行,2-胜利,3-失败)
   */

  private static int gameStatusGoOrWinOrFail = 0;
  /**
   * 角色特殊状态(10--在公园处,20-在监狱里,30-在睡眠中(睡眠卡)
   */

  private static int status_Park10_Prinson20_Sleep30 = 0;
  /**
   * 现在正在进行的角色
   */

  public static int nowPlayerID = 0;
  /**
   * 现在玩家是否能控制进行游戏(如果是电脑角色在玩,玩家就不能控制)
   */

  private boolean ManControlStatus_CanNotPlay;
  /**
   * 随机函数
   */

  private Random random;
  /**
   * 定时器
   */

  private static Timer timer = null;
  /**
   * 地皮
   */

  private static int groundForBuilding[] = null;


  // 游戏角色变量

  /**
   * 角色在地图上位置(用地皮ID表示)
   */

  private static int player_location[] = null;
  /**
   * 角色卡片
   */

  private static int player_cards[][] = null;
  /**
   * 角色因为进入监狱而不能移动的次数
   */

  private static int player_prinson_canNotMoveNum[] = null;
  /**
   * 角色因为睡眠而不能移动的次数
   */

  private static int player_sleep_canNotMoveNum[] = null;
  /**
   * 角色轮转次序
   */

  public  static int player_sequence[] = null;
  /**
   * 角色的金钱
   */

  public  static int player_money[] = null;
  /**
   * 角色的地皮和房屋的图象
   */

  private static Image player_houseImage[][] = null;
  /**
   * 角色的头像
   */

  private static Image player_faceImage[] = null;
  /**
   * 玩家的股票 [角色ID][股票ID][0]---- 购入数目,[角色ID][股票ID][1]---- 购入价格
   *
   */

  public static int player_stock[][][] = null;
  /**
   * 屏幕图象缓冲
   */

  Image bufferImage;
  /**
   * 空白地皮图象
   */

  Image emptyGround;
  /**
   * 屏幕图象缓冲句柄
   */

  Graphics bufferImageG;
  /**
   * 是否背景灯打开
   */

  private boolean isLightOn = true;
  /**
   * 是否背景音乐打开
   */

  private boolean isMusicOn = true;
  /**
   * 游戏速度
   */

  private int gameSpeed = 3;
  /**
   * 音乐序号
   */

  private int music = 1;
  /**
   * 西门子手机的音乐合成器
   */

  com.siemens.mp.game.MelodyComposer composer;
  /**
   * 地皮的缓冲
   */

  private int[] bufferGroundForBuilding;

// 股票变量

  /**
   * 股票名字
   */

  public String[] stock_name;
  /**
   * 股票的价格
   */

  public int[] stock_price;
  /**
   * 股票的涨幅
   */

  public int[] stock_amplitude;
  /**
   * 股票的分数部分(便于计算)如 2元 涨幅 1%,总要个分数部分吧,不然老是2元
   */

  public int[] stock_price_fraction;
  /**
   * 构造游戏画板
   */

    public PlayCanvas(KMRichMan kmrichman)
    {

      player_faceImage = null;
      richMan = null;
      mapImage1 = null;
      thread = null;
      random = null;
      thread = null;

      richMan = kmrichman;
      ManControlStatus_CanNotPlay = false;
      random = new Random();
      timer = new Timer();
      canvasWidth = getWidth();
      canvasHeight = getHeight();
      bufferImage = Image.createImage(101,80);
      bufferImageG = bufferImage.getGraphics();

      groundForBuilding = new int[56];
      bufferGroundForBuilding = new int[56];

      player_location = new int[3];
      player_money = new int[3];
      player_sequence = new int[3];
      player_cards = new int[3][5];
      player_prinson_canNotMoveNum = new int[3];
      player_sleep_canNotMoveNum = new int[3];
      player_faceImage = new Image[3];

      player_stock = new int[3][4][2];

     // 加载图像
      loadMap();
      loadImage();
      //初始化音乐
      this.initialMusic();
      //初始化游戏
      initialGame();

    }
    /**
     * 加载地图
     */

    void loadMap()
    {
      try
      {
        mapImage1 = Image.createImage(128,160);
        mapImage2 = Image.createImage(128,160);
        Graphics g = mapImage1.getGraphics();
        g.drawImage(com.siemens.mp.ui.Image.createImageWithoutScaling("/res/image/map0bw.png"),0,0,20);
        g = mapImage2.getGraphics();
        g.drawImage(com.siemens.mp.ui.Image.createImageWithoutScaling("/res/image/map1bw.png"),0,0,20);
      }
      catch(Exception exception) { }
    }
    /**
     * 加载图象
     */

    void loadImage()
    {
      Image houseImage = null;
      Graphics g = null;
      try
      {
        houseImage = Image.createImage("/res/image/housebw.png");
        emptyGround = Image.createImage("/res/image/ground.png");
        gamePanelImage = com.siemens.mp.ui.Image.createImageWithoutScaling("/res/image/gamepanelbw.png");
        for(int i = 0; i < 3; i++)
          player_faceImage[i] = Image.createImage(String.valueOf(new StringBuffer("/res/image/h").append(i).append(".png")));
      }
      catch(Exception exception) {
        System.out.println("Err on loading Images");
      }
      // 把地皮和房子的图象分割成一个一个小块
      player_houseImage = new Image[3][4];
      for(int i = 0; i < 3; i++)
      {
        for(int j = 0; j < 4; j++)
        {
          Image image = Image.createImage(16, 16);
          g = image.getGraphics();
          g.drawImage(houseImage, -16 * j, -16 * i, 20);
          player_houseImage[i][j] = image;
        }
      }
      houseImage = null;
      g = null;
    }
    /**
     * 排列角色的次序
     * @param selectedPlayerID 玩家选择的角色ID
     */

    void arragePlayerSecquence(int selectedPlayerID)
    {
        player_sequence[0] = selectedPlayerID;

        int player2 = fetchRandom(2);
        int player3 = fetchRandom(2);
        for(; player2 == selectedPlayerID; player2 = fetchRandom(2));
        player_sequence[1] = player2;
        for(; player3 == selectedPlayerID || player3 == player2; player3 = fetchRandom(2));
        player_sequence[2] = player3;

    }
    /**
     * 转到下一个玩家
     * @param delay 延迟时间
     */

    public void nextPlay(int deplay)
    {
        timer.schedule(new Controlor(this), deplay);
    }
    /**
     * 电脑玩家开始游戏
     * @param delay 延迟时间
     * @param Num_ComputerActor_or_HunmanActor 是电脑还是玩家 (1-电脑 0-玩家)
     */

    public void play_computerActor(int delay, int Num_ComputerActor_or_HumanActor)
    {
        timer.schedule(new Controlor(this, Num_ComputerActor_or_HumanActor), delay);
    }
    /**
     * 开始游戏
     * @param isLoadGameRestart 是否是进行的存储的游戏(继续上次游戏)
     */

    public void play(boolean isLoadGameRestart)
    {
      // siemens special call
      if (this.isIsLightOn())
        com.siemens.mp.game.Light.setLightOn(); //开灯
      else
        com.siemens.mp.game.Light.setLightOff();//关灯
        //siemens special call

      choiceIndex = 0;
      status_Park10_Prinson20_Sleep30 = 0;

      if(isLoadGameRestart)
      {
        nowPlayerID = 2; // 让玩家先开始
      } else {
        repaint();
        serviceRepaints();
        try
        {
          Thread.sleep(600L);
        }
        catch(Exception exception) { }
      }
      // 换游戏角色
      nowPlayerID++;
      nowPlayerID %= 3;

      // 如果是玩家操作,那么保存游戏
      if(nowPlayerID == 0)
      {
        autoSaveGame();
        turnCount++;
        this.changeStock();
      }
      // 如果有游戏角色 钱 < 0
      if(player_money[nowPlayerID] < 0)
      {
        nowPlayerID++;
        nowPlayerID %= 3;
      }
      // 如果 玩家没有钱
      if(player_money[0] < 0)
      {
        gameOver(0);
        return;
      }
      // 如果电脑角色没有钱
      if(player_money[1] < 0 && player_money[2] < 0)
      {
        gameOver(1);
        return;
      }
      repaint();
      serviceRepaints();

      if(player_prinson_canNotMoveNum[nowPlayerID] > 0)
      {
        if(deleteCard(nowPlayerID, 5)) // 使用免罪卡
        {
          player_prinson_canNotMoveNum[nowPlayerID] = 0;
          nextPlay(1000);
        } else
        {
          status_Park10_Prinson20_Sleep30 = 20;
          repaint();
          serviceRepaints();
          nextPlay(1000);
          player_prinson_canNotMoveNum[nowPlayerID]--;
        }
      } else
      if(player_sleep_canNotMoveNum[nowPlayerID] > 0)
      {
        status_Park10_Prinson20_Sleep30 = 30;
        repaint();
        serviceRepaints();
        nextPlay(1000);
        player_sleep_canNotMoveNum[nowPlayerID]--;
      } else
      if(nowPlayerID != 0)
        play_computerActor(1000, 1); // 电脑玩家开始玩
      else
        ManControlStatus_CanNotPlay = false; // 玩家开始玩
    }
    /**
     * 启动移动角色线程
     * @param steps 步数
     */

⌨️ 快捷键说明

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