亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? wormpit.java

?? 貪食蛇小游戲 用j2me編的 用的是ide 大家參考一下下哦
?? JAVA
字號:
/*
 * @(#)WormPit.java	1.2 03/01/22
 *
 * Copyright (c) 2004 Sun Microsystems, Inc.  All rights reserved.
 * Use is subject to license terms
 */

/*
 * WormPit.java
 *
 * Created on March 30, 2001, 16:15
 * @author Todd M Kennedy
 * @version 1.0
 */

package example.wormgame2;

import java.lang.System;
import java.lang.Runnable;
import java.lang.InterruptedException;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;

import javax.microedition.lcdui.Font;
import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Graphics;

import javax.microedition.rms.RecordStore;
import javax.microedition.rms.RecordStoreException;

import javax.microedition.media.Player;
import javax.microedition.media.Manager;
import javax.microedition.media.MediaException;
import javax.microedition.media.control.ToneControl;

/**
 * The WormPit contains a Worm and some WormFood. The Worm will
 * slither around the pit in search of WormFood. If the Worm eats
 * it will grow in length. The Worm will be killed if it attempts
 * to slither past the edge of the pit or if it eats itself.
 */
public class WormPit extends Canvas implements Runnable {

    /** Handle to target food. */
    private WormFood myFood;
    /** Handle to current worm object. */
    private Worm     myWorm;
    /** Flag to indicate when the game is finished. */
    private boolean gameOver = false;
    /** Flag to indicate if current game is paused. */
    private boolean gamePaused = false;
    /** Flag to indicate game is restarted. */
    private boolean gameRestart = false;
    /** Flag to indicate forced repaint is needed. */
    private boolean forceRedraw = true;
    /** Flag to indicate the game is to be completely destroyed. */
    private boolean gameDestroyed = false;
    /** Current game score. */
    private int score = 0;
    /** Current game level. */
    private int level = 5;
    /** Number of pieces of food eaten since the last level change. */
    private int foodEaten = 0;
    /** Current screen width in pixels. */
    private int width;
    /** Current screen height in pixels. */
    private int height;
    /** Audio player for background tune. */
    private Player audioPlayer;
    /** Tone player. */
    private Player tonePlayer;
    /** Current screen size in cells. */
    static int CellWidth;
    /** Current screen height in cells. */
    static int CellHeight;
    /** Initial offset for screen rendering. */
    private static final int START_POS = 3;
    /** Font height for rendering the score message. */
    private static final int SCORE_CHAR_HEIGHT;
    /** Font width for rendering the score message. */
    private static final int SCORE_CHAR_WIDTH;
    /** Height for two lines of score message text. */
    private static final int SCORE_HEIGHT;
    /** Default delay between worm repaints. (400 milliseconds) */
    private static final int DEFAULT_WAIT = 400;
    /** Maximum number of difficulty levels. (10) */
    static final byte MAX_LEVELS = 10;
    /** Color for target food object. (0x00ff00) */
    static final int FOOD_COLOUR  = 0x0000ff00;
    /** Color for text objects. (0xff0000) */
    static final int TEXT_COLOUR  = 0x00ff0000; 
    /** Color for erasing worm cells. (0xffffff) */
    static final int ERASE_COLOUR = 0x00ffffff;
    /** Color for drawing worm cells. (0x000000) */
    static final int DRAW_COLOUR  = 0x00000000;
    /** Size of a cell for worm rendering. */
    public  static final int CELL_SIZE = 5;

    static {
	Font defaultFont  = Font.getDefaultFont();
	SCORE_CHAR_WIDTH  = defaultFont.charWidth('S');
	SCORE_CHAR_HEIGHT = defaultFont.getHeight();
	SCORE_HEIGHT      = SCORE_CHAR_HEIGHT * 2;
    }

    /**
     * Default constructor for worm pit.
     * Initialized the food and worm objects.
     */
    public WormPit() {
	width  = round(getWidth());
	height = round(getHeight()-SCORE_HEIGHT);
	WormPit.CellWidth  = (width-(START_POS*2)) / WormPit.CELL_SIZE;
	WormPit.CellHeight = (height-(START_POS*2)) / WormPit.CELL_SIZE;
	myWorm = new Worm(this);

	/* Generate food for worm to eat */
	myFood  = new WormFood(this);
	int x = myFood.getX();
	int y = myFood.getY();
	while (myWorm.contains(x, y)) {
	    myFood.regenerate();        // regenerate if food placed under worm
	    x = myFood.getX();  y = myFood.getY();
	}
    }

    /**
     * Round the given value to next lowest number divisible by the
     * cell size.
     * @param val number to be rounded down
     * @return rounded down value
     */
    private int round(int val) {
	int delta = (val-(START_POS*2)) % CELL_SIZE;
	return (val - delta);
    }

    /**
     * Set the difficulty level. If the new level is different from the
     * current level, any game currently in progress is terminated and
     * the score is lost.
     * @param level value of new level requested
     * @see #getLevel
     */
    public void setLevel(int level) {
	if (this.level != level) {
	    this.level = level;
	    gameOver = true;
	    gamePaused = false;
	    foodEaten = 0;
	    score = 0;
	}
    }

    /**
     * Get the difficulty level.
     * @return current game level 
     * @see #setLevel
     */
    public int getLevel() {
	return level;
    }

    /**
     * Get the score of this game.
     * @return current score
     */
    public int getScore() {
	return score;
    }

    /**
     * Returns true if the given point is within the bounds of the
     * worm pit.
     * @param x x coordinate of point to check (0 - CellWidth)
     * @param y y coordinate of point to check (0 - CellHeight)
     * @return true, if coordinate is in the worm pit
     */
    static boolean isInBounds(int x, int y) {
	if ((x < 0) || (x >= WormPit.CellWidth)) {
	    return false;
	}
	if ((y < 0) || (y >= WormPit.CellHeight)) {
	    return false;
	}
	return true;
    }

    /**
     * Restart the game.
     */
    void restart() {
	    if (gamePaused) {
		gamePaused = false;
	    } else {
		myWorm.regenerate();
		myFood.regenerate();
		foodEaten = 0;
		score = 0;
		gameOver = false;
		if ((audioPlayer != null) && 
		    (audioPlayer.getState() == Player.PREFETCHED)) {
		    try {
			audioPlayer.setMediaTime(0);
			audioPlayer.start();
		    } catch (MediaException me) { }
		}
	    }
	    forceRedraw = true;

	    synchronized (myWorm) {
		myWorm.notifyAll();
	    }
    }

    /**
     * Handle keyboard input. This is used for worm movement.
     * @param keyCode pressed key is either Canvas arrow key (UP,
     *  DOWN, LEFT, RIGHT) or simulated with KEY_NUM (2, 8, 4,6).
     */
    public void keyPressed(int keyCode) {
	switch (getGameAction(keyCode)) {
	case Canvas.UP:
	    myWorm.setDirection(Worm.UP);
	    break;
	case Canvas.DOWN:
	    myWorm.setDirection(Worm.DOWN);
	    break;
	case Canvas.LEFT:
	    myWorm.setDirection(Worm.LEFT);
	    break;
	case Canvas.RIGHT:
	    myWorm.setDirection(Worm.RIGHT);
	    break;
	case 0:
	    // There is no game action.. Use keypad constants instead
	    switch (keyCode) {
	    case Canvas.KEY_NUM2:
		myWorm.setDirection(Worm.UP);
		break;
	    case Canvas.KEY_NUM8:
		myWorm.setDirection(Worm.DOWN);
		break;
	    case Canvas.KEY_NUM4:
		myWorm.setDirection(Worm.LEFT);
		break;
	    case Canvas.KEY_NUM6:
		myWorm.setDirection(Worm.RIGHT);
		break;
	    }
	    break;
	}
    }

