51单片机实现:贪吃蛇游戏

  • G4_635055
    了解作者
  • C/C++
    开发工具
  • 75.9KB
    文件大小
  • zip
    文件格式
  • 0
    收藏次数
  • VIP专享
    资源类型
  • 0
    下载次数
  • 2022-02-25 09:59
    上传日期
单片机课程实验(包含51程序(C语言编写)和proteus的电路设计):用C51程序控制proteus单片机,按键实现贪吃蛇小游戏的功能,即 1. 用四个按键分别控制蛇的上下左右的移动 2. 蛇初始长度为2,吃到食物时,长度增加1 3. 当蛇碰到墙壁或自己的身体时游戏结束 4. 蛇的最大长度为15,超过15后胜利重新来
贪吃蛇游戏.zip
  • C语言
  • Objects
  • MCU_experimentation_2.build_log.htm
    1.5KB
  • MCU_experimentation_2
    12.3KB
  • main.obj
    13.4KB
  • ExtDll.iex
    19B
  • STARTUP.obj
    819B
  • MCU_experimentation_2.lnp
    133B
  • Listings
  • MCU_experimentation_2.m51
    16.4KB
  • main.lst
    11.3KB
  • STARTUP.lst
    13.8KB
  • MCU_experimentation_2.uvopt
    5.8KB
  • MCU_experimentation_2.uvproj
    13.7KB
  • main.c
    6KB
  • STARTUP.A51
    6.2KB
  • MCU_experimentation_2.uvgui.lenovo
    134.8KB
  • 仿真程序
  • MCU_experimentation_2.DSN
    91.6KB
  • Last Loaded MCU_experimentation_2.DBK
    92.3KB
  • MCU_experimentation_2.PWI
    742B
