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

📄 penguinscreen.java

📁 自己开发的打企鹅小游戏
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
package penguin;

import java.util.Random;
import com.nokia.mid.ui.*;
import java.io.*;
import javax.microedition.lcdui.*;
import javax.microedition.rms.*;
import java.util.*;

import javax.microedition.io.HttpConnection;

/**
 *
 * <p>Title: StgTetrisScreen</p>
 * <p>Description: 程序主控类,包含主循环更新,屏幕绘制,按键捕捉等等</p>
 * <p>Copyright: Copyright (c) 2004</p>
 */
public class PenguinScreen
    extends FullCanvas
    implements Runnable

{

    /**
     * 存放调用此类变量的父类变量;
     */
    private PenguinMIDlet gameMIDlet;

    /**
     * 程序控制更新线程
     */
    private volatile Thread gameThread = null;

    /**
     * 最后更新时间
     */
    private long lastUpdateTime = 0;
    private long lastGcTime = 0;

    /**
     * 存储前五名的分数
     */
    public static int newsreel[] = new int[5];

    /**
     * 存储前五名的名字
     */
    public static byte name[][] = new byte[6][];

    /**
     * 输入名字时的当前字母序号
     */
    public byte currentLetter = 0;

    /**
     * 前五名名字长度
     */
    public static int namelen[] = new int[6];

    /**
     * 当前用户排名
     */
    public static int order = 0;

    /**
     * 距离上次更新的相对时间
     */
    private long updateTime = 0;
    private long strikeTime = 0;
    private long demoTime = 0;

    /**
     * fps 数量
     */
    private int fps = 0; //fps 数量

    /**
     * 当前秒内的fps和
     */
    private int currentFps = 0; //当前秒内的fps和

    /**
     * 是否更换currentFps标志
     */
    private boolean drawfps = false; //更换currentFps标志

    /**
     * 用于产生随机数
     */
    private static Random random = new Random(System.currentTimeMillis());

    /**
     * 用于读取地图文件
     */
    InputStream inputStream;
    /**
     * 播放声音所需要的变量,每个变量对应单独的文件
     */
    private static MediaList pOnce;
    private static MediaList pMain;
    private static MediaList pRecord;
    private static MediaList pReady;
    private static MediaList pJump;
    private static MediaList pKnock;
    private static MediaList pDrop;
    private static MediaList pSlide;
    private static MediaList phut;

    /**
     * 游戏主状态定义
     */

    public final static int LINK = 0;//对应主菜单的邦邦网
    public final static int RUN = 1;//对应主菜单的开始游戏
    public final static int OPTION = 2; //对应主菜单的设置
    public final static int SCORE = 3;//对应主菜单的排名
    public final static int HELP = 4;//对应主菜单的帮助
    public final static int END = 5;//对应主菜单的退出
    public final static int COPYRIGHT = 6;//对应程序运行时的Logo
    public final static int DEMO = 7;//Demo初始化
    public final static int MENU = 8;//主菜单
    public final static int INPUT = 9;//用户输入高分
    public final static int LOCAL = 10;//查看本地排名
    public final static int NET = 11;//查看网络排名
    public final static int PAUSE = 12;//暂停状态
    public final static int INIT = 13;//程序初始化
    public final static int GAMEOVER = 14; 
    public final static int DEMORUN = 15;//演示游戏运行
    public final static int INITINPUT = 16;//中间状态,初始化和计算用户输入需要的变量
    public final static int DEMOLOCAL = 17;//演示本地排名
    public final static int NETDISP = 18; //显示网络排名

    //would be use in update for Send and Recv data.
    public final static int UPLOAD = 19; //paint the Yes or No
    public final static int SCOREUPLOAD = 20; //prepare score and send data
    public final static int NETERROR = 21; //Display Error of Net Link

    /**
     * 根据该静态数组来判断游戏中该用到的地图,在UpdateState中更新状态,并在InitMap中调用该状态所对应的地图文件
     * 之所以用这种方法是因为Nokia 40系列只能同时打开一张地图,用此方法保证代码一致和可移植性。
     */
    public final static int[][] stateArray = {
        {
        COPYRIGHT}
        , {
        RUN, PAUSE, DEMORUN}
        , {
        MENU, OPTION, SCORE, HELP, DEMO, INPUT, LOCAL, DEMOLOCAL,
        INITINPUT, LINK, NETDISP}
        , {
        NET, UPLOAD, SCOREUPLOAD}
    };
  /**
     * 企鹅坠落时所用图在图片中的位置
     */
    public final static int[][] mapDrop = {
        {
        26, 250}
        , {
        26 * 2, 250}
        , {
        26 * 3, 250}
        , {
        26 * 4, 250}
        , {
        26 * 5, 250}
        , {
        26 * 6, 250}
        , {
        26 * 2, 250 + 26 * 2}
    };
    /**
     * 打企鹅时所用图在图片中的位置
     */
    public final static int[][] mapStrike = {
        {128, 378},{128, 378},{128, 378},{128, 378},{128, 378},
        {64, 378},{64, 378},
        {0, 378}
    };
    /**
     * 企鹅落在地面发出爆炸效果时所用图在图片中的位置
     */
    public final static int[][] mapExplode = {
        {
        176, 126}
        , {
        176, 126}
        , {
        215, 126}
        , {
        254, 126}
    };
        /**
     * 结束显示分数时所用图在图片中的位置
     */
    public final static int[][] ScoreShow = {
        {0, 328}, {40, 328},{80,328},{120,328}
    };
  /**
     * 企鹅飞行时所用图在图片中的位置
     */
    public final static int[][] mapFly = {
        {
        0, 276}
        , {
        1 * 26, 276}
        , {
        2 * 26, 276}
        , {
        3 * 26, 276}
        , {
        4 * 26, 276}
        , {
        5 * 26, 276}
        , {
        6 * 26, 276}
        , {
        7 * 26, 276}
        , {
        8 * 26, 276}
        , {
        9 * 26, 276}
        , {
        8 * 26, 250}
        , {
        9 * 26, 250}
        , {
        10* 26, 250}
        , {
        0, 276 + 26}

        , {
        1 * 26, 276 + 26}
    };

    /**
     * option 变量
     */
    private int[] optionMenu = new int[2];
    private int optionSelect = 0;
    public int recordCnt = 5;

    /**
     * demo 变量
     */
    private int[] demoAction = new int[20];
    private int nowAction = 0;
    public boolean bDemo;
       /**
     * 声音变量
     */
    public boolean bSound;
    private boolean PlayOnce = true;

//Demo 显示"按OK键开始"
    public boolean bShowOK;
    public int ShowOK = 0;
    public int ClickTime = 0;

    //双buffer机制所用到的变量,用来减少刷屏幕次数和面积
    private Image BufferSurface = null;
    private Image LastBuffer;
    private static Image ThisBuffer;
    private Graphics gsprite;
//更新状态所用变量,决定是否本次刷屏
    private boolean bStateMapEntry = true;
    private boolean bStateStringEntry = true;

    private boolean bGameStateMapEntry = true;
    private boolean bGameStateStringEntry = true;
//游戏运行中状态,是游戏状态RUN中的
    public final static int EntryWait = -7;
    public final static int Wait = 0;
    public final static int Ready = 1;
    public final static int Hit = 2;
    public final static int Fly = 3;
    public final static int Show_Succ = 4;
    public final static int Show_Fail = 5;
    public final static int End = 6;
    public final static int Init_fly = 7;
    public final static int Init_End = 8;
 //初始化gameState,此变量表示游戏运行中状态
    public int gameState = EntryWait;
 /**
     *创建菜单所需要变量
     */
    MenuNode[] tempMenuNode;
    MenuNode menuArrow;
    Menu mainMenu;//主菜单
    Menu pauseMenu;//暂停界面菜单
    Menu uploadMenu;//是否上传网络排名选择

    /**
     * 企鹅飞行或者其他状态都会有一个Animate对象,在Update时更新其坐标,paint时根据坐标画到屏幕上
     */
    Animate Drop;
    Animate Strike;
    Animate Explode;
    Animate Flying;
    Animate AnimateScore;
    Animate PauseBack;
 /**
     * Demo停留在没个界面的时间参数
     */
    public final static int SHOWOK = 500;
    public final static int MENUIDLE = 10000;

  /**
     * 游戏状态初始化
     */
    public static int state = COPYRIGHT;

    private static int bgCurX = 0;
    private Graphics Bg;

    //Response
    private static int phyX = 0;
     /**
     * 游戏中的垫子的位置,根据随机数得到保存在该数组中
     */
    private int[] ElasticPos = new int[50];

    public boolean bDrawDrop;
    public boolean bDrawStrike=false;
    public boolean bDrawFly;
    public boolean bDrawScore;
    public int curFrame = 0;
    public int BackTime = 0;
    public int FlyTime = 0;
  /**
     * 根据位置来判断有没有打中企鹅,在如下参数范围内,挥棒才可能击中企鹅
     */
    private static int HITTOP = 140;
    private static int HITBOTTOM = 180;
     /**
     * 显示路标
     */
    private static int ROADFLAG1 = -36;
/**
     * 每次移动屏幕的绝对位移
     */
    private static int RATE = 8;
      /**
     * 山移动的相对位移,每次++可以让山慢慢移出屏幕
     */
    private static int MCurX = 0;
    public boolean notHit = true;

    private static int maxSpeed = 100;
    private int speedX;
    private int speedY;
 /**

⌨️ 快捷键说明

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