    /**
     * Paint anything currently in the pit.
     * Overrides Canvas.paint.
     * @param g graphics object to be rendered
     */
    private void paintPitContents(Graphics g) {
	try {
	    myWorm.update(g);    // update worm position
	    if (myFood.isAt(myWorm.getX(), myWorm.getY())) {
		myWorm.eat();
		score += level;

		foodEaten++;

		if (foodEaten > (level << 1)) {
		    /* Increase difficulty level */
		    forceRedraw = true;
		    foodEaten = 0;
		    level++;

		    if (tonePlayer != null) {
			try {
			    tonePlayer.setMediaTime(0);
			    tonePlayer.start();
			} catch (MediaException me) { }
		    }
		} else {
		    if (audioPlayer != null) {
			try {
			    Manager.playTone(69, 50, 100);   // Play audio
			} catch (MediaException me) { }
		    }
		}

		g.setColor(WormPit.ERASE_COLOUR);
		g.fillRect((width - (SCORE_CHAR_WIDTH * 3))-START_POS,
			   height-START_POS,
			   (SCORE_CHAR_WIDTH * 3),
			   SCORE_CHAR_HEIGHT);
		g.setColor(WormPit.DRAW_COLOUR);
		
		// Display new score
		g.drawString("" + score, 
			     width - (SCORE_CHAR_WIDTH * 3) - START_POS, 
			     height - START_POS, g.TOP|g.LEFT);
		
		myFood.regenerate();
		int x = myFood.getX();
		int y = myFood.getY();
		while (myWorm.contains(x, y)) {
		// generate again if food placed under worm..
		    myFood.regenerate();
		    x = myFood.getX();  y = myFood.getY();
		}
	    }
	    
	    myFood.paint(g);
	} catch (WormException se) {
	    gameOver = true;
	}
    }

    /**
     * Paint the worm pit and its components
     * @param g graphics object to be rendered
     */
    public void paint(Graphics g) {
	if (forceRedraw) {
	    // Redraw the entire screen
	    forceRedraw = false;

	    // Clear background
	    g.setColor(WormPit.ERASE_COLOUR);
	    g.fillRect(0, 0, getWidth(), 
		      getHeight());

	    // Draw pit border
	    g.setColor(WormPit.DRAW_COLOUR);
	    g.drawRect(1, 1, (width - START_POS), (height - START_POS));
	    
	    // Display current level
	    g.drawString("L: " + level, START_POS, height, g.TOP|g.LEFT);
	    g.drawString("" + score, 
			 (width - (SCORE_CHAR_WIDTH * 3)), 
			 height, g.TOP|g.LEFT);

	    // Display current score
	    g.drawString("S: ", 
			 (width - (SCORE_CHAR_WIDTH * 4)), 
			 height, g.TOP|g.RIGHT);
	    g.drawString("" + score, 
			 (width - (SCORE_CHAR_WIDTH * 3)), 
			 height, g.TOP|g.LEFT);

	    // Display highest score for this level
	    g.drawString("H: ", 
			 (width - (SCORE_CHAR_WIDTH * 4)), 
			 (height + SCORE_CHAR_HEIGHT), 
			 g.TOP|g.RIGHT);
	    g.drawString("" + WormScore.getHighScore(level), 
			 (width - (SCORE_CHAR_WIDTH * 3)), 
			 (height + SCORE_CHAR_HEIGHT), 
			 g.TOP|g.LEFT);

	    // Draw worm & food
	    g.translate(START_POS, START_POS);
	    g.setClip(0, 0, CellWidth*CELL_SIZE, CellHeight*CELL_SIZE);
	    myWorm.paint(g);
	    myFood.paint(g);
	} else {
	    // Draw worm & food
	    g.translate(START_POS, START_POS);
	}

	if (gamePaused) {
	    Font pauseFont = g.getFont();
	    int fontH = pauseFont.getHeight();
	    int fontW = pauseFont.stringWidth("Paused");
	    g.setColor(WormPit.ERASE_COLOUR);
	    g.fillRect((width-fontW)/2 - 1, (height-fontH)/2,
		       fontW + 2, fontH);
	    g.setColor(WormPit.TEXT_COLOUR);
	    g.setFont(pauseFont);
	    g.drawString("Paused", (width-fontW)/2, (height-fontH)/2,
			 g.TOP|g.LEFT);
	} else if (gameOver) {
	    Font overFont = g.getFont();
	    int fontH = overFont.getHeight();
	    int fontW = overFont.stringWidth("Game Over");
	    g.setColor(WormPit.ERASE_COLOUR);
	    g.fillRect((width-fontW)/2 - 1, (height-fontH)/2,
		       fontW + 2, fontH);
	    g.setColor(WormPit.TEXT_COLOUR);
	    g.setFont(overFont);
	    g.drawString("Game Over", (width-fontW)/2, (height-fontH)/2,
			 g.TOP|g.LEFT);
	} else {
	    paintPitContents(g);
	}
	g.translate(-START_POS, -START_POS);
    }

