189 8069 5689

java代码贪吃蛇形状 java贪吃蛇最简单代码

求java贪吃蛇的编程,并有注释

J2ME贪吃蛇源代码——凯前岁200行左右,包含详细注释 package snake;import javax.microedition.midlet.*;

创新互联是一家专注于网站制作、成都网站建设与策划设计,甘谷网站建设哪家好?创新互联做网站,专注于网站建设十余年,网设计领域的专业建站公司;建站业务涵盖:甘谷等地区。甘谷做网站价格咨询:18982081108

import javax.microedition.lcdui.*;public class SnakeMIDlet extends MIDlet {

SnakeCanvas displayable = new SnakeCanvas();

public SnakeMIDlet() {

Display.getDisplay(this).setCurrent(displayable);

}public void startApp() {}public void pauseApp() {}public void destroyApp(boolean unconditional) {}}//文件名:SnakeCanvas.javapackage snake;import java.util.*;

import javax.microedition.lcdui.*;/**

* 贪吃蛇游戏

*/

public class SnakeCanvas extends Canvas implements Runnable{

/**存储贪吃蛇节点坐标,其中第二维下标为0的代表x坐标,第二维下标是1的代表y坐标*/

int[][] snake = new int[200][2];

/**已经使用的节点数量*/

int snakeNum;

/**贪吃蛇运动方向,0代表向上,1代表向下,2代表向左,3代表向右*/

int direction;

/*移动方向*/

/**向上*/

private final int DIRECTION_UP = 0;

/**向下*/

private final int DIRECTION_DOWN = 1;

/**向左*/

private final int DIRECTION_LEFT = 2;

/**向右悔绝*/

private final int DIRECTION_RIGHT = 3;/**游戏区域宽度*/

int width;

/**游戏区域高度*/

int height;/**蛇身单元宽度*/

private final byte SNAKEWIDTH = 4;/**是否处于暂停状态,true代表暂停*/

boolean isPaused = false;

/**是否处于运行状态,true代表运行*/

boolean isRun = true;/**时间间隔*/

private final int SLEEP_TIME = 300;

/**食物的X坐标*/

int foodX;

/**食物的Y坐标*/

int foodY;

/**食物的闪烁盯睁控制*/

boolean b = true;

/**Random对象*/

Random random = new Random();

public SnakeCanvas() {

//初始化

init();

width = this.getWidth();

height = this.getHeight();

//启动线程

new Thread(this).start();

}/**

* 初始化开始数据

*/

private void init(){

//初始化节点数量

snakeNum = 7;

//初始化节点数据

for(int i = 0;i snakeNum;i++){

snake[i][0] = 100 - SNAKEWIDTH * i;

snake[i][1] = 40;

}

//初始化移动方向

direction = DIRECTION_RIGHT;

//初始化食物坐标

foodX = 100;

foodY = 100;

}protected void paint(Graphics g) {

//清屏

g.setColor(0xffffff);

g.fillRect(0,0,width,height);

g.setColor(0);//绘制蛇身

for(int i = 0;i snakeNum;i++){

g.fillRect(snake[i][0],snake[i][1],SNAKEWIDTH,SNAKEWIDTH);

}

//绘制食物

if(b){

g.fillRect(foodX,foodY,SNAKEWIDTH,SNAKEWIDTH);

}

}private void move(int direction){

//蛇身移动

for(int i = snakeNum - 1;i 0;i--){

snake[i][0] = snake[i - 1][0];

snake[i][1] = snake[i - 1][1];

}//第一个单元格移动

switch(direction){

case DIRECTION_UP:

snake[0][1] = snake[0][1] - SNAKEWIDTH;

break;

case DIRECTION_DOWN:

snake[0][1] = snake[0][1] + SNAKEWIDTH;

break;

case DIRECTION_LEFT:

snake[0][0] = snake[0][0] - SNAKEWIDTH;

break;

case DIRECTION_RIGHT:

snake[0][0] = snake[0][0] + SNAKEWIDTH;

break;

}

}

/**

* 吃掉食物,自身增长

*/

private void eatFood(){

//判别蛇头是否和食物重叠

if(snake[0][0] == foodX snake[0][1] == foodY){

snakeNum++;

generateFood();

}

}

/**

* 产生食物

* 说明:食物的坐标必须位于屏幕内,且不能和蛇身重合

*/

private void generateFood(){

while(true){

foodX = Math.abs(random.nextInt() % (width - SNAKEWIDTH + 1))

/ SNAKEWIDTH * SNAKEWIDTH;

foodY = Math.abs(random.nextInt() % (height - SNAKEWIDTH + 1))

/ SNAKEWIDTH * SNAKEWIDTH;

boolean b = true;

for(int i = 0;i snakeNum;i++){

if(foodX == snake[i][0] snake[i][1] == foodY){

b = false;

break;

}

}

if(b){

break;

}

}

}

/**

* 判断游戏是否结束

* 结束条件:

* 1、蛇头超出边界

* 2、蛇头碰到自身

*/

private boolean isGameOver(){

//边界判别

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 snakeNum;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 UP:

if(direction != DIRECTION_DOWN){

direction = DIRECTION_UP;

}

break;

case DOWN:

if(direction != DIRECTION_UP){

direction = DIRECTION_DOWN;

}

break;

case LEFT:

if(direction != DIRECTION_RIGHT){

direction = DIRECTION_LEFT;

}

break;

case RIGHT:

if(direction != DIRECTION_LEFT){

direction = DIRECTION_RIGHT;

}

break;

case FIRE:

//暂停和继续

isPaused = !isPaused;

break;

}

}/**

* 线程方法

* 使用精确延时

*/

