• 贪吃蛇代码


      1 #include<stdio.h>
      2 #include<windows.h>
      3 #include<time.h>
      4 #include<conio.h>
      5 #include<stdlib.h>
      6 #include <iostream>
      7 #include <cmath> 
      8 #include <cstring>
      9 using namespace std;
     10 struct node{
     11     int x,y;
     12     node *next;
     13 };
     14 
     15 int Life=1;//是否死亡  0代表死亡;
     16 int x_food,y_food;//食物位置
     17 int x_block[36],y_block[36];//障碍物的位置 
     18 char movedir='R';//方向
     19 node* SHead=NULL;//
     20 node* STail=NULL;
     21 node* p=NULL;
     22 int foodnum=0;
     23 int score=0;
     24 int level=0;
     25 int death=0;
     26 int speed=400;
     27 
     28 void creatsnakemap();//创建地图
     29 void creatsnake();//创建蛇
     30 void gotoxy(int,int);//光标定位函数*
     31 void SetColor(unsigned short);//设置颜色
     32 void startgame();//开始游戏
     33 void makeblock();//产生障碍物 
     34 void isdead();//判断是否死亡;
     35 void nofood(int x,int y);//前方没有食物
     36 void yesfood();//前方有食物
     37 void makefood();//随机产生食物
     38 void drawsnake();//画出蛇
     39 void Snakedelete();//删除蛇的尾巴
     40 void isfood();//判断前方是否有食物
     41 void creatscreen();//打印开始屏幕
     42 void ending();//结束
     43 bool judge();//判断食物是否出现在蛇身体上
     44 int main()
     45 {
     46     system("mode con cols=80 lines=35");
     47     system("color 1f");
     48     creatscreen();
     49     creatsnakemap();
     50     creatsnake();
     51     startgame();
     52     ending();
     53     while(getch()!=27)
     54         continue;
     55 }
     56 void creatscreen()
     57 {
     58     SetColor(7);
     59     gotoxy(31,10);printf("经典贪吃蛇");
     60     gotoxy(28,12);printf("按任意键开始游戏");
     61     gotoxy(28,30);printf("Copyright@_御心飞行");
     62     getch();
     63     system("cls");
     64 }
     65 void creatsnakemap()
     66 {
     67     int i;
     68     SetColor(3);
     69     for(i=4;i<50;i+=2)//横墙
     70     {
     71         gotoxy(i,4);
     72         printf("");
     73         gotoxy(i,29);
     74         printf("");
     75         Sleep(30);
     76     }
     77     for(i=4;i<29;i++)//竖墙
     78     {
     79         gotoxy(4,i);
     80         printf("");
     81         gotoxy(48,i);
     82         printf("");
     83         Sleep(30);
     84     }
     85     SetColor(7);
     86     gotoxy(58,13);printf("人头:");
     87     gotoxy(58,15);printf("等级:");
     88     gotoxy(58,19);printf("还没有穿墙技能"); 
     89     makeblock();
     90 }
     91 void creatsnake()
     92 {
     93     node* newsnake;
     94     int i;
     95     SHead=(node *)malloc(sizeof(node));
     96     STail=SHead;
     97     STail->next=NULL;
     98     for(i=0;i<3;i++)
     99     {
    100         newsnake=(node *)malloc(sizeof(node));
    101         newsnake->next=NULL;
    102         STail->next =newsnake;
    103         STail=newsnake;
    104     }
    105     STail->next=NULL;
    106     p=SHead;
    107     SetColor(2);
    108     gotoxy(p->x=16,p->y=10),printf("");
    109     p=p->next;
    110     SetColor(3);
    111     gotoxy(p->x=14,p->y=10),printf("");
    112     p=p->next;
    113     gotoxy(p->x=12,p->y=10),printf("");
    114     p=p->next;
    115     gotoxy(p->x=10,p->y=10),printf("");
    116 
    117 }
    118 void startgame()
    119 {
    120     while(1)
    121     {
    122         isdead();
    123         if(Life==0)
    124             break;
    125         if(foodnum==0)
    126         {
    127             makefood();
    128             foodnum=1;
    129         }
    130         if(GetAsyncKeyState(VK_UP)&&movedir!='D')
    131             movedir='U';
    132         if(GetAsyncKeyState(VK_DOWN)&&movedir!='U')
    133             movedir='D';
    134         if(GetAsyncKeyState(VK_LEFT)&&movedir!='R')
    135             movedir='L';
    136         if(GetAsyncKeyState(VK_RIGHT)&&movedir!='L')
    137             movedir='R';
    138         isfood();    //判断前方是否有食物,然后移动一格
    139         Sleep(speed);//刷新时间,即速度;
    140         int Olevel=level;
    141         SetColor(7);
    142         gotoxy(68,13);printf("%d",score);
    143         gotoxy(68,15);printf("%d",level=score/7+1);
    144         if(Olevel==level-1)//等级判断
    145         {
    146             if(speed>200)
    147                 speed-=60;
    148             else if(speed>100)
    149                 speed-=40;
    150             else
    151                 speed-=14;
    152         }
    153         SetColor(5);
    154         if(level>=5)
    155         {
    156             gotoxy(58,19);printf("穿墙技能GET.22333"); 
    157             gotoxy(58,20);printf("你可放心穿过白墙");
    158         }
    159     }
    160     system("cls");
    161 }
    162 void isfood()
    163 {
    164     if(movedir=='U')
    165     {
    166         if(SHead->x==x_food&&SHead->y-1==y_food)//判断
    167             yesfood();    //前方有食物
    168         else
    169             nofood(SHead->x,SHead->y-1);//前方没有食物
    170     }
    171     if(movedir=='D')
    172     {
    173         if(SHead->x==x_food&&SHead->y+1==y_food)
    174             yesfood();
    175         else
    176             nofood(SHead->x,SHead->y+1);
    177     }
    178     if(movedir=='L')
    179     {
    180         if(SHead->x-2==x_food&&SHead->y==y_food)
    181             yesfood();
    182         else
    183             nofood(SHead->x-2,SHead->y);
    184     }
    185     if(movedir=='R')
    186     {
    187         if(SHead->x+2==x_food&&SHead->y==y_food)
    188             yesfood();
    189         else
    190             nofood(SHead->x+2,SHead->y);
    191 
    192     }
    193     drawsnake();
    194 }
    195 void nofood(int x,int y)
    196 {
    197         node* Nh;//临时头节点
    198         Nh=(node *)malloc(sizeof(node));//设定新的蛇头
    199         Nh->x=x;
    200         Nh->y=y;
    201         Nh->next=SHead;
    202         SHead=Nh;
    203         Snakedelete();//删除最后一个节点
    204 }
    205 void yesfood()
    206 {
    207     node* food;
    208     food=(node*)malloc(sizeof(node));
    209     food->x=x_food;
    210     food->y=y_food;
    211     food->next=SHead;
    212     SHead=food;
    213     foodnum=0;
    214     makefood();
    215     score++;
    216 }
    217 void Snakedelete()
    218 {
    219     p=SHead;
    220     while((p->next)->next!=NULL)
    221     {
    222         p=p->next;
    223     }
    224     gotoxy(STail->x,STail->y),printf(" ");
    225     free(STail);
    226     STail=p;
    227     STail->next=NULL;
    228 }
    229 void drawsnake()
    230 {
    231     p=SHead->next;
    232     SetColor(2);
    233     gotoxy(SHead->x,SHead->y);
    234     printf("");
    235     while(p!=NULL)
    236     {
    237         SetColor(2);
    238         gotoxy(p->x,p->y),printf("");
    239         p=p->next;
    240     }
    241 }
    242 void isdead()//判断是否死亡
    243 {
    244     node* p;
    245     if(SHead->y==4&&movedir=='U')//预判是否撞到墙
    246     {
    247         Life=0;
    248         return;
    249     }
    250     if(SHead->y==29&&movedir=='D')
    251     {
    252         Life=0;
    253         return;
    254     }
    255     if(SHead->x==4&&movedir=='L')
    256     {
    257         Life=0;
    258         return;
    259     }
    260     if(SHead->x==48&&movedir=='R')
    261     {
    262         Life=0;
    263         return;
    264     }
    265     for(p=SHead->next;p!=NULL;p=p->next)//判断是否撞到自己
    266     {
    267         if(SHead->x==p->x&&SHead->y==p->y)
    268         {
    269             Life=0;
    270             break;
    271         }
    272     }
    273     if(level<5)
    274     {
    275         for(int i=0;i<36;i++)
    276         {
    277             if(SHead->x==x_block[i]&&SHead->y==y_block[i])
    278             {
    279                 Life=0;
    280                 break;
    281             }        
    282         }
    283     }
    284 }
    285 void makefood()//随机产生食物 
    286 {
    287     srand(time(NULL));
    288     do
    289     {
    290         x_food=rand()%41+5;
    291         if(x_food%2==1)
    292             x_food++;
    293         y_food=(rand()*rand())%23+5;
    294     }while(judge());//判断食物是否会产生在蛇的身体上 
    295     gotoxy(x_food,y_food);
    296     SetColor(4);
    297     printf("");
    298     foodnum=1;
    299 }
    300 void makeblock()//随机产生障碍物 
    301 {
    302     memset(x_block,0,sizeof(x_block));
    303     memset(y_block,0,sizeof(y_block));    
    304     int i=0,j=8,k=7,p=2;
    305     for(;i<12;i++)
    306     {
    307         srand(time(NULL));
    308         x_block[i]=(rand()*(++p))%39+8;
    309         if(x_block[i]%2==1)
    310             x_block[i]++;
    311         y_block[i]=(rand()*(++k)*i)%22+5;
    312         if(y_block[i]%3==0)
    313         {
    314             gotoxy(x_block[i],y_block[i]);
    315             printf("■■");
    316             x_block[j]=x_block[i]+2;
    317             y_block[j++]=y_block[i];
    318         }
    319         else if(y_block[i]%3==1)//最坏的情况 
    320         {
    321             gotoxy(x_block[i],y_block[i]);
    322             printf("");
    323             gotoxy(x_block[i],y_block[i]+1);
    324             printf("");
    325             gotoxy(x_block[i],y_block[i]+2);
    326             printf("");
    327             x_block[j]=x_block[i];
    328             y_block[j]=y_block[i]+1;
    329             x_block[j+1]=x_block[i];
    330             y_block[j+1]=y_block[i]+2;
    331             j+=2;        
    332         }
    333         else
    334         {
    335             gotoxy(x_block[i],y_block[i]);
    336             printf("■■");    
    337             x_block[j]=x_block[i]+2;
    338             y_block[j]=y_block[i];
    339         }
    340     }
    341 } 
    342 bool judge()
    343 {
    344     node* p=SHead;
    345     int i=0;
    346     for(;p!=NULL;p=p->next)
    347     {
    348         if(p->x==x_food&&p->y==y_food)
    349             return 1;
    350     }
    351     for(;i<36;i++)
    352     {
    353         if(x_food==x_block[i]&&y_food==y_block[i])
    354             return 1;
    355     }
    356     return 0;
    357 }
    358 void ending()
    359 {
    360     SetColor(6);
    361     gotoxy(27,10);printf("game over!   -_-!");
    362     SetColor(7);
    363     gotoxy(30,14);printf("成绩:%d",score);
    364     gotoxy(21,30);printf("我的博客:www.cnblog.com/a1225234/");
    365 }
    366 void gotoxy(int x, int y)//光标定位函数  x列,y行
    367 {
    368      COORD coord = {x, y};
    369      SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
    370 }
    371 
    372 void SetColor(unsigned short ForeColor) // ForeColor前景色
    373 {
    374     HANDLE hCon = GetStdHandle(STD_OUTPUT_HANDLE); //获得缓冲区句柄
    375     SetConsoleTextAttribute(hCon,ForeColor);//设置文本及背景颜色
    376 }
  • 相关阅读:
    Android studio 报错 installation failed with message failed to finalize session:INSTALL_FAILED_INVALID_APK 解决方法
    Python 爬虫入门实例(爬取小米应用商店的top应用apk)
    解决jenkins控制台中文乱码问题
    四.Jenkins的授权和访问控制
    三.jenkins 在windows上配置master 和 agent(slave)
    Jenkins 默认没有Launch agent via Java Web Start,该如何配置
    二.jenkins构建自动化任务
    一.Jenkins的windows安装
    maven仓库地址配置
    jvm linux 时区设置
  • 原文地址:https://www.cnblogs.com/a1225234/p/4582056.html
Copyright © 2020-2023  润新知