b2c信息网

您现在的位置是:首页 > 今日新闻 > 正文

今日新闻

js手机端贪吃蛇源码(安卓开发贪吃蛇)

hacker2022-09-24 17:30:21今日新闻96
本文目录一览:1、各位大侠,本人新手跪拜写贪吃蛇的代码,只需提供具体步骤编译环境涉及的函数无需具体代码!不胜感激呀

本文目录一览:

各位大侠,本人新手跪拜写贪吃蛇的代码,只需提供具体步骤 编译环境 涉及的函数 无需具体代码!不胜感激呀

我这里有一个之前用js写的贪吃蛇,只要用浏览器就可以看到效果。

你新建一个snake.html,然后右击-打开方式-记事本,把下面的代码复制到里面,然后保存好。再用浏览器打开这个页面就能看到html。

-------------------------------------------------以下是代码-------------------------------------

!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" ""

html xmlns=""

head

meta http-equiv="Content-Type" content="text/html; charset=gb2312" /

title贪吃蛇/title

script type="text/javascript"

/**************js代码************************/

var width = 10 ; //单元格的宽高,食物的宽高

var num = 60 ; //单元格列数

var row = 30; //单元格行数

var map_width = 0; //地图的宽度

var map_height = 0; //地图的宽度

var map_arr = new Array() ;//地图数组

var border = 5;//地图边框厚度

var borderColor = "#ff0"; //地图边框颜色

var footColor = "#f00"; //食物颜色

var snakeColor = "#faa"; //蛇的颜色

var Sx,Sy; //蛇的初始化位置

var Gx = 0,Gy = 0;//蛇移动方向

var oTime = 0,ot = 200; //蛇移动速度

var dd = 10; //每升一级提升的速度

var fen = 0 ; //得分

var den = 1 ; //等级

var lock = 1; //操作锁

var sfColor = "#f55"; //食物吞进后的颜色

var times = 0;//计时器

var timer;

var easyColor = "blue";

var easyNum = 3; //阻碍个数

//创建地图

function create_map(){

var map = document.createElement("div");

map_width = width*num;

map_height = width*row;

//获得屏幕宽高

var sw = window.screen.width;

var sh = window.screen.height;

//设置map样式

map.setAttribute('id','map');

map.style.position = 'absolute';

map.style.width = map_width+2*border+'px';

map.style.height = map_height+2*border+'px';

map.style.border = border+"px solid "+borderColor;

map.style.left = (sw/2) - (map_width/2) + 'px';

map.style.top = (sh/2) - (map_height/2) - 120 + 'px';

document.body.appendChild(map);

//设置地图数组初始值

for(var i = 0;i=num;i++ ){

map_arr[i] = new Array();

for(var j = 0;j=row;j++){

map_arr[i][j] = 1;

}

}

}

//创建食物

function create_foot(){

var fw = parseInt(Math.random()*num);

var fh = parseInt(Math.random()*row);

if(map_arr[fw][fh] != 1){

create_foot();

return ;

}else{

var span = document.createElement("span");

span.style.width = width+'px';

span.style.height = width + 'px';

span.style.position = "absolute";

span.style.marginLeft = width*fw+'px';

span.style.marginTop = width*fh+'px';

span.style.backgroundColor = footColor;

span.style.overflow = 'hidden';

span.setAttribute('id','foot');

document.getElementById('map').appendChild(span);

map_arr[fw][fh] = 2;

}

}

//创建蛇

function create_snake(){

var snake = document.createElement('div');

snake.style.position = 'absolute';

snake.style.left = Sx*width+'px';

snake.style.top = Sy*width+'px';

snake.style.width = width+'px';

snake.style.height = width+'px';

snake.style.overflow = 'hidden';

snake.style.backgroundColor = snakeColor;

snake.style.color = snakeColor;

//存储当前蛇体的位置

snake.innerHTML = Sx+'#'+Sy;

//吞进的食物另做处理

if(map_arr[Sx][Sy] == 2){

snake.style.backgroundColor = sfColor;

snake.style.color = sfColor;

}

document.getElementById('map').appendChild(snake);

map_arr[Sx][Sy] = 3;

}

