<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://mediawiki.zeropage.org/index.php?action=history&amp;feed=atom&amp;title=MobileJavaStudy%2FSnakeBite%2FFinalSource</id>
	<title>MobileJavaStudy/SnakeBite/FinalSource - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://mediawiki.zeropage.org/index.php?action=history&amp;feed=atom&amp;title=MobileJavaStudy%2FSnakeBite%2FFinalSource"/>
	<link rel="alternate" type="text/html" href="https://mediawiki.zeropage.org/index.php?title=MobileJavaStudy/SnakeBite/FinalSource&amp;action=history"/>
	<updated>2026-05-15T01:36:02Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.39.8</generator>
	<entry>
		<id>https://mediawiki.zeropage.org/index.php?title=MobileJavaStudy/SnakeBite/FinalSource&amp;diff=34681&amp;oldid=prev</id>
		<title>imported&gt;Unknown at 05:23, 7 February 2021</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.zeropage.org/index.php?title=MobileJavaStudy/SnakeBite/FinalSource&amp;diff=34681&amp;oldid=prev"/>
		<updated>2021-02-07T05:23:46Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== 상규 ==&lt;br /&gt;
 import java.lang.*;&lt;br /&gt;
 import java.io.*;&lt;br /&gt;
 import java.util.*;&lt;br /&gt;
 import javax.microedition.midlet.*;&lt;br /&gt;
 import javax.microedition.lcdui.*;&lt;br /&gt;
 &lt;br /&gt;
 class SplashCanvas extends Canvas {&lt;br /&gt;
 	public void paint(Graphics g) {&lt;br /&gt;
 		g.setColor(0xFFFFFF);&lt;br /&gt;
 		g.fillRect(0, 0, getWidth(), getHeight());&lt;br /&gt;
 &lt;br /&gt;
 		try {&lt;br /&gt;
 			Image splashImage = Image.createImage(&amp;quot;/Splash.png&amp;quot;);&lt;br /&gt;
 			g.drawImage(splashImage, getWidth() / 2, getHeight() / 2, Graphics.HCENTER | Graphics.VCENTER);&lt;br /&gt;
 		} catch(IOException e) {&lt;br /&gt;
 			e.printStackTrace();&lt;br /&gt;
 		}&lt;br /&gt;
 	}&lt;br /&gt;
 };&lt;br /&gt;
 &lt;br /&gt;
 class SnakeCell {&lt;br /&gt;
 	public int x;&lt;br /&gt;
 	public int y;&lt;br /&gt;
 &lt;br /&gt;
 	public SnakeCell(int x, int y) {&lt;br /&gt;
 		this.x = x;&lt;br /&gt;
 		this.y = y;&lt;br /&gt;
 	}&lt;br /&gt;
 };&lt;br /&gt;
 &lt;br /&gt;
 class Snake {&lt;br /&gt;
 	public static final int LEFT = 1;&lt;br /&gt;
 	public static final int RIGHT = 2;&lt;br /&gt;
 	public static final int UP = 3;&lt;br /&gt;
 	public static final int DOWN = 4;&lt;br /&gt;
 &lt;br /&gt;
 	private final int xRange;&lt;br /&gt;
 	private final int yRange;&lt;br /&gt;
 &lt;br /&gt;
 	private Vector cellVector;&lt;br /&gt;
 	private int headIndex;&lt;br /&gt;
 &lt;br /&gt;
 	private int direction;&lt;br /&gt;
 	&lt;br /&gt;
 	private boolean growing;&lt;br /&gt;
 &lt;br /&gt;
 	public Snake(int length, int xRange, int yRange) {&lt;br /&gt;
 		this.xRange = xRange;&lt;br /&gt;
 		this.yRange = yRange;&lt;br /&gt;
 &lt;br /&gt;
 		cellVector = new Vector();&lt;br /&gt;
 &lt;br /&gt;
 		for(int i = length ; i &amp;amp;gt;= 1 ; i--)&lt;br /&gt;
 			cellVector.addElement(new SnakeCell(i, 1));&lt;br /&gt;
 &lt;br /&gt;
 		headIndex = 0;&lt;br /&gt;
 &lt;br /&gt;
 		direction = Snake.RIGHT;&lt;br /&gt;
 		&lt;br /&gt;
 		growing = false;&lt;br /&gt;
 	}&lt;br /&gt;
 &lt;br /&gt;
 	public int length() {&lt;br /&gt;
 		return cellVector.size();&lt;br /&gt;
 	}&lt;br /&gt;
 &lt;br /&gt;
 	public SnakeCell getSnakeCell(int index) {&lt;br /&gt;
 		return (SnakeCell)cellVector.elementAt((headIndex + index) % length());&lt;br /&gt;
 	}&lt;br /&gt;
 &lt;br /&gt;
 	public int getDirection() {&lt;br /&gt;
 		return direction;&lt;br /&gt;
 	}&lt;br /&gt;
 &lt;br /&gt;
 	public void setDirection(int direction) {&lt;br /&gt;
 		this.direction = direction;&lt;br /&gt;
 	}&lt;br /&gt;
 &lt;br /&gt;
 	public boolean checkGameOver() {&lt;br /&gt;
 		SnakeCell head;&lt;br /&gt;
 		SnakeCell cell;&lt;br /&gt;
 &lt;br /&gt;
 		head = getSnakeCell(0);&lt;br /&gt;
 		if(head.x &amp;amp;lt; 0 || head.x &amp;amp;gt; xRange - 1&lt;br /&gt;
 		|| head.y &amp;amp;lt; 0 || head.y &amp;amp;gt; yRange - 1)&lt;br /&gt;
 			return false;&lt;br /&gt;
 &lt;br /&gt;
 		int length = length();&lt;br /&gt;
 		for(int i = 1 ; i &amp;amp;lt; length ; i++) {&lt;br /&gt;
 			cell = getSnakeCell(i);&lt;br /&gt;
 			if(head.x == cell.x &amp;amp;amp;&amp;amp;amp; head.y == cell.y)&lt;br /&gt;
 				return false;&lt;br /&gt;
 		}&lt;br /&gt;
 &lt;br /&gt;
 		return true;&lt;br /&gt;
 	}&lt;br /&gt;
 &lt;br /&gt;
 	public boolean go() {&lt;br /&gt;
 		SnakeCell prevHead = getSnakeCell(0);&lt;br /&gt;
 		SnakeCell currentHead;&lt;br /&gt;
 		if(growing) {&lt;br /&gt;
 			currentHead = new SnakeCell(prevHead.x, prevHead.y);&lt;br /&gt;
 			cellVector.insertElementAt(currentHead, headIndex);&lt;br /&gt;
 &lt;br /&gt;
 			growing = false;&lt;br /&gt;
 		}&lt;br /&gt;
 		else {&lt;br /&gt;
 			headIndex = (headIndex + length() - 1) % length();&lt;br /&gt;
 			currentHead = getSnakeCell(0);&lt;br /&gt;
 	&lt;br /&gt;
 			currentHead.x = prevHead.x;&lt;br /&gt;
 			currentHead.y = prevHead.y;&lt;br /&gt;
 		}&lt;br /&gt;
 	&lt;br /&gt;
 		if(direction == Snake.LEFT)&lt;br /&gt;
 			currentHead.x--;&lt;br /&gt;
 		else if(direction == Snake.RIGHT)&lt;br /&gt;
 			currentHead.x++;&lt;br /&gt;
 		else if(direction == Snake.UP)&lt;br /&gt;
 			currentHead.y--;&lt;br /&gt;
 		else if(direction == Snake.DOWN)&lt;br /&gt;
 			currentHead.y++;&lt;br /&gt;
 		&lt;br /&gt;
 		return checkGameOver();&lt;br /&gt;
 	}&lt;br /&gt;
 	&lt;br /&gt;
 	public void grow() {&lt;br /&gt;
 		growing = true;&lt;br /&gt;
 	}&lt;br /&gt;
 };&lt;br /&gt;
 &lt;br /&gt;
 class SnakeBiteCanvas extends Canvas implements Runnable {&lt;br /&gt;
 	private final int boardWallWidth = 4;&lt;br /&gt;
 	private final int snakeCellWidth = 4;&lt;br /&gt;
 &lt;br /&gt;
 	private final int canvasWidth;&lt;br /&gt;
 	private final int canvasHeight;&lt;br /&gt;
 &lt;br /&gt;
 	private final int boardX;&lt;br /&gt;
 	private final int boardY;&lt;br /&gt;
 	private final int boardWidth;&lt;br /&gt;
 	private final int boardHeight;&lt;br /&gt;
 &lt;br /&gt;
 	private final int boardInnerX;&lt;br /&gt;
 	private final int boardInnerY;&lt;br /&gt;
 	private final int boardInnerWidth;&lt;br /&gt;
 	private final int boardInnerHeight;&lt;br /&gt;
 	&lt;br /&gt;
 	private final int snakeXRange;&lt;br /&gt;
 	private final int snakeYRange;&lt;br /&gt;
 &lt;br /&gt;
 	private Snake snake;&lt;br /&gt;
 	&lt;br /&gt;
 	private int appleX;&lt;br /&gt;
 	private int appleY;&lt;br /&gt;
 	&lt;br /&gt;
 	private int level;&lt;br /&gt;
 &lt;br /&gt;
 	private boolean pause;&lt;br /&gt;
 	private boolean drawBoard;&lt;br /&gt;
 	private boolean printLevel;&lt;br /&gt;
 	private boolean gameOver;&lt;br /&gt;
 &lt;br /&gt;
 	private int delayTime;&lt;br /&gt;
 &lt;br /&gt;
 	public Command pauseCommand;&lt;br /&gt;
 	public Command restartCommand;&lt;br /&gt;
 	&lt;br /&gt;
 	public SnakeBiteCanvas() {&lt;br /&gt;
 		canvasWidth = getWidth();&lt;br /&gt;
 		canvasHeight = getHeight();&lt;br /&gt;
 &lt;br /&gt;
 		boardWidth = canvasWidth - 6 - (canvasWidth - 6 - boardWallWidth * 2) % snakeCellWidth;&lt;br /&gt;
 		boardHeight = boardWidth / 10 * 8 - (boardWidth / 10 * 8 - boardWallWidth * 2) % snakeCellWidth;&lt;br /&gt;
 		boardX = (canvasWidth - boardWidth) / 2;&lt;br /&gt;
 		boardY = (canvasHeight - boardHeight) /2;&lt;br /&gt;
 		&lt;br /&gt;
 		boardInnerX = boardX + boardWallWidth;&lt;br /&gt;
 		boardInnerY = boardY + boardWallWidth;&lt;br /&gt;
 		boardInnerWidth = boardWidth - boardWallWidth * 2;&lt;br /&gt;
 		boardInnerHeight = boardHeight - boardWallWidth * 2;&lt;br /&gt;
 		&lt;br /&gt;
 		snakeXRange = boardInnerWidth / snakeCellWidth;&lt;br /&gt;
 		snakeYRange = boardInnerHeight / snakeCellWidth;&lt;br /&gt;
 &lt;br /&gt;
 		newGame();&lt;br /&gt;
 	}&lt;br /&gt;
 &lt;br /&gt;
 	public void newGame() {&lt;br /&gt;
 		snake = new Snake(5, snakeXRange, snakeYRange);&lt;br /&gt;
 		&lt;br /&gt;
 		newApple();&lt;br /&gt;
 		&lt;br /&gt;
 		level = 1;&lt;br /&gt;
 &lt;br /&gt;
 		pause = true;&lt;br /&gt;
 		drawBoard = true;&lt;br /&gt;
 		printLevel = true;&lt;br /&gt;
 		gameOver = false;&lt;br /&gt;
 &lt;br /&gt;
 		delayTime = 200;&lt;br /&gt;
 &lt;br /&gt;
 		new Thread(this).start();&lt;br /&gt;
 	}&lt;br /&gt;
 	&lt;br /&gt;
 	public void newApple() {&lt;br /&gt;
 		Random random = new Random();&lt;br /&gt;
 		int length = snake.length();&lt;br /&gt;
 		SnakeCell cell;&lt;br /&gt;
 		boolean ok;&lt;br /&gt;
 		for(;;) {&lt;br /&gt;
 			appleX = Math.abs(random.nextInt()) % snakeXRange;&lt;br /&gt;
 			appleY = Math.abs(random.nextInt()) % snakeYRange;&lt;br /&gt;
 &lt;br /&gt;
 			ok = true;&lt;br /&gt;
 			for(int i = 0 ; i &amp;amp;lt; length ; i++) {&lt;br /&gt;
 				cell = snake.getSnakeCell(i);&lt;br /&gt;
 				if(appleX == cell.x &amp;amp;amp;&amp;amp;amp; appleY == cell.y) {&lt;br /&gt;
 					ok = false;&lt;br /&gt;
 					break;&lt;br /&gt;
 				}&lt;br /&gt;
 			}&lt;br /&gt;
 			if(ok)&lt;br /&gt;
 				return;&lt;br /&gt;
 		}&lt;br /&gt;
 	}&lt;br /&gt;
 &lt;br /&gt;
 	public void drawBoard(Graphics g) {&lt;br /&gt;
 		g.setColor(0xFFFFFF);&lt;br /&gt;
 		g.fillRect(0, 0, canvasWidth, canvasHeight);&lt;br /&gt;
 &lt;br /&gt;
 		g.setColor(0x000000);&lt;br /&gt;
 		g.fillRect(boardX, boardY, boardWidth, boardHeight);&lt;br /&gt;
 	}&lt;br /&gt;
 	&lt;br /&gt;
 	public void clearBoard(Graphics g) {&lt;br /&gt;
 		g.setColor(0xFFFFFF);&lt;br /&gt;
 		g.fillRect(boardInnerX - 1, boardInnerY - 1, boardInnerWidth + 2, boardInnerHeight + 2);&lt;br /&gt;
 	}&lt;br /&gt;
 &lt;br /&gt;
 	public void drawCell(Graphics g, int x, int y) {&lt;br /&gt;
 		g.fillRect(boardInnerX + snakeCellWidth * x,&lt;br /&gt;
 			boardInnerY + snakeCellWidth * y,&lt;br /&gt;
 			snakeCellWidth, snakeCellWidth);&lt;br /&gt;
 	}&lt;br /&gt;
 &lt;br /&gt;
 	public void paint(Graphics g) {&lt;br /&gt;
 		if(drawBoard) {&lt;br /&gt;
 			drawBoard(g);&lt;br /&gt;
 			drawBoard = false;&lt;br /&gt;
 		}&lt;br /&gt;
 &lt;br /&gt;
 		clearBoard(g);&lt;br /&gt;
 &lt;br /&gt;
 		g.setColor(0x000000);&lt;br /&gt;
 		&lt;br /&gt;
 		int length = snake.length();&lt;br /&gt;
 		SnakeCell cell;&lt;br /&gt;
 		for(int i = 0; i &amp;amp;lt; length ; i++) {&lt;br /&gt;
 			cell = snake.getSnakeCell(i);&lt;br /&gt;
 			drawCell(g, cell.x, cell.y);&lt;br /&gt;
 		}&lt;br /&gt;
 		&lt;br /&gt;
 		drawCell(g, appleX, appleY);&lt;br /&gt;
 &lt;br /&gt;
 		if(printLevel) {&lt;br /&gt;
 			g.setColor(0xFFFFFF);&lt;br /&gt;
 			g.fillRect(0, 0, canvasWidth, boardY);&lt;br /&gt;
 &lt;br /&gt;
 			g.setColor(0x000000);&lt;br /&gt;
 			g.drawString(&amp;quot;Level : &amp;quot; + level, canvasWidth / 2, 0, Graphics.HCENTER | Graphics.TOP);&lt;br /&gt;
 &lt;br /&gt;
 			printLevel = false;&lt;br /&gt;
 		}&lt;br /&gt;
 &lt;br /&gt;
 		if(gameOver) {&lt;br /&gt;
 			g.drawString(&amp;quot;Game Over!!&amp;quot;, canvasWidth / 2, canvasHeight, Graphics.HCENTER | Graphics.BOTTOM);&lt;br /&gt;
 		}&lt;br /&gt;
 	}&lt;br /&gt;
 	&lt;br /&gt;
 	public void keyPressed(int keyCode) {&lt;br /&gt;
 		if(!pause &amp;amp;amp;&amp;amp;amp; !gameOver) {&lt;br /&gt;
 			int gameAction = getGameAction(keyCode);&lt;br /&gt;
 			int direction = snake.getDirection();&lt;br /&gt;
 			if(gameAction == Canvas.LEFT &amp;amp;amp;&amp;amp;amp; direction != Snake.RIGHT)&lt;br /&gt;
 				snake.setDirection(Snake.LEFT);&lt;br /&gt;
 			else if(gameAction == Canvas.RIGHT &amp;amp;amp;&amp;amp;amp; direction != Snake.LEFT)&lt;br /&gt;
 				snake.setDirection(Snake.RIGHT);&lt;br /&gt;
 			else if(gameAction == Canvas.UP &amp;amp;amp;&amp;amp;amp; direction != Snake.DOWN)&lt;br /&gt;
 				snake.setDirection(Snake.UP);&lt;br /&gt;
 			else if(gameAction == Canvas.DOWN &amp;amp;amp;&amp;amp;amp; direction != Snake.UP)&lt;br /&gt;
 				snake.setDirection(Snake.DOWN);&lt;br /&gt;
 		}&lt;br /&gt;
 	}&lt;br /&gt;
 &lt;br /&gt;
 	public void start() {&lt;br /&gt;
 		pause = false;&lt;br /&gt;
 	}&lt;br /&gt;
 &lt;br /&gt;
 	public void pause() {&lt;br /&gt;
 		pause = true;&lt;br /&gt;
 	}&lt;br /&gt;
 &lt;br /&gt;
 	public void restart() {&lt;br /&gt;
 		newGame();&lt;br /&gt;
 		repaint();&lt;br /&gt;
 	}&lt;br /&gt;
 &lt;br /&gt;
 	public void run() {&lt;br /&gt;
 		SnakeCell head;&lt;br /&gt;
 		try {&lt;br /&gt;
 			for(;;) {&lt;br /&gt;
 				if(!pause) {&lt;br /&gt;
 					if(snake.go() == false) {&lt;br /&gt;
 						gameOver = true;&lt;br /&gt;
 						repaint();&lt;br /&gt;
 &lt;br /&gt;
 						this.removeCommand(pauseCommand);&lt;br /&gt;
 						this.addCommand(restartCommand);&lt;br /&gt;
 &lt;br /&gt;
 						return;&lt;br /&gt;
 					}&lt;br /&gt;
 					&lt;br /&gt;
 					head = snake.getSnakeCell(0);&lt;br /&gt;
 					if(head.x == appleX &amp;amp;amp;&amp;amp;amp; head.y == appleY) {&lt;br /&gt;
 						level++;&lt;br /&gt;
 						printLevel = true;&lt;br /&gt;
 &lt;br /&gt;
 						delayTime-=3;&lt;br /&gt;
 &lt;br /&gt;
 						snake.grow();&lt;br /&gt;
 						newApple();&lt;br /&gt;
 					}&lt;br /&gt;
 					&lt;br /&gt;
 					repaint();&lt;br /&gt;
 &lt;br /&gt;
 					Thread.sleep(delayTime);&lt;br /&gt;
 				}&lt;br /&gt;
 			}&lt;br /&gt;
 		} catch(InterruptedException e) {&lt;br /&gt;
 			e.printStackTrace();&lt;br /&gt;
 		}&lt;br /&gt;
 	}&lt;br /&gt;
 };&lt;br /&gt;
 &lt;br /&gt;
 public class SnakeBite extends MIDlet implements CommandListener {&lt;br /&gt;
 	private Display display;&lt;br /&gt;
 &lt;br /&gt;
 	private SplashCanvas splashCanvas;&lt;br /&gt;
 	private SnakeBiteCanvas snakeBiteCanvas;&lt;br /&gt;
 &lt;br /&gt;
 	private Command continueCommand;&lt;br /&gt;
 	private Command startCommand;&lt;br /&gt;
 	private Command pauseCommand;&lt;br /&gt;
 	private Command restartCommand;&lt;br /&gt;
 	private Command exitCommand;&lt;br /&gt;
 	&lt;br /&gt;
 	public SnakeBite() {&lt;br /&gt;
 		display = Display.getDisplay(this);&lt;br /&gt;
 &lt;br /&gt;
 		splashCanvas = new SplashCanvas();&lt;br /&gt;
 		snakeBiteCanvas = new SnakeBiteCanvas();&lt;br /&gt;
 &lt;br /&gt;
 		continueCommand = new Command(&amp;quot;Continue&amp;quot;, Command.SCREEN, 1);&lt;br /&gt;
 		startCommand = new Command(&amp;quot;Start&amp;quot;, Command.SCREEN, 1);&lt;br /&gt;
 		pauseCommand = new Command(&amp;quot;Pause&amp;quot;, Command.SCREEN, 1);&lt;br /&gt;
 		restartCommand = new Command(&amp;quot;Restart&amp;quot;, Command.SCREEN, 1);&lt;br /&gt;
 		exitCommand = new Command(&amp;quot;Exit&amp;quot;, Command.EXIT, 1);&lt;br /&gt;
 &lt;br /&gt;
 		splashCanvas.addCommand(continueCommand);&lt;br /&gt;
 		splashCanvas.addCommand(exitCommand);&lt;br /&gt;
 		splashCanvas.setCommandListener(this);&lt;br /&gt;
 &lt;br /&gt;
 		snakeBiteCanvas.pauseCommand = pauseCommand;&lt;br /&gt;
 		snakeBiteCanvas.restartCommand = restartCommand;&lt;br /&gt;
 		&lt;br /&gt;
 		snakeBiteCanvas.addCommand(startCommand);&lt;br /&gt;
 		snakeBiteCanvas.addCommand(exitCommand);&lt;br /&gt;
 		snakeBiteCanvas.setCommandListener(this);&lt;br /&gt;
 	}&lt;br /&gt;
 	&lt;br /&gt;
 	public void startApp() {&lt;br /&gt;
 		display.setCurrent(splashCanvas);&lt;br /&gt;
 	}&lt;br /&gt;
 	&lt;br /&gt;
 	public void pauseApp() {&lt;br /&gt;
 	}&lt;br /&gt;
 	&lt;br /&gt;
 	public void destroyApp(boolean unconditional) {&lt;br /&gt;
 		display = null;&lt;br /&gt;
 		snakeBiteCanvas = null;&lt;br /&gt;
 		startCommand = null;&lt;br /&gt;
 		pauseCommand = null;&lt;br /&gt;
 		restartCommand = null;&lt;br /&gt;
 		exitCommand = null;&lt;br /&gt;
 	}&lt;br /&gt;
 	&lt;br /&gt;
 	public void commandAction(Command c, Displayable d) {&lt;br /&gt;
 		if(c == continueCommand) {&lt;br /&gt;
 			display.setCurrent(snakeBiteCanvas);&lt;br /&gt;
 		}&lt;br /&gt;
 		else if(c == startCommand) {&lt;br /&gt;
 			snakeBiteCanvas.removeCommand(startCommand);&lt;br /&gt;
 			snakeBiteCanvas.addCommand(pauseCommand);&lt;br /&gt;
 &lt;br /&gt;
 			snakeBiteCanvas.start();&lt;br /&gt;
 		}&lt;br /&gt;
 		else if(c == pauseCommand) {&lt;br /&gt;
 			snakeBiteCanvas.removeCommand(pauseCommand);&lt;br /&gt;
 			snakeBiteCanvas.addCommand(startCommand);&lt;br /&gt;
 &lt;br /&gt;
 			snakeBiteCanvas.pause();&lt;br /&gt;
 		}&lt;br /&gt;
 		else if(c == restartCommand) {&lt;br /&gt;
 			snakeBiteCanvas.removeCommand(restartCommand);&lt;br /&gt;
 			snakeBiteCanvas.addCommand(startCommand);&lt;br /&gt;
 &lt;br /&gt;
 			snakeBiteCanvas.restart();&lt;br /&gt;
 		}&lt;br /&gt;
 		else if(c == exitCommand) {&lt;br /&gt;
 			destroyApp(true);&lt;br /&gt;
 			notifyDestroyed();&lt;br /&gt;
 		}&lt;br /&gt;
 	}&lt;br /&gt;
 };&lt;br /&gt;
