
PCB图:
#include #include #include"ours.h" #define uchar unsigned char #define SNAKE 20 //最长蛇身 #define SPEED 50 //运动速度控制,值越大,则扫描整个蛇 身的时间越长,即表现为移动速度慢 #define MQ 5 进入下一关的加速,pace=pace-MQ sbit P3_0=P3^0; //蜂鸣器位 外部中断0 外部中断1 sbit P3_7=P3^7; 指示灯位 sbit P0_7=P0^7;sbit P0_6=P0^6;sbit P0_5=P0^5;sbit P0_4=P0^4; //暂停 增关卡,加速 减关卡,退出 加速 //do sbit P0_2=P0^2;sbit P0_1=P0^1;sbit P0_3=P0^3;sbit P0_0=P0^0; /左 下 右 上 / 退出 sbit P2_7=P2^7;sbit P2_6=P2^6;sbit P2_5=P2^5;sbit P2_4=P2^4; sbit P2_3=P2^3;sbit P2_2=P2^2;sbit P2_1=P2^1;sbit P2_0=P2^0; uchar x[SNAKE+1]; 蛇身的坐标 行 u蛇身的坐标 列 uchar n,i,pace,xz; 当前蛇长,通用变量,当前速度,选择游戏标志 char bdata guanqia; 定义关卡,可谓寻址,便于控制指示灯 sbit guanqia_0=guanqia^0;sbit guanqia_1=guanqia^1;sbit guanqia_2=guanqia^2; c移动方向,同直角坐标系,addx为横向,addy为纵向 bit again,out; 再次产生果实变量,停止播放音乐变量 bit pause=0; 暂停变量,1为暂停 uchar tone_H,tone_L;//定时器初值,用来控制音调 uchar ym; 选择音乐 uchar wait; 用于判断是否已经开始游戏 void display(uchar ); 声明显示函数 void display_p(uchar); 暂停时调用该函数显示 bit knock(); 声明撞击函数 void key_press(); 声明按键函数 void play1(unsigned int); void play(uchar *,uchar *); /************************************************************** 判断是否碰撞,是则返回1,否则返回0 **************************************************************/ bit knock() { 撞墙 撞自己 } /************************************************************** 键位处理 **************************************************************/ void key_press() { 上 下 左 右 左上 右上 左下 右下 暂停 按住暂停键不放且没有退出游戏请求 } /********************************************************* 显示函数,按点从头到尾扫描,周期为SNAKE,扫描k个周期运动一格 **********************************************************/ void display(uchar k) 显示k次 { 扫描整个虚拟蛇身 灭灯 按点依次显示 显示延时1ms 键位处理 判断是否退出游戏 } /*********暂停时调用该函数显示,以防闪烁*******************/ void display_p(uchar k) 显示k次 { 扫描整个虚拟蛇身 灭灯 按点依次显示 显示延时1ms } /*****外部中断1,用于切换游戏,xz=0为贪吃蛇,xz=1为电子琴******/ void my_int1(void) interrupt 2 { 去抖动 游戏开始前,用于选择游戏 共有两个游戏,所以xz只能为0或1 游戏已开始(只在电子琴里有效) 停止播放音乐 直到松开按键,才跳出中断,以防xz连续变化 } /************************************************************** ******* 主程序 ***************************************************************/ void main(void) { 开总中断 开外部中断0 开外部中断1 /*********************************************************************** ***************** 贪吃蛇 ************************************************************************/ T 初始化游戏**********************/ 初始化虚拟蛇身 初始化虚拟蛇身 n=3; //初始蛇身长为n-1 初始蛇头位置 初始蛇尾位置 初始位移偏移 给运动速度赋初值 产生果实*******************************/ 产生随机果实 判断是否与蛇身重叠 若重叠则再次产生 等待开始游戏,贪吃蛇开始前可选关****************/ 第一关 显示关卡 等待选择游戏 等待选择游戏 如果xz=1,则进入电子琴 显示贪吃蛇初始位置 如果按上或右键,则开始游 选关******************************************/ 增关卡 去抖动 最大到7关 将其值用发光二极管以二进制的形式显示出来 加速 直到松开按键才跳出,以防连续增加关卡 减关卡 贪吃蛇游戏正在运行**************************/ 游戏已开始,wait置0 判断是否碰撞 显示部分************************/ 判断是否速度运动 当P0^4或P0^6被按下时加速运动 判断是否退出 判断是否吃东西,及进入下一关**************/ 如果吃到 蛇身加1 如果进入下一关 蛇身长从2开始 运动加速,关卡加1 将关卡的值用三个指示灯显示出来 初始化虚拟蛇身 初始化虚拟蛇身 产生随机果实 判断是否与蛇身重叠 若重叠则再次产生 判断蛇身是否移动**********************/ 如果不暂停 蛇身从尾到头移动 蛇头移动1格 /******************************************************************* *************** 电子琴 ********************************************************************/ DZQ:while(1) 启用定时器0中断 定时器0工作在方式1 选择音乐及退出播放位无效 等待开始游戏********************************/ 等待选择游戏 点亮点阵 关闭指示灯 个键随便按一个则开始电子琴 如果xz=0,则进入贪吃蛇游戏 电子琴正在运行*********************/ 游戏已开始,wait置0 开指示灯 如果按下P0^0则退出电子琴 如果有音乐请求 选择音乐,最多7首 } /****自己弹奏时调用该函数***********/ void play1(x) { } /****播放音乐时调用该函数*******************/ void play(uchar *song,uchar *beat) { } /****定时器0中断用于产生声******/ void tone_timer(void) interrupt 1 { } /****外部中断0,用于控制播放那个曲子*****/ void my_int0(void) interrupt 0 { 如果有选择 则将其值赋给ym } ours库函数 #define uchar unsigned char /******判断具体的亮点****************/ unsigned char mux(unsigned char temp) { } /******************************************* ************** 延时函数 ********************************************/ void delay1ms(int x) //延时1ms { } void delay10ms(int x) //延时10ms { } /**********节拍延时函数**************/ void beat_125ms(uchar x) //延时125ms { } /******************************************************************* ****************乐谱************************************************ *********************************************************************/ unsigned int code tone[]={1012, 956, 852, 759, 716, 638, 568, 506, 478, 中音 1低音 478, 426, 379, 358, 319, 284, 253, 233 }; 高音 //dao ruai mi fa sao la xi //song为乐谱,当出现50时表示结束;beat为节奏(以0.125秒为单位), /*************画心*************/ uchar code song1[]={ 3,5, 6,6,21,7,6,5, 2,3,3,3,5, 6,6,7,21,5,21,22, 22,23,23,25,23, 23,22,21,22,21,7, 21,22,7,5,6,3,5, 6,6,23,22,21,7, 5,6,6,3,4,5, 6,6,21,7,6,5,6, 3,3,3,3,5, 6,6,7,21,5,21,22, 22,23,23,25,23, 23,22,21,22,21,7, 21,22,7,5,6,3,5, 6,6,23,22,21,7, 5,6,6,25,23, 23,22,21,22,22,25, 23,23,23,25,23, 23,22,21,22,25,26, 22,23,23,25,23, 23,22,21,22,21,7, 21,22,7,5,6,3,5, 6,6,23,22,21,7, 5,6,6,50}; uchar code beat1[]={ 4,4, 8,4,4,4,4,8, 6,2,16,4,4, 8,4,4,4,4,4,4, 4,4,16,4,4, 8,4,4,8,4,4, 4,4,4,4,8,4,4, 8,4,4,4,4,8, 6,2,6,4,4,4, 8,4,4,4,4,4,4, 4,4,8,4,4, 8,4,4,4,4,4,4, 4,4,16,4,4, 8,4,4,8,4,4, 4,4,4,4,8,4,4, 8,4,4,4,4,8, 6,2,18,4,4, 8,4,4,8,4,4, 4,4,8,4,4, 8,4,4,4,4,8, 6,2,16,4,4, 8,4,4,8,4,4, 4,4,4,4,8,4,4, 8,4,4,4,4,8, 6,2,24,4}; /***********梁祝*********************/ uchar code song2[]={ 7,6,7, 5,6,4,3, 2,3,4,3,5,3, 2,3,5,2,3,4,3,2, 1,5, 17,2,16,1, 15,16,1, 15, 13,15,16, 1,2,16,1,15, 5,21,6,5,3,5, 2, 2,3,17,16, 15,16,1,2, 13,1,16,15,16,1, 15, 3,5,17,2, 16,1,15, 13,15,13,15,16,17,2, 16,15,16, 1,2,5,3, 2,3,2,1,16,15, 13,1, 16,1,16,15,13,15,16,1, 15,3,5, 2,3,2,1,17,16, 15,50}; uchar code beat2[]={ 4,4,4, 6,2,4,4, 2,2,2,2,6,2, 2,2,2,2,2,2,2,2, 12,4, 4,4,4,4, 12,2,2, 16, 8,6,2, 6,2,2,2,4, 6,2,2,2,2,2, 16, 6,2,4,4, 6,2,4,4, 4,4,2,2,2,2, 16, 6,2,4,4, 2,2,8, 2,4,2,2,2,2,2, 12,2,2, 6,2,4,4, 4,2,2,4,2,2, 8,8, 3,1,2,2,2,2,2,2, 12,2,2, 2,2,2,2,4,4, 16,2}; /***********兄弟无数*******************/ uchar code song3[]={ 6,6,5,6,0, 3,7,21,7,6,0, 7,6,7,5,3,0, 2,2,1,2,3,0, 6,5,6,5,3,7,6, 5,6,4,3,2,1,2, 6,5,6,5,3,7,6, 5,6,4,3,2,1,2, 3,21,21,7,22, 7,6,6,3,5, 3,4,3,2,1,2,3,5, 2, 22,22,6, 21,7,0, 7,7,6,6,2,5,6, 6,3, 22,22,6, 21,7,0, 7,7,6,6,2,0,22, 7,6,6, 7,7,7,6,3,6,4,3, 2, 3,22,7,6,5,6,7,7, 22,0, 22,23,6,6, 50}; uchar code beat3[]={ 8,8,4,4,8, 8,4,4,4,4,8, 8,4,4,4,4,8, 8,4,4,4,4,8, 6,2,4,4,4,8,4, 6,2,4,4,4,4,8, 6,2,4,4,4,8,4, 6,2,4,4,4,4,8, 4,8,4,8,8, 4,4,4,4,16, 6,2,4,4,4,4,4,4, 24, 24,4,4, 16,8,8, 8,4,4,4,4,4,4, 8,24, 24,4,4, 16,8,8, 8,4,4,4,4,4,4, 4,4,24, 6,2,4,4,4,4,4,4, 24, 6,2,4,4,4,4,4,4, 24,8, 2,2,4,24, 4}; /*************伤不起******************/ uchar code song4[]={ 6,6,5,3,3, 6,6,5,3,3, 6,21,3,5,5, 3,2,3,3, 6,6,5,3,3, 6,6,5,3,3, 5,3,5,7,7, 7,5,6,6, 5,6,6,6,5,3, 5,6,6,6, 5,6,6,6,21,6,6, 5,6,5,3,3, 6,6,2,3,2,2,1, 16,2,3,2, 5,5,5,5,5,5,6, 7,6,7, 5,6,6,6,5,3, 5,6,6,6, 5,6,6,6,21,6, 5,6,5,3,3, 6,6,2,3,2,2,1, 16,2,3,2, 5,5,5,5,5,6, 7,7,6,7, 21,7,6,6,5,3, 5,6,7,6,6, 21,6,21,6,21,6,21,22, 3,3,3,2,3, 22,22,22,21,22,6,21, 22,23,22,21,22,7, 7,7,7,7,22,22,22,23, 7,3,5,6,6, 21,7,6,6,5,3, 5,6,7,6,6, 21,6,21,6,21,6,21,22, 3,3,3,2,3, 22,22,22,21,22,6,21, 22,23,22,21,22,7, 7,7,7,7,22,22,22,23, 7,3,5,6,6, 50}; uchar code beat4[]={ 4,2,4,2,4, 4,2,4,2,4, 4,2,4,2,4, 4,2,2,8, 4,2,4,2,4, 4,2,4,2,4, 4,2,4,2,4, 4,2,2,8, 2,2,4,4,2,2, 2,2,4,6, 2,2,2,2,4,2,2, 2,2,2,2,6, 2,2,2,2,4,2,2, 4,2,2,6, 2,2,2,2,4,2,2, 4,4,6, 2,2,4,4,2,2, 2,2,4,6, 2,2,2,2,4,4, 2,2,2,2,6, 2,2,2,2,4,2,2, 4,2,2,6, 2,2,2,2,4,4, 2,2,4,6, 4,2,2,4,2,2, 4,2,2,4,2, 2,2,2,2,2,2,2,2, 2,2,2,2,6, 2,2,2,2,4,2,2, 2,2,2,2,6,2, 2,2,2,2,2,2,2,2, 2,2,2,2,6, 4,2,2,4,2,2, 4,2,2,6,2, 2,2,2,2,2,2,2,2, 2,2,2,2,6, 2,2,2,2,4,2,2, 2,2,2,2,6,2, 2,2,2,2,2,2,2,2, 2,2,2,2,6, 4}; /**************兰若词******************/ uchar code song5[]={ 16,17,1, 3,17,1, 16,16,16,17,1, 4,17,1, 16,16,17,1,3, 2,2,2,1, 2,2,3,4,2, 3,3, 16,17,1, 3,17,1, 16,16,16,17,1, 4,1,1, 16,16,17,1,3, 2,2,2,1, 2,1,2,3,15, 16,16, 3,5,6,7, 21,7,6,5,3, 6,5,3,2,1, 2,3,5,2, 3,3,5, 6,5,6,5, 6,7,21,7,6,5, 6,6, 6,3,5,6,7, 21,7,6,5,3, 6,5,3,2,1, 2,3,5,2, 3,2,1, 16,3,2,1, 16,3,2,3,5, 6,6, 50}; uchar code beat5[]={ 3,3,3, 9,6,3, 6,3,3,3,3, 9,6,3, 6,3,3,3,3, 9,3,3,3, 6,3,3,3,3, 9,9, 3,3,3, 9,6,3, 6,3,3,3,3, 9,6,3, 6,3,3,3,3, 9,3,3,3, 6,3,3,3,3, 9,9, 2,2,2,2, 3,3,3,6,3, 3,3,3,6,3, 6,3,6,3, 9,3,3, 6,3,6,3, 3,3,3,3,3,3, 9,9, 9,2,2,2,2, 3,3,3,6,3, 3,3,3,6,3, 6,3,6,3, 9,3,3, 6,3,6,3, 6,3,3,3,3, 9,9, 4}; /***************二泉映月*******************/ uchar code song6[]={ 6,5,6,4,3, 2,2,3,1,1,2, 3,5,6,5,6,5,6,21, 5,3,5,5,3,2,6,5,6,1,2, 3,5,2,3,5,21,6,2,3,5, 1,21,6,21,23,23,22, 21,6,21,22,23,23,22,21,21,6,21,22,23, 5,5,3,5,6,5,6,21, 5,3,5,5,21,6,6,5,6,5,5, 3,5,3,4,3,5,2,3,2,1,16,1,16, 1,1,2,3,5,1,2,5,3,6, 5, 21,6,21,23,23,22, 21,6,21,22,23,23,22,21,21,6,21,22,23, 5,3,5,3,5, 6,21,21,3,5,3,5,6,5,21,6, 5,3,5,5,21,6,6,5,6,5,5, 3,5,3,4,3,5,2,3,2,1,16,1,16, 1,16,1,2,3,5,1,2,5,3,5,6, 5,3,5,5,6,5,5,3,5, 6, 6,6,6,5,6,21, 5,3,5,5,21,6,6,5,6,5,5, 3,15,3,4,3,5,2,3,2,1,16,1,16, 1,16,1,2,3,5,1,2,5,3,5,6, 5, 50}; uchar code beat6[]={ 8,2,2,2,2, 16,6,2,4,2,2, 12,4,4,4,2,2,2,2, 6,2,4,2,2,4,4,2,2,2,2, 12,4,3,1,2,2,2,2,2,2, 16,4,2,2,4,2,2, 12,4,3,1,2,2,4,6,4,2,2,2,2, 16,4,2,2,2,2,2,2, 6,2,2,4,2,4,4,2,2,2,2, 6,2,3,1,2,2,3,1,2,2,2,2,4, 8,6,2,2,2,4,2,2,2,2, 16, 4,2,2,4,2,2, 6,2,3,1,2,2,4,2,2,2,2,2,2, 16,2,2,2,2, 8,4,4,3,1,2,2,2,2,2,2, 6,2,2,4,2,4,4,2,2,2,2, 6,2,3,1,2,2,2,2,2,2,2,2,4, 6,2,6,2,2,2,4,3,1,2,2,2, 12,4,4,2,2,2,2,2,2, 16, 4,4,2,2,2,2, 6,2,2,4,2,4,4,2,2,2,2, 6,2,3,1,2,2,3,1,2,2,2,2,4, 6,2,6,2,2,2,4,3,1,2,1,1, 16, 4}; /***********土耳其进行曲***********/ uchar code song7[]={ 7,6,5,6, 21,0,22,21,7,21, 23,0,24,23,22,23, 27,26,25,26,27,26,25,26,28,26,28, 27,26,25,26, 27,26,25,26, 27,26,25,24, 23, 21,22, 23,21,22, 23,22,21,7, 6,7,21,22, 7,5,21,22,23,21,22, 23,22,21,7, 6,22,7,5, 21, 23,24,23,22, 21,22,21,7,6,21,7,6, 5,6,7,5,3,4,5,3,6,5,7,6,21,7,21,22, 23,22,23,22,23,24,23,22, 21,22,21,7,6,21,7,6, 5,6,7,6,3,4,5,3, 4,5,6,4,2,3,4,2, 3, 5,4,3,2, 1,2,3,4,5,6,7,21,21,7,6,5,4,3,2, 1,2,3,4,5,6,7,21, 21,22,5,4,3,2, 1,2,3,4,5,6,7,21, 21,7,6,5,4,3,2, 3,5,1,3,2,4,7,2, 1,23,24,23,22, 21,22,21,7,6,21,7,6,5,6,7,5,3,4,5,3, 6,5,6,7,21,7,21,22,23,22,23,22,23,22,23,21, 24,23,24,23,24,23,24,23, 24,23,22,21,7,21,2,7, 21,22,23,6,5,6,7,5, 6, 50}; uchar code beat7[]={ 1,1,1,1, 2,2,1,1,1,1, 2,2,1,1,1,1, 1,1,1,1,1,1,1,1,4,2,2, 2,2,2,2, 2,2,2,2, 2,2,2,2, 4, 2,2, 4,2,2, 2,2,2,2, 2,2,2,2, 2,2,2,2,4,2,2, 2,2,2,2, 2,2,2,2, 4, 1,1,1,1, 1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1, 4, 1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1, 2,2,1,1,1,1, 1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1, 4,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1, 4};