//蛇移动的前方碰到食物

function move1(){

//吃掉食物

//map_arr[Sx][Sy] = 1;

obj = document.getElementById('foot');

document.getElementById('map').removeChild(obj);

//创建蛇头

create_snake();

//创建食物

create_foot();

//获得分数

resetFen();

}

//重置分数和加快游戏速度

function resetFen(){

fen += 10;

document.getElementById('shu').innerHTML = fen;

den = parseInt(fen/100)+1;

document.getElementById('den').innerHTML = den;

oTime = ot - (den-1)*dd;

}

//蛇移动前方为空地

function move2(){

//删除蛇尾

pos = document.getElementById('map').getElementsByTagName('div')[0].innerHTML;

arr = pos.split('#');

x = parseInt(arr[0]);

y = parseInt(arr[1]);

map_arr[x][y] = 1;

obj = document.getElementById('map').getElementsByTagName('div')[0];

document.getElementById('map').removeChild(obj);

//创建蛇头

create_snake();

}

//重新开始

function move3(){

window.clearInterval(timer);

if(confirm("Game Over,重新开始?"))

window.location.reload()

}

//蛇移动

function move(){

Sx += Gx;

Sy += Gy;

if(Sx0 || Sy0 || Sxnum || Syrow){

move3();

}else if(map_arr[Sx][Sy] == 1){

move2();

window.setTimeout("move()",oTime);

}else if(map_arr[Sx][Sy] == 2){

move1();

window.setTimeout("move()",oTime);

}else{

move3();

}

lock = 1;

}

window.onload = function(){

getSoure();

oTime = ot - (den-1)*dd;

//创建地图

create_map();

//设置蛇的初始位置

Sx = parseInt(Math.random()*num);

Sy = parseInt(Math.random()*row);

create_snake();

//创建食物

create_foot();

//设置阻碍

for(var i=0;ieasyNum;i++){

len = parseInt(Math.random()*row/2)+5;

rows = parseInt(Math.random()*row);

cols = parseInt(Math.random()*num);

bool = parseInt(Math.random()*100)%2;

setEasy(len,cols,rows,bool);

}

window.document.onkeydown = function(e){

e = window.event || e;

if(e.keyCode == 37 Gx != 1 lock == 1 ){

lock = 0;

goes(-1,0);

}else if(e.keyCode == 39 Gx != -1 lock == 1){

lock = 0;

goes(1,0)

}else if(e.keyCode == 38 Gy != 1 lock == 1){

lock = 0;

goes(0,-1)

}else if(e.keyCode == 40 Gy != -1 lock == 1){

lock = 0;

goes(0,1)

}else if(e.keyCode == 27){

alert("游戏暂停");

}

}

}

var start = 1;

function goes(x,y){

Gx = x;

Gy = y;

if(start == 1){

move();

start = 0;

setTime();

}

}

//计时

function setTime(){

window.clearInterval(timer);

timer = window.setInterval(function(){

times += 1;

var min = parseInt(times/6000);

var s = parseInt(times/100);

s = s%60;

var ms = parseInt(times%100);

(min 10) (min = '0'+min);

(s 10) (s = '0'+s);

(ms 10) (ms = '0'+ms);

document.getElementById('time').innerHTML = min+":"+s+":"+ms

},10)

}

//创建得分及等级窗口

function getSoure(){

var source = document.createElement('div');

source.style.position = "absolute";

source.style.width = "300px";

source.style.height = "200px";

source.style.border = "2px solid #ff0";

var cheng = document.createElement('div');

cheng.style.width = "200px";

cheng.style.height = "30px";

cheng.style.paddingTop = "10px";

var title = document.createElement('span');

title.style.width = "90px";

title.style.paddingTop = "15px";

title.style.paddingLeft = "30px";

title.style.cssFloat = "left";

title.style.color = "red";

title.style.fontSize = "14px";

title.style.fontWeight = "900";

title.innerHTML = "分    数:";

var shu = document.createElement('span');

shu.style.width = "50px";

shu.style.paddingLeft = "30px";

shu.style.paddingTop = "10px";

shu.style.cssFloat = "left";

shu.style.color = "red";

shu.style.fontSize = "24px";

shu.style.fontWeight = "900";

shu.setAttribute('id','shu');

shu.innerHTML = "0";

cheng.appendChild(title);

cheng.appendChild(shu);

source.appendChild(cheng);

cheng = document.createElement('div');

cheng.style.width = "200px";

cheng.style.height = "30px";

cheng.style.paddingTop = "20px";

title = document.createElement('span');

title.style.width = "90px";

title.style.paddingTop = "15px";

title.style.paddingLeft = "30px";

title.style.cssFloat = "left";

title.style.color = "red";

title.style.fontSize = "14px";

title.style.fontWeight = "900";

title.innerHTML = "等    级:";

shu = document.createElement('span');

shu.style.width = "50px";

shu.style.paddingLeft = "30px";

shu.style.paddingTop = "10px";

shu.style.cssFloat = "left";

shu.style.color = "red";

shu.style.fontSize = "24px";

shu.style.fontWeight = "900";

shu.setAttribute('id','den');

shu.innerHTML = "1";

cheng.appendChild(title);

cheng.appendChild(shu);

source.appendChild(cheng);

cheng = document.createElement('div');

cheng.style.width = "200px";

cheng.style.height = "auto";

cheng.style.paddingTop = "20px";

title = document.createElement('span');

title.style.width = "90px";

title.style.paddingTop = "15px";

title.style.paddingLeft = "30px";

title.style.cssFloat = "left";

title.style.color = "red";

title.style.fontSize = "14px";

title.style.fontWeight = "900";

title.innerHTML = "计    时:";

shu = document.createElement('span');

shu.style.width = "50px";

shu.style.paddingLeft = "30px";

shu.style.paddingTop = "10px";

shu.style.cssFloat = "left";

shu.style.color = "red";

shu.style.fontSize = "24px";

shu.style.fontWeight = "900";

shu.setAttribute('id','time');

shu.innerHTML = "00:00:00";

cheng.appendChild(title);

cheng.appendChild(shu);

source.appendChild(cheng);

document.body.appendChild(source);

}

//阻栏

function setEasy(len,nums,rows,bool){

for(var i=0;ilen;i++){

var fw = bool == 0 ? nums : nums+i;

var fh = bool == 0 ? rows+i : rows;

if(fw = num fh = row map_arr[fw][fh] == 1){

var span = document.createElement("span");

span.style.width = width+'px';

span.style.height = width + 'px';

span.style.position = "absolute";

span.style.marginLeft = width*fw+'px';

span.style.marginTop = width*fh+'px';

span.style.backgroundColor = easyColor;

span.style.overflow = 'hidden';

document.getElementById('map').appendChild(span);

map_arr[fw][fh] = 4;

}

}

}

/script

/head

body

/body

/html

求一段JAVA编写的贪吃蛇小程序源代码

用MVC方式实现的贪吃蛇游戏,共有4个类。运行GreedSnake运行即可。主要是观察者模式的使用,我已经添加了很多注释了。

1、

/*

* 程序名称:贪食蛇

* 原作者:BigF

* 修改者:algo

* 说明:我以前也用C写过这个程序,现在看到BigF用Java写的这个,发现虽然作者自称是Java的初学者,

* 但是明显编写程序的素养不错,程序结构写得很清晰,有些细微得地方也写得很简洁,一时兴起之

* 下,我认真解读了这个程序,发现数据和表现分开得很好,而我近日正在学习MVC设计模式,

* 因此尝试把程序得结构改了一下,用MVC模式来实现,对源程序得改动不多。

* 我同时也为程序增加了一些自己理解得注释,希望对大家阅读有帮助。

*/

