|
爱科技、爱创意、爱折腾、爱极致,我们都是技术控
您需要 登录 才可以下载或查看,没有账号?立即注册
x
首先,哎呀!好多年没发贴了。这几天,闲来无事。翻出来一个以前打样的彩屏带单片机的底板。搞了下。游戏图:
贪吃蛇
成品如下:(升压搞错了,里面又是挖线又是飞线)
正面
反面
部分源码:
画蛇
- void Trun_On_Point (unsigned char x,unsigned char y,unsigned char b)//画一个蛇的最小单位
- {
- if (b == 220) PIC_16BIT(4+x*10,24+y*10,10,10,gImage_apple);//1,食物
- else if (b == snake_longth - 1)
- {
- if ( snake_turned == 1) PIC_16BIT(4+x*10,24+y*10,10,10,gImage_snake_head_r);//1,蛇头右
- else if ( snake_turned == 2) PIC_16BIT(4+x*10,24+y*10,10,10,gImage_snake_head_l);//2,蛇头左
- else if ( snake_turned == 3) PIC_16BIT(4+x*10,24+y*10,10,10,gImage_snake_head_d);//3,蛇头下
- else if ( snake_turned == 4) PIC_16BIT(4+x*10,24+y*10,10,10,gImage_snake_head_u);//4,蛇头上
- }
- else if (snake_islive == 0) PIC_16BIT(4+x*10,24+y*10,10,10,gImage_sanke_dead);// 蛇死
- else
- {
- PIC_16BIT(4+x*10,24+y*10,10,10,gImage_sanke_body);//5,蛇身
- }
- }
复制代码 蛇吃食物
- void Eat_Food()//贪吃蛇吃食物
- {
- unsigned char length[2]; //用于保存要显示的分数和长度
- unsigned char i;
- /*************************判断蛇是否吃到食物**********************/
- if(snake_XPos[snake_longth -1] == food_x && snake_YPos[snake_longth -1] == food_y)
- {
- snake_longth ++;
- snake_XPos[snake_longth -1] = food_x;
- snake_YPos[snake_longth -1] = food_y;
- //显示登记和得分
- length[0]=(snake_longth-3)/10+0x30 ;
- length[1]=(snake_longth-3)%10+0x30 ;
- display_GB2312_8x16_Char(40,0,length[0],WHITE,BLACK);//显示长度
- display_GB2312_8x16_Char(48,0,length[1],WHITE,BLACK);//显示长度
- display_GB2312_string(0,0,"得分",WHITE,BLACK);//显示长度
- if ( snake_longth > MAX_Longth - 1 ) //蛇长度达到最大
- {
- if (snake_level == MAX_Level - 1)
- {
- display_GB2312_string(30,30,"恭喜通关!",BLACK,GGREEN);//显示等级
- Display_Dead();//显示判断蛇游戏结束界面
-
- }
- else
- {
- GUI_Box(0,20,128,120,4,BLUE,GGREEN);//背景画布,草绿
- display_GB2312_string(40,50,"等级 ",BLACK,GLASS);//显示等级
- display_GB2312_8x16_Char(40+40,50,snake_level+1+0x30,BLACK,GLASS);//显示等级数
- display_GB2312_string(25,70,"下一关 秒",BLACK,GLASS);//显示等级
- for (i=3;i>0 ;i--)
- {
- display_GB2312_8x16_Char(30+47,70,i+0x30,BLACK,GGREEN);//显示等级数
- delay_ms (1000) ; //延时ms函数
- }
- Snake_Init(); //重置游戏
- snake_level++;//难度登记增加
- display_GB2312_8x16_Char(32,0,snake_level+0x30,WHITE,BLACK);//显示等级
- }
- }
- else food_flag = 1; //执行 食物位置计算
- }
-
- //放食物
- if(food_flag == 0) //标志位为0时放置食物
- {
- Trun_On_Point (food_x, food_y,220);
- }
-
- if(food_flag==1) //食物位置计算
- {
- //srand(RTC_GetCounter());
- while(1)
- {
- food_x=rand()%11+1; //产生真随机数
- food_y=rand()%10+1;
-
- for(i=0;i<snake_longth ;i++) //判断产生的食物是否和蛇身重合
- {
- if((food_x==snake_XPos[i]) && (food_y==snake_YPos[i])) break;
- }
- if(i==snake_longth)
- {
- food_flag=0;
- break;
- }
- }
- }
- }
复制代码 蛇运动
- void Snake_Run()//蛇运动函数
- {
- unsigned char i;
- Trun_Off_Point(snake_XPos[0],snake_YPos[0]); //
-
- if(snake_turned == 1) //右
- {
- for(i = 0; i < snake_longth - 1 ; i++)
- {
- snake_XPos[i] = snake_XPos[i+1];
- snake_YPos[i] = snake_YPos[i+1];
- }
- snake_XPos[snake_longth-1] = snake_XPos[snake_longth-2] + 1; //
- snake_YPos[snake_longth-1] = snake_YPos[snake_longth-2] - 0;
- }
-
- else if(snake_turned == 2) //左
- {
- for(i = 0; i < snake_longth - 1 ; i++)
- {
- snake_XPos[i] = snake_XPos[i+1];
- snake_YPos[i] = snake_YPos[i+1];
- }
- snake_XPos[snake_longth-1] = snake_XPos[snake_longth-2] - 1;
- snake_YPos[snake_longth-1] = snake_YPos[snake_longth-2] + 0;
- }
-
- else if(snake_turned == 3)//下
- {
- for(i = 0; i < snake_longth - 1 ; i++)
- {
- snake_XPos[i] = snake_XPos[i+1];
- snake_YPos[i] = snake_YPos[i+1];
- }
- snake_XPos[snake_longth-1] = snake_XPos[snake_longth-2] + 0;
- snake_YPos[snake_longth-1] = snake_YPos[snake_longth-2] + 1;
- }
-
- else if(snake_turned == 4)//上
- {
- for(i = 0; i < snake_longth - 1 ; i++)
- {
- snake_XPos[i] = snake_XPos[i+1];
- snake_YPos[i] = snake_YPos[i+1];
- }
- snake_XPos[snake_longth-1] = snake_XPos[snake_longth-2] + 0;
- snake_YPos[snake_longth-1] = snake_YPos[snake_longth-2] - 1;
- }
- Is_Snake_Dead();//判断蛇是否撞墙
- if(snake_islive == 1) //活着
- {
- for(i=0; i<snake_longth; i++) //移动点
- {
- Trun_On_Point(snake_XPos[i],snake_YPos[i],i);
- }
- Eat_Food();
- }
-
-
- }
复制代码 实测完美运行,全部代码就下载附件吧。
源码在这里:
彩屏贪吃蛇20200214.rar
(191.76 KB, 下载次数: 7)
|
打赏
-
查看全部打赏
|