浏览代码

* test/demo.c: Nicer complete demo.

git-svn-id: file:///srv/caca.zoy.org/var/lib/svn/ttyvaders/trunk@124 92316355-f0b4-4df1-b90c-862c8a59935f
master
sam 21 年前
父节点
当前提交
e89e90935b
共有 1 个文件被更改,包括 148 次插入55 次删除
  1. +148
    -55
      test/demo.c

+ 148
- 55
test/demo.c 查看文件

@@ -29,6 +29,8 @@

static void display_menu(void);

static void demo_all(void);

static void demo_dots(void);
static void demo_lines(void);
static void demo_thin_lines(void);
@@ -37,7 +39,7 @@ static void demo_triangles(void);
static void demo_outlined_triangles(void);
static void demo_sprites(void);

int clipping = 0;
int force_clipping = 0;
struct ee_sprite *sprite = NULL;

int main(int argc, char **argv)
@@ -73,6 +75,10 @@ int main(int argc, char **argv)
demo = NULL;
quit = 1;
break;
case '0':
ee_clear();
demo = demo_all;
break;
case '1':
ee_clear();
demo = demo_dots;
@@ -133,18 +139,20 @@ static void display_menu(void)
ee_putstr("============");

ee_goto(4, 6);
ee_putstr("1: dots demo");
ee_putstr("0: complete demo");
ee_goto(4, 7);
ee_putstr("2: lines demo");
ee_putstr("1: dots demo");
ee_goto(4, 8);
ee_putstr("3: thin lines demo");
ee_putstr("2: lines demo");
ee_goto(4, 9);
ee_putstr("4: circles demo");
ee_putstr("3: thin lines demo");
ee_goto(4, 10);
ee_putstr("5: triangles demo");
ee_putstr("4: circles demo");
ee_goto(4, 11);
ee_putstr("6: outlined triangles demo");
ee_putstr("5: triangles demo");
ee_goto(4, 12);
ee_putstr("6: outlined triangles demo");
ee_goto(4, 13);
ee_putstr("7: sprites demo");

ee_goto(4, yo - 2);
@@ -153,6 +161,118 @@ static void display_menu(void)
ee_refresh();
}

static void demo_all(void)
{
static int i = 0;

int j, xo, yo, x1, y1, x2, y2, x3, y3;

i++;

ee_clear();

/* Draw the sun */
ee_color(EE_YELLOW);
xo = ee_get_width() / 4;
yo = ee_get_height() / 4 + 5 * sin(0.03*i);

for(j = 0; j < 16; j++)
{
x1 = xo - (30 + sin(0.03*i) * 8) * sin(0.03*i + M_PI*j/8);
y1 = yo + (15 + sin(0.03*i) * 4) * cos(0.03*i + M_PI*j/8);
ee_draw_thin_line(xo, yo, x1, y1);
}

ee_color(EE_WHITE);
for(j = 15 + sin(0.03*i) * 8; j--;)
{
ee_draw_circle(xo, yo, j, '#');
}

ee_color(EE_YELLOW);
ee_draw_circle(xo, yo, 15 + sin(0.03*i) * 8, '#');

/* Draw the pyramid */
xo = ee_get_width() * 5 / 8;
yo = 2;

x1 = ee_get_width() / 8 + sin(0.03*i) * 5;
y1 = ee_get_height() / 2 + cos(0.03*i) * 5;

x2 = ee_get_width() - 10 - cos(0.02*i) * 10;
y2 = ee_get_height() * 3 / 4 - 5 + sin(0.02*i) * 5;

x3 = ee_get_width() / 4 - sin(0.02*i) * 5;
y3 = ee_get_height() * 3 / 4 + cos(0.02*i) * 5;

ee_color(EE_GREEN);
ee_fill_triangle(xo, yo, x2, y2, x1, y1, '%');
ee_color(EE_YELLOW);
ee_draw_thin_line(xo, yo, x2, y2);
ee_draw_thin_line(x2, y2, x1, y1);
ee_draw_thin_line(x1, y1, xo, yo);

ee_color(EE_RED);
ee_fill_triangle(x1, y1, x2, y2, x3, y3, '#');
ee_color(EE_YELLOW);
ee_draw_thin_line(x1, y1, x2, y2);
ee_draw_thin_line(x2, y2, x3, y3);
ee_draw_thin_line(x3, y3, x1, y1);

ee_color(EE_BLUE);
ee_fill_triangle(xo, yo, x2, y2, x3, y3, '%');
ee_color(EE_YELLOW);
ee_draw_thin_line(xo, yo, x2, y2);
ee_draw_thin_line(x2, y2, x3, y3);
ee_draw_thin_line(x3, y3, xo, yo);

/* Draw a background triangle */
x1 = 2;
y1 = 2;

x2 = ee_get_width() - 3;
y2 = ee_get_height() / 2;

x3 = ee_get_width() / 3;
y3 = ee_get_height() - 3;

ee_color(EE_BLUE);
// ee_fill_triangle(x1, y1, x2, y2, x3, y3, '.');
ee_color(EE_CYAN);
ee_draw_thin_line(x1, y1, x3, y3);
ee_draw_thin_line(x2, y2, x1, y1);
ee_draw_thin_line(x3, y3, x2, y2);

xo = ee_get_width() / 2 + cos(0.027*i) * ee_get_width() / 3;
yo = ee_get_height() / 2 - sin(0.027*i) * ee_get_height() / 2;

ee_draw_thin_line(x1, y1, xo, yo);
ee_draw_thin_line(x2, y2, xo, yo);
ee_draw_thin_line(x3, y3, xo, yo);

/* Draw a sprite behind the pyramid */
ee_draw_sprite(xo, yo, sprite);

/* Draw a trail behind the foreground sprite */
for(j = i - 60; j < i; j++)
{
int delta = ee_rand(-5, 5);
ee_color(ee_rand(1, 10));
ee_goto(ee_get_width() / 2
+ cos(0.02*j) * (delta + ee_get_width() / 4),
ee_get_height() / 2
+ sin(0.02*j) * (delta + ee_get_height() / 3));
ee_putchar('#');
}

/* Draw foreground sprite */
ee_draw_sprite(ee_get_width() / 2 + cos(0.02*i) * ee_get_width() / 4,
ee_get_height() / 2 + sin(0.02*i) * ee_get_height() / 3,
sprite);

ee_refresh();
}

