1.蛇身如何向右移动
2.代码实现
#include <curses.h>
#include <stdlib.h>
struct snake
{
int hang;
int lie;
struct snake *next;
};
struct snake *head;//蛇头
struct snake *tail;//蛇尾
void initNcurse()
{
initscr();
keypad(stdscr,1);
}
int hassnakenode(int i,int j)
{
struct snake *p;
p=head;
while(p != NULL)
{
if(p->hang==i && p->lie==j)
{
return -1;
}
p=p->next;
}
return 0;
}
void gamePic()
{
int hang;
int lie;
move(0,0);//移动节点的原始位置设置0,0
for(hang=0;hang<20;hang++)
{
if(hang==0)
{
for(lie=0;lie<20;lie++)
{
printw("--");
}
printw("\n");
}
if(hang>=0 || hang<=19)
{
for(lie=0;lie<=20;lie++)
{
if(lie==0||lie==20)
{
printw("|");
}
else if(hassnakenode(hang,lie))
{
printw("[]");
}
else
{
printw(" ");
}
}
printw("\n");
}
if(hang==19)
{
for(lie=0;lie<20;lie++)
{
printw("--");
}
printw("\n");
printw("by shuai ge");
}
}
}
void addNode()
{
struct snake *new=(struct snake *)malloc(sizeof(struct snake));
new->hang=tail->hang;/*当在尾巴中增加一个节点的时候,列值加1*/
new->lie=tail->lie+1;
new->next=NULL;
tail->next=new;//尾巴的下一个节点指向新节点
tail=new;//让新节点变成尾巴
}
void initsnake()
{
head=(struct snake *)malloc(sizeof(struct snake));
head->hang=2;
head->lie=2;
head->next=NULL;
tail=head;
addNode();
}
void deleteNode()//删除节点
{
struct snake *p;
p=head;//定义p为链表头
head=head->next;//链表向后移动
free(p);//链表向后移动,把p释放掉
}
void movesnake()
{
addNode();
deleteNode();
}
int main()
{
int con;
initNcurse();
initsnake();
gamePic();
while(1)
{
con=getch();
if(con==KEY_RIGHT)//向右移动
{
movesnake();
gamePic();
}
}
getch();
endwin();
return 0;
}
运行效果
起始位置:
键盘按向右键
——@上官可编程