• C程序设计 贪吃蛇分析(2)


    自己想改一改,结果发现不能这样,,写出来是错误的,

    双字符不能这样弄。。。

      1 //简单的控制台 贪吃蛇
      2 #include<stdio.h>
      3 #include<stdlib.h>
      4 #include<conio.h>
      5 #include<time.h>
      6 #include<string.h>
      7 
      8 #define H 30
      9 #define L 30
     10 
     11 int key; //用来存放按键
     12 int length = 1, over = 0; //蛇的长度, 结束 
     13 int dx[4]={0,0,-1,1}; //控制方向,左右,上下
     14 int dy[4]={-1,1,0,0};char Sharps[][3] = {"",  "", "", "  "};//蛇头,蛇身,食物,空白处。
     15 char *GameMap[H*L][3];
     16 
     17 
     18 
     19 struct Snake
     20 {
     21     int x, y;
     22     int dir; //存放当前节点的方向,0,1,2,3分别表示左右上下
     23 
     24 }Snake[H*L];
     25 void Initial();//地图初始化函数
     26 void Create_Food();//食物随机产生函数
     27 void Game();//游戏函数
     28 void Button();//取按键,判断方向函数
     29 void Move();//蛇移动函数
     30 void Check_Border();//越界检查函数
     31 void Check_Head(int x, int y);//蛇头移动检查函数
     32 
     33 
     34 int main()
     35 {
     36     Initial();
     37     Game();
     38 
     39     return 0;
     40 }
     41 
     42 
     43 void Initial()
     44 {
     45     int i, j;
     46     int hx, hy;
     47 
     48     system("title By:Lee Snake");//控制台标题
     49 //    memset(GameMap, ' ',sizeof(GameMap));//初始化地图全部为空
     50     
     51     system("cls");
     52     srand(time(0));
     53     hx=rand()%H;
     54     hy=rand()%L;
     55     *GameMap[hx * L+ hy] = "";
     56     Snake[0].x = hx;
     57     Snake[0].y = hy;
     58 
     59     Create_Food();   //随机产生食物
     60 
     61     for(i = 0; i < H; i++)   //地图显示
     62     { 
     63         for(j = 0; j < L; j++)
     64             printf("%s", *GameMap[i*L+j]);    //将蛇头 和 其他 字符 打印出来
     65         printf("
    ");
     66     }
     67     printf("
    小小C语言贪吃蛇
    ");
     68     printf("按任意方向键开始游戏
    ");
     69     
     70     getch();   //先接受一个按键,使蛇开始往该方向走
     71     Button();  //取出按键,并判断方向
     72 }
     73 
     74 
     75 void Create_Food()
     76 {
     77     int fx, fy;
     78     while(1)
     79     {
     80         fx=rand()&H;
     81         fy=rand()%L;
     82 
     83         if(*GameMap[fx*fy]=="  ")
     84         {
     85             *GameMap[fx*fy] = Sharps[2];
     86             break;
     87         }
     88     }
     89 }
     90 
     91 void Game()
     92 {
     93     int i, j;
     94 
     95     while(1)
     96     {
     97         _sleep(200);
     98 
     99         Button();
    100         Move();
    101 
    102         if(over)
    103         {
    104             printf("
    
    啊噢,你输了,Gameover !!
    
    ");
    105             printf("        >_<
    ");
    106             getchar();
    107             break;
    108         }
    109         system("cls");
    110         for(i = 0; i < H; i++)
    111         {
    112             for(j = 0; j < L; j++)
    113             {
    114                 printf("%s", *GameMap[i*L+j]);
    115                 printf("
    ");
    116             }
    117             
    118         printf("
    小小C语言贪吃蛇
    ");
    119         printf("按任意方向键开始游戏
    ");
    120         }
    121     }
    122 }
    123 
    124 void Button()
    125 {
    126     if(kbhit()!=0)
    127     {
    128         while(kbhit()!=0)
    129             key = getch();
    130 
    131         switch(key)
    132         {
    133         case 75: Snake[0].dir = 0; break;
    134         case 77: Snake[0].dir = 1; break;
    135         case 72: Snake[0].dir = 2; break;
    136         case 80: Snake[0].dir = 3; break;
    137         }
    138     }
    139 }
    140 
    141 
    142 
    143 void Move()
    144 {
    145     int i, x, y;
    146     int tmp = length;
    147     x = Snake[0].x;  
    148     y = Snake[0].y;  
    149     *GameMap[x*L+y] = "  ";
    150     Snake[0].x = Snake[0].x + dx[ Snake[0].dir ];
    151     Snake[0].y = Snake[0].y + dy[ Snake[0].dir ];
    152 
    153     Check_Border();   //蛇头是否越界
    154     Check_Head(x, y);
    155 
    156     if(length == tmp)
    157         for(i = 1; i < length; i++)
    158         {
    159             if(i == 1)
    160                 *GameMap[Snake[i].x * L+Snake[i].y]="  ";
    161 
    162             if(i == length - 1)
    163             {
    164                 Snake[i].x = x;
    165                 Snake[i].y = y;
    166                 Snake[i].dir = Snake[0].dir;
    167             }
    168             else
    169             {
    170                 Snake[i].x = Snake[i+1].x;
    171                 Snake[i].y = Snake[i+1].y;
    172                 Snake[i].dir = Snake[i+1].dir;        
    173             }
    174 
    175             *GameMap[Snake[i].x * L+ Snake[i].y] = Sharps[1];
    176         }
    177     
    178 }
    179 
    180 void Check_Border()  //检查蛇头是否越界
    181 {
    182     if(Snake[0].x < 0 || Snake[0].x >= H || Snake[0].y < 0 || Snake[0].y >= L)
    183         over = 1;
    184 }
    185 
    186 void Check_Head(int x, int y)  //检查蛇头移动后的位置情况
    187 {
    188     
    189     if(*GameMap[ Snake[0].x * L + Snake[0].y ] == "  ")  //为空
    190         *GameMap[ Snake[0].x * L + Snake[0].y ] = Sharps[0];
    191     else
    192         if(*GameMap[ Snake[0].x * L + Snake[0].y ] == Sharps[2])  //为食物
    193         {
    194             *GameMap[ Snake[0].x * L + Snake[0].y ] = Sharps[0];
    195             
    196             Snake[length].x = x;   //新增加的蛇身为蛇头后面的那个
    197             Snake[length].y = y;
    198             Snake[length].dir = Snake[0].dir;
    199             
    200             *GameMap[ Snake[length].x * L + Snake[length].y ] = Sharps[1]; 
    201             length++;
    202             
    203             Create_Food();  //食物吃完了马上再产生一个食物
    204         }
    205         else
    206             over = 1;
    207 }
  • 相关阅读:
    java第19次
    Unity3D常用的生命周期函数
    Unity3D结合ZXing生成中间带图标的二维码并保存
    Unity查看当前内存使用情况(针对移动端开发)
    Unity 获取鼠标悬停位置下的UI或3D物体对象
    【Unity3D】获取鼠标在三维空间(世界坐标系)的位置
    【Unity3D—C#】按下任意按键,返回按键的名称 以及 KeyCode键码详解
    Unity UGUI获取鼠标在屏幕的准确点击位置
    ML-Agent:通过TF#使用训练完成的模型数据
    对《ml-agent:Win10下环境安装》更新
  • 原文地址:https://www.cnblogs.com/Lee-geeker/p/3141003.html
Copyright © 2020-2023  润新知