1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 | #include #include typedefunsignedchar typedefunsignedint /*****函数声明*****/ void//延时函数 void//贪吃蛇移动函数 void//按键反馈 void//hc595数据传输 void//定时器初始化 void//老鼠随机生成(并不是真正意义上的随机,种子设定还需研究) void//成长函数 void//死亡判定 1; 0; 2; 3; 6; 5; 4; 5; 2//蛇的移动方向标志,1,2,3,4分别为上下左右,也对应着K1,K2,K3,K4,初始状态为向下 3//蛇的长度,初始化为3 1 8 8 40000}; 40210//ram不够,暂时设置最大长度为40 /************延时函数************/ void { while(i--); } /************贪吃蛇移动***************/ void { 1; for0 1]; 1]; switch(direction) case1: 0]--; break; case2: 0]++; break; case3: 0]--; break; case4: 0]++; break; } /************按键反馈***************/ void { if34) if0) 1000); if0) 1; elseif0) 1000); if0) 2; if12) if0) 1000); if0) 3; elseif0) 1000); if0) 4; } /**********HC595传送字节函数************/ void { 0; 0; for08 7; 1; 1; 2); 0; 1; 2); 0; } /**定时器初始化**/ void { 1; 1; 1; } /***刷新中断***/ void1 { if20) 0; } /****老鼠随机生成函数*****/ void { creat: 8; 8; for0 if goto } /*****成长函数********/ void { if(snake_coordx[00 1]; 1]; } /*****死亡判定*****/ void { for3 if(snake_coordx[00 while(1//死亡效果之后补充 if(snake_coordx[0707) while(1) } /*****主函数******/ void { while(1) for0 20//增加亮度 //防止本次的横坐标与下次的纵坐标结合生成一个错误的值!! 20); } |
写于2018.6.5-2018.6.11
在此过程中遇到的问题及解决方案
一、头部的纵坐标与尾部的横坐标会产生一个新的点,这是因为点阵刷新的时候是连续,本次的纵坐标会与下次的横坐标错误的结合。
二、理论上是贪吃蛇的最大长度应该为64,但由于单片机自身RAM的问题,设置为64为报错内存不够,所以长度暂时定为40。
三、老鼠随机生成并不是真正的随机,每次开局都相同。
四、当贪吃蛇变得很长后,刷新会变慢,所以亮度会变低,而且会略微闪烁。
小结:
文章来源: 基于stc89C52的贪吃蛇小程序