注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

小木舟的博客

笔墨生活随想,记录似水年华。

 
 
 

日志

 
 

贪吃蛇  

2009-03-14 11:14:10|  分类: 编程学习 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

static double A=0.5;
static int level=0;
int a1,b1,point=0;
#include<iostream.h>
#include<time.h>
#include<stdlib.h>
#include<conio.h>
class Block
{
public:
Block(int a1,int a2,int a3,int l)
{
   a=a1,b=a2,c=a3,d=l;}
void Creatblock(char c[])
{
   e=c;
   e[21*a+b]='*';}
void print()
{
   cout<<"level:"<<level<<ends;
   cout<<"point:"<<point<<endl;
   cout<<"Pause:P"<<endl;
   for(int k=0;k<23;k++)
    cout<<"\\";
   cout<<endl;
   for(int i=0;i<21;i++)
   {
    cout<<"\\";
    for(int j=0;j<21;j++)
   {
     cout<<e[21*i+j];}
          cout<<"\\"<<endl;
   }
}
void moveright()
{
   e[21*a+b]=' ';b++;
   c=1;
}
void moveup()
{
   e[21*a+b]=' ';a--;
   c=2;
}
void moveleft()
{
   e[21*a+b]=' ';b--;
   c=3;}
void movedown()
{
   e[21*a+b]=' ';a++;
   c=4;}
Block *next;
int a,b,c,d;char *e;
};
void Sleep(clock_t wait)            //*时间延迟函数
{
clock_t goal;
goal=wait+clock();
while(goal>clock());
}
void Addblock(Block *&h,Block *&p2)    //*把新块插入表头
{
p2->next=h;h=p2;
p2->d++;
}
void linkfood(Block*q,char c[])//      将新块连入表尾
{
Block *p,*w;
p=q;
while(1)
{
   if(p->next->next==0)
    break;
   else p=p->next;
}
if(p->c==1&&p->next->c==1)
{
   w=new Block(p->next->a,p->next->b-1,1,1);
   w->Creatblock(c);
   p->next->next=w;
   w->next=0;
}
else if(p->c==2&&p->next->c==2)
{
   w=new Block(p->next->a+1,p->next->b,2,2);
   w->Creatblock(c);
   p->next->next=w;
   w->next=0;
}
else if(p->c==3&&p->next->c==3)
{
   w=new Block(p->next->a,p->next->b+1,3,3);
   w->Creatblock(c);
   p->next->next=w;
   w->next=0;
}
else if(p->c==4&&p->next->c==4)
{
   w=new Block(p->next->a-1,p->next->b,4,4);
   w->Creatblock(c);
   p->next->next=w;
   w->next=0;
}
else if(p->c==1)
{
   p->d=1;p->next->c=1;p->next->d=1;
   w=new Block(p->next->a,p->next->b-1,1,1);
   w->Creatblock(c);
   p->next->next=w;
   w->next=0;
}
else if(p->c==2)
    {
   p->d=2;p->next->c=2;p->next->d=2;
   w=new Block(p->next->a+1,p->next->b,2,2);
   w->Creatblock(c);
   p->next->next=w;
   w->next=0;
}
else if(p->c==3)
    {
   p->d=3;p->next->c=3;p->next->d=3;
   w=new Block(p->next->a,p->next->b+1,3,3);
   w->Creatblock(c);
   p->next->next=w;
   w->next=0;
}
else if(p->c==4)
{
   p->d=4;p->next->c=4;p->next->d=4;
   w=new Block(p->next->a-1,p->next->b,4,4);
   w->Creatblock(c);
   p->next->next=w;
   w->next=0;
}

}
void endcondition(Block *q,int t) //终止条件
{
int n=0;
Block *r=q->next;
while(r)
{
   if(q->a==r->a&&q->b==r->b)
        n++;
   r=r->next;
}
if(q->a>t-1||q->a<0||q->b<0||q->b>t-1||n==1)
{
   system("pause");
   cout<<"最终得分:"<<point<<"\n下次继续努力^^";
   exit(1);
}
}
void mover(Block*q,char *c) //*右
{
    q->c=1;
    Block *u,*t,*p,*h,*text,*end;
    t=q,p=q,u=q,h=q,text=q;
    system("cls");
     text=q;
     t=q;
     while(1)
     {
      if(t->next==0)
      {
       end=t;
       break;
      }
      else
      {
       t=t->next;
      }
     }
     while(t!=q)
     {
      if(h->next==t)
      {
       t->c=h->d;
       t=h;
       h=q;
      }
      else
      {
       h=h->next;
      }
     }
           while(text)
     {
      if(text->c==1)
      {
       text->moveright();
       text->Creatblock(c);
       text->d=text->c;
      }
      else if(text->c==2)
      {
       text->moveup();
       text->Creatblock(c);
       text->d=text->c;
      }
      else if(text->c==3)
      {
       text->moveleft();
       text->Creatblock(c);
       text->d=text->c;
      }
      else if(text->c==4)
      {
       text->movedown();
       text->Creatblock(c);
       text->d=text->c;
      }
      text=text->next;
     }
     end->print();
     endcondition(q,21);
     Sleep((clock_t)1*CLOCKS_PER_SEC*A); //*时间延迟
     p=p->next;
    }
