• 贪吃蛇(c++,codeblacks+EGE库)


    运行截图:

    代码:

      1 #include <iostream>
      2 #include <graphics.h>
      3 #include <time.h>
      4 #include <stdlib.h>
      5 using namespace std;
      6 class point
      7 {
      8   public:
      9   int x,y;
     10   point *next;
     11   point *last;
     12   point()
     13   {
     14 
     15   }
     16   point(int x1,int y1)
     17   {   next=NULL;
     18       last=NULL;
     19       x=x1;
     20       y=y1;
     21   }
     22 };
     23 class she
     24 {
     25     public:
     26     bool live;
     27     int length;
     28     int diction;
     29     point* head;
     30     she()
     31     {   live=true;
     32         length=1;
     33         diction=2;
     34         head=new point(20,20);
     35     }
     36     void move(int x)
     37     {
     38            point *p=head;
     39            while(p->next)
     40            {
     41               p=p->next;
     42            }
     43            while(p->last)
     44            {
     45                p->x=p->last->x;
     46                p->y=p->last->y;
     47                p=p->last;
     48            }
     49         if(x==1)
     50         {
     51             head->y-=2;
     52         }
     53         if(x==2)
     54         {
     55             head->y+=2;
     56         }
     57         if(x==3)
     58         {
     59             head->x-=2;
     60         }
     61         if(x==4)
     62         {
     63             head->x+=2;
     64         }
     65     }
     66     void eat(int x,int y)
     67     {
     68         point *p=new point(x+2,y+2);
     69         p->next=head;
     70         head->last=p;
     71         head=p;
     72     }
     73     bool islive()
     74     {
     75         return live;
     76     }
     77 
     78 };
     79 class showview
     80 {
     81    public:
     82    point* m;
     83    she s;
     84    point food;
     85    showview()
     86    {
     87         m=new point(10,10);
     88         m->next=new point(400,400);
     89         putcolor();
     90         dian();
     91    }
     92    void dian()
     93    {
     94        srand((unsigned)time(NULL));
     95        int n1=m->next->x-m->x;
     96        int m1=m->next->y-m->y;
     97        int x=rand()%n1+m->x;
     98        int y=rand()%m1+m->y;
     99        while(1)
    100        {
    101            if(getpixel(x,y)!=BLACK)
    102            {
    103                x=rand()%n1+m->x;
    104                y=rand()%m1+m->y;
    105            }else{
    106            break;
    107            }
    108        }
    109        food.x=x;
    110        food.y=y;
    111        putpixel2(x,y,YELLOW);
    112    }
    113    void putpixel2(int i,int j,int color)
    114    {
    115        putpixel(i,j,color);
    116        putpixel(i-1,j,color);
    117        putpixel(i+1,j,color);
    118        putpixel(i,j-1,color);
    119        putpixel(i,j+1,color);
    120        putpixel(i-1,j-1,color);
    121        putpixel(i-1,j+1,color);
    122        putpixel(i+1,j-1,color);
    123        putpixel(i+1,j+1,color);
    124   }
    125 
    126    void putcolor()
    127    {
    128       //
    129       for(int i=m->x;i<=m->next->x;i++)
    130       {
    131            putpixel(i,m->y,WHITE);
    132            putpixel(i,m->next->y,WHITE);
    133       }
    134       for(int i=m->y;i<=m->next->y;i++)
    135       {
    136            putpixel(m->x,i,WHITE);
    137            putpixel(m->next->x,i,WHITE);
    138       }
    139      //
    140 
    141        point *p=s.head->next;
    142        if(s.head!=NULL)
    143        putpixel2(s.head->x,s.head->y,RED);  //
    144        else
    145         cout<<"jsdfk"<<endl;
    146        while(p!=NULL)
    147        {
    148           putpixel2(p->x,p->y,GREEN);   //
    149            p=p->next;
    150        }
    151 
    152    }
    153    bool meet(int x,int y,int x1,int y1)
    154    {
    155        if(x==x1&&y==y1)
    156         return true;
    157         if(x+1==x1&&y+1==y1)
    158         return true;
    159         if(x+1==x1&&y-1==y1)
    160         return true;
    161         if(x==x1&&y+1==y1)
    162         return true;
    163         if(x==x1&&y-1==y1)
    164         return true;
    165         if(x+1==x1&&y==y1)
    166         return true;
    167         if(x-1==x1&&y==y1)
    168         return true;
    169         return false;
    170    }
    171   void start()
    172   {
    173        char x;
    174        while(1)
    175        {   api_sleep(100);
    176            if(kbhit())
    177            {
    178               x=getch();
    179               if(x=='w')
    180                 s.diction=1;
    181               if(x=='s')
    182                 s.diction=2;
    183               if(x=='a')
    184                 s.diction=3;
    185               if(x=='d')
    186                 s.diction=4;
    187            }
    188            s.move(s.diction);
    189            if(meet(s.head->x,s.head->y,food.x,food.y))
    190            {
    191              s.eat(food.x,food.y);
    192              cleardevice();
    193              putcolor();
    194              dian();
    195              continue;
    196            }
    197             if(getpixel(s.head->x,s.head->y)==WHITE||getpixel(s.head->x,s.head->y+1)==WHITE||getpixel(s.head->x,s.head->y-1)==WHITE||getpixel(s.head->x+1,s.head->y)==WHITE)
    198             break;
    199              cleardevice();
    200              putcolor();
    201              putpixel2(food.x,food.y,YELLOW);
    202        }
    203   }
    204 
    205 };
    206 
    207 
    208 int main()
    209 {  initgraph(-1,-1);
    210    showview ob;
    211   ob.start();
    212    //ob.start();
    213      closegraph();
    214     return 0;
    215 }
  • 相关阅读:
    查询是哪个进程占用了特定端口
    (面向c#开发人员) 编写javascript的好习惯一 false 值
    onerror 事件 如何使用 onerror 事件捕获网页中的错误。(chrome、opera、safari 浏览器不支持)
    查找url里面的flag元素判断操作
    jquery 弹出窗
    向上滚动
    kissy helpcenter
    kissyAPI
    IE6 动态创建 iframe 无法显示的 bug 芒果
    图片轮换动画仿GIF
  • 原文地址:https://www.cnblogs.com/llsq/p/7617258.html
Copyright © 2020-2023  润新知