站内搜索: 请输入搜索关键词

当前页面: JAVA 编程资料牛鼻论坛Eclipse 插件技术→[求助]寻求用eclipse开发的贪吃蛇源代码

[求助]寻求用eclipse开发的贪吃蛇源代码

发表新主题   回复此主题

第1楼 2006-03-22 21:53 ling2006 写道:

[求助]寻求用eclipse开发的贪吃蛇源代码

各位大哥大姐谁有用eclipse开发的贪吃蛇的源代码,能给我一份吗?万分感谢:> :em15:

第2楼 2013-08-31 12:44 Robot :

[求助]寻求用eclipse开发的贪吃蛇源代码 相关


第3楼 2006-03-23 23:04 金属烟灰缸 写道:

/*
* 创建日期 2005-6-24
*
* TODO 要更改此生成的文件的模板,请转至
* 窗口 - 首选项 - Java - 代码样式 - 代码模板
*/
package game;
import java.io.IOException;
import javax.microedition.lcdui.Alert;
import javax.microedition.lcdui.AlertType;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Image;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;
/**
* @author Administrator
*
* TODO 要更改此生成的类型注释的模板,请转至
* 窗口 - 首选项 - Java - 代码样式 - 代码模板
*/
public class SnakeMIDlet extends MIDlet {
public Display display;
public GameCtrl game;
/**
*
*/
public SnakeMIDlet() {
super();
// TODO 自动生成构造函数存根
}
/* (非 Javadoc)
* @see javax.microedition.midlet.MIDlet#startApp()
*/
protected void startApp() throws MIDletStateChangeException {
// 获得Display
display = Display.getDisplay(this);
// 获得Displayable
Displayable current = display.getCurrent();
if (current == null) {
// 装载logo图象
Image logo = null;
try
{
logo = Image.createImage("/logo.png");
}
catch (IOException e) {}
// 显示logo
Alert splashScreen = new Alert(null, "郎锐2005年作\n版权所有(c)\n2005--2006", logo, AlertType.INFO);
// 延迟4秒
splashScreen.setTimeout(2000);
//新建ChooseDemo对象
game = new GameCtrl(this);
// 显示闪屏界面
display.setCurrent(splashScreen, game);
}
else
{
// 显示当前界面
display.setCurrent(current);
}
}
/* (非 Javadoc)
* @see javax.microedition.midlet.MIDlet#pauseApp()
*/
protected void pauseApp() {
// TODO 自动生成方法存根
}
/* (非 Javadoc)
* @see javax.microedition.midlet.MIDlet#destroyApp(boolean)
*/
protected void destroyApp(boolean arg0) throws MIDletStateChangeException {
// TODO 自动生成方法存根
}
public void quit() throws MIDletStateChangeException {
// 退出程序
destroyApp(false);
notifyDestroyed();
}
}

第4楼 2006-03-23 23:05 金属烟灰缸 写道:

/*
* 创建日期 2005-6-24
*
* TODO 要更改此生成的文件的模板,请转至
* 窗口 - 首选项 - Java - 代码样式 - 代码模板
*/
package game;
import java.util.Timer;
import javax.microedition.lcdui.Alert;
import javax.microedition.lcdui.AlertType;
import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;
import javax.microedition.midlet.MIDletStateChangeException;
/**
* @author Administrator
*
* TODO 要更改此生成的类型注释的模板,请转至
* 窗口 - 首选项 - Java - 代码样式 - 代码模板
*/
public class GameCtrl extends Canvas implements CommandListener{
private final Command startCommand;
private final Command quitCommand;
private final SnakeMIDlet midlet;
private Graphics graph;
private Timer timer = new Timer();
private NextFrame nextFrame;
// 游戏结束标志
public boolean isGameOver = false;
// 游戏开始标志
public boolean isGameRun = false;
// 游戏积分
public int score = 0;
// 屏幕尺寸
public int width = 0;
public int height = 0;
// 食物位置
public int foodX = 0;
public int foodY = 0;
// 蛇身位置
public int[] snakeX = {10, 14, 18, 22, 26, 30, 34, 38, 42, 46, 50 ,54, 58, 62, 66, 70, 74, 78, 82, 86};
public int[] snakeY = {10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10};
// 运动方向 [0,1,2,3——上,下,左,右]
public int direction = 0;
// 食物图象
public Image foodImage = null;
/**
*
*/
public GameCtrl(SnakeMIDlet midlet) {
super();
// 保存MIDlet类对象
this.midlet = midlet;
// 得到屏幕尺寸
width = getWidth();
height = getHeight();
// 设置食物位置
foodX = width / 2;
foodY = height / 2;
try{
// 装载食物图象
foodImage = Image.createImage("/food.png");
}catch(Exception e){}
// 添加命令按键
quitCommand = new Command("退出", Command.EXIT, 2);
addCommand(quitCommand);
startCommand = new Command("开始", Command.OK, 1);
addCommand(startCommand);
// 侦听按键响应
setCommandListener(this);
}
/* (非 Javadoc)
* @see javax.microedition.lcdui.Displayable#paint(javax.microedition.lcdui.Graphics)
*/
protected void paint(Graphics g) {
graph = g;
if (isGameOver == true && isGameRun == true){
isGameRun = false;
// 显示logo
Alert result = new Alert("本局积分", String.valueOf(score), null, AlertType.INFO);
// 延迟4秒
result.setTimeout(2000);
// 显示闪屏界面
midlet.display.setCurrent(result, this);
return;
}
if (isGameRun == true){
// 白色清空画布
graph.setColor(255, 255, 255);
graph.fillRect(0, 0, width, height);
// 绘制食物
g.drawImage(foodImage, foodX, foodY, Graphics.HCENTER | Graphics.VCENTER);
// 绘制蛇身
graph.setColor(0, 0, 255);
for (int i = 0; i < 19; i++){
graph.drawLine(snakeX, snakeY, snakeX[i + 1], snakeY[i + 1]);
}
}
}
/* (非 Javadoc)
* @see javax.microedition.lcdui.CommandListener&#35;commandAction(javax.microedition.lcdui.Command, javax.microedition.lcdui.Displayable)
*/
public void commandAction(Command arg0, Displayable arg1) {
if (arg0 == startCommand){
// 用户开始游戏
initialize();
}
if (arg0 == quitCommand){
if (isGameRun == true){
// 结束游戏
isGameOver = true;
isGameRun = false;
// 关闭定时器
nextFrame.cancel();
}
// 用户退出游戏
try{
midlet.quit();
}
catch(MIDletStateChangeException e){}
}
}
private void initialize() {
// 初始化数据
score = 0;
// 白色清空画布
graph.setColor(255, 255, 255);
graph.fillRect(0, 0, width, height);
// 开启定时器
nextFrame = new NextFrame(this);
timer.schedule(nextFrame, 300, 300);
// 重绘屏幕
isGameOver = false;
isGameRun = true;
repaint();
}
protected void keyPressed(int keyCode) {
// 游戏结束后不处理按键
if (isGameOver == true)
return;
// 得到按键动作
int gameAction = getGameAction(keyCode);
switch (gameAction) {
case UP:
direction = 0;
break;
case DOWN:
direction = 1;
break;
case LEFT:
direction = 2;
break;
case RIGHT:
direction = 3;
break;
default:   
break;
}
// 重绘屏幕
repaint();
}
}

第5楼 2006-03-23 23:07 金属烟灰缸 写道:

/*
* 创建日期 2005-6-24
*
* TODO 要更改此生成的文件的模板,请转至
* 窗口 - 首选项 - Java - 代码样式 - 代码模板
*/
package game;
import java.util.Random;
import java.util.TimerTask;
/**
* @author Administrator
*
* TODO 要更改此生成的类型注释的模板,请转至
* 窗口 - 首选项 - Java - 代码样式 - 代码模板
*/
public class NextFrame extends TimerTask {
private GameCtrl gameCtrl;
private Random rand = new Random();
// 每局时长
public long tickcount = 0;
// 食物最大停留时间
private long foodtime = 25;
// 食物图像的宽度高度
private int foodwidth = 0;
private int foodheight = 0;
/**
*
*/
public NextFrame(GameCtrl gameCtrl) {
super();
this.gameCtrl = gameCtrl;
foodwidth = gameCtrl.foodImage.getWidth();
foodheight = gameCtrl.foodImage.getHeight();
}
/* (非 Javadoc)
* @see java.lang.Runnable&#35;run()
*/
public void run() {
// 食物位置调整
foodtime--;
if (foodtime == 0){
foodtime = 25;
getNextPos();
}
// 移动蛇身
switch(gameCtrl.direction){
case 0:
// 蛇身位置处理
for (int i = 19; i > 0 ; i--){
gameCtrl.snakeX = gameCtrl.snakeX[i - 1];
gameCtrl.snakeY = gameCtrl.snakeY[i - 1];
}
// 蛇头处理
if (gameCtrl.snakeY[0] > 3){
gameCtrl.snakeY[0] -= 4;
}else{
if (gameCtrl.snakeX[0] > gameCtrl.width / 2){
// 如果已到屏幕上界则左移
gameCtrl.direction = 2;
gameCtrl.snakeX[0] -= 4;
}else{
// 如果已到屏幕上界则右移
gameCtrl.direction = 3;
gameCtrl.snakeX[0] += 4;
}
}
break;
case 1:
// 蛇身处理
for (int i = 19; i > 0 ; i--){
gameCtrl.snakeX = gameCtrl.snakeX[i - 1];
gameCtrl.snakeY = gameCtrl.snakeY[i - 1];
}
// 蛇头处理
if (gameCtrl.snakeY[0] < gameCtrl.height - 5){
gameCtrl.snakeY[0] += 4;
}else{
if (gameCtrl.snakeX[0] > gameCtrl.width / 2){
// 如果已到屏幕上界则左移
gameCtrl.direction = 2;
gameCtrl.snakeX[0] -= 4;
}else{
// 如果已到屏幕上界则右移
gameCtrl.direction = 3;
gameCtrl.snakeX[0] += 4;
}
}
break;
case 2:
// 蛇身处理
for (int i = 19; i > 0 ; i--){
gameCtrl.snakeX = gameCtrl.snakeX[i - 1];
gameCtrl.snakeY = gameCtrl.snakeY[i - 1];
}
// 蛇头处理
if (gameCtrl.snakeX[0] > 3){
gameCtrl.snakeX[0] -= 4;
}else{
if (gameCtrl.snakeY[0] > gameCtrl.height / 2){
// 如果已到屏幕上界则左移
gameCtrl.direction = 0;
gameCtrl.snakeY[0] -= 4;
}else{
// 如果已到屏幕上界则右移
gameCtrl.direction = 1;
gameCtrl.snakeY[0] += 4;
}
}
break;
case 3:
// 蛇身处理
for (int i = 19; i > 0 ; i--){
gameCtrl.snakeX = gameCtrl.snakeX[i - 1];
gameCtrl.snakeY = gameCtrl.snakeY[i - 1];
}
// 蛇头处理
if (gameCtrl.snakeX[0] < gameCtrl.width - 5){
gameCtrl.snakeX[0] += 4;
}else{
if (gameCtrl.snakeY[0] > gameCtrl.height / 2){
// 如果已到屏幕上界则左移
gameCtrl.direction = 0;
gameCtrl.snakeY[0] -= 4;
}else{
// 如果已到屏幕上界则右移
gameCtrl.direction = 1;
gameCtrl.snakeY[0] += 4;
}
}
break;
}
// 碰撞检测
if (gameCtrl.snakeX[0] > gameCtrl.foodX - foodwidth / 2 &&
gameCtrl.snakeX[0] < gameCtrl.foodX + foodwidth / 2 &&
gameCtrl.snakeY[0] > gameCtrl.foodY - foodheight / 2 &&
gameCtrl.snakeY[0] < gameCtrl.foodY + foodheight / 2){
// 计分
gameCtrl.score += 10;
// 生成新的食物位置
getNextPos();
}
// 计时
tickcount++;
if (tickcount == 300)
gameCtrl.isGameOver = true;
// 重绘画面
gameCtrl.repaint();
}
public void getNextPos(){
// 在屏幕内随机设置位置
int x = (int)(rand.nextLong());
gameCtrl.foodX = (int)(x % gameCtrl.width);
int y = (int)(rand.nextLong());
gameCtrl.foodY = (int)(y % gameCtrl.height);
//  使图像限定在屏幕内
if (gameCtrl.foodX < foodwidth / 2)
gameCtrl.foodX = foodwidth / 2;
if (gameCtrl.foodX > gameCtrl.width - foodwidth / 2)
gameCtrl.foodX = gameCtrl.width - foodwidth / 2;
if (gameCtrl.foodY < foodheight / 2)
gameCtrl.foodY = foodheight / 2;
if (gameCtrl.foodY > gameCtrl.height - foodheight / 2)
gameCtrl.foodY = gameCtrl.height - foodheight / 2;
}
}










硬盘里正好有
就直接ctrl+c 了  你慢慢c+v吧

第6楼 2006-05-02 21:14 疼真 写道:

能不能把用到的图片传一下啊,拜托了哦!

第7楼 2006-05-02 21:22 疼真 写道:

我一点都不懂啊,但是要做这个游戏.我运行了一下,自己加了一个图片进去,可是不行的啊.

第8楼 2006-05-21 20:34 woodearth 写道:

麻烦你把原文件传上来,谢谢