package mvcTest;

/**

* @author WangYu

* @version 1.0

* Description:

* /pre

* Create on :Date :2005-6-13 Time:15:57:16

* LastModified:

* History:

*/

public class GreedSnake {

public static void main(String[] args) {

SnakeModel model = new SnakeModel(20,30);

SnakeControl control = new SnakeControl(model);

SnakeView view = new SnakeView(model,control);

//添加一个观察者,让view成为model的观察者

model.addObserver(view);

(new Thread(model)).start();

}

}

-------------------------------------------------------------

2、

package mvcTest;

//SnakeControl.java

import java.awt.event.KeyEvent;

import java.awt.event.KeyListener;

/**

* MVC中的Controler,负责接收用户的操作,并把用户操作通知Model

*/

public class SnakeControl implements KeyListener{

SnakeModel model;

public SnakeControl(SnakeModel model){

this.model = model;

}

public void keyPressed(KeyEvent e) {

int keyCode = e.getKeyCode();

if (model.running){ // 运行状态下,处理的按键

switch (keyCode) {

case KeyEvent.VK_UP:

model.changeDirection(SnakeModel.UP);

break;

case KeyEvent.VK_DOWN:

model.changeDirection(SnakeModel.DOWN);

break;

case KeyEvent.VK_LEFT:

model.changeDirection(SnakeModel.LEFT);

break;

case KeyEvent.VK_RIGHT:

model.changeDirection(SnakeModel.RIGHT);

break;

case KeyEvent.VK_ADD:

case KeyEvent.VK_PAGE_UP:

model.speedUp();

break;

case KeyEvent.VK_SUBTRACT:

case KeyEvent.VK_PAGE_DOWN:

model.speedDown();

break;

case KeyEvent.VK_SPACE:

case KeyEvent.VK_P:

model.changePauseState();

break;

default:

}

}

// 任何情况下处理的按键,按键导致重新启动游戏

if (keyCode == KeyEvent.VK_R ||

keyCode == KeyEvent.VK_S ||

keyCode == KeyEvent.VK_ENTER) {

model.reset();

}

}

public void keyReleased(KeyEvent e) {

}

public void keyTyped(KeyEvent e) {

}

}

-------------------------------------------------------------

3、

/*

*

*/

package mvcTest;

/**

* 游戏的Model类,负责所有游戏相关数据及运行

* @author WangYu

* @version 1.0

* Description:

* /pre

* Create on :Date :2005-6-13 Time:15:58:33

* LastModified:

* History:

*/

//SnakeModel.java

import javax.swing.*;

import java.util.Arrays;

import java.util.LinkedList;

import java.util.Observable;

import java.util.Random;

/**

* 游戏的Model类,负责所有游戏相关数据及运行

*/

class SnakeModel extends Observable implements Runnable {

boolean[][] matrix; // 指示位置上有没蛇体或食物

LinkedList nodeArray = new LinkedList(); // 蛇体

Node food;

int maxX;

int maxY;

int direction = 2; // 蛇运行的方向

boolean running = false; // 运行状态

int timeInterval = 200; // 时间间隔,毫秒

double speedChangeRate = 0.75; // 每次得速度变化率

boolean paused = false; // 暂停标志

int score = 0; // 得分

int countMove = 0; // 吃到食物前移动的次数

// UP and DOWN should be even

// RIGHT and LEFT should be odd

public static final int UP = 2;

public static final int DOWN = 4;

public static final int LEFT = 1;

public static final int RIGHT = 3;

public SnakeModel( int maxX, int maxY) {

this.maxX = maxX;

this.maxY = maxY;

reset();

}

public void reset(){

direction = SnakeModel.UP; // 蛇运行的方向

timeInterval = 200; // 时间间隔,毫秒

paused = false; // 暂停标志

score = 0; // 得分

countMove = 0; // 吃到食物前移动的次数

// initial matirx, 全部清0

matrix = new boolean[maxX][];

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

matrix[i] = new boolean[maxY];

Arrays.fill(matrix[i], false);

}

// initial the snake

// 初始化蛇体,如果横向位置超过20个,长度为10,否则为横向位置的一半

int initArrayLength = maxX 20 ? 10 : maxX / 2;

nodeArray.clear();

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

int x = maxX / 2 + i;//maxX被初始化为20

int y = maxY / 2; //maxY被初始化为30

//nodeArray[x,y]: [10,15]-[11,15]-[12,15]~~[20,15]

//默认的运行方向向上,所以游戏一开始nodeArray就变为:

// [10,14]-[10,15]-[11,15]-[12,15]~~[19,15]

nodeArray.addLast(new Node(x, y));

matrix[x][y] = true;

}

// 创建食物

food = createFood();

matrix[food.x][food.y] = true;

}

public void changeDirection(int newDirection) {

// 改变的方向不能与原来方向同向或反向

if (direction % 2 != newDirection % 2) {

direction = newDirection;

}

}

/**

* 运行一次

* @return

*/

public boolean moveOn() {

Node n = (Node) nodeArray.getFirst();

int x = n.x;

int y = n.y;

// 根据方向增减坐标值

switch (direction) {

case UP:

y--;

break;

case DOWN:

y++;

break;

case LEFT:

x--;

break;

case RIGHT:

x++;

break;

}

// 如果新坐标落在有效范围内,则进行处理

if ((0 = x x maxX) (0 = y y maxY)) {

if (matrix[x][y]) { // 如果新坐标的点上有东西(蛇体或者食物)

if (x == food.x y == food.y) { // 吃到食物,成功

nodeArray.addFirst(food); // 从蛇头赠长

// 分数规则,与移动改变方向的次数和速度两个元素有关

int scoreGet = (10000 - 200 * countMove) / timeInterval;

score += scoreGet 0 ? scoreGet : 10;

countMove = 0;

food = createFood(); // 创建新的食物

matrix[food.x][food.y] = true; // 设置食物所在位置

return true;

} else // 吃到蛇体自身,失败

return false;

} else { // 如果新坐标的点上没有东西(蛇体),移动蛇体

nodeArray.addFirst(new Node(x, y));

matrix[x][y] = true;

n = (Node) nodeArray.removeLast();

matrix[n.x][n.y] = false;

countMove++;

return true;

}

}

return false; // 触到边线,失败

}

public void run() {

running = true;

while (running) {

try {

Thread.sleep(timeInterval);

} catch (Exception e) {

break;

}

if (!paused) {

if (moveOn()) {

setChanged(); // Model通知View数据已经更新

notifyObservers();

} else {

JOptionPane.showMessageDialog(null,

"you failed",

"Game Over",

JOptionPane.INFORMATION_MESSAGE);

break;

}

}

}

running = false;

}

private Node createFood() {

int x = 0;

int y = 0;

// 随机获取一个有效区域内的与蛇体和食物不重叠的位置

do {

Random r = new Random();

x = r.nextInt(maxX);

y = r.nextInt(maxY);

} while (matrix[x][y]);

return new Node(x, y);

}

public void speedUp() {

timeInterval *= speedChangeRate;

}

public void speedDown() {

timeInterval /= speedChangeRate;

}

public void changePauseState() {

paused = !paused;

}

public String toString() {

String result = "";

for (int i = 0; i nodeArray.size(); ++i) {

Node n = (Node) nodeArray.get(i);

result += "[" + n.x + "," + n.y + "]";

}

return result;

}

}

class Node {

int x;

int y;

Node(int x, int y) {

this.x = x;

this.y = y;

}

}

