当前位置:首页 > 游蛇吃豆嵌入式课程设计
{ DelChangePoint(); } } switch(EndDirect) { case 1: EndPos[0] = EndPos[0] + m; //蛇尾横坐标移动m break; case 2: EndPos[0] = EndPos[0] - m; break; case 3: EndPos[1] = EndPos[1] - m; //蛇尾纵坐标移动m break; case 4: EndPos[1] = EndPos[1] + m; break; } //绘制snake //ClearScreen(); //Draw3DRect2(pdc, psnakeRect, RGB(0, 0, 0), RGB(0, 0, 0)); FillRect2(pdc, pbarRect1, GRAPH_MODE_NORMAL, RGB(0, 255, 255)); FillRect2(pdc, pbarRect2, GRAPH_MODE_NORMAL, RGB(0, 255, 255)); if (ChangePointCount==0) { draw_rect(HeadPos[0],HeadPos[1], EndPos[0], EndPos[1]); }
else //不断调用可以动态显示移动过程 {
draw_rect(HeadPos[0],HeadPos[1],ChangePointPos[0][0], ChangePointPos[0][1]);
for(i=1; i draw_rect(ChangePointPos[i-1][0],ChangePointPos[i-1][1], } } ChangePointPos[i][0],ChangePointPos[i][1]; } draw_rect(ChangePointPos[i-1][0],ChangePointPos[i-1][1], EndPos[0],EndPos[1]); } OSTimeDly(200); 2. 判断吃否吃到豆子 判断蛇是否吃到食物的方法比较简单,只要判断蛇头的 X,Y 坐标是否同时和食物的坐 标的 X,Y 一样.吃到食物后改变响应的游戏参数,这时候要让变 量addcount 加 1,要注意根据此时蛇的运动方向来确定新蛇头的坐标.另外,要注意,蛇吃完食物后,要把变量boolbean00[i], bean01[0], bean10[0], bean11[0] 赋值 FALSE, 食物产生子程序能够判断食物已经被蛇\吃到\了,要重新产生食物. 代码: u8 bean00[3][2] = { {2,11}, {18,13}, {15,20} }; u8 bean01[1][2] = { {10,27} }; u8 bean10[1][2] = { {38,3} }; u8 bean11[1][2] = { {27,38} }; if (HeadPos[0] <= 20) { if (HeadPos[1] <=20) { for (i=0;i<3;i++) if (boolbean00[i] == TRUE) { if ( (bean00[i][0] == HeadPos[0]) && (bean00[i][1] == HeadPos[1]) ) { catch = TRUE; boolbean00[i] = FALSE; addcount = 2; number++; score(number); mscore=number*2-n*0.01+1; scoresco(mscore); key=mscore;//得到按键值 Delay(1); ZLG7289_ENABLE();//使zlg7289占有同步串口 WriteSDIO(ZLG7289_CMD_DATA0|0);//数码管以方式0译码,第一个数码管亮 WriteSDIO(key);//显示个位 Delay(1);//延时 if(key>9) {//键值大于9显示十位 WriteSDIO(ZLG7289_CMD_DATA0|1);//发送十位数据 WriteSDIO((unsigned char)(key/10)); Delay(1); WriteSDIO(ZLG7289_CMD_HIDE);//使一、二两位数码管显示 WriteSDIO(3); } else {//键值小于10不显示十位 WriteSDIO(ZLG7289_CMD_HIDE);//使个位数码管显示 WriteSDIO(1); } ZLG7289_DISABLE();//zlg7289放弃同步串口控制权 // shine(); return; } } } else { if (boolbean01[0] == TRUE) { if ( (bean01[0][0] == HeadPos[0]) && (bean01[0][1] == HeadPos[1]) ) { catch = TRUE; boolbean01[0] = FALSE; addcount = 2; number++; score(number); } } } } else { if (HeadPos[1] <=20) { if (boolbean10[0] == TRUE) { if ( (bean10[0][0] == HeadPos[0]) && (bean10[0][1] == HeadPos[1]) ) { catch = TRUE; boolbean10[0] = FALSE; addcount = 2; number++; score(number); } } } else { if (boolbean11[0] == TRUE) { if ( (bean11[0][0] == HeadPos[0]) && (bean11[0][1] == HeadPos[1]) ) { catch = TRUE; boolbean11[0] = FALSE; addcount = 2; number++; score(number); } } } } 3. 画豆子 画豆子时,通过判断豆子有没有被吃掉决定要不要画,如果已经被蛇吃掉,就不画,没有吃掉就画,通过数组的值是TRUE还是FALSE来判断。数组的值为TRUE则画圆表示豆子,数组的值为FALSE则不画。 FillRect2(pdc, psnakeRect, GRAPH_MODE_NORMAL, RGB(100, 255, 0));//清除主窗口的显示
共分享92篇相关文档