This repository has been archived on 2024-01-06. You can view files and clone it, but cannot push or open issues or pull requests.
justhomework/MCU/MCU_REAL _FINAL/menu.c

177 lines
2.9 KiB
C
Raw Normal View History

2022-05-19 13:07:52 +00:00
#include "menu.h"
#include "display.h"
#include "delay.h"
2022-05-25 07:12:42 +00:00
#include "draw.h"
#include <stdio.h>
2022-06-05 13:03:15 +00:00
#include <stdlib.h>
#include "block.h"
//<2F><><EFBFBD>ڵ<EFBFBD><DAB5>Ե<EFBFBD>Ԥ<EFBFBD><D4A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//#define DEBUG_MODE
#ifdef DEBUG_MODE
#define M_DEBUG M_BLOCK
#endif
Menu M_MAINMENU;//<2F><><EFBFBD>˵<EFBFBD>
Menu M_BLOCK; //<2F><><EFBFBD><EFBFBD>˹<EFBFBD><CBB9><EFBFBD><EFBFBD>
Menu M_BEST; //<2F><><EFBFBD><EFBFBD>
Menu M_ABOUT; //<2F><><EFBFBD><EFBFBD>
2022-05-19 13:07:52 +00:00
Menu* NOW; //<2F><>ǰ<EFBFBD>˵<EFBFBD>ָ<EFBFBD><D6B8>
2022-06-05 13:03:15 +00:00
Menu* LAST = NULL; //<2F><>һ<EFBFBD><D2BB>״̬<D7B4>IJ˵<C4B2>
2022-05-25 07:12:42 +00:00
enum OPR opr = idle;
2022-06-05 13:03:15 +00:00
static unsigned char local[10] = {0};
unsigned int score = 0;
extern enum GS blockGameStatus;
//<2F><><EFBFBD>˵<EFBFBD>
2022-06-05 13:03:15 +00:00
void m_mainmenu(struct _menu* this)
2022-05-19 13:07:52 +00:00
{
if(LAST != &M_MAINMENU)
{
LAST = &M_MAINMENU;
2022-06-05 13:03:15 +00:00
drawMAINMENU(local[0]);
}
2022-06-05 13:03:15 +00:00
if(opr == right)
{
local[0]++;
if(local[0] > 3)
local[0] = 3;
opr = idle;
drawMAINMENU(local[0]);
2022-06-05 13:03:15 +00:00
}
if(opr == left)
{
2022-06-05 13:03:15 +00:00
if(local[0] != 0)
local[0]--;
opr = idle;
drawMAINMENU(local[0]);
2022-06-05 13:03:15 +00:00
}
if(opr == confirm)
2022-06-05 13:03:15 +00:00
{
switch(local[0])
{
case 0:
return;
case 1:
NOW = &M_BLOCK; //ת<><D7AA><EFBFBD><EFBFBD>һ<EFBFBD>˵<EFBFBD>
break;
case 2:
NOW = &M_BEST; //ת<><D7AA><EFBFBD><EFBFBD>һ<EFBFBD>˵<EFBFBD>
break;
case 3:
NOW = &M_ABOUT; //ת<><D7AA><EFBFBD><EFBFBD>һ<EFBFBD>˵<EFBFBD>
break;
}
2022-06-06 09:01:36 +00:00
local[0] = 0;
clear();
opr = idle;
}
2022-05-19 13:07:52 +00:00
}
2022-05-19 13:07:52 +00:00
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϸ
void m_block(struct _menu* this)
{
2022-06-06 09:01:36 +00:00
if(LAST != &M_BLOCK)
{
LAST = &M_BLOCK;
2022-06-06 09:01:36 +00:00
drawVerticalDottedLine(64);
drawBLOCKSCORE();
blockInit();
}
2022-06-06 09:01:36 +00:00
//<2F><><EFBFBD><EFBFBD>
if(opr == confirm)
{
2022-06-06 09:01:36 +00:00
opr = idle;
blockDestroy();
NOW=&M_MAINMENU;
clear();
2022-06-06 09:01:36 +00:00
return;
}
if(opr == left)
2022-06-06 06:27:04 +00:00
{
2022-06-06 09:01:36 +00:00
opr = idle;
moveLeftPiece();
drawBlock();
return;
2022-06-06 09:01:36 +00:00
}
if(opr == right)
2022-06-06 06:27:04 +00:00
{
2022-06-06 09:01:36 +00:00
opr = idle;
moveRightPiece();
drawBlock();
return;
2022-06-06 09:01:36 +00:00
}
switch(blockGameStatus)
{
case good:
drawGOOD(70, 4);
blockGameStatus=start;
break;
case over:
drawGAME(70, 4);
drawOVER(70, 6);
break;
default:
drawVOID8(70, 4, 40);
drawVOID8(70, 6, 32);
}
drawSUPNUM(70, 2, score/10000); //<2F><><EFBFBD>Ʒ<EFBFBD><C6B7><EFBFBD>
2022-06-06 14:45:06 +00:00
drawSUPNUM(79, 2, score/1000);
drawSUPNUM(88, 2, score/100);
drawSUPNUM(97, 2, score/10);
drawSUPNUM(106, 2, score%10);
blockGameOver(); //<2F><><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>Ϸ<EFBFBD><CFB7><EFBFBD><EFBFBD>
genPiece(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¿<EFBFBD>
dropPiece(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
judgeBlock(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>
drawBlock(); //<2F><><EFBFBD>ƽ<EFBFBD><C6BD><EFBFBD>
delayms(400);
2022-06-06 09:01:36 +00:00
}
2022-06-06 09:01:36 +00:00
//<2F><><EFBFBD><EFBFBD>ҳ
void m_about(struct _menu* this)
{
if(LAST != &M_ABOUT)
{
LAST = &M_ABOUT;
2022-06-06 14:45:06 +00:00
delayms(2000);
drawNAME(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
delayms(2000);
drawNUMBER(); //<2F><><EFBFBD><EFBFBD>ѧ<EFBFBD><D1A7>
}
if(opr == confirm)
{
opr = idle;
NOW = &M_MAINMENU; //ת<><D7AA><EFBFBD><EFBFBD>һ<EFBFBD>˵<EFBFBD>
clear();
}
}
2022-05-19 13:07:52 +00:00
void menuInit()
{
M_MAINMENU.f = m_mainmenu;
2022-06-06 09:01:36 +00:00
M_BLOCK.f = m_block;
M_ABOUT.f = m_about;
2022-06-06 09:01:36 +00:00
#ifdef DEBUG_MODE
NOW = &M_DEBUG;
#else
NOW = &M_MAINMENU;
2022-06-06 09:01:36 +00:00
#endif
2022-05-19 13:07:52 +00:00
}