public void run(){

try{

while (isRun) {

//开始时间

long start = System.currentTimeMillis();

if(!isPaused){

//吃食物

eatFood();

//移动

move(direction);

//结束游戏

if(isGameOver()){

break;

}

//控制闪烁

b = !b;

}

//重新绘制

repaint();

long end = System.currentTimeMillis();

//延时

if(end - start SLEEP_TIME){

Thread.sleep(SLEEP_TIME - (end - start));

}

}

}catch(Exception e){}

}

}

贪吃蛇 java代码

import java.awt.*;

import javax.swing.*;

import java.awt.event.*;

import java.util.*;

public class SnakeGame extends JFrame implements KeyListener{

private int stat=1,direction=0,bodylen=6,headx=7,heady=8,

tailx=1,taily=8,tail,foodx,foody,food;//初始化定义变量

public final int EAST=1,WEST=2,SOUTH=3,NORTH=4;//方向常慎明量

int [][] fillblock=new int [20][20];//定义蛇身所占位置

public SnakeGame() {//构造函数

super("贪吃蛇");

setSize(510,510);

setVisible(true);//设定窗口属性

addKeyListener(this);//添加监听

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

for(int i=1;i=7;i++) fillblock[i][8]=EAST;//初始化蛇身属性

direction=EAST;//方向初始化的设置

FoodLocate(); //定位食物

while (stat==1){

fillblock[headx][heady]=direction;

switch(direction){

case 1:headx++;break;

case 2:headx--;break;

case 3:heady++;break;

case 4:heady--;break;

}/搜孝此/蛇头的前进

if(heady19||headx19||tailx19||taily19||heady0||headx0||tailx0||taily0||fillblock[headx][heady]!=0){

stat=0;

break;

} //判断游戏是否结束

try{

Thread.sleep(150); }

catch(InterruptedException e){}//延迟

fillblock[headx][heady]=direction;

if(headx==foodxheady==foody){//吃到食物

FoodLocate();

food=2;

try{

Thread.sleep(100); }

catch(InterruptedException e){}//延迟

}

if(food!=0)food--;

else{tail=fillblock[tailx][taily];

fillblock[tailx][taily]=0;/世迅/蛇尾的消除

switch(tail){

case 1:tailx++;break;

case 2:tailx--;break;

case 3:taily++;break;

case 4:taily--;break;

}//蛇尾的前进

}

repaint();

}

if(stat==0)

JOptionPane.showMessageDialog(null,"GAME OVER","Game Over",JOptionPane.INFORMATION_MESSAGE);

}

public void keyPressed(KeyEvent e) {//按键响应

int keyCode=e.getKeyCode();

if(stat==1) switch(keyCode){

case KeyEvent.VK_UP:if(direction!=SOUTH) direction=NORTH;break;

case KeyEvent.VK_DOWN:if(direction!=NORTH)direction=SOUTH;break;

case KeyEvent.VK_LEFT:if(direction!=EAST)direction=WEST;break;

case KeyEvent.VK_RIGHT:if (direction!=WEST)direction=EAST;break;

}

}

public void keyReleased(KeyEvent e){}//空函数

public void keyTyped(KeyEvent e){} //空函数

public void FoodLocate(){//定位食物坐标

do{

Random r=new Random();

foodx=r.nextInt(20);

foody=r.nextInt(20);

}while (fillblock[foodx][foody]!=0);

}

public void paint(Graphics g){//画图

super.paint(g);

g.setColor(Color.BLUE);

for(int i=0;i20;i++)

for(int j=0;j20;j++)

if (fillblock[i][j]!=0)

g.fillRect(25*i+5,25*j+5,24,24);

g.setColor(Color.RED);

g.fillRect(foodx*25+5,foody*25+5,24,24);

}

public static void main(String[] args) {//主程序

SnakeGame application=new SnakeGame();

}

}