    /** 
     * Notification handler when canvas hidden.
     * Forces a redraw when canvas is shown again.
     * Signals that the game is paused while the canvas is obscured.
     */
    protected void hideNotify() {
	super.hideNotify();
	forceRedraw = true;
	if (!gameOver) {
	    gamePaused = true;
	}
    }

    /**
     * The main execution loop.
     */
    public void run() {
	while (!gameDestroyed) {
	    try {
		synchronized (myWorm) {
		    if (gameOver) {
			if (WormScore.getHighScore(level) < score) {
			    /* Display score screen */
			    WormScore.setHighScore(level, score, "me");
			}
			if ((audioPlayer != null) && 
			    (audioPlayer.getState() == Player.STARTED)) {
			    try {
				audioPlayer.stop();
				Manager.playTone(60, 400, 100);
			    } catch (Exception ex) { }
			}
			repaint();
			// serviceRepaints(); // Draw immediately
			myWorm.wait();    // Wait until user presses 'restart'
		    } else if (gamePaused) {
			repaint();
			// serviceRepaints(); // Draw immediately
			myWorm.wait();    // Wait until user presses 'restart'
		    } else {
			myWorm.moveOnUpdate();
			repaint();
			// serviceRepaints(); // Draw immediately
			myWorm.wait(DEFAULT_WAIT-(level*40));
		    }
		}
	    } catch (java.lang.InterruptedException ie) {
	    }
	}
    }

    /**
     * Destroy the entire game. Call this prior to destroying the MIDlet.
     */
    public void destroyGame() {
	synchronized (myWorm) {
	    gameDestroyed = true;
	    //myWorm.notifyAll();
	    myWorm.notifyAll();
	}
    }

    /**
     * Destroy the audio player. Call this destroy the audio player.
     */
    public void destroyAudioPlayer() {
	synchronized (myWorm) {
	    if (audioPlayer != null) {
		audioPlayer.close();
		audioPlayer = null;
	    }
	    if (tonePlayer != null) {
		tonePlayer.close();
		tonePlayer = null;
	    }
	    myWorm.notifyAll();
	}
    }

