package lxl.test;
import java.io.IOException;
import java.util.*;
import javax.microedition.lcdui.*;
/**
* 游戏主界面
*/
public class NormalGame extends Canvas implements Runnable{
private Image image; //背景图片
private int imgX,imgY; //背景图片的坐标
private int[][] snake = new int[200][2]; //存储贪吃蛇节点坐标的二维数组0-X,1-Y
private int snakeL; //蛇的长度
Random random = new Random(); //随机数对象
//游戏中的方向:上、下、左、右
private int direction;
private final int UP = 0;
private final int DOWN = 1;
private final int LEFT = 2;
private final int RIGHT = 3;
private int level = 1; //定义等级
private int score = 0; //初始化分数
private int speed = 300; //初始化速度
private int width, height; //游戏的宽度和高度
private int snakeWidth = 6; //蛇身的宽度
private int SLEEP_TIME = 500; //线程
private int foodX, foodY; //食物坐标
boolean isPaused = false; //判断是否暂停
boolean isRun = true; //判断是否运行
boolean isFood = true; //判断食物是否存在
public NormalGame() {
init();
width = this.getWidth();
height = this.getHeight();
new Thread(this).start();
}
/**
* 初始化snake对象和food对象
*/
private void init(){
snakeL = 7;
for(int i = 0;i < snakeL;i++){
snake[i][0] = 100 - snakeWidth * i;
snake[i][1] = 40;
}
direction = RIGHT;
foodX = 100;
foodY = 100;
}
/*
* 画游戏界面
* @see javax.microedition.lcdui.Canvas#paint(javax.microedition.lcdui.Graphics)
*/
protected void paint(Graphics g) {
//读取背景图片
try {
image = Image.createImage("/bg1.png");
} catch (IOException e) {
e.printStackTrace();
System.out.println(e.toString());
}
//图片按照适合的屏幕大小铺展
for(int y=0;y<3;y++){
for(int x=0;x<3;x++){
g.drawImage(image, imgX, imgY, Graphics.LEFT|Graphics.TOP);
imgX += image.getWidth();
}
imgX = 0;
imgY += image.getHeight();
}
imgY = 0;
//绘制蛇身
for(int i = 0;i < snakeL;i++){
g.fillRect(snake[i][0],snake[i][1],snakeWidth,snakeWidth);
}
//绘制食物
if(isFood){
g.fillRect(foodX,foodY,snakeWidth,snakeWidth);
}
//等级、分数、速度计数器
g.setColor(255, 255, 255);
g.drawString("Score:"+Integer.toString(score), 0, 0, Graphics.TOP|Graphics.LEFT);
g.drawString("Level: "+Integer.toString(level), 80, 0, Graphics.TOP|Graphics.LEFT);
g.drawString("Speed: "+Integer.toString(speed), 160, 0, Graphics.TOP|Graphics.LEFT);
}
/*
* 蛇在屏幕上移动
*/
private void snakeMove(int direction){
for(int i = snakeL - 1;i > 0;i--){
snake[i][0] = snake[i - 1][0];
snake[i][1] = snake[i - 1][1];
}
switch(direction){
case UP:
snake[0][1] = snake[0][1] - snakeWidth;
break;
case DOWN:
snake[0][1] = snake[0][1] + snakeWidth;
break;
case LEFT:
snake[0][0] = snake[0][0] - snakeWidth;
break;
case RIGHT:
snake[0][0] = snake[0][0] + snakeWidth;
break;
}
}
/**
* 吃掉食物,自身增长
*/
private void eatFood(){
if(snake[0][0] == foodX && snake[0][1] == foodY){
snakeL++;
score += 10;
Food();
}
}
/**
* 创建食物对象
*/
private void Food(){
while(true){
foodX = Math.abs(random.nextInt() % (width - snakeWidth + 1)) / snakeWidth * snakeWidth;
foodY = Math.abs(random.nextInt() % (height - snakeWidth + 1)) / snakeWidth * snakeWidth;
boolean isFood = true;
for(int i = 0;i < snakeL;i++){
if(foodX == snake[i][0] && snake[i][1] == foodY){
isFood = false;
break;
}
}
if(isFood){
break;
}
}
}
/**
* 判断游戏是否结束
*/
private boolean gameOver(){
//碰到四周的边界
if(snake[0][0] < 0 || snake[0][0] > (width - snakeWidth) ||snake[0][1] < 0 || snake[0][1] > (height - snakeWidth)){
return true;
}
//蛇碰到自身
for(int i = 4;i < snakeL;i++){
if(snake[0][0] == snake[i][0] && snake[0][1] == snake[i][1]){
return true;
}
}
return false;
}
/**
* 键盘事件处理
*/
public void keyPressed(int keyCode){
int action = this.getGameAction(keyCode);
switch(action){
case Canvas.UP:
if(direction != DOWN){direction = UP;}
break;
case Canvas.DOWN:
if(direction != UP){direction = DOWN;}
break;
case Canvas.LEFT:
if(direction != RIGHT){direction = LEFT;}
break;
case Canvas.RIGHT:
if(direction != LEFT){direction = RIGHT;}
break;
case FIRE:
isPaused = !isPaused;
break;
}
}
/**
* 线程Run方法
*
*/
public void run(){
try{
while (isRun) {
long start = System.currentTimeMillis();
if(!isPaused){
eatFood();
snakeMove(direction);
if(gameOver()){break;}
isFood = !isFood;
}
repaint();
long end = System.currentTimeMillis();
if(end - start < SLEEP_TIME){
Thread.sleep(SLEEP_TIME - (end - start));
}
}
}catch(Exception e){}
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
贪食蛇 Jave me 源代码
共26个文件
class:8个
png:6个
java:4个
5星 · 超过95%的资源 需积分: 9 19 下载量 125 浏览量
2010-05-07
14:34:11
上传
评论 1
收藏 690KB RAR 举报
温馨提示
/** * 游戏主界面 */ public class NormalGame extends Canvas implements Runnable{ private Image image; //背景图片 private int imgX,imgY; //背景图片的坐标 private int[][] snake = new int[200][2]; //存储贪吃蛇节点坐标的二维数组0-X,1-Y private int snakeL; //蛇的长度 Random random = new Random(); //随机数对象 //游戏中的方向:上、下、左、右
资源推荐
资源详情
资源评论
收起资源包目录
40700419.rar (26个子文件)
40700419
.project 710B
bin
lxl
test
NormalGame.class 5KB
SnakeMIDlet$AboutCanvas.class 1KB
SnakeMIDlet$WelcomeCanvas.class 1KB
SnakeMIDlet.class 4KB
bg1.png 99KB
formBg.png 51KB
welcome.png 70KB
.settings
org.eclipse.core.resources.prefs 177B
org.eclipse.jdt.core.prefs 208B
40700419.jad 286B
deployed
.eclipseme.tmp
emulation
40700419.jad 311B
40700419.jar 228KB
verified
libs
classes
lxl
test
NormalGame.class 5KB
SnakeMIDlet$AboutCanvas.class 1KB
SnakeMIDlet$WelcomeCanvas.class 1KB
SnakeMIDlet.class 4KB
src
lxl
test
NormalGame.java 6KB
SnakeMIDlet.java 5KB
.processed
src
lxl
test
NormalGame.java 6KB
SnakeMIDlet.java 5KB
.eclipseme 242B
res
bg1.png 99KB
formBg.png 51KB
welcome.png 70KB
.classpath 242B
共 26 条
- 1
资源评论
- t_hanks2013-01-11非常好!!通过学习它完成了一项课程作业!
- css12345698702014-05-27用起来挺好。
zy_andy
- 粉丝: 0
- 资源: 5
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功