java贪吃蛇技术选型怎么写的?

Java贪吃蛇技术选型一般需要考虑以下几点:

开发平台:需要选择适用于Java语言的开发平台,如Eclipse、IntelliJ IDEA等。

编程语言:需要选择Java语言来开发贪吃蛇游戏。

框衫则局架和库:可以使用Java中的Swing框架和AWT库来开发图形界面,并使用Java多线程编程技术来实现游盯锋戏的实时动态效果。

算法和数据结构:可以使用队列或链表或让等数据结构来存储贪吃蛇的身体,并使用类似贪心算法的思想来决定贪吃蛇的下一步移动方向。

编码风格和规范:需要遵循Java的编码风格和规范,确保代码的可读性和可维护性。

希望以上内容能够帮助您了解Java贪吃蛇技术选型。如果您有其他问题,欢迎随时告诉我,我会尽力为您解答。

如何用java实现一个贪吃蛇小游戏?

1、设计游戏,首先就要设计界面。首先看一下我设计的一个界面。界面分为左边的游戏区与右边的控制区。游戏区包含“得分信息”和贪吃蛇的游戏区,盯衫右边控制区有“开始”“暂停”“停止”按钮,等级选择单选框以及游戏排行榜。

2、所以我们需要定义swing组件,并在类初始化时初始化这些组件,添加组件。因为后面设计游戏的时候,我们要确切知道游戏区的大小,所以这里设置游戏区固定大小值。本来想用布局来更好的管理,但作者对布局也掌握不够,所以就先设置固定大小吧。

3、定义我们的游戏。贪吃蛇游戏其实就是包含很多细小网格,然后蛇在网格中移动。蛇由一连串的网格组成,为了视觉效果,蛇身用蓝色标记,食物用红色标记,背景白色。如第一张图片所示。所以,我们需要定义二维数组,保存网格凯逗腔信息,保存蛇身和食物的位置信息等。初始化时,还需要添加键盘事件控制上下左右移动。

4、食物的位置信息是二维的,所以我简单定义了一个类用来保存二维信息。

5、接着就是实现游戏的功能了。开始,暂停,停止按钮添加事件控制游戏开始。等级按钮定义游戏难度等。

6、开始游戏后,我们指举定义一个定时器。蛇身按照指定的方向移动,方向是通过初始化时添加的键盘事件,键盘的上下左右按钮来控制。蛇身是连续的位置信息,保存到队列中,所以蛇身的移动就是队首增加一个位置,队尾减少位置,然后重新绘画游戏区就可以了。


网站名称:java代码贪吃蛇形状 java贪吃蛇最简单代码
文章链接:http://jkwzsj.com/article/ddpciph.html

其他资讯