#include "menu.h" #include "display.h" #include "delay.h" #include "draw.h" #include #include #include "block.h" Menu M_STARTUP; Menu M_MAINMENU;//主菜单 Menu M_BLOCK; //俄罗斯方块 Menu M_BALL; //弹球 Menu* NOW; //当前菜单指针 Menu* LAST = NULL; //上一个状态的菜单 enum OPR opr = idle; static unsigned char local[10] = {0}; //初始化显示 void m_startup(struct _menu* this) { if(LAST != &M_STARTUP) { LAST = &M_STARTUP; drawNAME(); //绘制名字 delay(1000); drawNUMBER(); //绘制学号 } if(opr == right) { opr = idle; NOW = this->n; //转向下一菜单 clear(); } } //主菜单 void m_mainmenu(struct _menu* this) { if(LAST != &M_MAINMENU) { LAST = &M_MAINMENU; drawMAINMENU(local[0]); } if(opr == right) { local[0]++; if(local[0] > 3) local[0] = 3; opr = idle; drawMAINMENU(local[0]); } if(opr == left) { if(local[0] != 0) local[0]--; opr = idle; drawMAINMENU(local[0]); } if(opr == confirm) { switch(local[0]) { case 0: return; case 1: NOW = &M_BLOCK; //转向下一菜单 break; case 2: NOW = &M_BALL; //转向下一菜单 break; case 3: NOW = &M_STARTUP; //转向下一菜单 break; } local[0]=0; clear(); opr = idle; } } //方块游戏 void m_block(struct _menu* this) { if(LAST != &M_BLOCK) { LAST = &M_BLOCK; blockInit(); } while(1) { dropPiece(); drawBlock(); delay(200); } } void menuInit() { M_STARTUP.n = &M_MAINMENU; M_STARTUP.f = m_startup; M_MAINMENU.f = m_mainmenu; M_BLOCK.f = m_block; NOW = &M_STARTUP; }