Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Управление луноходом по карте.


Автор: N0rd 15.12.2004, 22:05
Уже описывал эты проблемку в ветке общие вопросы,но так как пишем под линукс(в emacs'e),меня отправили сюда.

5. Управление луноходом по карте. Луноход передвигается по дорогам, отмеченным
на карте размером 20х20. 1 символ - 1 координатная единица. Ширина дороги - 1.
На карте должны быть развилки (не менее трех) и перекрестки. На перекрестках
находятся шахты, добывающие металл (не менее трех) и лунные поселки (не менее
двух). В поселках можно взять топливо, оплатив его металлом, а на шахтах
получить металл. Вес топлива и металла не должен превышать грузоподъемность
лунохода. Луноход передвигается по команде пользователя вида (направление,
число шагов). Например (вправо, 5). Если встретились шахта или поселок,
луноход сообщает о встреченном им объекте. По запросу пользователя луноход
должен сообщать расстояние до ближайшего перекрестка и вид объекта
(размещенного на нем), а также расстояния до ближайших шахты или поселка. По
другому запросу луноход должен сообщать общий вес груза, который еще можно
взять на борт и оставшийся запас топлива. Каждая единица пройденного пути
вызывает расход топлива. Если топливо кончилось, луноход может просить
ближайший поселок привезти ему топливо, получая долг по металлу. По требованию
пользователя программа должна выводить карту, на которой обозначены все шахты и
поселки, дороги и текущее положение лунохода. В начале работы программы луноход
имеет запас топлива, достаточный для посещения четырех объектов.

Примечание:
на перекрестках обязательно расположены шахты или лунные поселки, пустых
перекрестков быть не может.

Язык реализации C.

Должно получиться что то типа игры.Карта,луноход и т.д. обозначаются буковками символами(это вроде псевдографика называется).
Помогите пожалуйста.

З.Ы. Обычный Си без плюсов.

Автор: dargaard 17.12.2004, 07:36
Модератор: Тема не имеет никакого отношения к линуксу/юниксу.


Автор: LuckLess 18.12.2004, 16:24
ты что , хочешь чтобы тебе эту прогу целиком написали ??
Или тебе алгоритм нужен ? Или в каком нибудь конкретном месте чтото не выходит..?

Автор: cardinal 18.12.2004, 16:28
N0rd, ты это читал?
http://forum.vingrad.ru/index.php?showtopic=36512&view=findpost&p=275177

Автор: N0rd 19.12.2004, 19:02
Писать я начал,вот что у меня пока что получилось
Код

/*==================================================================*/
/* Программа управления луноходом по карте                                                                         */
/* Формат вызова: ./prog5                                                                                                            */
/* Исходные данные: файл содержащий карту, команды вводимые пользователем            */
/* Результат: выполнение программой команд вводимых пользователем                             */
/* (передвижение лунохода, вывод на экран карты и т.д.)                                                       */
/* Используемые функции:                                                                                                          */
/*                                                                                                                                                     */
/* Автор: Белов О.                                                                                                                         */
/* Группа: 22103#2                                                                                                                        */
/* Дата написания: 14.12.04                                                                                                         */
/*==================================================================*/

#include <stdio.h>
#include <string.h>

#define MAP_SIZE 20         // Размер карты
#define MINE 2              // Количество шахт
#define MOON_VILAGE 3       // Количество лунных поселений
#define LENGTH_COMMAND 10   // Максимальная длина команды
#define FILE_NAME 50        // Максимальная длина имени исходного файла

int map[MAP_SIZE][MAP_SIZE]; // Матрица содержащая карту
int fuel_in_step;            // Расход топлива за один шаг
int fuel_cost;               // Цена топлива
int fuel_number;             // Запас топлива
int metal_number;            // Запас металла
int min_step;                // Кол-во шагов до ближайшего объекта на карте
int steps;                   // Кол-во шагов на которое необходимо
                            // переместить луноход

int main()
{
   FILE *file_input;          // файловая переменная для исходного файла
   char filename[FILE_NAME];  // имя исходного файла
   
    printf("Введите имя файла содержащего карту.");
    scanf("%s", &filename);   // Считываем имя файла  
    if(!(file_input=fopen(filename,"r")))  // Открываем файл, если произошла
                                           // ошибка при открытии
      printf("Ошибка при открытии файла %s\n", file_name);
                                           // то сообщаем о ошибке
    else
    {                            



Маловато конечно,но хоть кое что.Вообщем идея такова.В текстовом файле хранится карта,составленная так(например):
100000000001
110000000011
031111211310
010000000100
010000000100
0-это "пробел"
1-дорога
2-шахта
3-поселок
Я уже начал открывать файл.Далее будет такая конструкция:
if(input_data(file_input,map,MAP_SIZE)) // считываем данные из файла
// если произошла ошибка то выводим предупреждение
printf("Произошла ошибка при считывании данных\nПроверьте формат входных данных\n");

input_data-функция,которая будет посимвольно считывать данные из файла и в зависимости от цифры заносить в массив символы (д вместо 1,пробел вместо 0,ш вместо 2,п вместо 3).После этого я думаю файл становится ненужным и его можно закрыть?После всех этих приготовлений начинаем собственно сам процесс.Сначала я думаю надо вывести на экран справку содержащую все команды(вправо Х,влево У,карта...),справку реализовать функцией.Потом, пока команда не "выход":
введите команду
В зависимости от команды:вправо,влево,вниз,вверх,карта,торговля(в деревнях),справка,взять в долг топливо(если оно кончилось),расстояние до ближайшего...;Выполняем действия(их я думаю тоже реализовать функциями).
Дело в том что это можно сказать моя первая программа на Си.Вот что мне не очень понятно:как сделать функцию input_data,как вычислять расстояние до щахты,поселка,ближайшего объекта?
З.Ы. У меня есть готовая программа(у одногрупника взял),но я сам хочу написать свою.У вас на форуме можно файлы выкладывать,я бы положил эту прогу,может вам интересно посмотреть.
З.З.Ы.Ы. Даже не знаю что делать smile ,свою прогу писать или чужую переделывать,время поджимает,во вторник сдавать надо smile .

Автор: antonmasteR 19.12.2004, 19:39
N0rd
я когда-то такое писал вот лови

http://odinsoft.webcindario.com/worm.rar

там прога для ДОС но сам алгоритм думаю поймеш

Автор: N0rd 19.12.2004, 20:07
Спасибо за помощь, но без комментариев разобраться сложновато.
Цитата

Дело в том что это можно сказать моя первая программа на Си


Автор: cardinal 20.12.2004, 03:21
Цитата(N0rd @ 19.12.2004, 17:02)
input_data-функция,которая будет посимвольно считывать данные из файла и в зависимости от цифры заносить в массив символы (д вместо 1,пробел вместо 0,ш вместо 2,п вместо 3).

Это лишнее. То есть посимвольно это делать не надо. Читаешь все содержание файла в массив и готово. Как это сделать я думаю сто раз на форуме описано...

Автор: En_t_end 20.12.2004, 15:58
http://odinsoft.webcindario.com/worm.rar
Ага smile.... интересно а это правда прога нужная, или же это троянчик smile ?
или всё вместе smile ?, так называть опасно архивы, а то вдруг...

Автор: antonmasteR 20.12.2004, 18:42
En_t_end
это игра worm типо червяк бегает по экрану жрет яблоки и растет smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)