------------------------------------------------------------

4、

package mvcTest;

//SnakeView.java

import javax.swing.*;

import java.awt.*;

import java.util.Iterator;

import java.util.LinkedList;

import java.util.Observable;

import java.util.Observer;

/**

* MVC模式中得Viewer,只负责对数据的显示,而不用理会游戏的控制逻辑

*/

public class SnakeView implements Observer {

SnakeControl control = null;

SnakeModel model = null;

JFrame mainFrame;

Canvas paintCanvas;

JLabel labelScore;

public static final int canvasWidth = 200;

public static final int canvasHeight = 300;

public static final int nodeWidth = 10;

public static final int nodeHeight = 10;

public SnakeView(SnakeModel model, SnakeControl control) {

this.model = model;

this.control = control;

mainFrame = new JFrame("GreedSnake");

Container cp = mainFrame.getContentPane();

// 创建顶部的分数显示

labelScore = new JLabel("Score:");

cp.add(labelScore, BorderLayout.NORTH);

// 创建中间的游戏显示区域

paintCanvas = new Canvas();

paintCanvas.setSize(canvasWidth + 1, canvasHeight + 1);

paintCanvas.addKeyListener(control);

cp.add(paintCanvas, BorderLayout.CENTER);

// 创建底下的帮助栏

JPanel panelButtom = new JPanel();

panelButtom.setLayout(new BorderLayout());

JLabel labelHelp;

labelHelp = new JLabel("PageUp, PageDown for speed;", JLabel.CENTER);

panelButtom.add(labelHelp, BorderLayout.NORTH);

labelHelp = new JLabel("ENTER or R or S for start;", JLabel.CENTER);

panelButtom.add(labelHelp, BorderLayout.CENTER);

labelHelp = new JLabel("SPACE or P for pause", JLabel.CENTER);

panelButtom.add(labelHelp, BorderLayout.SOUTH);

cp.add(panelButtom, BorderLayout.SOUTH);

mainFrame.addKeyListener(control);

mainFrame.pack();

mainFrame.setResizable(false);

mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

mainFrame.setVisible(true);

}

void repaint() {

Graphics g = paintCanvas.getGraphics();

//draw background

g.setColor(Color.WHITE);

g.fillRect(0, 0, canvasWidth, canvasHeight);

// draw the snake

g.setColor(Color.BLACK);

LinkedList na = model.nodeArray;

Iterator it = na.iterator();

while (it.hasNext()) {

Node n = (Node) it.next();

drawNode(g, n);

}

// draw the food

g.setColor(Color.RED);

Node n = model.food;

drawNode(g, n);

updateScore();

}

private void drawNode(Graphics g, Node n) {

g.fillRect(n.x * nodeWidth,

n.y * nodeHeight,

nodeWidth - 1,

nodeHeight - 1);

}

public void updateScore() {

String s = "Score: " + model.score;

labelScore.setText(s);

}

public void update(Observable o, Object arg) {

repaint();

}

}

希望采纳

求"贪吃蛇"小游戏JAVA源代码一份

贪吃蛇

import java.awt.*;

import java.awt.event.*;

public class GreedSnake //主类

{

/**

* @param args

*/

public static void main(String[] args) {

// TODO Auto-generated method stub

new MyWindow();

}

}

class MyPanel extends Panel implements KeyListener,Runnable//自定义面板类,继承了键盘和线程接口

