① 用javascript写贪吃蛇中蛇的转向原理或代码
...先弄一张图片。。让他上下左右移动。。而蛇的本身就是多个点获得图片。。。
一张图片
向上。就是X轴不动Y轴-
向下。就是X轴不动Y轴+
向左。就是Y轴不动X轴-
向下。就是Y轴不动X轴+
② 贪吃蛇原理啥
#define N 200
#include <graphics.h>
#include <stdlib.h>
#include <dos.h>
#define LEFT 0x4b00
#define RIGHT 0x4d00
#define DOWN 0x5000
#define UP 0x4800
#define ESC 0x011b
int i,key;
int score=0;/*得分*/
int gamespeed=50000;/*游戏速度自己调整*/
struct Food
{
int x;/*食物的横坐标*/
int y;/*食物的纵坐标*/
int yes;/*判断是否要出现食物的变量*/
}food;/*食物的结构体*/
struct Snake
{
int x[N];
int y[N];
int node;/*蛇的节数*/
int direction;/*蛇移动方向*/
int life;/* 蛇的生命,0活着,1死亡*/
}snake;
void Init(void);/*图形驱动*/
void Close(void);/*图形结束*/
void DrawK(void);/*开始画面*/
void GameOver(void);/*结束游戏*/
void GamePlay(void);/*玩游戏具体过程*/
void PrScore(void);/*输出成绩*/
/*主函数*/
void main(void)
{
Init();/*图形驱动*/
DrawK();/*开始画面*/
GamePlay();/*玩游戏具体过程*/
Close();/*图形结束*/
}
/*图形驱动*/
void Init(void)
{
int gd=DETECT,gm;
registerbgidriver(EGAVGA_driver);
initgraph(&gd,&gm,"c:\\program files\\winyes\\tc20h\\bgi");
cleardevice();
}
/*开始画面,左上角坐标为(50,40),右下角坐标为(610,460)的围墙*/
void DrawK(void)
{
/*setbkcolor(LIGHTGREEN);*/
setcolor(11);
setlinestyle(SOLID_LINE,0,THICK_WIDTH);/*设置线型*/
for(i=50;i<=600;i+=10)/*画围墙*/
{
rectangle(i,40,i+10,49); /*上边*/
rectangle(i,451,i+10,460);/*下边*/
}
for(i=40;i<=450;i+=10)
{
rectangle(50,i,59,i+10); /*左边*/
rectangle(601,i,610,i+10);/*右边*/
}
}
/*玩游戏具体过程*/
void GamePlay(void)
{
randomize();/*随机数发生器*/
food.yes=1;/*1表示需要出现新食物,0表示已经存在食物*/
snake.life=0;/*活着*/
snake.direction=1;/*方向往右*/
snake.x[0]=100;snake.y[0]=100;/*蛇头*/
snake.x[1]=110;snake.y[1]=100;
snake.node=2;/*节数*/
PrScore();/*输出得分*/
while(1)/*可以重复玩游戏,压ESC键结束*/
{
while(!kbhit())/*在没有按键的情况下,蛇自己移动身体*/
{
if(food.yes==1)/*需要出现新食物*/
{
food.x=rand()%400+60;
food.y=rand()%350+60;
while(food.x%10!=0)/*食物随机出现后必须让食物能够在整格内,这样才可以让蛇吃到*/
food.x++;
while(food.y%10!=0)
food.y++;
food.yes=0;/*画面上有食物了*/
}
if(food.yes==0)/*画面上有食物了就要显示*/
{
setcolor(GREEN);
rectangle(food.x,food.y,food.x+10,food.y-10);
}
for(i=snake.node-1;i>0;i--)/*蛇的每个环节往前移动,也就是贪吃蛇的关键算法*/
{
snake.x[i]=snake.x[i-1];
snake.y[i]=snake.y[i-1];
}
/*1,2,3,4表示右,左,上,下四个方向,通过这个判断来移动蛇头*/
switch(snake.direction)
{
case 1:snake.x[0]+=10;break;
case 2: snake.x[0]-=10;break;
case 3: snake.y[0]-=10;break;
case 4: snake.y[0]+=10;break;
}
for(i=3;i<snake.node;i++)/*从蛇的第四节开始判断是否撞到自己了,因为蛇头为两节,第三节不可能拐过来*/
{
if(snake.x[i]==snake.x[0]&&snake.y[i]==snake.y[0])
{
GameOver();/*显示失败*/
snake.life=1;
break;
}
}
if(snake.x[0]<55||snake.x[0]>595||snake.y[0]<55||
snake.y[0]>455)/*蛇是否撞到墙壁*/
{
GameOver();/*本次游戏结束*/
snake.life=1; /*蛇死*/
}
if(snake.life==1)/*以上两种判断以后,如果蛇死就跳出内循环,重新开始*/
break;
if(snake.x[0]==food.x&&snake.y[0]==food.y)/*吃到食物以后*/
{
setcolor(0);/*把画面上的食物东西去掉*/
rectangle(food.x,food.y,food.x+10,food.y-10);
snake.x[snake.node]=-20;snake.y[snake.node]=-20;
/*新的一节先放在看不见的位置,下次循环就取前一节的位置*/
snake.node++;/*蛇的身体长一节*/
food.yes=1;/*画面上需要出现新的食物*/
score+=10;
PrScore();/*输出新得分*/
}
setcolor(4);/*画出蛇*/
for(i=0;i<snake.node;i++)
rectangle(snake.x[i],snake.y[i],snake.x[i]+10,
snake.y[i]-10);
delay(gamespeed);
setcolor(0);/*用黑色去除蛇的的最后一节*/
rectangle(snake.x[snake.node-1],snake.y[snake.node-1],
snake.x[snake.node-1]+10,snake.y[snake.node-1]-10);
} /*endwhile(!kbhit)*/
if(snake.life==1)/*如果蛇死就跳出循环*/
break;
key=bioskey(0);/*接收按键*/
if(key==ESC)/*按ESC键退出*/
break;
else
if(key==UP&&snake.direction!=4)
/*判断是否往相反的方向移动*/
snake.direction=3;
else
if(key==RIGHT&&snake.direction!=2)
snake.direction=1;
else
if(key==LEFT&&snake.direction!=1)
snake.direction=2;
else
if(key==DOWN&&snake.direction!=3)
snake.direction=4;
}/*endwhile(1)*/
}
/*游戏结束*/
void GameOver(void)
{
cleardevice();
PrScore();
setcolor(RED);
settextstyle(0,0,4);
outtextxy(200,200,"GAME OVER");
getch();
}
/*输出成绩*/
void PrScore(void)
{
char str[10];
setfillstyle(SOLID_FILL,YELLOW);
bar(50,15,220,35);
setcolor(6);
settextstyle(0,0,2);
sprintf(str,"score:%d",score);
outtextxy(55,20,str);
}
/*图形结束*/
void Close(void)
{
getch();
closegraph();
}
③ java贪吃蛇原理
用一个数组将蛇头的行径记录下来,然后第二段的下一个方格设置为蛇头走过的方格,这样子蛇走过的路径都是前一段走过的,最后将跟着蛇头走了,比如
蛇身的路径
for(int i=snakeLength-1;i>0;i--){
rows[i]=rows[i-1];//依次将蛇前面一段走过行的路段赋值给蛇的下一段
cols[i]=cols[i-1];//依次将蛇前面一段走过列的路段赋值给蛇的下一段
}
for(int i=1;i<snakeLength;i++){
gamePanel[rows[i]][cols[i]].setBackground(Color.red);//将整个面板上蛇身走过的行和列设置为不同的颜色,当然可以用图片来设置
}
蛇头走过的行和列(rows[0],cols[i])要根据不同的方向加减1来将面板设置成不同的颜色
如gamePanel[rows[i]-1][cols[i]+1].setBackground(Color.red)
④ js贪吃蛇速度怎么控制
吃掉一个后 clearIntervar(变量); 然后再重新定义一个 setInterval(function(){}, 250);
var speed = 500;
var go = function(){
//蛇运动的方法
if(吃到一个){
clearIntervar(_intervar );
_intervar = setsetInterval(go,speed*0.9);
}
};
var _intervar = setsetInterval(go,speed);
⑤ 用JS写贪吃蛇游戏的问题
<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""
<htmlxmlns="
<head>
<metahttp-equiv="Content-Type"content="text/html;charset=gb2312"/>
<title>无标题文档</title>
<style>
table{width:auto;height:12px;}
tabletr{border-right:1pxsolid#808080;float:left;}
tabletd{border:1pxsolid#808080;border-right:none;float:left;width:10px;height:10px;font-size:0;line-height:0;overflow:hidden;margin:0px;padding:0px;}
.hs{background:#000;}
.hs{background:#ffff;}
</style>
</head>
<body>
<script>
functiona()
{
for(i=1;i<=10;i++)
{
document.getElementById("d"+i).className="hs";
}
}
varsu=1;//速度
vartar=1;//当前目标
varflag=true;//正反向
vartar_pre;//上一个
vartar_next;//下一个
functiona1(){
vartarTd=document.getElementById("d"+tar).className="hs";
if(flag){
tar_pre=tar-1;//用于灭掉前面的背景,当然如果是上下移动就不是减1了,你可以再研究
tar_next=tar+1;//试探下一个是否有
if(document.getElementById("d"+tar_next)!=null){
tar+=1;//这里加1也是只针对于横向
}else{
flag=false;
tar-=1;
}
}else{
tar_pre=tar+1;
tar_next=tar-1;//试探下一个是否有
if(document.getElementById("d"+tar_next)!=null){
tar-=1;//这里加1也是只针对于横向
}else{
flag=true;
tar+=1;
}
}
if(document.getElementById("d"+tar_pre)!=null){
document.getElementById("d"+tar_pre).className="hs1"
}
setTimeout("a1()",1000)
}
</script>
<tableborder="0">
<tr>
<tdwidth="10"height="10"id="d1"></td>
<tdwidth="10"height="10"id="d2"></td>
<tdwidth="10"height="10"id="d3"></td>
<tdwidth="10"height="10"id="d4"></td>
<tdwidth="10"height="10"id="d5"></td>
<tdwidth="10"height="10"id="d6"></td>
<tdwidth="10"height="10"id="d7"></td>
<tdwidth="10"height="10"id="d8"></td>
<tdwidth="10"height="10"id="d9"></td>
<tdwidth="10"height="10"id="d10"></td>
</tr>
</table>
<inputname=""type="button"value="开始"onclick="a1()"/>
</body>
</html>
我没写过贪吃蛇,不过可以一起学习,这是我的一个思路,望交流,qqqun21.77/7/12
我突然觉得更好的办法是用二维数组
⑥ 安卓系统单机版的贪吃蛇核心算法和技术
《贪吃蛇》的最简算法就是用链表了
用链表的节点表示蛇
增加的减少都有很方便
移动的时候只须增加一个头节点并去掉尾节点就行了
吃食物是只须增加一个头节点
链表和蛇本来就很相似
用链表编《贪吃蛇》最合适不过了
网上有很多这种《贪吃蛇》的代码,可以下载来直接使用
⑦ 谁能详细的给俺讲下 js 贪吃蛇的 思路 算法
算法是不分语言的,简单点想就是利用一个数组存取蛇,蛇在方格子里走,一个方格是一步,每次画图的时候把数组最后一个去掉,变成头部,吃一个数组增加一个,就这么简单。
⑧ 用js做一个贪吃蛇的游戏,谢谢,最好有注释
以前做的一个 部分注释 核心部分由注释 其实就是一个最后一个跟随前面一个位置的算法
<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<htmlxmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<styletype="text/css">
.body{width:600px;margin:100pxauto;text-align:center;}
#main{height:300px;border:1pxsolid#f00;position:relative;}
#maindiv{width:20px;height:20px;background-color:green;position:absolute;}
#maindiv.snake{background-color:#ff0;}
.score{font-size:14px;}
.scorestrong{color:Red;}
</style>
<scripttype="text/javascript">
window.onload=function(){
varomain=document.getElementById("main");
varr=15,c=30;
varasnake=[];
varspeed=150;
varodiv=document.createElement("div");
asnake.push({l:Math.floor(Math.random()*c),t:Math.floor(Math.random()*r),div:odiv,d:"l"});
omain.appendChild(odiv);
setPosition(asnake[0]);
//设置位置
functionsetPosition(obj){
obj.div.style.left=obj.l*20+"px";
obj.div.style.top=obj.t*20+"px";
}
varaEat=null;
vard="l";
//创建吃的
functioncreateEat(){
varl=Math.floor(Math.random()*c);
vart=Math.floor(Math.random()*r);
varisexist=false;
//判断是否存在在设数组里面
for(vari=0;i<asnake.length;i++){
if(l==asnake[i].l&&t==asnake[i].t){
isexist=true;
break;
}
}
//如果存在再创建一个蛇
if(isexist){
createEat();
return;
}
varonewdiv=document.createElement("div");
onewdiv.className="snake";
aEat={l:l,t:t,div:onewdiv,d:"l"};
omain.appendChild(onewdiv);
setPosition(aEat);
}
createEat();
varobtn=document.getElementById("btn");
varoscore=document.getElementById("score");
varoaddspeed=document.getElementById("addspeed");
varotimer=null;
varisitem=true;
oaddspeed.onclick=function(){
clearInterval(otimer);
speed=speed<50?50:speed-20;
setasnke();
}
obtn.onclick=function(){
if(!isitem){
clearInterval(otimer);
obtn.value="继续游戏";
isitem=true;
returnfalse;
}
obtn.value="暂停游戏";
setasnke();
isitem=false;
}
functionsetasnke(){
otimer=setInterval(function(){
for(vari=asnake.length-1;i>0;i--){
asnake[i].l=asnake[i-1].l;
asnake[i].t=asnake[i-1].t;
asnake[i].d=asnake[i-1].d;
}
switch(d){
case"l":
asnake[0].l--;
break;
case"r":
asnake[0].l++;
break;
case"t":
asnake[0].t--;
break;
case"b":
asnake[0].t++;
break;
}
//判断蛇是否撞墙了
if(asnake[0].l<0||asnake[0].l>=c||asnake[0].t<0||asnake[0].t>=r){
alert("你死掉了");
clearInterval(otimer);
return;
}
//判断蛇是否撞到自己了
for(varn=1;n<asnake.length;n++){
if(asnake[0].l==asnake[n].l&&asnake[0].t==asnake[n].t){
alert("你已经死掉了");
clearInterval(otimer);
return;
}
}
//判断蛇是否吃到东西了
if(asnake[0].l==aEat.l&&asnake[0].t==aEat.t){
aEat.div.className="";
oscore.innerHTML=parseInt(oscore.innerHTML)+1;
asnake.push(aEat);
createEat();
}
//重新设置蛇的位置
for(varj=0;j<asnake.length;j++){
setPosition(asnake[j]);
}
},speed);
}
//键盘改变蛇的方向
document.onkeydown=function(event){
varoEn=event||window.event;
varoCode=oEn.keyCode;
switch(oCode){
case37:
d="l";
break;
case38:
d="t";
break;
case39:
d="r";
break;
case40:
d="b";
break;
}
}
}
</script>
</head>
<body>
<divclass="body">
<inputtype="button"value="加速"id="addspeed"/><inputtype="button"id="btn"value="开始游戏"/> <spanclass="score">积分:<strongid="score">0</strong></span>
<divid="main">
</div>
</div>
</body>
</html>
⑨ 20行js代码实现的贪吃蛇大战
稍等,我先留个坑,一会儿上电脑看看
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8"><title>贪吃蛇重构</title><style>
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>
<script>var 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>
这不是我写的,是我看见的那个网址里面写的详细的。这个提交是电脑端,我发现一提交就自动压缩,乱了。
⑩ JavaScript制作贪吃蛇游戏代码
蛇的身体:数组
食物:在规定范围内生成的随机数
蛇的身体累加:数组元素个数增加
蛇碰墙死:数组首个元素的x值或y值小于0或者大于地图的宽度活高度
蛇咬自己死:数组首个元素的x值和y值和其他元素值重复
移动速度:在指定的时间内调用移动方法
开始:开始调用方法
暂停:暂停调用方法
积分:蛇没吃一个食物,全局变量加1
自己做吧,很简单,做完进步很大