void moveu(Block*q,char *c) //*上
{
    q->c=2;
    Block *u,*t,*p,*h,*text,*end;
    t=q,p=q,u=q,h=q,text=q;
    system("cls");
     text=q;
     t=q;
     while(1)
     {
      if(t->next==0)
      {
       end=t;
       break;
      }
      else
      {
       t=t->next;
      }
     }
     while(t!=q)
     {
      if(h->next==t)
      {
       t->c=h->d;
       t=h;
       h=q;
      }
      else
      {
       h=h->next;
      }
     }
           while(text)
     {
      if(text->c==1)
      {
       text->moveright();
       text->Creatblock(c);
       text->d=text->c;
      }
      else if(text->c==2)
      {
       text->moveup();
       text->Creatblock(c);
       text->d=text->c;
      }
      else if(text->c==3)
      {
       text->moveleft();
       text->Creatblock(c);
       text->d=text->c;
      }
      else if(text->c==4)
      {
       text->movedown();
       text->Creatblock(c);
       text->d=text->c;
      }
      text=text->next;
     }
      end->print();
         endcondition(q,21);
      Sleep((clock_t)1*CLOCKS_PER_SEC*A);       //*时间延迟
      p=p->next;
    }     
void movel(Block*q,char *c) //左
{
    q->c=3;
    Block *u,*t,*p,*h,*text,*end;
    t=q,p=q,u=q,h=q,text=q;
    system("cls");
     text=q;
     t=q;
     while(1)
     {
      if(t->next==0)
      {
       end=t;
       break;
      }
      else
      {
       t=t->next;
      }
     }
     while(t!=q)
     {
      if(h->next==t)
      {
       t->c=h->d;
       t=h;
       h=q;
      }
      else
      {
       h=h->next;
      }
     }
           while(text)
     {
      if(text->c==1)
      {
       text->moveright();
       text->Creatblock(c);
       text->d=text->c;
      }
      else if(text->c==2)
      {
       text->moveup();
       text->Creatblock(c);
       text->d=text->c;
      }
      else if(text->c==3)
      {
       text->moveleft();
       text->Creatblock(c);
       text->d=text->c;
      }
      else if(text->c==4)
      {
       text->movedown();
       text->Creatblock(c);
       text->d=text->c;
      }
      text=text->next;
     }
     end->print();
      endcondition(q,21);
      Sleep((clock_t)1*CLOCKS_PER_SEC*A);       //*时间延迟
      p=p->next;
    }
void moved(Block*q,char *c) //下
{
q->c=4;
    Block *u,*t,*p,*h,*text,*end;
    t=q,p=q,u=q,h=q,text=q;
    system("cls");
     text=q;
     t=q;
     while(1)
     {
      if(t->next==0)
      {
       end=t;
       break;
      }
      else
      {
       t=t->next;
      }
     }
     while(t!=q)
     {
      if(h->next==t)
      {
       t->c=h->d;
       t=h;
       h=q;
      }
      else
      {
       h=h->next;
      }
     }
           while(text)
     {
      if(text->c==1)
      {
       text->moveright();
       text->Creatblock(c);
       text->d=text->c;
      }
      else if(text->c==2)
      {
       text->moveup();
       text->Creatblock(c);
       text->d=text->c;
      }
      else if(text->c==3)
      {
       text->moveleft();
       text->Creatblock(c);
       text->d=text->c;
      }
      else if(text->c==4)
      {
       text->movedown();
       text->Creatblock(c);
       text->d=text->c;
      }
      text=text->next;
     }
      end->print();
      endcondition(q,21);
      Sleep((clock_t)1*CLOCKS_PER_SEC*A);       //*时间延
      p=p->next;
    }
void Creatfood(Block *q,char c[])
{
srand(time(0));
int n=0;
while(1)
{
   a1=rand()%21;
     b1=rand()%21;
   Block *p;
   p=q;
   while(p)
   {
    if(p->a==a1&&p->b==b1)
    {
     n++;
    }
    else
    {
     p=p->next;
    }
   }
   if(n==0)
   {
    c[21*a1+b1]='*';
    break;
   }
}
}
void main()                                          //主函数
{
cout<<"贪食蛇"<<endl;
cout<<"操作说明:上(W)下(S)左(A)右(D)"<<endl;
cout<<"输入难度(1~5,如输入非1~5,系统默认为5):"<<endl;
cin>>level;
switch(level)
{
case 1:A=1;break;
case 2:A=0.5;break;
case 3:A=0.1;break;
case 4:A=0.05;break;
case 5:A=0.01;break;
    default:A=0.01;break;
}
   Block *head=NULL,*n,*u;
   char c[441]={' '};
   n=new Block(11,0,1,0);
   Addblock(head,n);
    n->Creatblock(c);
   n=new Block(11,1,1,0);
   n->Creatblock(c);
   Addblock(head,n);
   n=new Block(11,2,1,0);
   n->Creatblock(c);
   Addblock(head,n);
   n=new Block(11,3,1,0);
   n->Creatblock(c);
   Addblock(head,n);
   n=new Block(11,4,1,0);
   n->Creatblock(c);
   Addblock(head,n);
   Block *q=head;
   Creatfood(head,c);      //......
   while(q->next!=0)
   {
    q=q->next;}
   q->print();
   char a;
   mover(head,c);
   while(1)
   {
    if(head->a==a1&&head->b==b1)
    {
     linkfood(head,c);
     switch(level)
     {
     case 1:point++;break;
     case 5:point+=5;break;
     case 3:point+=3;break;
     case 4:point+=4;break;
     }
     Creatfood(head,c);
     }
    if(kbhit())
    {
     a=getch();
        if(a=='w'&&head->c!=4)
        moveu(head,c);
           else if(a=='a'&&head->c!=1)
     {movel(head,c);}
        else if(a=='s'&&head->c!=2)
     {moved(head,c);}
           else if(a=='d'&&head->c!=3)
     {mover(head,c);}
     else if(a=='p')
     {system("pause");}
    }
    else
    {
     switch(head->c)
     {case 1:mover(head,c);break;
     case 2:moveu(head,c);break;
     case 3:movel(head,c);break;
     case 4:moved(head,c);break;
     }
    }
   }
}

  评论这张
 
阅读(150)| 评论(0)
推荐

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017