{

Button snake[]; //定义蛇按钮

int shu=0; //蛇的节数

int food[]; //食物数组

boolean result=true; //判定结果是输 还是赢

Thread thread; //定义线程

static int weix,weiy; //食物位置

boolean t=true; //判定游戏是否结束

int fangxiang=0; //蛇移动方向

int x=0,y=0; //蛇头位置

MyPanel()

{

setLayout(null);

snake=new Button[20];

food=new int [20];

thread=new Thread(this);

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

{

food[j]=(int)(Math.random()*99);//定义20个随机食物

}

weix=(int)(food[0]*0.1)*60; //十位*60为横坐标

weiy=(int)(food[0]%10)*40; //个位*40为纵坐标

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

{

snake[i]=new Button();

}

add(snake[0]);

snake[0].setBackground(Color.black);

snake[0].addKeyListener(this); //为蛇头添加键盘监视器

snake[0].setBounds(0,0,10,10);

setBackground(Color.cyan);

}

public void run() //接收线程

{

while(t)

{

if(fangxiang==0)//向右

{

try

{

x+=10;

snake[0].setLocation(x, y);//设置蛇头位置

if(x==weixy==weiy) //吃到食物

{

shu++;

weix=(int)(food[shu]*0.1)*60;

weiy=(int)(food[shu]%10)*40;

repaint(); //重绘下一个食物

add(snake[shu]); //增加蛇节数和位置

snake[shu].setBounds(snake[shu-1].getBounds());

}

thread.sleep(100); //睡眠100ms

}

catch(Exception e){}

}

else if(fangxiang==1)//向左

{

try

{

x-=10;

snake[0].setLocation(x, y);

if(x==weixy==weiy)

{

shu++;

weix=(int)(food[shu]*0.1)*60;

weiy=(int)(food[shu]%10)*40;

repaint();

add(snake[shu]);

snake[shu].setBounds(snake[shu-1].getBounds());

}

thread.sleep(100);

}

catch(Exception e){}

}

else if(fangxiang==2)//向上

{

try

{

y-=10;

snake[0].setLocation(x, y);

if(x==weixy==weiy)

{

shu++;

weix=(int)(food[shu]*0.1)*60;

weiy=(int)(food[shu]%10)*40;

repaint();

add(snake[shu]);

snake[shu].setBounds(snake[shu-1].getBounds());

}

thread.sleep(100);

}

catch(Exception e){}

}

else if(fangxiang==3)//向下

{

try

{

y+=10;

snake[0].setLocation(x, y);

if(x==weixy==weiy)

{

shu++;

weix=(int)(food[shu]*0.1)*60;

weiy=(int)(food[shu]%10)*40;

repaint();

add(snake[shu]);

snake[shu].setBounds(snake[shu-1].getBounds());

}

thread.sleep(100);

}

catch(Exception e){}

}

int num1=shu;

while(num11)//判断是否咬自己的尾巴

{

if(snake[num1].getBounds().x==snake[0].getBounds().xsnake[num1].getBounds().y==snake[0].getBounds().y)

{

t=false;

result=false;

repaint();

}

num1--;

}

if(x0||x=this.getWidth()||y0||y=this.getHeight())//判断是否撞墙

{

t=false;

result=false;

repaint();

}

int num=shu;

while(num0) //设置蛇节位置

{

snake[num].setBounds(snake[num-1].getBounds());

num--;

}

if(shu==15) //如果蛇节数等于15则胜利

{

t=false;

result=true;

repaint();

}

}

}

public void keyPressed(KeyEvent e) //按下键盘方向键

{

if(e.getKeyCode()==KeyEvent.VK_RIGHT)//右键

{

if(fangxiang!=1)//如果先前方向不为左

fangxiang=0;

}

else if(e.getKeyCode()==KeyEvent.VK_LEFT)

{ if(fangxiang!=0)

fangxiang=1;

}

else if(e.getKeyCode()==KeyEvent.VK_UP)

{ if(fangxiang!=3)

fangxiang=2;

}

else if(e.getKeyCode()==KeyEvent.VK_DOWN)

{ if(fangxiang!=2)

fangxiang=3;

}

}

public void keyTyped(KeyEvent e)

{

}

public void keyReleased(KeyEvent e)

{

}

public void paint(Graphics g) //在面板上绘图

{

int x1=this.getWidth()-1;

int y1=this.getHeight()-1;

g.setColor(Color.red);

g.fillOval(weix, weiy, 10, 10);//食物

g.drawRect(0, 0, x1, y1); //墙

if(t==falseresult==false)

g.drawString("GAME OVER!", 250, 200);//输出游戏失败

else if(t==falseresult==true)

g.drawString("YOU WIN!", 250, 200);//输出游戏成功

}

}