static void demo_dots(void)
{
int xmax = ee_get_width() - 1;
@@ -176,7 +296,7 @@ static void demo_lines(void)

/* Draw lines */
ee_color(ee_rand(1, 10));
if(clipping)
if(force_clipping)
{
ee_draw_line(ee_rand(- w, 2 * w), ee_rand(- h, 2 * h),
ee_rand(- w, 2 * w), ee_rand(- h, 2 * h), '#');
@@ -196,7 +316,7 @@ static void demo_thin_lines(void)

/* Draw lines */
ee_color(ee_rand(1, 10));
if(clipping)
if(force_clipping)
{
ee_draw_thin_line(ee_rand(- w, 2 * w), ee_rand(- h, 2 * h),
ee_rand(- w, 2 * w), ee_rand(- h, 2 * h));
@@ -215,7 +335,7 @@ static void demo_circles(void)
int h = ee_get_height();

/* Draw circles */
if(clipping)
if(force_clipping)
{
ee_color(ee_rand(1, 10));
ee_draw_circle(ee_rand(- w, 2 * w),
@@ -249,7 +369,7 @@ static void demo_triangles(void)

/* Draw lines */
ee_color(ee_rand(1, 10));
if(clipping)
if(force_clipping)
{
ee_fill_triangle(ee_rand(- w, 2 * w), ee_rand(- h, 2 * h),
ee_rand(- w, 2 * w), ee_rand(- h, 2 * h),
@@ -268,18 +388,21 @@ static void demo_outlined_triangles(void)
{
int w = ee_get_width();
int h = ee_get_height();
int x1, y1, x2, y2, x3, y3;

/* Draw lines */
ee_color(ee_rand(1, 10));
if(clipping)
if(force_clipping)
{
ee_fill_triangle(ee_rand(- w, 2 * w), ee_rand(- h, 2 * h),
ee_rand(- w, 2 * w), ee_rand(- h, 2 * h),
ee_rand(- w, 2 * w), ee_rand(- h, 2 * h), '#');
x1 = ee_rand(- w, 2 * w);
y1 = ee_rand(- h, 2 * h);
x2 = ee_rand(- w, 2 * w);
y2 = ee_rand(- h, 2 * h);
x3 = ee_rand(- w, 2 * w);
y3 = ee_rand(- h, 2 * h);
}
else
{
int x1, y1, x2, y2, x3, y3;

x1 = ee_rand(0, w - 1);
y1 = ee_rand(0, h - 1);
@@ -287,52 +410,22 @@ static void demo_outlined_triangles(void)
y2 = ee_rand(0, h - 1);
x3 = ee_rand(0, w - 1);
y3 = ee_rand(0, h - 1);
}

ee_fill_triangle(x1, y1, x2, y2, x3, y3, '#');

ee_fill_triangle(x1, y1, x2, y2, x3, y3, '#');
ee_color(ee_rand(1, 10));
ee_draw_thin_line(x1, y1, x2, y2);
ee_draw_thin_line(x2, y2, x3, y3);
ee_draw_thin_line(x3, y3, x1, y1);

ee_color(ee_rand(1, 10));
ee_draw_thin_line(x1, y1, x2, y2);
ee_draw_thin_line(x2, y2, x3, y3);
ee_draw_thin_line(x3, y3, x1, y1);
}
ee_refresh();
}

static void demo_sprites(void)
{
static int i = 0;

int x1, y1, x2, y2, x3, y3;

i++;

x1 = 2;
y1 = 2;

x2 = ee_get_width() - 3;
y2 = ee_get_height() / 2;

x3 = ee_get_width() / 3;
y3 = ee_get_height() - 3;

ee_clear();

/* Draw a sprite behind the triangle */
ee_draw_sprite(ee_get_width() / 2 + cos(0.027*i) * 30,
ee_get_height() / 2 - sin(0.027*i) * 20, sprite);

/* Draw a background triangle */
ee_color(EE_BLUE);
ee_fill_triangle(x1, y1, x2, y2, x3, y3, '.');
ee_color(EE_CYAN);
ee_draw_thin_line(x1, y1, x3, y3);
ee_draw_thin_line(x2, y2, x1, y1);
ee_draw_thin_line(x3, y3, x2, y2);

/* Draw foreground sprite */
ee_draw_sprite(ee_get_width() / 2 + cos(0.02*i) * 20,
ee_get_height() / 2 + sin(0.02*i) * 10, sprite);

ee_draw_sprite(ee_rand(0, ee_get_width() - 1),
ee_rand(0, ee_get_height() - 1), sprite);
ee_refresh();
}



正在加载...
取消
保存