数码之家

 找回密码
 立即注册
搜索
查看: 2254|回复: 9

[C51] 贪吃蛇小游戏-彩屏-字库-源码

[复制链接]
发表于 2020-2-14 17:25:25 | 显示全部楼层 |阅读模式

爱科技、爱创意、爱折腾、爱极致,我们都是技术控

您需要 登录 才可以下载或查看,没有账号?立即注册

x
首先,哎呀!好多年没发贴了。这几天,闲来无事。翻出来一个以前打样的彩屏带单片机的底板。搞了下。游戏图:

贪吃蛇

贪吃蛇


成品如下:(升压搞错了,里面又是挖线又是飞线)

正面

正面

反面

反面


部分源码:
画蛇
  1. void Trun_On_Point (unsigned char x,unsigned char y,unsigned char b)//画一个蛇的最小单位
  2. {
  3.         if (b == 220)                                   PIC_16BIT(4+x*10,24+y*10,10,10,gImage_apple);//1,食物
  4.         else if (b == snake_longth - 1)
  5.         {
  6.         if      ( snake_turned == 1)  PIC_16BIT(4+x*10,24+y*10,10,10,gImage_snake_head_r);//1,蛇头右
  7.     else if ( snake_turned == 2)  PIC_16BIT(4+x*10,24+y*10,10,10,gImage_snake_head_l);//2,蛇头左
  8.     else if ( snake_turned == 3)  PIC_16BIT(4+x*10,24+y*10,10,10,gImage_snake_head_d);//3,蛇头下
  9.     else if ( snake_turned == 4)  PIC_16BIT(4+x*10,24+y*10,10,10,gImage_snake_head_u);//4,蛇头上
  10.         }
  11.         else if  (snake_islive == 0)  PIC_16BIT(4+x*10,24+y*10,10,10,gImage_sanke_dead);// 蛇死
  12.         else   
  13.         {
  14.                 PIC_16BIT(4+x*10,24+y*10,10,10,gImage_sanke_body);//5,蛇身
  15.         }
  16. }
复制代码
蛇吃食物
  1. void Eat_Food()//贪吃蛇吃食物
  2. {
  3.         unsigned char length[2]; //用于保存要显示的分数和长度
  4.         unsigned char i;
  5.         /*************************判断蛇是否吃到食物**********************/       
  6.         if(snake_XPos[snake_longth -1] == food_x && snake_YPos[snake_longth -1] == food_y)
  7.         {
  8.                 snake_longth ++;
  9.                 snake_XPos[snake_longth -1] = food_x;
  10.                 snake_YPos[snake_longth -1] = food_y;
  11.                 //显示登记和得分
  12.                 length[0]=(snake_longth-3)/10+0x30 ;
  13.                 length[1]=(snake_longth-3)%10+0x30 ;
  14.                 display_GB2312_8x16_Char(40,0,length[0],WHITE,BLACK);//显示长度
  15.                 display_GB2312_8x16_Char(48,0,length[1],WHITE,BLACK);//显示长度
  16.                 display_GB2312_string(0,0,"得分",WHITE,BLACK);//显示长度

  17.                 if ( snake_longth > MAX_Longth - 1 ) //蛇长度达到最大
  18.                 {
  19.                    if (snake_level == MAX_Level - 1)
  20.                    {
  21.                        display_GB2312_string(30,30,"恭喜通关!",BLACK,GGREEN);//显示等级
  22.                            Display_Dead();//显示判断蛇游戏结束界面
  23.                           
  24.                    }
  25.                    else
  26.                    {                 
  27.                            GUI_Box(0,20,128,120,4,BLUE,GGREEN);//背景画布,草绿
  28.                            display_GB2312_string(40,50,"等级 ",BLACK,GLASS);//显示等级
  29.                            display_GB2312_8x16_Char(40+40,50,snake_level+1+0x30,BLACK,GLASS);//显示等级数
  30.                            display_GB2312_string(25,70,"下一关  秒",BLACK,GLASS);//显示等级
  31.                            for (i=3;i>0 ;i--)
  32.                            {
  33.                                    display_GB2312_8x16_Char(30+47,70,i+0x30,BLACK,GGREEN);//显示等级数
  34.                                    delay_ms (1000)  ; //延时ms函数
  35.                            }
  36.                            Snake_Init(); //重置游戏
  37.                            snake_level++;//难度登记增加
  38.                            display_GB2312_8x16_Char(32,0,snake_level+0x30,WHITE,BLACK);//显示等级
  39.                    }
  40.                 }
  41.                 else food_flag = 1; //执行  食物位置计算
  42.         }
  43.        
  44.         //放食物
  45.         if(food_flag == 0)  //标志位为0时放置食物
  46.         {
  47.                 Trun_On_Point (food_x, food_y,220);
  48.         }
  49.        
  50.         if(food_flag==1) //食物位置计算
  51.         {
  52.                 //srand(RTC_GetCounter());
  53.                 while(1)
  54.                 {  
  55.                         food_x=rand()%11+1;                              //产生真随机数
  56.                         food_y=rand()%10+1;

  57.                     for(i=0;i<snake_longth ;i++) //判断产生的食物是否和蛇身重合                       
  58.                         {
  59.                                 if((food_x==snake_XPos[i]) && (food_y==snake_YPos[i])) break;
  60.                         }
  61.                         if(i==snake_longth)   
  62.                         {
  63.                                 food_flag=0;
  64.                                 break;                                                       
  65.                         }
  66.                 }
  67.         }       
  68. }
复制代码
蛇运动
  1. void Snake_Run()//蛇运动函数  
  2. {
  3.         unsigned char  i;
  4.         Trun_Off_Point(snake_XPos[0],snake_YPos[0]); //
  5.        
  6.     if(snake_turned == 1) //右
  7.         {
  8.                 for(i = 0; i < snake_longth - 1 ; i++)
  9.                 {
  10.                         snake_XPos[i] = snake_XPos[i+1];
  11.                         snake_YPos[i] = snake_YPos[i+1];
  12.                 }
  13.                 snake_XPos[snake_longth-1] = snake_XPos[snake_longth-2] + 1; //
  14.                 snake_YPos[snake_longth-1] = snake_YPos[snake_longth-2] - 0;
  15.         }
  16.        
  17.         else if(snake_turned == 2) //左
  18.         {
  19.                 for(i = 0; i < snake_longth - 1 ; i++)
  20.                 {
  21.                         snake_XPos[i] = snake_XPos[i+1];
  22.                         snake_YPos[i] = snake_YPos[i+1];
  23.                 }
  24.                 snake_XPos[snake_longth-1] = snake_XPos[snake_longth-2] - 1;
  25.                 snake_YPos[snake_longth-1] = snake_YPos[snake_longth-2] + 0;
  26.         }
  27.        
  28.         else if(snake_turned == 3)//下
  29.         {
  30.                 for(i = 0; i < snake_longth - 1 ; i++)
  31.                 {
  32.                         snake_XPos[i] = snake_XPos[i+1];
  33.                         snake_YPos[i] = snake_YPos[i+1];
  34.                 }
  35.                 snake_XPos[snake_longth-1] = snake_XPos[snake_longth-2] + 0;
  36.                 snake_YPos[snake_longth-1] = snake_YPos[snake_longth-2] + 1;
  37.         }
  38.        
  39.         else if(snake_turned == 4)//上
  40.         {
  41.                 for(i = 0; i < snake_longth - 1 ; i++)
  42.                 {
  43.                         snake_XPos[i] = snake_XPos[i+1];
  44.                         snake_YPos[i] = snake_YPos[i+1];
  45.                 }
  46.                 snake_XPos[snake_longth-1] = snake_XPos[snake_longth-2] + 0;
  47.                 snake_YPos[snake_longth-1] = snake_YPos[snake_longth-2] - 1;
  48.         }

  49.         Is_Snake_Dead();//判断蛇是否撞墙
  50.         if(snake_islive == 1) //活着
  51.         {
  52.         for(i=0; i<snake_longth; i++)                                    //移动点
  53.     {
  54.                 Trun_On_Point(snake_XPos[i],snake_YPos[i],i);
  55.     }
  56.         Eat_Food();   
  57.         }
  58.        
  59.        
  60. }
复制代码
实测完美运行,全部代码就下载附件吧。

源码在这里: 彩屏贪吃蛇20200214.rar (191.76 KB, 下载次数: 7)

打赏

参与人数 5家元 +85 收起 理由
la45088d1 + 40 Thank you for sharing
5bin + 10 原創內容
东京的士 + 16 原創內容
人艰不拆了 + 15
a268295 + 4

查看全部打赏

 楼主| 发表于 2020-2-14 17:26:44 | 显示全部楼层
:titter:居然是  新人贴  ,意外了呀。
回复 支持 反对

使用道具 举报

发表于 2020-2-14 18:03:03 | 显示全部楼层
我说呢,怎么接口定义都写板子上了,原来是自己做的啊:titter:
回复 支持 反对

使用道具 举报

发表于 2020-2-14 19:07:03 | 显示全部楼层
大佬666,这作品对我胃口,回头多交流哈哈哈~
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-14 20:11:59 | 显示全部楼层
再搞了一下,增加了三种水果,随机出现。

1水果

1水果

2水果

2水果

3水果

3水果


这个就结案了吧。
源码: 彩屏贪吃蛇20200214-1.rar (228.33 KB, 下载次数: 1)



后面准备弄一个公路赛车。仿照FC那个试试。就是这款:

FC公路赛车

FC公路赛车


回复 支持 反对

使用道具 举报

发表于 2020-2-15 11:41:57 | 显示全部楼层
mpu再上个档次就可以跑fc模拟器了, 然后海量游戏可以玩。:lol:
回复 支持 反对

使用道具 举报

发表于 2020-2-17 12:04:47 | 显示全部楼层
jiexiao 发表于 2020-2-14 20:11
再搞了一下,增加了三种水果,随机出现。

这个赛车游戏你用 stc 够呛...

光搬数据刷屏就要累死..


回复 支持 反对

使用道具 举报

发表于 2020-2-18 09:23:11 | 显示全部楼层
这东西真的厉害
回复 支持 反对

使用道具 举报

发表于 2020-2-21 17:09:39 | 显示全部楼层
学习一下,厉害
回复 支持 反对

使用道具 举报

发表于 2021-5-18 09:34:01 | 显示全部楼层
厉害的小程序,俄罗斯方块也不错,有没有?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2024-4-27 11:57 , Processed in 0.156000 second(s), 12 queries , Redis On.

Powered by Discuz!

© 2006-2023 smzj.net

快速回复 返回顶部 返回列表