📄 main.c
字号:
initfinished = TRUE;
while(1)
{
pMsg = WaitMessage(0);
switch (pMsg->Message)
{
case OSM_KEY:
onKey(pMsg->WParam, pMsg->LParam);
}
DeleteMessage(pMsg);
OSTimeDly(200);
}
DestoryDC(pdc);
}
/////////draw_rect///////////////////
void draw_rect(u8 headx, u8 heady, u8 endx, u8 endy)
{
if (endy == heady)
{
if (headx > endx)
FillRect(pdc, 20+5*(endx-1), 20+5*(endy-1), 20+5*headx, 20+5*endy,GRAPH_MODE_NORMAL, RGB(0, 0, 0));
else
FillRect(pdc, 20+5*(headx-1), 20+5*(endy-1), 20+5*endx, 20+5*endy,GRAPH_MODE_NORMAL, RGB(0, 0, 0));
}
else if (endx == headx)
{
if (heady > endy)
FillRect(pdc, 20 + 5 *(endx - 1), 20 + 5 *(endy - 1), 20 + 5 * headx, 20 + 5 * heady,GRAPH_MODE_NORMAL, RGB(0, 0, 0));
else
FillRect(pdc, 20 + 5 *(endx - 1), 20 + 5 *(heady - 1), 20 + 5 * headx, 20 + 5 * endy,GRAPH_MODE_NORMAL, RGB(0, 0, 0));
}
}
////////check_status///////////////////////
void Check()
{
int i = 0;
//if( (HeadPos[0]>xmax)||(HeadPos[0] < xmin )||(HeadPos[1] > ymax )||(HeadPos[1] < ymin ) )
//{
//gameover = TRUE;
//return;
//}
__asm
{
cmp HeadPos[0], xmax
bgt gameend
cmp HeadPos[0], xmin
blt gameend
cmp HeadPos[1], ymax
bgt gameend
cmp HeadPos[1], ymin
bge gamecontinue
gameend:
mov gameover,#1
gamecontinue:
}
if (gameover == TRUE) return;
if (IsInRect(pbarRect1_5, HeadPos[0], HeadPos[1]) )
{
gameover = TRUE;
return;
}
if (IsInRect(pbarRect2_5, HeadPos[0], HeadPos[1]) )
{
gameover = TRUE;
return;
}
if (HeadPos[0] <= 20)
{
if (HeadPos[1] <=20)
{
for (i=0;i<3;i++)
if (boolbean00[i] == TRUE)
{
if ( (bean00[i][0] == HeadPos[0]) && (bean00[i][1] == HeadPos[1]) )
{
catch = TRUE;
boolbean00[i] = FALSE;
addcount = 2;
return;
}
}
}
else
{
if (boolbean01[0] == TRUE)
{
if ( (bean01[0][0] == HeadPos[0]) && (bean01[0][1] == HeadPos[1]) )
{
catch = TRUE;
boolbean01[0] = FALSE;
addcount = 2;
return;
}
}
}
}
else
{
if (HeadPos[1] <=20)
{
if (boolbean10[0] == TRUE)
{
if ( (bean10[0][0] == HeadPos[0]) && (bean10[0][1] == HeadPos[1]) )
{
catch = TRUE;
boolbean10[0] = FALSE;
addcount = 2;
return;
}
}
}
else
{
if (boolbean11[0] == TRUE)
{
if ( (bean11[0][0] == HeadPos[0]) && (bean11[0][1] == HeadPos[1]) )
{
catch = TRUE;
boolbean11[0] = FALSE;
addcount = 2;
return;
}
}
}
}
gamepass = TRUE;
for (i=0;i<3;i++)
if (boolbean00[i] == TRUE)
gamepass = FALSE;
if ( (boolbean01[0] == TRUE)|| (boolbean10[0] == TRUE) ||(boolbean11[0] == TRUE) )
gamepass = FALSE;
}
///////// Transmit_Task /////////////
void Transmit_Task(void *Id)
{
int i = 0,j=0;
u8 oldendpos[2];
char Game_Over_Caption_8[]="Game Over";
char Game_Paused_Caption_8[]="Game Paused";
char Game_Pass_Caption_8[]="Game Passed";
U16 Game_Over_Caption_16[20];
U16 Game_Paused_Caption_16[20];
U16 Game_Pass_Caption_16[20];
strChar2Unicode(Game_Over_Caption_16, Game_Over_Caption_8);
strChar2Unicode(Game_Paused_Caption_16, Game_Paused_Caption_8);
strChar2Unicode(Game_Pass_Caption_16, Game_Pass_Caption_8);
if (initfinished == FALSE)
OSTimeDly(2000);
while(1)
{
if (pause == TRUE)
{
TextOut(pdc, 100,115, Game_Paused_Caption_16, TRUE, FONTSIZE_SMALL);
OSTimeDly(200);
continue;
}
if (gameover == TRUE)
{
TextOut(pdc, 100,115, Game_Over_Caption_16, TRUE, FONTSIZE_SMALL);
OSTimeDly(200);
continue;
}
if (gamepass == TRUE)
{
TextOut(pdc,100,115,Game_Pass_Caption_16,TRUE,FONTSIZE_SMALL);
OSTimeDly(200);
continue;
}
oldendpos[0] = EndPos[0];
oldendpos[1] = EndPos[1];
//判断snake头部的变化
switch (HeadDirect)
{
case 1:
HeadPos[0] = HeadPos[0] + 1;
break;
case 2:
HeadPos[0] = HeadPos[0] - 1;
break;
case 3:
HeadPos[1] = HeadPos[1] - 1;
break;
case 4:
HeadPos[1] = HeadPos[1] + 1;
break;
}
//判断snake尾部的变化
if (ChangePointCount > 0)
{
if ( ( abs(ChangePointPos[ChangePointCount-1][0]-EndPos[0])+abs(ChangePointPos[ChangePointCount-1][1]-EndPos[1])) == 0)
{
DelChangePoint();
}
}
switch(EndDirect)
{
case 1:
EndPos[0] = EndPos[0] + 1;
break;
case 2:
EndPos[0] = EndPos[0] - 1;
break;
case 3:
EndPos[1] = EndPos[1] - 1;
break;
case 4:
EndPos[1] = EndPos[1] + 1;
break;
}
Check();
if (gameover == TRUE)
{
TextOut(pdc, 100,115, Game_Over_Caption_16, TRUE, FONTSIZE_SMALL);
OSTimeDly(200);
continue;
}
if (gamepass == TRUE)
{
TextOut(pdc,100,115,Game_Pass_Caption_16,TRUE,FONTSIZE_SMALL);
OSTimeDly(200);
continue;
}
if (catch) {BEEP_ENABLE();
for(j=0;j>50000;j++);
Uart_Printf("Catch a bean!!!\n");
BEEP_DISABLE();
}
if (addcount > 0)
{
EndPos[0] = oldendpos[0];
EndPos[1] = oldendpos[1];
addcount--;
catch = FALSE;
}
//绘制豆子
FillRect2(pdc, psnakeRect, GRAPH_MODE_NORMAL, RGB(100, 255, 0));//清除主窗口的显示
for(i=0;i<3;i++)
{
if (boolbean00[i] == TRUE)
{
Circle(pdc,20+5*bean00[i][0]-2, 20+5*bean00[i][1]-2, 2);
}
}
if (boolbean01[0] == TRUE)
{
Circle(pdc,20+5*bean01[0][0]-2, 20+5*bean01[0][1]-2, 2);
}
if (boolbean10[0] == TRUE)
{
Circle(pdc,20+5*bean10[0][0]-2, 20+5*bean10[0][1]-2, 2);
}
if (boolbean11[0] == TRUE)
{
Circle(pdc,20+5*bean11[0][0]-2, 20+5*bean11[0][1]-2, 2);
}
//绘制snake
//ClearScreen();
//Draw3DRect2(pdc, psnakeRect, RGB(0, 0, 0), RGB(0, 0, 0));
FillRect2(pdc, pbarRect1, GRAPH_MODE_NORMAL, RGB(0, 0, 255));
FillRect2(pdc, pbarRect2, GRAPH_MODE_NORMAL, RGB(0, 0, 255));
if (ChangePointCount==0)
{
draw_rect(HeadPos[0],HeadPos[1], EndPos[0], EndPos[1]);
}
else
{
draw_rect(HeadPos[0],HeadPos[1], ChangePointPos[0][0], ChangePointPos[0][1]);
for(i=1; i<ChangePointCount; i++)
{
draw_rect(ChangePointPos[i-1][0], ChangePointPos[i-1][1], ChangePointPos[i][0], ChangePointPos[i][1]);
}
draw_rect(ChangePointPos[i-1][0], ChangePointPos[i-1][1], EndPos[0],EndPos[1]);
}
OSTimeDly(200);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -