#include<curses.h>
#include<stdlib.h>
#include<stdio.h>
void initNcurse()
{
initscr();
keypad(stdscr,1);
}
struct snake
{
int hang;
int lie;
struct snake *next;
};
struct snake *head=NULL;
struct snake *tail=NULL;
int hasNode(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);
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(hasNode(hang,lie)==1)
{
printw("[]");
}
else
{
printw(" ");
}
}
printw("\n");
}
if(hang==19)
{
for(lie=0;lie<20;lie++)
{
printw("--");
}
printw("\n");
printw("Designed by QYY\n");
}
}
}
void addn()
{
struct snake *new=(struct snake *)malloc(sizeof(struct snake));
new->hang=tail->hang;
new->lie=tail->lie+1;
new->next=NULL;
tail->next=new;
tail=new;
}
void initsnake()
{
struct snake *p=NULL;
while(head!=NULL)
{
p=head;
head=head->next;
free(p);
}
head=(struct snake*)malloc(sizeof(struct snake));
head->hang=1;
head->lie=1;
head->next=NULL;
tail=head;
addn();
addn();
addn();
}
void deletenode()
{
struct snake* p;
p=head;
head=head->next;
free(p);
}
void movsnake()
{
addn();
deletenode();
if(tail->hang==0 || tail->lie==0 || tail->hang==20 || tail->lie == 20)
{
initsnake();
}
}
int main()
{
initNcurse();
initsnake();
gamePic();
while(1)
{
int con=getch();
if(con==KEY_RIGHT)
{
movsnake();
gamePic();
}
}
getch();
endwin();
return 0;
}