go语言贪吃蛇制作,贪吃蛇怎么编程

如何用慧编程做贪吃蛇代码

用慧编程做贪吃蛇代码过程如下:

让客户满意是我们工作的目标,不断超越客户的期望值来自于我们对这个行业的热爱。我们立志把好的技术通过有效、简单的方式提供给客户,将通过不懈努力成为客户在信息化领域值得信任、有价值的长期合作伙伴,公司提供的服务项目有:空间域名、雅安服务器托管、营销软件、网站建设、临川网站维护、网站推广。

1、我们需要建立四个头文件,然后分别设置蛇的状态,上下左右,这是蛇能够有方向可走的前提,然后我们再设置蛇身的节点,定义一个简单的函数,这样蛇的全身以及他的行走方向就弄完了。

2、贪吃蛇不能穿墙代码。

3、第二步,一个函数这个函数的目的是贪吃蛇不能穿墙,很简单的代码分别设置长宽的最大位移,在内部范围内设置为一即可通过,否则不能穿墙。贪吃蛇随机生成一个食物。

4、设置一个随机函数。这样贪吃蛇代码就做好了。

慧编程是一款面向STEAM教育领域的积木式和代码编程软件,基于图形化编程开发。

课程设计:使用JavaScript制作一个网页上的贪吃蛇游戏

html

head

title贪吃蛇 Snake v2.4/title

style

body{

font-size:9pt;

}

table{

border-collapse: collapse;

border:solid #333 1px;

}

td{

height: 10px;

width: 10px;

font-size: 0px;

}

.filled{

background-color:blue;

}

/style

/head

script

function $(id){return document.getElementById(id);}

/**************************************************************

* javascript贪吃蛇 v2.4 br /

* author: sunxing007 05/14/2009br /

* 转载请注明来自 谢谢!br /

* v2.4修正了蛇身颜色可以随着蛇前进而移动

**************************************************************/

//贪吃蛇类

var Snake = {

tbl: null,

/**

* body: 蛇身,数组放蛇的每一节,

* 数据结构{x:x0, y:y0, color:color0},

* x,y表示坐标,color表示颜色

**/

body: [],

//当前移动的方向,取值0,1,2,3, 分别表示向上,右,下,左, 按键盘方向键可以改变它

direction: 0,

//定时器

timer: null,

//速度

speed: 250,

//是否已经暂停

paused: true,

//行数

rowCount: 30,

//列数

colCount: 30,

//初始化

init: function(){

var colors = ['red','orange','yellow','green','blue','purple','#ccc'];

this.tbl = $("main");

var x = 0;

var y = 0;

var colorIndex = 0;

//产生初始移动方向

this.direction = Math.floor(Math.random()*4);

//构造table

for(var row=0;rowthis.rowCount;row++){

var tr=this.tbl.insertRow(-1);

for(var col=0;colthis.colCount;col++) {

var td=tr.insertCell(-1);

}

}

//产生20个松散节点

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

x = Math.floor(Math.random()*this.colCount);

y = Math.floor(Math.random()*this.rowCount);

colorIndex = Math.floor(Math.random()*7);

if(!this.isCellFilled(x,y)){

this.tbl.rows[y].cells[x].style.backgroundColor = colors[colorIndex];

}

}

//产生蛇头

while(true){

x = Math.floor(Math.random()*this.colCount);

y = Math.floor(Math.random()*this.rowCount);

if(!this.isCellFilled(x,y)){

this.tbl.rows[y].cells[x].style.backgroundColor = "black";

this.body.push({x:x,y:y,color:'black'});

break;

}

}

this.paused = true;

//添加键盘事件

document.onkeydown= function(e){

if (!e)e=window.event;

switch(e.keyCode | e.which | e.charCode){

case 13: {

if(Snake.paused){

Snake.move();

Snake.paused = false;

}

else{

//如果没有暂停,则停止移动

Snake.pause();

Snake.paused = true;

}

break;

}

case 37:{//left

//阻止蛇倒退走

if(Snake.direction==1){

break;

}

Snake.direction = 3;

break;

}

case 38:{//up

//快捷键在这里起作用

if(event.ctrlKey){

Snake.speedUp(-20);

break;

}

if(Snake.direction==2){//阻止蛇倒退走

break;

}

Snake.direction = 0;

break;

}

case 39:{//right

if(Snake.direction==3){//阻止蛇倒退走

break;

}

Snake.direction = 1;

break;

}

case 40:{//down

if(event.ctrlKey){

Snake.speedUp(20);

break;

}

if(Snake.direction==0){//阻止蛇倒退走

break;

}

Snake.direction = 2;

break;

}

}

}

},

//移动

move: function(){

this.timer = setInterval(function(){

Snake.erase();

Snake.moveOneStep();

Snake.paint();

}, this.speed);

},

//移动一节身体

moveOneStep: function(){

if(this.checkNextStep()==-1){

clearInterval(this.timer);

alert("Game over!\nPress Restart to continue.");

return;

}

if(this.checkNextStep()==1){

var _point = this.getNextPos();

var _x = _point.x;

var _y = _point.y;

var _color = this.getColor(_x,_y);

this.body.unshift({x:_x,y:_y,color:_color});

//因为吃了一个食物,所以再产生一个食物

this.generateDood();

return;

}

//window.status = this.toString();

var point = this.getNextPos();

//保留第一节的颜色

var color = this.body[0].color;

//颜色向前移动

for(var i=0; ithis.body.length-1; i++){

this.body[i].color = this.body[i+1].color;

}

//蛇尾减一节, 蛇尾加一节,呈现蛇前进的效果

this.body.pop();

this.body.unshift({x:point.x,y:point.y,color:color});

//window.status = this.toString();

},

//探寻下一步将走到什么地方

pause: function(){

clearInterval(Snake.timer);

this.paint();

},

getNextPos: function(){

var x = this.body[0].x;

var y = this.body[0].y;

var color = this.body[0].color;

//向上

if(this.direction==0){

y--;

}

//向右

else if(this.direction==1){

x++;

}

//向下

else if(this.direction==2){

y++;

}

//向左

else{

x--;

}

//返回一个坐标

return {x:x,y:y};

},

//检查将要移动到的下一步是什么

checkNextStep: function(){

var point = this.getNextPos();

var x = point.x;

var y = point.y;

if(x0||x=this.colCount||y0||y=this.rowCount){

return -1;//触边界,游戏结束

}

for(var i=0; ithis.body.length; i++){

if(this.body[i].x==xthis.body[i].y==y){

return -1;//碰到自己的身体,游戏结束

}

}

if(this.isCellFilled(x,y)){

return 1;//有东西

}

return 0;//空地

},

//擦除蛇身

erase: function(){

for(var i=0; ithis.body.length; i++){

this.eraseDot(this.body[i].x, this.body[i].y);

}

},

//绘制蛇身

paint: function(){

for(var i=0; ithis.body.length; i++){

this.paintDot(this.body[i].x, this.body[i].y,this.body[i].color);

}

},

//擦除一节

eraseDot: function(x,y){

this.tbl.rows[y].cells[x].style.backgroundColor = "";

},

paintDot: function(x,y,color){

this.tbl.rows[y].cells[x].style.backgroundColor = color;

},

//得到一个坐标上的颜色

getColor: function(x,y){

return this.tbl.rows[y].cells[x].style.backgroundColor;

},

//用于调试

toString: function(){

var str = "";

for(var i=0; ithis.body.length; i++){

str += "x:" + this.body[i].x + " y:" + this.body[i].y + " color:" + this.body[i].color + " - ";

}

return str;

},

//检查一个坐标点有没有被填充

isCellFilled: function(x,y){

if(this.tbl.rows[y].cells[x].style.backgroundColor == ""){

return false;

}

return true;

},

//重新开始

restart: function(){

if(this.timer){

clearInterval(this.timer);

}

for(var i=0; ithis.rowCount;i++){

this.tbl.deleteRow(0);

}

this.body = [];

this.init();

this.speed = 250;

},

//加速

speedUp: function(time){

if(!this.paused){

if(this.speed+time10||this.speed+time2000){

return;

}

this.speed +=time;

this.pause();

this.move();

}

},

//产生食物。

generateDood: function(){

var colors = ['red','orange','yellow','green','blue','purple','#ccc'];

var x = Math.floor(Math.random()*this.colCount);

var y = Math.floor(Math.random()*this.rowCount);

var colorIndex = Math.floor(Math.random()*7);

if(!this.isCellFilled(x,y)){

this.tbl.rows[y].cells[x].style.backgroundColor = colors[colorIndex];

}

}

};

/script

body onload="Snake.init();"

/*************************************************************br /

* javascript贪吃蛇 v2.4br /

* author: sunxing007 05/14/2009br /

* 转载请注明来自 a href="";/a 谢谢!br /

**************************************************************/br /

table id="main" border="1" cellspacing="0" cellpadding="0"/table

input type="button" id="btn" value="开始/暂停" /点左边按钮或按Enter开始/暂停游戏br /

input type="button" id="reset" value="重新开始" /br /

input type="button" id="upSpeed" value="加速" /点左边按钮或按Ctrl + ↑加速br /

input type="button" id="downSpeed" value="减速" /点左边按钮或按Ctrl + ↓减速

script

$('btn').onclick = function(){

if(Snake.paused){

Snake.move();

Snake.paused = false;

}

else{

Snake.pause();

Snake.paused = true;

}

};

$("reset").onclick = function(){

Snake.restart();

this.blur();

};

$("upSpeed").onclick = function(){

Snake.speedUp(-20);

};

$("downSpeed").onclick = function(){

Snake.speedUp(20);

};

/script

/body

/html

求用c语言编写的贪吃蛇程序

#include stdio.h

#include graphics.h

#include stdlib.h

#include dos.h /*引用的库函数*/

#define LEFT 0x4b00

#define RIGHT 0x4d00

#define DOWN 0x5000

#define UP 0x4800

#define ESC 0x011b/*宏定义键名*/

#define N 200

int i,key;

int level;/*游戏等级*/

int score=0;/*得分*/

int gamespeed;/*游戏速度*/

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 Choicelevle(void);/*选择游戏等级*/

void Init(void);/*图形驱动*/

void Close(void);/*图形结束*/

void DRAW(void);/*游戏区域*/

void GameOver(void);/*结束游戏*/

void GamePlay(void);/*玩游戏具体过程*/

void PrScore(void);/*输出成绩*/

/*主函数*/

void main(void)

{

Init();/*图形驱动*/

Choicelevle();/*选择游戏等级*/

DRAW();/*游戏区域*/

GamePlay();/*玩游戏具体过程*/

Close();/*图形结束*/

}

/*图形驱动*/

void Init(void)

{

int gd=DETECT,gm;

initgraph(gd,gm,"\\turboc2"); /*初始化图形系统*/

cleardevice(); /*清除图形界面*/

}

/*选择游戏等级*/

void Choicelevle(void)

{char name[20];

setcolor(YELLOW);

settextstyle(0,0,6);

outtextxy(150,150,"Snake");

setcolor(GREEN);

settextstyle(0,0,1);

outtextxy(200,250,"please put in your English name:");

outtextxy(200,270,"Choice levle from 1-9.");

outtextxy(300,320,"name:yangzilong");/*制作人姓名*/

outtextxy(300,350,"number:0902060226");/*制作人学号*/

outtextxy(300,380,"class:computer science 0602");/*制作人班级*/

getch();

printf("please putin your name:");

gets(name);

printf("please choice levle:");

scanf("%d",level);

gamespeed=100000-400*level-300*level*level;

if(level9||level1)

{cleardevice(); /*清除图形界面*/

setcolor(YELLOW); /*设置字体颜色*/

settextstyle(0,0,2); /*设置字体类型*/

outtextxy(150,200,"level input error"); /*显示文本*/

getch();

level=1;

}

}

void DRAW(void)

{cleardevice(); /*清屏*/

setcolor(2);

setlinestyle(SOLID_LINE,0,THICK_WIDTH);/*设置线型*/

rectangle(45,45,465,325);

}

/*玩游戏具体过程*/

void GamePlay(void)

{setcolor(5);

setlinestyle(SOLID_LINE,0,THICK_WIDTH);/*设置线型*/

randomize();/*随机数发生器*/

food.yes=1;/*1表示需要出现新食物,0表示已经存在食物*/

snake.life=0;/*活着*/

snake.direction=1;/*方向往右*/

snake.x[0]=320;snake.y[0]=240;/*蛇头*/

snake.x[1]=330;snake.y[1]=240; /*蛇的第二节位置*/

snake.node=3;/*节数*/

PrScore();/*输出得分*/

while(1)/*可以重复玩游戏,压ESC键结束*/

{

while(!kbhit())/*在没有按键的情况下,蛇自己移动身体*/

{

if(food.yes==1)/*需要出现新食物*/

{

food.x=rand()%360+70;

food.y=rand()%250+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;i0;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;isnake.node;i++)/*从蛇的第四节开始判断是否撞到自己了,因为蛇头为两节,第三节不可能拐过来*/

{

if(snake.x[i]==snake.x[0]snake.y[i]==snake.y[0])

{

GameOver();/*显示失败*/

snake.life=1; /*蛇死*/

break;

}

}

/*如果蛇头碰到墙壁,蛇头从对面墙出来*/

if(snake.x[0]50)

{snake.x[0]=450;/*如果蛇头越过左边界,则从右边界进入*/

snake.y[0]=snake.y[0];/*纵坐标不变*/

for(i=snake.node-1;i0;i--)

{snake.x[i]=snake.x[i-1];

snake.y[i]=snake.y[i-1]; /*蛇的其他节数向前推进*/

}

{

setfillstyle(SOLID_FILL,0); /*设置填充模式和颜色,0表示黑色*/

bar(50,55,455,315);/*bar是表示填充的范围的函数*/

}

}

else

if(snake.x[0]450)

{snake.x[0]=50;/*如果蛇头越过右边界,则蛇头从左边界进入*/

snake.y[0]=snake.y[0];/*纵坐标不变*/

for(i=snake.node-1;i0;i--)

{snake.x[i]=snake.x[i-1];

snake.y[i]=snake.y[i-1]; /*蛇的其他节数向前推进*/

}

{

setfillstyle(SOLID_FILL,0); /*设置填充模式和颜色,0表示黑色*/

bar(50,55,455,315);/*bar是表示填充的范围的函数*/

}

}

else

if(snake.y[0]60)

{snake.y[0]=320;/*如果蛇头越过上边界,则从下边界进入*/

snake.x[0]=snake.x[0];/*横坐标不变*/

for(i=snake.node-1;i0;i--)

{snake.x[i]=snake.x[i-1];

snake.y[i]=snake.y[i-1]; /*蛇的其他节数向前推进*/

}

{

setfillstyle(SOLID_FILL,0); /*设置填充模式和颜色,0表示黑色*/

bar(50,55,455,315);/*bar是表示填充的范围的函数*/

}

}

else

if(snake.y[0]320)

{snake.y[0]=60;/*如果蛇头越过下边界,则从上边界进入*/

snake.x[0]=snake.x[0];/*横坐标不变*/

for(i=snake.node-1;i0;i--)

{snake.x[i]=snake.x[i-1];

snake.y[i]=snake.y[i-1]; /*蛇的其他节数向前推进*/

}

{

setfillstyle(SOLID_FILL,0); /*设置填充模式和颜色,0表示黑色*/

bar(50,55,455,315);/*bar是表示填充的范围的函数*/

}

}

if(snake.life==1)/*如果蛇死就跳出内循环,重新开始*/

break;

if(snake.x[0]==food.xsnake.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; /*每吃掉一食物,得分累加10分*/

if(score%100==0)

{level++;gamespeed=100000-400*level-300*level*level;/*每吃掉10食物提升一级,速度加快*/

PrScore();/*输出新得分*/

setcolor(YELLOW); /*设置字体颜色*/

settextstyle(0,0,4); /*设置字体类型*/

outtextxy(150,200,"LEVEL UP"); /*显示文本*/

if(level==10)

{level=1,gamespeed=100000-400*level-300*level*level;}

delay(6000000);

delay(6000000);

delay(6000000);

delay(6000000);

delay(6000000);

delay(6000000);

delay(6000000);

bar(50,55,455,315);/*bar是表示填充的范围的函数*/

}

PrScore();/*输出新得分*/

}

setcolor(4);/*画出蛇*/

for(i=0;isnake.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==UPsnake.direction!=4)

/*判断是否往相反的方向移动*/

snake.direction=3;

else

if(key==RIGHTsnake.direction!=2)

snake.direction=1;

else

if(key==LEFTsnake.direction!=1)

snake.direction=2;

else

if(key==DOWNsnake.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 str1[20];/*设置字符型数组*/

setfillstyle(SOLID_FILL,0);

bar(50,15,390,35); /*填充矩形框*/

setcolor(6); /*设置文本颜色*/

settextstyle(0,0,2); /*设置数组显示位置*/

sprintf(str1,"score %d level %d",score,level);/*显示数组内容*/

outtextxy(55,20,str1);

setcolor(YELLOW); /*设置字体颜色*/

settextstyle(0,0,2); /*设置字体类型*/

outtextxy(250,400,"EXIT=ESC ");/*显示文本*/

}

void Close(void)

{

closegraph();

}

求助一个贪吃蛇的制作代码!

没找到,只有C的~

*要求改进:用图形模式表示print()函数*/

#include mem.h

#include fcntl.h

#include conio.h

#include graphics.h

#include io.hchin a i t p oe er . co mugTTCrI

#include stdlib.h

#include stdio.h

#include bios.h

#include math.h

#define N 50

#define Time 10000

int A[N][N];

int IE=6;chin a i t p oe er . co mugTTCrI

int SCORE=0;

char a[]="9999";

void *ball;

int maxx;

unsigned int size;chin a i t p oe er . co mugTTCrI

int head=1;/*0,1,2,3*/

int i=3,j=0,ii=0,jj=0;

int length=3;

int x,y;/*蛇头标志*/

int add=1;/*食物标志*/

int tii,tjj;/* 前蛇尾坐标 */

void start_image()

{

setlinestyle(SOLID_LINE,1,2);

setcolor(GREEN);

line(39,39,39,441);

line(39,441,441,441);

line(441,441,441,39);

line(441,39,39,39);chin a i t p oe er . co mugTTCrI

chin a i t p oe er . co mugTTCrI

}

void draw_image(int x,int y)

{

int i=x*400/N+40;

int j=y*400/N+40;

setfillstyle(1,4);

bar(j,i,j+400/N,i+400/N);

}

void eraser_image(int x,int y)

{

int i=x*400/N+40;

int j=y*400/N+40;

setfillstyle(1,0);

bar(j,i,j+400/N,i+400/N);

}chin a i t p oe er . co mugTTCrI

chin a i t p oe er . co mugTTCrI

void tu()

{/*tuxing jiemian*/

maxx=getmaxx();

size=imagesize(210,390,450,420);

ball=malloc(size);

setfillstyle(1,10);

bar(160,170,473,253);

setfillstyle(1,9);

bar(163,173,470,250);

setcolor(13);

outtextxy(200,200,"Welcome to Greedy Snake Game");

setcolor(14);

outtextxy(250,220,"Developer :Wu siyuan ");

outtextxy(290,240,"2003.5");

outtextxy(210,390,"Press any key to contunue...");

getimage(210,390,450,420,ball);chin a i t p oe er . co mugTTCrI

chin a i t p oe er . co mugTTCrI

while(!kbhit())

{/* 没有键盘击键 */

putimage(210,390,ball,XOR_PUT);

delay(30000);

}

cleardevice();

}

void print()/*输出*/

{ /*要将转化成图形模式*/

int a,b;

/*start_image(); */chin a i t p oe er . co mugTTCrI

for(a=0;aN;a++)

{ for(b=0;bN;b++)

{if(A[a][b]1)draw_image(a,b);

if(A[a][b]==0)eraser_image(a,b); }chin a i t p oe er . co mugTTCrI

chin a i t p oe er . co mugTTCrI

chin a i t p oe er . co mugTTCrI

}

}chin a i t p oe er . co mugTTCrI

void snake() /*begin*/

{

int a,b;

for(a=0;aN;a++)

for(b=0;bN;b++)

A[a][b]=0;chin a i t p oe er . co mugTTCrI

A[i][j]=5;A[i-1][j]=4;A[i-2][j]=3;A[i-3][j]=2;

}

void del_tail()/*蛇尾的操作*/

{

int number=A[ii][jj];

tii=ii;tjj=jj;/*记录前蛇尾*/chin a i t p oe er . co mugTTCrI

while(1)

{

if(A[ii][jj-1]==number+1||A[ii][jj-1]==2number==30)

{jj--;break;}chin a i t p oe er . co mugTTCrI

if(A[ii][jj+1]==number+1||A[ii][jj+1]==2number==30)

{jj++;break;}chin a i t p oe er . co mugTTCrI

if(A[ii-1][jj]==number+1||A[ii-1][jj]==2number==30)

{ii--;break;}chin a i t p oe er . co mugTTCrI

if(A[ii+1][jj]==number+1||A[ii+1][jj]==2number==30)

{ii++;break;}chin a i t p oe er . co mugTTCrI

}

}chin a i t p oe er . co mugTTCrI

void down()

{

head=1;

if(A[i+1][j]1A[i+1][j]!=99)

{printf("I hit myself!");exit(1);}

i++;

if(IE30)IE=2;

A[i][j]=IE;IE++;

del_tail();

A[tii][tjj]=0;chin a i t p oe er . co mugTTCrI

}

void up()

{

head=0;

if(A[i-1][j]1A[i-1][j]!=99)

{printf("I hit myself!");exit(1);}

i--;

if(IE30)IE=2;

A[i][j]=IE;IE++;

del_tail();

A[tii][tjj]=0;chin a i t p oe er . co mugTTCrI

}

void left()

{

head=2;

if(A[i][j-1]1A[i][j-1]!=99)

{printf("I hit myself!");exit(1);}

j--;

if(IE30)IE=2;

A[i][j]=IE;IE++;

del_tail();

A[tii][tjj]=0;chin a i t p oe er . co mugTTCrI

}

void right()

{

head=3;

if(A[i][j+1]1A[i][j+1]!=99)

{printf("I hit myself!");exit(1);}

j++;

if(IE30)IE=2;

A[i][j]=IE;IE++;

del_tail();

A[tii][tjj]=0;

}chin a i t p oe er . co mugTTCrI

void test()/*测试是否到达边界*/

{

if(i0||iN-1||j0||jN-1)

{

printf("出界! Game over.");

exit(1);

}

}

void move()/*当前移动*/

{

switch(head)

{

case 0:up();break;

case 1:down();break;

case 2:left();break;

case 3:right();break;

/*default:printf("方向出错!\\n");*/

}chin a i t p oe er . co mugTTCrI

}

int keyboard()

{

/*判断是否有键盘输入

// 有返回值0,1,2,3

// int k=keyboard;

//判断方向是否是有效方向

//无效则什么也不做

//若方向有效则改变head的值*/

int a,key,h;

for(a=0;a2;a++)

if(bioskey(1))break;

key=bioskey(0);chin a i t p oe er . co mugTTCrI

switch (key)

{

/*up*/

case 18432:h=0;break;

/*down*/

case 20480:h=1;break;

/*left*/

case 19200:h=2;break;

/*right*/

case 19712:h=3;break;

/*Esc*/

case 283:printf("You press the Esc key!");exit(1);break;

/*default: h=999 ;*/chin a i t p oe er . co mugTTCrI

}

return h;

}

void add_point()/* 用于产生食物 */

{chin a i t p oe er . co mugTTCrI

while(1){

x=random(100)%N;

y=random(100)%N;

if(A[x][y]==0)break;

}

A[x][y]=99;/*食物的标志是5*/chin a i t p oe er . co mugTTCrI

add=0;/* 加食物标志清0*/chin a i t p oe er . co mugTTCrI

}

void score()

{chin a i t p oe er . co mugTTCrI

chin a i t p oe er . co mugTTCrI

setcolor(9);

settextstyle(3,0,4);

outtextxy(450,40,"Score:");chin a i t p oe er . co mugTTCrI

setcolor(RED);

outtextxy(450,200,"Speed:");chin a i t p oe er . co mugTTCrI

}

void number_char(int x)

{chin a i t p oe er . co mugTTCrI

int a0,a1,a2,a3;

if(x9999){a[0]='9';a[1]='9';a[2]='9';a[3]='9';}

else {

a0=x/1000;

a[0]=a0+48;chin a i t p oe er . co mugTTCrI

a1=(x-a0*1000)/100;

a[1]=a1+48;chin a i t p oe er . co mugTTCrI

a2=(x-a0*1000-a1*100)/10;

a[2]=a2+48;chin a i t p oe er . co mugTTCrI

a3=(x-a0*1000-a1*100-a2*10);

a[3]=a3+48;

a[4]='\\0';chin a i t p oe er . co mugTTCrI

chin a i t p oe er . co mugTTCrI

}

}chin a i t p oe er . co mugTTCrI

void snake_get()/*吃到食物时*/

{

if(i==xj==y)

{

length++;chin a i t p oe er . co mugTTCrI

A[tii][tjj]=A[ii][jj]-1;/*蛇尾加长*/chin a i t p oe er . co mugTTCrI

ii=tii;jj=tjj;/*蛇尾重新定义*/

add=1;/*食物标志置1*/

setfillstyle(1,BLACK);

bar(520,100,650,140);/*clear score*/

setcolor(3);

number_char(SCORE+=100);

outtextxy(550,100,a);chin a i t p oe er . co mugTTCrI

}chin a i t p oe er . co mugTTCrI

}chin a i t p oe er . co mugTTCrI

chin a i t p oe er . co mugTTCrI

void main()

{

int get_head;/*定义键盘输入*/

int gd=DETECT,gm;

clrscr();chin a i t p oe er . co mugTTCrI

/*regibgiobjdriver(public name)*/

initgraph(gd,gm,"c:\\\\bgi");chin a i t p oe er . co mugTTCrI

chin a i t p oe er . co mugTTCrI

setbkcolor(BLACK);chin a i t p oe er . co mugTTCrI

tu();

snake();/*初始化*/

start_image();

score();/*定义分数界面*/chin a i t p oe er . co mugTTCrI

while(1)

{ while(bioskey(1)==0)/*是否有键盘输入*/

{chin a i t p oe er . co mugTTCrI

if(add)add_point();/*是否可以增加食物*/chin a i t p oe er . co mugTTCrI

print();

move();

snake_get();/* 是否吃到食物 (test)*/

test();

delay(Time);

}

get_head=keyboard();

/* choose */chin a i t p oe er . co mugTTCrI

while(1){/*判断得到的坐标是否合法*/

if(get_head==0head==1)break;

if(get_head==1head==0)break;

if(get_head==2head==3)break;

if(get_head==3head==2)break;

else {head=get_head;break;}/*合法给head赋值*/

}chin a i t p oe er . co mugTTCrI

}chin a i t p oe er . co mugTTCrI

chin a i t p oe er . co mugTTCrI

}chin a i t p oe er . co mugTTCrI

制作贪吃蛇程序怎么一吃就死

制作贪吃蛇程序一吃就死是因为代码输入错误,代码有漏洞,同学们可以用window_size设置蛇可以活动的区域大小。foods 是一个存储着所有食物位置信息的列表,每次蛇体移动后都会调用 check_eat_food 函数检查是不是吃到了某一个食物。

可以发现,检查是不是吃到和吃下去这两个动作我分为了两个函数,以做到每个函数一心一意方便后期修改。但是作为一只能照顾自己的贪吃蛇,同学们还需要能够判断当前自身状态。

贪吃蛇的程序组成思路

贪吃蛇这个游戏可以分为三大块:界面:负责显示相关的所有工作;游戏流程控制:判断游戏输赢、游戏初始化等;蛇和食物:移动自身、判断是否死亡、是否被吃等。

每一块都被做成了单独的对象,通过相互配合实现游戏。对于贪吃蛇游戏里面的蛇来讲,它可以做的事情有三种:移动,死亡(吃到自己,撞墙)和吃东西围绕着这三个功能,同学们可以首先写出一个简陋的蛇。


文章名称:go语言贪吃蛇制作,贪吃蛇怎么编程
本文URL:http://pwwzsj.com/article/hcjshi.html