    /**
     * Create an audio player.
     */
    public void createAudioPlayer() {
	byte[] bkmelody = {
			ToneControl.VERSION, 1,
			ToneControl.SET_VOLUME, 40,
			76, 8,
			81, 24,
			76, 8,
			88, 24,
			81, 8,
			85, 16,
			83, 8,
			85, 8,
			81, 16,
			76, 16,
			81, 16,
			90, 16,
			88, 16,
			85, 8,
			86, 8,
			88, 48,
			ToneControl.SILENCE, 8,
			76, 8,
			81, 16,
			90, 16,
			88, 16,
			85, 8,
			86, 8,
			88, 16,
			83, 8,
			85, 8,
			81, 16,
			76, 16,
			81, 16,
			85, 8,
			86, 8,
			83, 24,
			81, 8,
			81, 32
	};

	byte[] tseq = {
			ToneControl.VERSION, 1,
			64, 4, 
			65, 4, 
			66, 4
	};

	if (audioPlayer != null) {
	    audioPlayer.close();
	    audioPlayer = null;
	    try {
		Thread.sleep(200);
	    } catch (Exception ex) { }
	}
	
	try {
	    ToneControl tControl;

	    tonePlayer = Manager.createPlayer(Manager.TONE_DEVICE_LOCATOR);
	    tonePlayer.realize();
	    tControl = (ToneControl)tonePlayer.getControl("ToneControl");
	    tControl.setSequence(tseq);

	    audioPlayer = Manager.createPlayer(Manager.TONE_DEVICE_LOCATOR);
	    audioPlayer.setLoopCount(-1);
	    audioPlayer.realize();
	    tControl = (ToneControl)audioPlayer.getControl("ToneControl");
	    tControl.setSequence(bkmelody);
	    audioPlayer.start();


	} catch (Exception ex) {
	    ex.printStackTrace();
	}
    }

}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产日产欧美一区二区视频| 中文av一区二区| 成人晚上爱看视频| 丝袜亚洲另类丝袜在线| 中文字幕一区日韩精品欧美| 欧美一区二区视频免费观看| 成人精品在线视频观看| 日本欧美一区二区在线观看| 亚洲免费成人av| 久久久精品人体av艺术| 欧美福利一区二区| 色国产综合视频| 粉嫩蜜臀av国产精品网站| 日日骚欧美日韩| 亚洲电影激情视频网站| 国产精品久久久久久亚洲毛片 | 欧美日韩国产乱码电影| 成人av电影免费在线播放| 美国三级日本三级久久99| 亚洲成在线观看| 一区二区三区四区在线播放| 国产精品久久久久久久久动漫 | 国产精品盗摄一区二区三区| 26uuu精品一区二区| 欧美老肥妇做.爰bbww视频| 91女人视频在线观看| 成人激情电影免费在线观看| 狠狠色狠狠色综合系列| 精品一区二区三区免费毛片爱 | 日韩不卡在线观看日韩不卡视频| 亚洲精品视频免费观看| 亚洲色图20p| 综合久久久久久久| 亚洲男帅同性gay1069| 亚洲欧美另类久久久精品2019| 中文字幕欧美三区| 中文字幕亚洲电影| 亚洲视频一区在线| 1000部国产精品成人观看| 国产精品美女久久久久久| 国产精品的网站| 亚洲色图欧美激情| 一区二区三区四区av| 一区二区成人在线| 五月婷婷激情综合| 免费人成精品欧美精品| 日韩av在线免费观看不卡| 免费不卡在线观看| 黄色日韩网站视频| 成人一区二区视频| 99久久免费视频.com| 色综合久久久久网| 欧美区视频在线观看| 日韩情涩欧美日韩视频| 久久久精品免费观看| 中文子幕无线码一区tr| 亚洲私人影院在线观看| 舔着乳尖日韩一区| 日本大胆欧美人术艺术动态| 国产乱子伦一区二区三区国色天香 | 久久久综合激的五月天| 国产精品全国免费观看高清 | 婷婷综合久久一区二区三区| 日韩精品免费专区| 国产精品88av| 日本高清不卡在线观看| 欧美一区二区三区电影| 久久精品在这里| 一区二区三区鲁丝不卡| 麻豆国产精品一区二区三区 | 91精品国产综合久久久蜜臀图片| 欧美v日韩v国产v| 国产精品白丝在线| 日韩国产一区二| 成人涩涩免费视频| 欧美日韩在线播放三区四区| 日韩免费观看2025年上映的电影 | 久久99热这里只有精品| 波多野结衣欧美| 欧美一区二区在线播放| 国产精品视频线看| 丝袜美腿一区二区三区| 国产福利一区在线| 欧美三级资源在线| 欧美国产日本韩| 日韩av中文在线观看| 粉嫩13p一区二区三区| 欧美精品丝袜中出| 国产精品免费视频网站| 亚洲超丰满肉感bbw| 成人在线视频一区| 日韩精品一区二区三区在线观看| 国产精品国产三级国产专播品爱网| 视频一区在线视频| 91啦中文在线观看| 久久久www成人免费毛片麻豆 | 欧美日本精品一区二区三区| 欧美成人伊人久久综合网| 亚洲视频一区二区在线| 国内精品久久久久影院薰衣草 | 色综合久久中文综合久久97| 精品国产区一区| 婷婷成人综合网| 91久久精品网| 亚洲图片激情小说| 成人一区在线观看| 久久一夜天堂av一区二区三区| 亚洲第一电影网| 日本高清视频一区二区| 国产精品高潮呻吟| 国产精品一卡二卡在线观看| 6080国产精品一区二区| 亚洲免费毛片网站| av在线播放不卡| 欧美高清在线一区| 国产高清不卡一区| 精品sm捆绑视频| 天天免费综合色| 91福利视频在线| 久久精品网站免费观看| 国产色综合一区| 国产一区二区福利| 欧美伦理视频网站| 一区二区在线观看不卡| 国模少妇一区二区三区| 欧美乱妇23p| 国产精品免费视频一区| 日韩区在线观看| 亚洲高清免费观看| 国产女人水真多18毛片18精品视频| 99视频在线精品| 亚洲婷婷在线视频| 日本人妖一区二区| 麻豆精品在线视频| 欧美日韩精品综合在线| 亚洲人成人一区二区在线观看| 日本网站在线观看一区二区三区 | 亚洲视频一区在线| 99久久伊人网影院| 国产亚洲精品精华液| 久久精品99国产精品日本| 在线成人小视频| 午夜精品一区二区三区免费视频| 欧美日韩国产电影| 亚洲一区二区在线免费看| 97久久精品人人爽人人爽蜜臀| 中文字幕+乱码+中文字幕一区| 国产一区二区精品久久99| 精品剧情v国产在线观看在线| 亚洲国产精品99久久久久久久久 | 偷拍与自拍一区| 亚洲精品在线网站| 日韩精品国产欧美| 欧美日韩国产精选| 五月婷婷欧美视频| 欧美乱妇20p| 国产精品一线二线三线精华| 亚洲精品一区二区三区香蕉 | 日韩精品一二三区| 91精品国产乱| 免费在线观看精品| 日韩精品自拍偷拍| 丰满少妇在线播放bd日韩电影| 久久―日本道色综合久久| 国产精品888| 国产精品天天摸av网| 成人免费毛片嘿嘿连载视频| 国产精品福利在线播放| 99精品黄色片免费大全| 亚洲另类一区二区| 欧美综合视频在线观看| 午夜精品福利一区二区蜜股av | 日本道免费精品一区二区三区| 中文av一区特黄| 亚洲欧美日韩在线不卡| 一区二区视频在线| 亚洲国产精品久久艾草纯爱| 欧美日韩免费一区二区三区| 亚洲午夜精品网| 2024国产精品视频| 不卡的电视剧免费网站有什么| 国产精品高清亚洲| 欧美亚洲愉拍一区二区| 亚洲精品日日夜夜| 精品国产一区二区精华| 日韩一二三四区| 粉嫩一区二区三区性色av| 亚洲另类中文字| 91麻豆精品国产| 91丨porny丨户外露出| 婷婷成人激情在线网| 久久久精品欧美丰满| 色狠狠色噜噜噜综合网| 国产v日产∨综合v精品视频| 18涩涩午夜精品.www| 91精品国产黑色紧身裤美女| 成人免费视频视频在线观看免费| 亚洲男同性恋视频| 国产日韩av一区| 欧美日韩国产免费|