Mémoires — лучший способ вести дневник на Маке

Как я программировал робота

| No TrackBacks

Когда я начал лепить на свои программы марку Coding Robots, изредка в поддержку стали приходить странные вопросы, связанные с роботами. Логика простая — раз есть в названии слово «роботы», значит ребята делают что-то связанное с ними.

Пару дней назад пришло сообщение от студента третьего курса какого-то индийского университета. Парень написал, что занимается роботами и спросил, не могли бы ли мы прислать код на Си для того, чтобы заставить робота двигаться справа налево. И еще чтобы он поднимал и опускал руки.

Хороший вопрос! Я стараюсь отвечать на все вопросы, заданные поддержке, поэтому прислал ему следующий исходник:

/*
 *  Moving Robot
 *  Copyright (C) 2008 Coding Robots, http://www.codingrobots.com
 *  MIT License
 */

#include <stdio.h>

void tprintf(int n, char *line)
{
    int i;
    for (i = 0; i < n; i++)
        printf(" ");
    printf(line);
}

void clear()
{
    int i;
    for (i = 0; i < 30; i++)
        printf("\n");
}

int main()
{
    int i;
    for (i = 0; i < 60; i++)
    {
        clear();
        int t = 60-i;
        if (i % 2 == 0)
        {
            tprintf(t, "  0 |\n");
            tprintf(t, " -|- \n");
            tprintf(t, "| |  \n");
            tprintf(t, "  ^  \n");
            tprintf(t, "/   \\\n");
        }
        else
        {
            tprintf(t, "| 0  \n");
            tprintf(t, " -|- \n");
            tprintf(t, "  | |\n");
            tprintf(t, "  ^  \n");
            tprintf(t, " \\  \\\n");
        }
        sleep(1);
    }
    return 0;
}

Для тех, кто не читает Си, демонстрирую, что делает этот код:

Самое удивительное, что в следующем письме студент поблагодарил меня и спросил, может ли этот код двигать робота не только справа налево, но и вперед-назад, а также какой микроконтроллер я использую. Даже не знаю, что ответить парню…