//widget.h
#ifndef WIDGETS
#define WIDGETS
#include "common.h"
void InitWidget(int argc, char **argv);
//前进
void Avance(const char *str);
//后退
void Recule(const char *str);
//左转
void Gauche(const char *str);
//右转
void Droite(const char *str);
//清除画面
void Nettoie();
//移动机器人
void Allera(const char *str);
//提笔
void LeveCrayon();
//落笔
void BaisseCrayon();
//隐藏机器人
void Cache();
//显示机器人
void Montre();
void Couleur(const char *str);
//操作机器人
void ManipRobot(const char *str);
#endif // WIDGETS
//Widgets.c
#include "widgets.h"
#include "common.h"
#include <string.h>
#include <stdio.h>
#include <math.h>
extern Widgets g_widgets;
void update(Widget w, int width, int height, void *data)
{
UNUSED(w);
UNUSED(width);
UNUSED(height);
UNUSED(data);
ClearDrawArea();
if (g_widgets.robotIsShow)
{
DrawFilledBox(g_widgets.x, g_widgets.y, UUNIT, UUNIT);
}
for (int i = 0; i < g_widgets.index / 2; i++)
{
DrawLine(g_widgets.point[i*2].x,
g_widgets.point[i*2].y + UUNIT / 2,
g_widgets.point[i*2+1].x,
g_widgets.point[i*2+1].y + UUNIT / 2);
}
}
void Avance(const char *str)
{
int n = 0;
sscanf(str, "AVANCE %d", &n);
if (g_widgets.x + UUNIT * n >= WIDTH)
return;
//左边旋转或者右边旋转 左边旋转为逆时针 右边旋转为顺时针
if (g_widgets.angle < 0 || g_widgets.angle > 0)
{
int l = UUNIT * n;
int y2 = g_widgets.y + l * sin(g_widgets.angle * M_PI / 180.0);
int x2 = g_widgets.x + l * cos(g_widgets.angle