Форум программистов, компьютерный форум, киберфорум
Pascal (Паскаль)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
0 / 0 / 0
Регистрация: 01.02.2014
Сообщений: 11

Движение танка. Как уменьшить код?

24.03.2014, 17:10. Показов 1945. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Задача:
Танк в компьютерной игре может двигаться в одном из четырех направлений, обозначим их числами: 1-север, 2 - восток, 3 - юг, 4 - запад. Направление движения изменяется тремя командами:1 - поворот направо, 2 - поворот налево, 3 - поворот кругом. Пользователь вводит начальное направление движения, а затем ряд команд. Программа должна определять и печатать всякий раз новое направление. Выход из цикла - команда 0.
Я её решил, но вот интересно, как бы можно было код сделать поменьше.



Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
var napr,kom:integer;
s:string;
begin
writeln('Напишите начальное направление');
readln(napr);
repeat 
begin
 readln(kom);
 case napr of
   1: case kom of
     1: begin napr:=2; writeln('Направление на Восток'); end;
     2: begin napr:=4; writeln('Направление на Запад'); end;
     3: begin napr:=3; writeln('Направление на Юг'); end; 
     end;
   2: case kom of
     1: begin napr:=3; writeln('Направление на Юг'); end;
     2: begin napr:=1; writeln('Направление на Cевер'); end;
     3: begin napr:=4; writeln('Направление на Запад'); end; 
     end;
   3: case kom of
     1: begin napr:=4; writeln('Направление на Запад');end;
     2: begin napr:=2; writeln('Направление на Восток');end;
     3: begin napr:=1; end;
     end;
   4: case kom of
     1: begin napr:=1; writeln('Направление на Cевер') end;
     2: begin napr:=3; writeln('Направление на Юг'); end;
     3: begin napr:=2; writeln('Направление на Восток'); end;
     end;
  end; 
end; until kom=0;
end.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
24.03.2014, 17:10
Ответы с готовыми решениями:

Движение и повороты танка
Здравстуйте. Я пытаюсь сделать чтобы у меня ездил танк. Заметил, что если проехать вперед от первоначальной точки и попробовать повернуть...

Движение, поворот и выстрелы танка
На форме есть Rectangle, изображенный картинкой(Танк), Rectangle перемещается по нажатию клавиш(w,a,s,d), мне нужно чтобы картинка...

Движение танка в игре во время выстрела
пишу курсач на с#..игра танки. должен быть голый шарп, никаких XNA или подобного. начал и сразу столкнулся с проблемой. нарисовал танк...

6
Модератор
Эксперт Pascal/DelphiЭксперт NIX
 Аватар для bormant
7816 / 4635 / 2837
Регистрация: 22.11.2013
Сообщений: 13,158
Записей в блоге: 1
24.03.2014, 17:45
Цитата Сообщение от palecvnebo Посмотреть сообщение
интересно, как бы можно было код сделать поменьше
Например, так:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
const
  dirs: array [0..3] of string[6] = ('Север','Восток','Юг','Запад');
  cmds: array [1..3] of integer = (1,3,2);
var
  dir, cmd: integer;
begin
  repeat
    Write('Начальное направление (1..4): '); ReadLn(dir);
  until dir in [1..4]; dec(dir);
  repeat
    repeat
      Write('Команда (1..3, 0-выход): '); ReadLn(cmd);
    until cmd in [0..3];
    if cmd=0 then break;
    dir:=(dir + cmds[cmd]) mod 4;
    WriteLn('Направление на ',dirs[dir]);
  until false;
end.
2
0 / 0 / 0
Регистрация: 01.02.2014
Сообщений: 11
24.03.2014, 18:57  [ТС]
Мда уж, код меньше, но сложнее, буду разбираться, спасибо
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
 Аватар для bormant
7816 / 4635 / 2837
Регистрация: 22.11.2013
Сообщений: 13,158
Записей в блоге: 1
24.03.2014, 19:44
Тогда несколько комментариев не будут лишними:
- циклы 7-9 и 11-13 только для контроля вводимых значений;
- выражение (x mod 4) -- остаток от деления на 4 -- всегда имеет значение в диапазоне 0..3;
- по указанной выше причине направления проще считать от 0;
- значения элементов массива cmds показывают, сколько добавить к направлению по команде, считая по часовой стрелке.
1
0 / 0 / 0
Регистрация: 17.05.2020
Сообщений: 18
17.05.2020, 19:35
Не работает этот код.
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
 Аватар для bormant
7816 / 4635 / 2837
Регистрация: 22.11.2013
Сообщений: 13,158
Записей в блоге: 1
17.05.2020, 20:05
Цитата Сообщение от Soroega Посмотреть сообщение
Не работает этот код.
Как именно не работает? Какие ваши доказательства?
Что, по-вашему, здесь не так?
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Начальное направление (1..4): 1    // север
Команда (1..3, 0-выход): 1         // направо
Направление на Восток
Команда (1..3, 0-выход): 1         // направо
Направление на Юг
Команда (1..3, 0-выход): 1         // направо
Направление на Запад
Команда (1..3, 0-выход): 1         // направо
Направление на Север
Команда (1..3, 0-выход): 2         // налево
Направление на Запад
Команда (1..3, 0-выход): 2         // налево
Направление на Юг
Команда (1..3, 0-выход): 2         // налево
Направление на Восток
Команда (1..3, 0-выход): 2         // налево
Направление на Север
Команда (1..3, 0-выход): 3         // кругом
Направление на Юг
Команда (1..3, 0-выход): 3         // кругом
Направление на Север
Команда (1..3, 0-выход): 0
0
0 / 0 / 0
Регистрация: 17.05.2020
Сообщений: 18
17.05.2020, 22:44
Пардон,моя ошибка,поверхностно разобрался,думал надо вводит 'направление на Юг',не посмотрел,что napr integer, а не string.Всё работает.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
17.05.2020, 22:44
Помогаю со студенческими работами здесь

Как уменьшить код?
Есть задание: Информация о доходах М фирм за N месяцев, заданная в виде таблицы Определить наибольшую прибыль среди всех фирм за все...

Как уменьшить код
Сабж, код: <div id="wrapper"> <div id="galery"> <img src="" alt=""> <img src="" alt=""> <img src="" alt=""> <img src=""...

Как уменьшить код?
Здравствуйте, написал код. Но меня смущает 3 запроса к БД. Как его можно сделать короче? <? ob_start(); $sql= "SELECT * FROM...

Матрица . Как уменьшить код
<?php $base_numbers = array(1, 3, 10, 2, 5); $increment_matrix = array(); $summ = 0; foreach ($base_numbers as...

Как можно уменьшить код скрипта?
Есть скрипт: <html> <head> <link rel="stylesheet" type="text/css" href="http://freebit.clan.su/tizer.css" /> </head> <body> ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru