8乘8点阵贪吃蛇源代码文档格式.docx
- 文档编号:3107241
- 上传时间:2023-05-01
- 格式:DOCX
- 页数:15
- 大小:2.03MB
8乘8点阵贪吃蛇源代码文档格式.docx
《8乘8点阵贪吃蛇源代码文档格式.docx》由会员分享,可在线阅读,更多相关《8乘8点阵贪吃蛇源代码文档格式.docx(15页珍藏版)》请在冰点文库上搜索。
sbitKEY_RIGHT=P2^2;
sbitSTART=P2^7;
unsignedcharzong[8]={0x1,0x2,0x4,0x8,0x10,0x20,0x40,0x80};
//点阵P0=zong[k]就能让k位为高
unsignedchargreen[8]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
unsignedcharred[8]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
/*datastructure*/
structPoint{
ucharx,y;
};
structSnake{
structPointnodes[MAX_LENGTH];
ucharlength;
uchardirection;
ucharlive;
}snake;
structFood{
structPointposition;
ucharexist;
}food;
int/*score=0,*/lastx,lasty,keyCode,keyCode2,sp=10,l;
ucharleft=0,top=0,right=7,bottom=7;
/*functionsdeclaration*/
voidinit(void);
voidgamePlay(void);
//voidclose(void);
voiddrawWall(void);
voidcreateFood(void);
voiddrawFood(void);
voiddrawSnake(void);
//voiddrawScore(void);
uchartouchWall(void);
uchartouchSelf(void);
voidgameOver(void);
voidmoveSnake(void);
intoppositeDirection(intkeyCode);
intfoodEat(void);
voidexpandSnake(void);
voidselect(void);
uchargetKey(void);
/*------------------------*/
voidmain(){
init();
l=1;
while(l)
{
gamePlay();
}
//close();
gameOver();
}
voiddelay(ucharz)
{
ucharx,y;
for(x=z;
x>
0;
x--)
for(y=110;
y>
y--)
;
voiddelay_50us(unsignedchart)
unsignedcharj;
for(;
t>
t--)
for(j=19;
j>
j--);
voidinit(){
snake.nodes[0].x=3;
snake.nodes[0].y=3;
snake.nodes[1].x=4;
snake.nodes[1].y=3;
snake.length=2;
snake.live=1;
snake.direction=UP;
//score=0;
food.exist=0;
srand(5);
/*suijishufashengqi*/
/*voidclose(){
while
(1)
P0=0xff;
P1=0x0;
}*/
voidgamePlay(){
intd;
ucharkeyCode;
while(START);
//等待按开始键
while(TRUE){
//drawScore();
if(touchWall()||touchSelf()){
gameOver();
return;
}
if(!
food.exist)createFood();
food.exist=1;
for(d=0;
d<
(sp*36);
d++)
{
drawFood();
drawSnake();
keyCode=getKey();
lastx=snake.nodes[snake.length-1].x;
lasty=snake.nodes[snake.length-1].y;
oppositeDirection(keyCode))
snake.direction=keyCode;
moveSnake();
if(foodEat()){
food.exist=FALSE;
//score+=10;
expandSnake();
uchargetKey()
if(!
KEY_UP)
delay_50us
(2);
if(!
returnUP;
}
}
KEY_DOWN)
returnDOWN;
KEY_LEFT)
returnLEFT;
KEY_RIGHT)
returnRIGHT;
returnsnake.direction;
//什么都没按
voidcreateFood(){
inti;
label:
food.position.x=((int)rand()%8);
food.position.y=((int)rand()%8);
for(i=0;
i<
=snake.length-1;
i++){
if(snake.nodes[i].x==food.position.x&
&
snake.nodes[i].y==food.position.y)
gotolabel;
//food.position.x=1;
//food.position.y=1;
voiddrawFood(){
P0=zong[food.position.x];
P1=green[food.position.y];
delay
(2);
P0=0;
P1=0xff;
voiddrawSnake(){
intj;
for(j=0;
j<
j++)
P0=zong[snake.nodes[j].x];
P3=red[snake.nodes[j].y];
P3=0xff;
uchartouchWall(){
ucharx1=snake.nodes[0].x;
uchary1=snake.nodes[0].y;
if(x1<
left||x1>
right||y1<
top||y1>
bottom)
returnTRUE;
else
returnFALSE;
uchartouchSelf(){
uchari;
for(i=3;
snake.length-1;
i++)
if(snake.nodes[0].x==snake.nodes[i].x&
snake.nodes[0].y==snake.nodes[i].y)
voidgameOver(){
while
(1)
P3=0xff;
voidmoveSnake(){
intk;
lastx=snake.nodes[snake.length-1].x;
lasty=snake.nodes[snake.length-1].y;
//用
//bar(snake.nodes[snake.length-1].x,snake.nodes[snake.length-1].y,snake.nodes[snake.length-1].x+10,snake.nodes[snake.length-1].y+10);
//P0=zong[snake.nodes[snake.length-1].x];
//P3=red[snake.nodes[snake.length-1].y];
//P0=0;
//P3=0xff;
for(k=snake.length-2;
k>
=0;
k--)
snake.nodes[k+1].x=snake.nodes[k].x;
snake.nodes[k+1].y=snake.nodes[k].y;
if(snake.direction==UP)
snake.nodes[0].y-=1;
elseif(snake.direction==DOWN)
snake.nodes[0].y+=1;
elseif(snake.direction==LEFT)
snake.nodes[0].x-=1;
elseif(snake.direction==RIGHT)
snake.nodes[0].x+=1;
;
intoppositeDirection(intkeyCode){
if(keyCode==UP&
snake.direction==DOWN){
return1;
elseif(keyCode==DOWN&
snake.direction==UP){
elseif(keyCode==LEFT&
snake.direction==RIGHT){
elseif(keyCode==RIGHT&
snake.direction==LEFT){
return0;
intfoodEat(){
if(snake.nodes[0].x==food.position.x&
snake.nodes[0].y==food.position.y)
voidexpandSnake(){
if(keyCode==UP){
lastx-=1;
elseif(keyCode==DOWN){
lastx+=1;
elseif(keyCode==LEFT){
lasty-=1;
elseif(keyCode==RIGHT){
lasty+=1;
snake.nodes[snake.length].x=lastx;
snake.nodes[snake.length].y=lasty;
snake.length++;
以下是测试效果图
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 点阵 贪吃 源代码