内容介绍
/************************************************************** 名称:贪吃蛇游戏 日期:2018.4.14 编写:余丽莎 ***************************************************************/ #include <reg51.h> #include <stdlib.h> #include <intrins.h> #define uint unsigned int #define uchar unsigned char #define SNAKE_Max_Long 15 #define x_axis P2 #define y_axis P0 sbit up = P1^0; sbit down = P1^1; sbit left = P1^2; sbit right = P1^3; enum Diriction{UP, DOWN, LEFT, RIGHT}; //方向枚举 void createFood(); int Is_location_error(); void createFood(); void matrix(); int Set_location(); void Get_direction(); void System_init(); int error = 0; int time=0; /*************************************************************** 功能:与蛇相关的结构体定义 ****************************************************************/ static struct Food { unsigned char x; // 食物的横坐标 unsigned char y; // 食物的纵坐标 }food; // 食物结构体 struct Snake { char x[SNAKE_Max_Long]; char y[SNAKE_Max_Long]; uchar Length; // 蛇的长度 uchar Life; // 蛇的生命 uchar Diriction; // 蛇移动方向 }snake; // 蛇结构体 /*************************************************************** 功能:延时函数 ****************************************************************/ void DelayMs(uint n) { uint i=0,j=0; for(i=0;i<n;i++) for(j=0;j<123;j++); } /*************************************************************** 功能:初始化函数 ****************************************************************/ void Interrupt_init()//外部中断初始化 { EA = 0; IT0 = 1;/*设置为下跳沿触发*/ EX0 = 1; EA = 1; } void Timer_T0_init()//定时器中断初始化 { EA = 0; ET0 = 1;/*开启定时器0*/ TMOD = 0x02;/*工作在方式二,精度更高*/ TL0 = 256 - 250;/*定时250us*/ TH0 = 256 - 250; EA = 1; TR0 = 1; } void Snack_init()//蛇初始位置初始化 { uchar i; for(i=0; i<SNAKE_Max_Long; i++)/*清除内存数据*/ { snake.x[i] = -1; snake.y[i] = -1; } snake.Length = 2;/*初始长度2*/ snake.Life = 1;/*生命为1*/ snake.Diriction = RIGHT;/*初始方向向右*/ snake.x[1] = 1;/*初始位置为(x,y)=(0,3),(x,y)=(1,3)*/ snake.y[1] = 3; snake.x[0] = 0; snake.y[0] = 3; createFood();/*创造食物*/ matrix();/*点亮*/ } void System_init()/*系统初始化*/ { Interrupt_init(); Timer_T0_init(); Snack_init(); } /************************************************************ 功能:创造食物函数 ************************************************************/ void createFood() { uchar i; food.x = rand()%8; food.y = rand()%8; for(i=0; i<snake.Length; i++) { if(food.x==snake.x[i] && food.y==snake.y[i])//判断是否和自身重合,重合则重新创造食物 createFood(); } } /*********************************************************** 功能:点亮点阵 ************************************************************/ void matrix() { uchar i; //int count; x_axis = 0x00; y_axis = 0xff; for(i=0;i<snake.Length;i++)/*根据蛇的具体位置,将其点阵点亮*/ { x_axis = 1<<snake.x[i]; y_axis = ~(1<<snake.y[i]); } // x_axis = x_axis | (1<<food.x);/*点亮食物*/ // y_axis = y_axis & (~(1<<food.y)); x_axis = 0x00; y_axis = 0xff; x_axis = 1<<food.x;/*点亮食物*/ y_axis = ~(1<<food.y); } /************************************************************** 功能:获取按键信息 ***************************************************************/ void Get_direction() { if(!up) snake.Diriction = UP; if(!down) snake.Diriction = DOWN; if(!left) snake.Diriction = LEFT; if(!right) snake.Diriction = RIGHT; } /************************************************************** 功能:改变方向 ***************************************************************/ int Set_location() { uchar i; int err = 0; if(snake.Diriction == UP) { for(i=snake.Length-1; i>0; i--) { snake.x[i] = snake.x[i-1]; snake.y[i] = snake.y[i-1]; } snake.x[0] = snake.x[0]; snake.y[0] = snake.y[0] + 1; } else if(snake.Diriction == DOWN) { for(i=snake.Length-1; i>0; i--) { snake.x[i] = snake.x[i-1]; snake.y[i] = snake.y[i-1]; } snake.x[0] = snake.x[0]; snake.y[0] = snake.y[0] - 1; } else if(snake.Diriction == LEFT) { for(i=snake.Length-1; i>0; i--) { snake.x[i] = snake.x[i-1]; snake.y[i] = snake.y[i-1]; } snake.x[0] = snake.x[0] - 1; snake.y[0] = snake.y[0]; } else { for(i=snake.Length-1; i>0; i--) { snake.x[i] = snake.x[i-1]; snake.y[i] = snake.y[i-1]; } snake.x[0] = snake.x[0] + 1; snake.y[0] = snake.y[0]; } if(snake.x[0]==food.x && snake.y[0]==food.y) { snake.Length++; createFood(); } err = Is_location_error(); return err; } /******************************************************** 功能:是否dead *********************************************************/ int Is_location_error() { uchar i; for(i=1; i<snake.Length; i++) { if((snake.x[0]==snake.x[i]) && (snake.y[0]==snake.y[i])) return 1; } if((snake.x[0]>7)|| (snake.x[0]<0) || (snake.y[0]>7) || (snake.y[0]<0)) return 1; return 0; } /******************************************************** 功能:中断函数 *********************************************************/ void Inter0() interrupt 0 { Get_direction(); error = Set_location(); } void Timer0() interrupt 1 { time++; if(time == 400) { error = Set_location(); time = 0; } } /******************************************************** 功能:主函数 *********************************************************/ void main() { System_init(); while(1) { if(error) { Snack_init(); } if(snake.Length>=SNAKE_Max_Long) { Snack_init(); } matrix(); } }
评论
    相关推荐
    • 单片机课件
      能够帮助同学们快速的了解单片机并对于单片机的一些设计程序有一定的认知
    • 单片机课件
      单片机的课件及例题, 单片机的课件及例题, 单片机的课件及例题, 单片机的课 件及例题,
    • 爱上单片机
      一本电子爱好者都能看懂,会边看边笑的单片机入门书籍,作者杜洋曾在《无线电》上发表过“趣味单片机制作专题”、“单片机编程魔法学校”等深受读者喜爱、让无数单片机入门者热血沸腾的系列文章。本书通过生动的语言...
    • 单片机资料
      内含30个单片机应用开发的资料,包括配套单片机入门PPT。
    • 单片机课件
      单片机课的课件,对单片机的基础进行了全面的概述,也有非常精细的指导。
    • 单片机工具
      单片机工具 供单片机学习使用 免费资源 日后还会有更多资源 请联系我
    • 单片机课件
      单片机课件 ppt文件格式 介绍了单片机的结构、程序设计、定时器、中断等
    • 单片机教程
      这是一个单片机的教程,可以用于初次学习单片机的人学习。
    • 单片机入门
      很好的单片机学习资源,入门比较好适合对单片机的学习有兴趣的人,而且是名校的精彩讲解,
    • 爱上单片机
      《爱上单片机》本书是一本电子爱好者都能看懂,会边看边笑的单片机入门书籍,作者杜洋曾在《无线电》上发表过“趣味单片机制作专题”、“单片机编程魔法学校”等深受读者喜爱、让无数单片机入门者热血沸腾的系列文章...