=== 재동 ===&lt;br /&gt;
 import java.io.*;&lt;br /&gt;
 import java.util.*;&lt;br /&gt;
 import java.lang.*;&lt;br /&gt;
 import javax.microedition.midlet.*;&lt;br /&gt;
 import javax.microedition.lcdui.*;&lt;br /&gt;
 &lt;br /&gt;
 class StartCanvas extends Canvas {&lt;br /&gt;
     private String startString;&lt;br /&gt;
     private final int BACKGROUND_COLOR = 0xFFFFFF;&lt;br /&gt;
     private Image image;&lt;br /&gt;
     &lt;br /&gt;
     public StartCanvas() {&lt;br /&gt;
         try {&lt;br /&gt;
         	image = Image.createImage(&amp;quot;/start.png&amp;quot;);&lt;br /&gt;
         }&lt;br /&gt;
         catch(Exception e) {&lt;br /&gt;
         	System.out.println(&amp;quot;No Image&amp;quot;);&lt;br /&gt;
         }&lt;br /&gt;
     }&lt;br /&gt;
     &lt;br /&gt;
     public void paint(Graphics g) {&lt;br /&gt;
         g.setColor(BACKGROUND_COLOR);&lt;br /&gt;
         g.fillRect(g.getClipX(),g.getClipY(),g.getClipWidth(),g.getClipHeight());&lt;br /&gt;
         g.drawImage(image,this.getWidth()/2,this.getHeight()/2,g.HCENTER|g.VCENTER);&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
  &lt;br /&gt;
 class SnakeCell {&lt;br /&gt;
     public int x;&lt;br /&gt;
     public int y;&lt;br /&gt;
     public SnakeCell(int x, int y) {&lt;br /&gt;
         this.x = x;&lt;br /&gt;
         this.y = y;&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 class BoardCanvas extends Canvas implements Runnable {&lt;br /&gt;
     private final int cellRect;&lt;br /&gt;
     private int snakeLength;&lt;br /&gt;
     private int currentDirection;&lt;br /&gt;
     private Vector snakes;&lt;br /&gt;
     &lt;br /&gt;
     private Random random;&lt;br /&gt;
     private int appleX;&lt;br /&gt;
     private int appleY;&lt;br /&gt;
     private int score;&lt;br /&gt;
     private int gameSpeed;    &lt;br /&gt;
     &lt;br /&gt;
     private final int boardX;&lt;br /&gt;
     private final int boardY;&lt;br /&gt;
     private int boardWidth;&lt;br /&gt;
     private int boardHeight;&lt;br /&gt;
     private int boardWall;&lt;br /&gt;
     &lt;br /&gt;
     private boolean isGameOver;&lt;br /&gt;
     private Command restartCommand;&lt;br /&gt;
     &lt;br /&gt;
     private final int BACKGROUND_COLOR = 0xFFFFFF;&lt;br /&gt;
     private final int WALL_COLOR = 0x000000;&lt;br /&gt;
     private final int SNAKE_COLOR = 0x0000FF;&lt;br /&gt;
     private final int APPLE_COLOR = 0xFF0000;&lt;br /&gt;
     &lt;br /&gt;
     public BoardCanvas() {&lt;br /&gt;
         cellRect = 4;  &lt;br /&gt;
         boardX = 10;&lt;br /&gt;
         boardY = 20;&lt;br /&gt;
         boardWidth = this.getWidth() - boardX * 2;&lt;br /&gt;
         boardHeight = this.getHeight() - boardY - 2;&lt;br /&gt;
 		boardWall = 2;	&lt;br /&gt;
         snakes = new Vector();&lt;br /&gt;
         random = new Random();&lt;br /&gt;
         newGame();&lt;br /&gt;
     }&lt;br /&gt;
     &lt;br /&gt;
     public void newGame() {&lt;br /&gt;
     	currentDirection = RIGHT;&lt;br /&gt;
     	score = 0;&lt;br /&gt;
         gameSpeed = 50;&lt;br /&gt;
     	newApple();&lt;br /&gt;
         isGameOver = false;&lt;br /&gt;
         &lt;br /&gt;
         snakes.removeAllElements();&lt;br /&gt;
         snakeLength = 4;&lt;br /&gt;
         for(int i = 0;i &amp;amp;lt; snakeLength;i++) {&lt;br /&gt;
         	snakes.addElement(new SnakeCell(boardX + (i+1) * cellRect, boardY + cellRect));&lt;br /&gt;
         }&lt;br /&gt;
     }&lt;br /&gt;
     &lt;br /&gt;
     public void newApple() {&lt;br /&gt;
         appleX = (Math.abs(random.nextInt()) % ((boardWidth-1) / cellRect)) * cellRect + boardX;&lt;br /&gt;
         appleY = (Math.abs(random.nextInt()) % ((boardHeight-1) / cellRect)) * cellRect + boardY;&lt;br /&gt;
 	}&lt;br /&gt;
 	&lt;br /&gt;
 	public void growSnake() {&lt;br /&gt;
 		snakeLength++;&lt;br /&gt;
 		snakes.insertElementAt(new SnakeCell(((SnakeCell)snakes.elementAt(0)).x,((SnakeCell)snakes.elementAt(0)).y),0);&lt;br /&gt;
 	}&lt;br /&gt;
 	&lt;br /&gt;
     public void chaeckEatApple() {&lt;br /&gt;
     	if(appleX == ((SnakeCell)snakes.elementAt(snakeLength - 1)).x &amp;amp;amp;&amp;amp;amp; appleY == ((SnakeCell)snakes.elementAt(snakeLength - 1)).y) {&lt;br /&gt;
     		newApple();&lt;br /&gt;
     		score += 10;&lt;br /&gt;
     		if(score % 3 == 0) {&lt;br /&gt;
     			growSnake();&lt;br /&gt;
     			if(gameSpeed &amp;amp;gt; 10)&lt;br /&gt;
     				gameSpeed -= 2;&lt;br /&gt;
     		}&lt;br /&gt;
     	}	&lt;br /&gt;
     }&lt;br /&gt;
     &lt;br /&gt;
     public void changeSnakeHeadToTeil() {&lt;br /&gt;
         snakes.addElement((SnakeCell)snakes.elementAt(0));&lt;br /&gt;
         snakes.removeElementAt(0);&lt;br /&gt;
     }&lt;br /&gt;
      &lt;br /&gt;
     public void keyPressed(int keyCode) {&lt;br /&gt;
     	if(isGameOver == false) {&lt;br /&gt;
 	        int gameAction = getGameAction(keyCode);&lt;br /&gt;
 	        moveSnake(gameAction);&lt;br /&gt;
 		}&lt;br /&gt;
     }&lt;br /&gt;
     &lt;br /&gt;
     public void moveSnakeHeadToTail() {&lt;br /&gt;
     	((SnakeCell)snakes.elementAt(0)).x = ((SnakeCell)snakes.elementAt(snakeLength - 1)).x;&lt;br /&gt;
         ((SnakeCell)snakes.elementAt(0)).y = ((SnakeCell)snakes.elementAt(snakeLength - 1)).y;&lt;br /&gt;
     }&lt;br /&gt;
     &lt;br /&gt;
     public void moveSnake(int ga) {&lt;br /&gt;
         moveSnakeHeadToTail();&lt;br /&gt;
         if(isMoveLeft(ga)) {&lt;br /&gt;
             ((SnakeCell)snakes.elementAt(0)).x -= cellRect;&lt;br /&gt;
             currentDirection = LEFT;&lt;br /&gt;
         } else if(isMoveRight(ga)) {&lt;br /&gt;
             ((SnakeCell)snakes.elementAt(0)).x += cellRect;&lt;br /&gt;
             currentDirection = RIGHT;&lt;br /&gt;
         } else if(isMoveUp(ga)) {&lt;br /&gt;
             ((SnakeCell)snakes.elementAt(0)).y -= cellRect;&lt;br /&gt;
             currentDirection = UP;&lt;br /&gt;
         } else if(isMoveDown(ga)) {&lt;br /&gt;
             ((SnakeCell)snakes.elementAt(0)).y += cellRect;&lt;br /&gt;
             currentDirection = DOWN;&lt;br /&gt;
         }&lt;br /&gt;
         changeSnakeHeadToTeil();&lt;br /&gt;
         chaeckEatApple();&lt;br /&gt;
         repaint();&lt;br /&gt;
     }&lt;br /&gt;
     &lt;br /&gt;
     public boolean isMoveUp(int ga) {&lt;br /&gt;
     	if (((SnakeCell)snakes.elementAt(0)).y &amp;amp;lt; boardY - 1) {&lt;br /&gt;
     		isGameOver = true;&lt;br /&gt;
     	}&lt;br /&gt;
         return ga == UP &amp;amp;amp;&amp;amp;amp; currentDirection != DOWN &amp;amp;amp;&amp;amp;amp; ((SnakeCell)snakes.elementAt(0)).y &amp;amp;gt;= boardY;&lt;br /&gt;
     }&lt;br /&gt;
     &lt;br /&gt;
     public boolean isMoveDown(int ga) {&lt;br /&gt;
     	if (((SnakeCell)snakes.elementAt(0)).y &amp;amp;gt; boardHeight + boardY - cellRect * 2 + 1) {&lt;br /&gt;
     		isGameOver = true;&lt;br /&gt;
     	}&lt;br /&gt;
         return ga == DOWN &amp;amp;amp;&amp;amp;amp; currentDirection != UP &amp;amp;amp;&amp;amp;amp; ((SnakeCell)snakes.elementAt(0)).y &amp;amp;lt;= boardHeight + boardY - cellRect * 2;&lt;br /&gt;
     }&lt;br /&gt;
     &lt;br /&gt;
     public boolean isMoveLeft(int ga) {&lt;br /&gt;
     	if (((SnakeCell)snakes.elementAt(0)).x &amp;amp;lt; boardX - 1) {&lt;br /&gt;
     		isGameOver = true;&lt;br /&gt;
     	}&lt;br /&gt;
         return ga == LEFT &amp;amp;amp;&amp;amp;amp; currentDirection != RIGHT &amp;amp;amp;&amp;amp;amp; ((SnakeCell)snakes.elementAt(0)).x &amp;amp;gt;= boardX;&lt;br /&gt;
     }&lt;br /&gt;
     &lt;br /&gt;
     public boolean isMoveRight(int ga) {&lt;br /&gt;
     	if (((SnakeCell)snakes.elementAt(0)).x &amp;amp;gt; boardWidth + boardX - cellRect + 1) {&lt;br /&gt;
     		isGameOver = true;&lt;br /&gt;
     	}&lt;br /&gt;
         return ga == RIGHT &amp;amp;amp;&amp;amp;amp; currentDirection != LEFT &amp;amp;amp;&amp;amp;amp; ((SnakeCell)snakes.elementAt(0)).x &amp;amp;lt;= boardWidth + boardX - cellRect;&lt;br /&gt;
     }&lt;br /&gt;
      &lt;br /&gt;
     public void paint(Graphics g) {&lt;br /&gt;
     	cleanBackGround(g);&lt;br /&gt;
     	paintWall(g);&lt;br /&gt;
     	paintScore(g);&lt;br /&gt;
         paintSnake(g);&lt;br /&gt;
         paintApplae(g);&lt;br /&gt;
         &lt;br /&gt;
         if(isGameOver == true) {&lt;br /&gt;
         	g.drawString(&amp;quot;Game Over&amp;quot;, getWidth()/2, getHeight()/2, Graphics.TOP|Graphics.HCENTER);&lt;br /&gt;
         }&lt;br /&gt;
 	}&lt;br /&gt;
 	&lt;br /&gt;
 	public void cleanBackGround(Graphics g) {&lt;br /&gt;
 		g.setColor(BACKGROUND_COLOR);&lt;br /&gt;
         g.fillRect(g.getClipX(),g.getClipY(),g.getClipWidth(),g.getClipHeight());&lt;br /&gt;
 	}&lt;br /&gt;
 	&lt;br /&gt;
 	public void paintScore(Graphics g) {&lt;br /&gt;
 		g.drawString(&amp;quot;Score: &amp;quot;+score, boardX, 2, Graphics.TOP|Graphics.LEFT);&lt;br /&gt;
 	}&lt;br /&gt;
 	&lt;br /&gt;
 	public void paintWall(Graphics g) {&lt;br /&gt;
 		g.setColor(WALL_COLOR);&lt;br /&gt;
         g.drawRect(boardX-boardWall,boardY-boardWall,boardWidth+boardWall*2,boardHeight+boardWall);&lt;br /&gt;
 	}&lt;br /&gt;
 	&lt;br /&gt;
     public void paintApplae(Graphics g) {&lt;br /&gt;
     	g.setColor(APPLE_COLOR);&lt;br /&gt;
         g.fillArc(appleX, appleY, cellRect, cellRect, 0, 360);&lt;br /&gt;
     }&lt;br /&gt;
     &lt;br /&gt;
     public void paintSnake(Graphics g) {&lt;br /&gt;
     	g.setColor(SNAKE_COLOR);&lt;br /&gt;
     	for(int i = 0;i &amp;amp;lt; snakeLength;i++) {&lt;br /&gt;
             g.fillRect(((SnakeCell)snakes.elementAt(i)).x,&lt;br /&gt;
                     ((SnakeCell)snakes.elementAt(i)).y, cellRect, cellRect);&lt;br /&gt;
         }&lt;br /&gt;
     }&lt;br /&gt;
     &lt;br /&gt;
     public void run() {&lt;br /&gt;
         while(true) {&lt;br /&gt;
         	try {&lt;br /&gt;
         		if(isGameOver == false) {&lt;br /&gt;
 	        		Thread.sleep(gameSpeed);&lt;br /&gt;
 	        		this.moveSnake(currentDirection);&lt;br /&gt;
 	        		this.repaint();&lt;br /&gt;
 	        	}&lt;br /&gt;
 	        	else {&lt;br /&gt;
 	        		this.addCommand(restartCommand);&lt;br /&gt;
 	        	}&lt;br /&gt;
         	} catch (Exception e) {&lt;br /&gt;
             }&lt;br /&gt;
         }&lt;br /&gt;
     }&lt;br /&gt;
     &lt;br /&gt;
     public void setRestartCommand(Command restartCommand) {&lt;br /&gt;
     	this.restartCommand = restartCommand;&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 public class SnakeBite extends MIDlet implements CommandListener {&lt;br /&gt;
     private Display display;&lt;br /&gt;
     private BoardCanvas boardCanvas;&lt;br /&gt;
     private StartCanvas startCanvas;&lt;br /&gt;
     &lt;br /&gt;
     private Command exitCommand;&lt;br /&gt;
     private Command startCommand;&lt;br /&gt;
     private Command restartCommand;&lt;br /&gt;
     public SnakeBite() {&lt;br /&gt;
         display = Display.getDisplay(this);&lt;br /&gt;
         &lt;br /&gt;
         exitCommand = new Command(&amp;quot;Exit&amp;quot;, Command.EXIT, 1);&lt;br /&gt;
         startCommand = new Command(&amp;quot;Start&amp;quot;, Command.SCREEN, 1);&lt;br /&gt;
         restartCommand = new Command(&amp;quot;Restart&amp;quot;, Command.SCREEN, 1);&lt;br /&gt;
         &lt;br /&gt;
         startCanvas = new StartCanvas();&lt;br /&gt;
         boardCanvas = new BoardCanvas();&lt;br /&gt;
         boardCanvas.setRestartCommand(restartCommand);&lt;br /&gt;
         &lt;br /&gt;
         startCanvas.addCommand(startCommand);&lt;br /&gt;
         startCanvas.addCommand(exitCommand);&lt;br /&gt;
         startCanvas.setCommandListener(this);&lt;br /&gt;
         &lt;br /&gt;
         boardCanvas.addCommand(exitCommand);&lt;br /&gt;
         boardCanvas.setCommandListener(this);&lt;br /&gt;
     }&lt;br /&gt;
     &lt;br /&gt;
     public void startApp() {&lt;br /&gt;
         display.setCurrent(startCanvas);&lt;br /&gt;
     }&lt;br /&gt;
     &lt;br /&gt;
     public void pauseApp() {&lt;br /&gt;
     }&lt;br /&gt;
     &lt;br /&gt;
     public void destroyApp(boolean unconditional) {&lt;br /&gt;
         display = null;&lt;br /&gt;
         boardCanvas = null;&lt;br /&gt;
         startCanvas = null;&lt;br /&gt;
         exitCommand = null;&lt;br /&gt;
         startCommand = null;&lt;br /&gt;
     }&lt;br /&gt;
     &lt;br /&gt;
     public void commandAction(Command c, Displayable d) {&lt;br /&gt;
         if(c == exitCommand) {&lt;br /&gt;
             destroyApp(true);&lt;br /&gt;
             notifyDestroyed();&lt;br /&gt;
         } else if(c == startCommand) {&lt;br /&gt;
         	new Thread(boardCanvas).start();&lt;br /&gt;
             display.setCurrent(boardCanvas);&lt;br /&gt;
         } else if(c == restartCommand) {&lt;br /&gt;
         	boardCanvas.newGame();&lt;br /&gt;
             display.setCurrent(boardCanvas);&lt;br /&gt;
             boardCanvas.removeCommand(restartCommand);&lt;br /&gt;
         }&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
----&lt;br /&gt;
[[MobileJavaStudy/SnakeBite]]&lt;br /&gt;
&lt;/div&gt;</summary>
		<author><name>imported&gt;Unknown</name></author>
	</entry>
</feed>