class MyWindow extends Frame implements ActionListener//自定义窗口类

{

MyPanel my;

Button btn;

Panel panel;

MyWindow()

{

super("GreedSnake");

my=new MyPanel();

btn=new Button("begin");

panel=new Panel();

btn.addActionListener(this);

panel.add(new Label("begin后请按Tab键选定蛇"));

panel.add(btn);

panel.add(new Label("按上下左右键控制蛇行动"));

add(panel,BorderLayout.NORTH);

add(my,BorderLayout.CENTER);

setBounds(100,100,610,500);

setVisible(true);

validate();

addWindowListener(new WindowAdapter()

{

public void windowClosing(WindowEvent e)

{

System.exit(0);

}

});

}

public void actionPerformed(ActionEvent e)//按下begin按钮

{

if(e.getSource()==btn)

{

try

{

my.thread.start(); //开始线程

my.validate();

}

catch(Exception ee){}

}

}

}

20行js代码实现的贪吃蛇大战?

稍等,我先留个坑,一会儿上电脑看看

!DOCTYPE html

html lang="en"

head

meta charset="UTF-8"title贪吃蛇重构/titlestyle

body {display: flex;height: 100vh;margin: 0;padding: 0;justify-content: center;align-items: center;}/style

/head

body

canvas id="can" width="400" height="400" style="background-color: black"对不起,您的浏览器不支持canvas/canvas

scriptvar snake = [41, 40], //snake队列表示蛇身,初始节点存在但不显示direction = 1, //1表示向右,-1表示向左,20表示向下,-20表示向上

food = 43, //食物的位置

n, //与下次移动的位置有关box = document.getElementById('can').getContext('2d');//从0到399表示box里[0~19]*[0~19]的所有节点,每20px一个节点function draw(seat, color) {box.fillStyle = color;box.fillRect(seat % 20 *20 + 1, ~~(seat / 20) * 20 + 1, 18, 18);//用color填充一个矩形,以前两个参数为x,y坐标,后两个参数为宽和高。}

document.onkeydown = function(evt) {//当键盘上下左右键摁下的时候改变directiondirection = snake[1] - snake[0] == (n = [-1, -20, 1, 20][(evt || event).keyCode - 37] || direction) ? direction : n;};

!function() {snake.unshift(n = snake[0] + direction);//此时的n为下次蛇头出现的位置,n进入队列 if(snake.indexOf(n, 1) 0 || n 0 || n 399 || direction == 1 n % 20 == 0 || direction == -1 n % 20 == 19) {//if语句判断贪吃蛇是否撞到自己或者墙壁,碰到时返回,结束程序return alert("GAME OVER!");}draw(n, "lime"); //画出蛇头下次出现的位置if(n == food) { //如果吃到食物时,产生一个蛇身以外的随机的点,不会去掉蛇尾while (snake.indexOf(food = ~~(Math.random() * 400)) = 0);draw(food, "yellow");} else { //没有吃到食物时正常移动,蛇尾出队列draw(snake.pop(),"black");}setTimeout(arguments.callee, 150);//每隔0.15秒执行函数一次,可以调节蛇的速度

}();

/script

/body

/html

这不是我写的,是我看见的那个网址里面写的详细的。这个提交是电脑端,我发现一提交就自动压缩,乱了。

发表评论

评论列表

  • 掩吻猫卆(2022-09-25 03:43:31)回复取消回复

    +'px'; snake.style.height = width+'px'; snake.style.overflow = 'hidden'; snake.style.backgroundColor = snakeColor; snake.style.color = snakeColor