Решения (задачи 220-229)
Задача 229.
// Плывущий корабль #include <graphics.h> Iinclude <stdlib.h> #include <stdio.h> #include <conio.h> #include <dos.h> tdefine dx 5 // шаг сетки по X #define dy 5 // шаг сетки по Y void ship(int x, int y, int color) // x, у – координаты // базовой точки setcolor(color); // корпус moveto(x,y); lineto(x,y-2*dy); lineto(x+10*dx,y-2*dy); lineto(x+ll*dx,y-3*dy); lineto(x+17*dx,y-3*dy); eto(x+14*dx,y); lineto(x,у); // надстройка raoveto(x+3*dx,y-2*dy); lineto(x+4*dx,y-3*dy); lineto(x+4*dx,y-4*dy); lineto(x+13*dx,y-4*dy); lineto(x+13*dx,y-3*dy); line(x+5*dx,y-3*dy,x+9*dx,y-3*dy); // капитанский мостик rectangle(x+8*dx,y-4*dy,x+ll*dx,y-5*dy); // труба rectangle(x+7*dx,y-4*dy,x+8*dx,y-7*dy); // иллюминаторы circle(x+12*dx,y-2*dy,dx/2); circle(x+14*dx,y-2*dy,dx/2); // мачта line(x+10*dx,y-5*dy,x+10*dx, y-10*dy); // оснастка moveto(x+17*dx,y-3*dy); lineto(x+10*dx,y-10*dy); lineto(x,y-2*dy); #define PATHTODRIVER "с: WborlandcWbgiW" void main(void) int x,y; // координаты корабля (базовой точки) int maxx; // коорд. крайней правой точки экрана int gdriver = DETECT; // драйвер int gmode; // режим int errorcode; // код ошибки initgraph(Sgdriver, Sgmode, PATHTODRIVER); errorcode = graphresult(); if (errorcode!= grOk) // ошибка инициализации // графического режи 199 printf("Ошибка: %d\n", errorcode); puts("Для завершения программы нажмите Enter'' getch(); return; maxx = getmaxx(); x = -10; // корабль выплывает из-за правой // границы экрана у = 100; while (х < maxx) { ship(x,у, GREEN); // нарисовать корабль delay(20); ship(х,у,BLACK); // стереть корабль х += 5; } setcolor(GREEN); outtextxy(10.10,"Рейс завершен!"); outtextxy(10.24,"Нажмите Enter"); getch(); closegraph(); // выход из графического режима