IPB
ЛогинПароль:

4 страниц V  1 2 3 > »   
 Ответить  Открыть новую тему 
> С какой игры начать?
Гелла
сообщение 30.03.2006 19:50
Сообщение #1


Пионер
**

Группа: Пользователи
Сообщений: 84
Пол: Женский

Репутация: -  0  +


Я вот хочу научится программировать..один очень хороший человек на этом форуме подсказал, что лучше учиться программировать в процессе написания игр........какую самую простую игру вы можете посоветовать..Заранее Большое Спасибо....Не умею правильно пользоваться поиском по форуму..поэтому не отсылайте плиз в поиск........ no1.gif unsure.gif


--------------------
И полусонным стрелкам лень
Ворочаться на циферблате
И дольше века длится день..
И не кончается объятье...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 31.03.2006 7:10
Сообщение #2


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Я тут попробовал провести небольшую классификацию компьютерных игр. Этим термином я называю не только традициоонные компьютерные, но и обычные игры, которые можно так или иначе привязать к компу. А также не только игры.. smile.gif КИ прошли довольно большой эволюционный путь, результаты поражают. Но если подходить с точки зрения обучения программированию, то имеет смысл вспомнить и давно забытые КИ. Моя классификация, конечно, неполная, не особо научная и, по большому счету, не очень нужная - но не сыпать же названиями просто так без всякой системы, перебивая друг друга: "..а вот еще есть такая игрушка - ..". Так что я приглашаю всех дополнять меня, исправлять и т.п. Но главное, следуя просьбе автора темы - стараться характеризовать достоинства и недостатки с программерской точки зрения. Кстати, большинство из того, что я перечисляю, обсуждалось здесь, и даже совсем недавно. Но мне кажется, это не повод отсылать к поиску. Просто нужно посоветовать ту игру, которая каким-то боком может быть интересна всем (или многим), и участвовать в общем базаре.. smile.gif (В скобках ставлю свою субъективную оценку по 10-бальной шкале - не самой игры, а ее ценности для начала изучения программирования)

1. Игры на реакцию.
а. Стрелялки.
В основном модель как бы реальной войнушки (пусть даже и в далеком космосе). Ничего особенного, но уже нужно одновременное управление несколькими движущимися объектами. (Оценка 5)

б. Лабиринты (диггер)
Очень обширная область. Обычно нужно обежать весь лабиринт, пока тебя не съели. Очень хорошо с точки зрения оттачивания техники программирования, особенно в графике. Сюда же включаю и знаменитую "змейку" через написание которой прошли, наверное, все. (Оценка 6)
Есть много комбинаций стрелялок и лабиринтов, но это уже навороты.

в. Тетрис
Очень удачная попытка привнести геометрическое воображение в тупое нажимание кнопок. Народу нравится. Релизация не очень сложная и довольно хороша с точки зрения обучения. Но скучновато.. (Оценка 4)

г. Ксоникс (Xonix).
Чрезвычайно удачная игрушка, сейчас несправедливо забытая. Нужно отрезать куски от изначального прямоугольника (пока он не уменьшится до типа 10%) и уворачиваться от врагов. Очень хороша для обучения программированию, включает непростые математические концепции. (оценка 7)

2. КИ на размышления.
а. Ну, можно упомянуть Сапера - реализация довольно простая, практически вся игра есть интерфейс, очень желательно в графике. Когда-то я написал всю ее за пару часов - можно посоревноваться в скорости написания smile.gif. (Оценка 5)

б. Головоломки. Снова практически только интерфейс, рисование. Но не всегда - область довольно разнообразная! Кто знаком с "Судоку"? Довольно забавно оказалось написать модуль для решения, еще забавнее - для составления головоломок. (Оценка 3)

3. Настольные игры. Карты, шахматы, кости
Настольные игры имеют две стороны в реализации: интерфейс и игра против компьютера. Первое просто как бы служит заменой доски и фишек, а второе позволяет порезвиться с алгоритмами оптимизации и всего, чего угодно smile.gif. Конечно, второе обычно происходит при поддержке первого (классический пример - ChessMaster и Deep Blue smile.gif ). Реализация интерфейса очень полезна новичкам. Хороша тем, что ее можно улучшать, начав с самой простой модели.

а. С элементом случайности (кости, карты).
Отличаются присутствием случайного процесса, что практически сделать несложно (стандартными методами). Лично меня не привлекают sad.gif (Оценка 1)

б. Детерминированные (шахматы, шашки, рендзю).
Заслуживает максимального внимания.
i. Рендзю (в просторечии - "кретики-нолики") - игра, которую нетрудно начать, а потом интересно развивать. В зависимости от предпочтений, можно углубиться в интерфейс или наоборот, при очень простом интерфейсе сделать высокий уровень интеллекта. (Оценка 8)
ii. Каллах (манкала) - восточная игра, тоже может быть представлена очень простым интерфейсом, но сложной начинкой. В свое время я делал самообучающуюся версию, и успешно. (Оценка 9)

4. Стратегии.
Про это ничего не пишу. Хоть это очень популярно сейчас, я не люблю и не играю. Наверняка кто-то может дописать этот пункт. (Оценка 0)

5. Квесты.
Одна из самых старых категорий. Она существовала еще на первых мейнфреймах в режиме командной строки. У игрока есть описание текущей ситуации ("вы стоите перед закрытой дверью, налево и направо уходит коридор, у ваших ног лежит странный предмет.."). Игрок вводит команду (типа "открыть дверь" или "поднять предмет"). Если команда распознана, выдается описание следующей ситуации и т.д. На первых персональных компьютерах они уже привлекали простую графику. Очень здорово вплетать в квесты головоломки (классика - "7-й гость"). (Оценка 2)

6. Чисто компютерные игры.
На заре копьютеризации была такая игра, "бой в памяти". Две проги разных авторов загружались в память машины, управление передавалось по очереди, по одному такту. Надо было выжить, заняв всю память. В таких играх основной интерес именно в программировании, а игра сама по себе практически незаметна. Но я не могу представить, как это можно организовать под Виндой.. smile.gif Но зато можно заставить играть между собой две программы для игры в крестики-нолики. Можно и соревнование устроить.. (Оценка 6)

7. Этот тип затрудняюсь определить в двух словах.
Во-первых, это игры без выигрыша. Во-вторых, они захватывающе интересны. В третьих, основной представитель - игра Жизнь. Эту игру придумал примерно в конце 60-х Джон Конвей. Формально она представляет собой так называемый клеточный автомат, существующий на дискретном пространстве. Клетки живут и умирают по поределенным (совсем простым) правилам. В те времена компьютеры были почти фантастикой, и тем более странно, как тогда люди умудрялись вычислять громадные конфигурации на протяжении сотен квантов времени - на клетчатой бумаге с карандашом и ластиком?? В те времена в США выходил журнал Life про эту игру. Сделать ее не сложно, но есть риск потом увязнуть и просиживать часы и дни, задавая все новые конфигурации и ища в Инете себе подобных smile.gif. Шутка, конечно. В моем рейтинге игры для новичка Жизнь получает максимальный балл (по блату, конечно smile.gif ). (Оценка 10).

Я понимаю, что чересчур обильный выбор может только ухудшить ситуацию.. sad.gif Но не смог удержаться!


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Ozzя
сообщение 31.03.2006 7:44
Сообщение #3


Гуру
*****

Группа: Пользователи
Сообщений: 1 220
Пол: Мужской

Репутация: -  16  +


Гелла
Морской бой. Я начинал именно с него.
Далее можно попробовать
Карточную игру BlackJack (Очко).
Удав (Змейка).
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Бродяжник
сообщение 31.03.2006 9:04
Сообщение #4


Бывалый
***

Группа: Пользователи
Сообщений: 206
Пол: Мужской

Репутация: -  3  +


Гелла
Добро пожаловать в клуб игроделов-любителей! smile.gif
Начните со змейки. Это дешево и сердито. Для начала - в текстовом режиме. Потом в графическом. Если хотите - один совет: не пренебрегайте тем, чтобы вначале записывать все алгоритмы на бумаге - на обычном человеческом языке. В ответ на вопрос "на каком языке вы программируете?" кто-то сказал - "На русском. А на Паскале и Си я кодирую". Чем лучше Вы все вначале обдумаете, тем быстрее пойдет дело. Если что - спрашивайте!
Lapp
А еще есть такой жанр, как RPG. Не путать с квестами!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Ozzя
сообщение 31.03.2006 9:33
Сообщение #5


Гуру
*****

Группа: Пользователи
Сообщений: 1 220
Пол: Мужской

Репутация: -  16  +


lapp
5. Еще есть синоним (?) - adventure

Interactive Fiction - к этому же жанру относится.

Сообщение отредактировано: Ozzя - 31.03.2006 9:33
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Гелла
сообщение 31.03.2006 19:47
Сообщение #6


Пионер
**

Группа: Пользователи
Сообщений: 84
Пол: Женский

Репутация: -  0  +


Блин...боюсь мне не под силу даже змейка и морской бой...вообще не представляю с чего начать...


--------------------
И полусонным стрелкам лень
Ворочаться на циферблате
И дольше века длится день..
И не кончается объятье...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 31.03.2006 19:52
Сообщение #7


Гость






Гелла, ты ответы ЧИТАЕШЬ, или БЕГЛО ПРОСМАТРИВАЕШЬ?

Тебе Бродяжник дал совет, лучше которого, поверь, быть ничего не может, а ты его либо проигнорировала (тогда расскажи, почему? Чем тебе он не приглянулся, и ЧТО ты хочешь, чтобы тебе советовали? Особенности реализации? Но если тебе подсказывать каждый шаг, ты НИКОГДА не научишься делать что-то самостоятельно), либо просто не заметила. Тогда какой смысл что-то тебе советовать, если ты это не читаешь.

Цитата(Бродяжник @ 31.03.2006 8:04)
Если хотите - один совет: не пренебрегайте тем, чтобы вначале записывать все алгоритмы на бумаге - на обычном человеческом языке.
 К началу страницы 
+ Ответить 
Гелла
сообщение 31.03.2006 20:40
Сообщение #8


Пионер
**

Группа: Пользователи
Сообщений: 84
Пол: Женский

Репутация: -  0  +


unsure.gif

Цитата
Гелла, ты ответы ЧИТАЕШЬ, или БЕГЛО ПРОСМАТРИВАЕШЬ?

Не надо так нервничать..... no1.gif unsure.gif


Я это прочитала..и приняла к сведению.....я имею ввиду другое...я не представляю какие возможности паскаля нужно использовать для этого... unsure.gif


--------------------
И полусонным стрелкам лень
Ворочаться на циферблате
И дольше века длится день..
И не кончается объятье...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
hardcase
сообщение 31.03.2006 22:23
Сообщение #9


code warrior
****

Группа: Пользователи
Сообщений: 484
Пол: Мужской
Реальное имя: Славен

Репутация: -  8  +


К теме. Видел книгу по созданию 3д стратегии на С++ с использованием DirectX 9.0, вроде как для новичков.
http://netlib.narod.ru/library/book0031/toc.htm
Мне она понравилась: написана доступно и легко читается ;-)
Если пошарить на том сайте, то книжку можно и скачать отдельным файлом.

Сообщение отредактировано: hardcase - 31.03.2006 22:25


--------------------
ИзВ ин ИтЕ зА нЕ рОв НЫй П оч ЕРк
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Ozzя
сообщение 1.04.2006 9:03
Сообщение #10


Гуру
*****

Группа: Пользователи
Сообщений: 1 220
Пол: Мужской

Репутация: -  16  +


Гелла
Морской бой
Давай по порядку
Алгоритм игры следующий

1. Инициализация
2. Расстановка кораблей_противника
3. Расстановка кораблей_Игрока

4. Пока Не_Конец_Игры
ход_игрока
ход_противника
5. Вывод результата

Упростим игру до предела
Текстовый режим, корабли только однопалубные (10)
1. Инициализация
переменных понадобятся два массива 10Х10
очистка экрана
2. Расстановка кораблей_противника
Обнуляем массив - ноль - в нашем случае море
Заполняем массив 10 значениями
номер_столбца:= случайное_ значение_от_1_до_10 (или от 2 до 9, если не ставить корабли к берегу)
номер_строки := случайное_ значение_от_1_до_10 (или от 2 до 9, если не ставить корабли к берегу)
Использовать random
Визуализация
Использовать функции псевдографики
Для вывода gotoxy, write

Вот попробуйте сделать эту часть. Помогу, если буду затруднения.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Бродяжник
сообщение 3.04.2006 11:21
Сообщение #11


Бывалый
***

Группа: Пользователи
Сообщений: 206
Пол: Мужской

Репутация: -  3  +


Гелла, не расстраивайтесь. Вы сказали: "не знаю, какие возможности Паскаля для этого использовать". Теперь нужно уточнить - для чего "для этого"? То есть первое, что нужно, это довести Ваши смутные представления до стадии "мне нужно сделать то-то и то-то. А как?" Попробуйте сформулировать хотя бы два-три таких вопроса в отношении той игры, которую Вы выберете. Как только появятся такие вопросы, Вам помогут. Ну, например: Как очистить экран? Где хранить позиции кораблей на игровых полях? Как обработать нажатие клавиши "стрелка-вверх"? Дойдите в своих размышлениях до этой стадии.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 4.04.2006 9:25
Сообщение #12


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Гелла, постарайся быть все же поактивнее! Тебе накидали столько проектов - хоть бы в один ткнула пальцем наугад.. Мне придется сделать выбор за тебя smile.gif

В этом деле главное - это не бездействовать. Поэтому я начну. И все вместе продолжим. Извините, но я склоняюсь в сторону змейки - она динамичная. Морской бой (и все остальное) можно реализовать позже (или параллельно). Итак, я написал самый простой код, который явится даже не базой (поскольку он будет переделан в процессе совершенно), а скорее первым импульсом.

Гелла (всех желающих тоже приглашаю присоединяться к классу), пожалуйста, не копируй текст программы, набери его пальчиками. При наборе волей-неволей обратишь внимание на мелочи, которые трудно заметить при копировании. Если программа не пойдет сразу - внимательно проверь, найди ошибку. Это все очень полезно для начала, даже тупой (извини) набор и сличение двух текстов. При наборе соблюдай отступы, как в моем тексте - правильное оформление программы сильно помогает в ее создании (хотя и не влияет на компиляцию). Потом ты сама поймешь, насколько удобнее работать с правильно структурированным текстом.

Код реализует движение символа по экрану. Символом можно управлять, нажимая клавиши i,j,k,m. Выбор клавиш почти случаен - просто я не хотел сразу делать стрелки, чтобы не запутывать ученицу (стрелки производят двойные коды). Скорость движения символа постоянная, меняется только направление. При натыкании на стенку игра заканчивается.

Где же тут змейка? Очень просто: это только ее голова пока smile.gif. Чуть позже мы добавим звенья, из которых состоит тело. Змейка будет расти при поедании пищи, будет выводиться ее длина, время игры, результаты будем записывать в файл, так что можно будет соревноваться.

Я не стал помещать много комментариев в код, поскольку наверняка будут сложности с русскими буквами (не у всех, так у многих). Вот подробные пояснения.

Декларируем использование модуля CRT для работы с текстовым экраном.
Далее определяем некоторые числовые значения.
Но сначала условимся о названиях: x - горизонтальная координата, y - вертикальная (отсчет начинается из левого верхнего угла, точка (1,1) )
Введем еще и следующее соглашение: буква n в имени переменной означает Min (например, xn), а буква x - Max (например, yx). Таким образом, в строчках с 6 по 9 мы определяем границы экрана.
Далее определяем символ для вывода головы змейки.
Теперь задержка. Ее величиной можно регулировать скорость движения змейки по экрану.
А потом задаем начальное положение змейки и ее направление движения.

Наконец, сама программа.
Сначала чистим экран и инициализируем координаты змейки.
Потом начинаем основной цикл, который продолжаем, пока координаты змейки не выходят за пределы нашей области.
Стираем старое положение символа.
Рисуем символ в новом положении.
Перекладываем новые координаты в старые.
Ждем некоторое время, иначе символ будет бегать слишком быстро.
Если нажата клавиша, читаем ее.
Если это был управляющий символ - производим изменение направления движения.
Вычисляем новое положение змейки.
Идем в начало цикла...


{snake-01}
uses
CRT;

const
xn=1; {Left screen limit}
xx=80; {Right screen limit}
yn=1; {Top screen limit}
yx=25; {Bottom screen limit}
H='8'; {Snake head}
dt=500; {Delay}

var
x0:integer=xn; {Snake location}
y0:integer=yx div 2;
vx:integer=1; {Snake direction}
vy:integer=0;

var
x,y:integer; {New snake location}
c:char;

begin
ClrScr;
x:=x0;y:=y0;
while (x>=xn)and(x<=xx)and(y>=yn)and(y<=yx) do begin
GoToXY(x0,y0);Write(' ');
GoToXY(x,y);Write(H);
x0:=x;y0:=y;
Delay(dt);
if KeyPressed then begin
c:=ReadKey;
case c of
'i':begin vx:=0;vy:=-1 end;
'm':begin vx:=0;vy:=1 end;
'j':begin vx:=-1;vy:=0 end;
'k':begin vx:=1;vy:=0 end;
end;
end;
Inc(x,vx);Inc(y,vy);
end
end.


Программу я проверял в FPC, все работало.
Рекомендую сохранять каждую версию в своем файле с соответствующем номере. Например, эту программу сохрани в файле snake-01.pas . Потом в процессе доработки номер версии будет увеличиваться. exe-файлы (а также обжекты) лучше уничтожать, чтоб не загаживать диск, а вот паскалевский текст лучше сохранять.
Можешь поэкспериментировать, сама попробовать развить идею дальше, для этого лучше сделай отдельный файл.

Давай сюда все свои вопросы - как по технике программирования, так и по идеологии. Или просто типа "а это че??"
Ну а потом, живы будем - продолжим.. smile.gif


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
FreeMan
сообщение 4.04.2006 16:39
Сообщение #13


-
****

Группа: Пользователи
Сообщений: 480
Пол: Мужской

Репутация: -  4  +


Идея дальше - нужны яблоки smile.gif заодно и работа с массивами будет. то есть массив 80х25. если ячейка = 1, то там яблоко, если 0 - нету. потом дабы отточить понимание байта как 8 бит можно запихать это всё и в одномерный массив из 250 байт.


--------------------
бб
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Гелла
сообщение 4.04.2006 21:36
Сообщение #14


Пионер
**

Группа: Пользователи
Сообщений: 84
Пол: Женский

Репутация: -  0  +


program zmeika;
uses crt;

const
xn=1;
xx=80;
yn=1;
yx=25;
H='8';
dt=500;

var
x0,y0,vx,vy,x,y:integer;
c:char;

begin
clrscr;
x0:=xn;
y0:=yx div 2;
vx:=1;
vy:=0;
x:=x0;
y:=y0;
while (x>=xn) and (x<=xx) and (y>=yn) and (y<=yx) do
begin
GoToXY(x0,y0);
write(H);
x0:=x;
y0:=y;
Delay(dt);
if KeyPressed then
begin
c:=ReadKey;
case c of
'i': begin vx:=0; vy:=-1 end;
'm': begin vx:=0; vy:=1 end;
'j': begin vx:=-1; vy:=0 end;
'k': begin vx:=1; vy:=0 end;
end;
end;
Inc(x,vx); Inc(y,vy);
end;
end.

Тэги. GoodWind

А змейка не появляется..Только целая строчка восьмерок..(символов головы змейки)…а когда я пытаюсь её передвинуть при помощи клавиш i,m,j,k то появляется окно с текстом программы….А процедура Inc(x,vx); Inc(y,vy)вычисляет новое положение змейки чтоли??

Сообщение отредактировано: volvo - 2.11.2006 12:31


--------------------
И полусонным стрелкам лень
Ворочаться на циферблате
И дольше века длится день..
И не кончается объятье...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 4.04.2006 22:51
Сообщение #15


Гость






Гелла, ты пропустила 2 оператора, которые как раз и занимаются тем, что стирают символ "8" в старой позиции перед тем, как отобразить его в новой... Вот эти:
Цитата
GoToXY(x0,y0);Write(' ');
GoToXY(x,y);
Write(H);
 К началу страницы 
+ Ответить 
Lapp
сообщение 5.04.2006 5:40
Сообщение #16


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(Гелла @ 4.04.2006 21:36)
А змейка не появляется..Только целая строчка восьмерок..(символов головы змейки)…а когда я пытаюсь её передвинуть при помощи клавиш i,m,j,k то появляется окно с текстом программы….А процедура Inc(x,vx); Inc(y,vy)вычисляет новое положение змейки чтоли??

Молодец!! Хвалю! smile.gif
Если честно, я особо не рассчитывал, что с первого раза все получится.. Если совсем честно - то не рассчитывал даже на то, что ты последуешь моему указанию и станешь набирать пальцами, а не скопируешь smile.gif. Ты превосходишь все (ну, почти..) ожидания! Спасибо smile.gif

Итак, учебный процесс идет пока по графику. Отвечаю на твои вопросы (возможно, незаданные). Попутно некоторые советы.

1. Змея по-английски будет snake (снэйк). Я очень рекомендую употребление английских слов в программировании. Русские слова, написанные латиницей, гораздо хуже читаются и могут иметь много вариантов написания. Там, где это уместно или необходимо - надо использовать русский (кирилицу или латиницу - зависит от конкретного случая), то есть я не против использования русского. Но все же делай акцент на английский для названий переменных и для коротких пояснений. Заодно и английский подучишь! Здесь я постараюсь пояснять английские слова, которые буду употреблять.

2. Оператор program не является обязательным в Паскале, поэтому я его не употребил. Но если ты его используешь, назови программу snake. Ok?

3. Я уже говорил, но еще разок не помешает - пока наша змейка состоит из одной только головы. Для головы я выбрал символ "8" потому, что восьмерка похожа на глаза или очки (пусть наша змейка будет очковой коброй smile.gif ). Но ты можешь, ессно, заменить этот символ на любой, который тебе нравится.

5. При наборе текста естественно допускать ошибки - человеку свойственно ошибаться. Но при этом имей в виду, что мой код был проверен, и вероятность, что он не работает по объективной причине довольно мала. Поэтому после набора, если программа не заработала - тщательно проверь, правильно ли набран текст. Volvo указал тебе на твою ошибку в этот раз, исправь ее. Открою тебе секрет: я потому и просил набирать руками, что думал, что ты сделаешь ошибки. Исправление таких ошибок - лучший способ обучения. Пока ты оправдываешь мои надежды.. ;)

4. Когда помещаешь текст программы сюда, в сообщение, будь добра, окружай его тегами [рascode] перед текстом и [/рascode] после текста (учти, что тут я вместо английской "p" употребил русскую "р", иначе теги бы сработали, и ты не увидела бы их тут, а вместо них был бы прямоугольник вставки, а в нем "перед текстом и"). Сами теги не показываются при выводе, а в программном тексте будет сохранено форматирование текста, и даже подсвечен синтаксис. Теги можно писать вручную, а можно сделать так:
- выдели текст программы блоком;
- кликни кнопку с буквой P в ряду кнопок над окном набора текста (примерно посредине окна).
Выделенный текст будет окаймлен тегами. Не забудь нажать "Предварительный просмотр", чтобы убедиться, что все получилось как надо. Если не получилось - ищи ошибку (незакрытый тег, ошибка в названии тега..). Сейчас я помещу ниже твой программный текст, и ты увидишь, как он выглядел бы, если бы ты все сделала правильно.

program zmeika;
uses crt;

const
xn=1;
xx=80;
yn=1;
yx=25;
H='8';
dt=500;

var
x0,y0,vx,vy,x,y:integer;
c:char;

begin
clrscr;
x0:=xn;
y0:=yx div 2;
vx:=1;
vy:=0;
x:=x0;
y:=y0;
while (x>=xn) and (x<=xx) and (y>=yn) and (y<=yx) do
begin
GoToXY(x0,y0);
write(H);
x0:=x;
y0:=y;
Delay(dt);
if KeyPressed then
begin
c:=ReadKey;
case c of
'i': begin vx:=0; vy:=-1 end;
'm': begin vx:=0; vy:=1 end;
'j': begin vx:=-1; vy:=0 end;
'k': begin vx:=1; vy:=0 end;
end;
end;
Inc(x,vx); Inc(y,vy);
end;
end.


Видишь? Совсем же другое дело!..
И тут выясняется, что:
- разделы var и const ты не сдвигала... Рекомендую это делать!
- размер сдвига у тебя пляшет: то 2, то 4, то 3..
Последнее совершенно недопустимо!! Ибо бывают ситуации, когда разобраться, к какому логическому блоку относится оператор можно только по суммарному сдвигу (размер сдвига умножить на вложенность блока). Уверяю тебя, это делается не для красоты (хотя красота идет попутно). Выбери стандарт для себя и не отступай от него никогда! Я рекомендую 2 (один сдвиг - два пробела). Если ты работаешь в FPC (кстати - обязательно скажи, в чем ты работаешь), то зайди в Options - Environment - Editor, и там поставь Tab Size = 2 и Indent Size = 2. После этого выполни Options - Save. Возможно, тебе придется переоткрыть рабочее окно, чтоб это подействовало..

5. Процедура Inc(i) - это, грубо говоря, увеличение на 1 (для целых чисел). Происходит от английского increase (увеличивать, возрастать). Иначе говоря, это эквивалентно оператору i:=i+1 . Строго говоря, такая операция производится быстрее, чем сложение, но практически все оптимизирующие компиляторы все равно заменят сложение на инкриментирование, так что все равно, что писать. Я предпочитаю пользоваться Inc'ом, и тебе советую. Есть ситуации, где это действительно упрощает дело (если говорить о перечисляемых типах, например, или даже просто о типе char). Кстати, аналогично ей, есть процедура для уменьшения, Dec(i) (от английского decrease - уменьшать, убывать), которая эквивалентна i:=i-1 .

Ну вот, на сегодня хватит. Пожалуйста, все проверь, исправь и постарайся разобрать что делает каждый оператор (мои пояснения смотри в предыдущем сообщении). Жду следующих вопросов - и пора уже двигаться дальше!
Успехов!


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Бродяжник
сообщение 5.04.2006 12:27
Сообщение #17


Бывалый
***

Группа: Пользователи
Сообщений: 206
Пол: Мужской

Репутация: -  3  +


Гелла
Поздравляю с тем, что Вы таки начали это дело!
Небольшая подсказка: попробуйте увеличить значение константы dt. Поставьте эдак 5000 вместо 500. А может быть, и все 25000. Или еще больше. Я подозреваю, что у Вас быстрый компьютер и непропатченная версия модуля CRT. Словом, попробуйте. Попытка не пытка...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 7.04.2006 1:25
Сообщение #18


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Гелла, интерес пропал? Скажи, что именно тебя смутило и заставило молчать. Слишком много? Слишком резко? Что-то конкретное непонятно? Что-то непонятно, но не знаешь, что именно? Непонятно, о чем вообще речь? Говори в любой форме, но говори. Либо уж скажи, что это тебе не нужно..

Понимаешь, польза будет только при постоянных ежедневных упражнениях. Хоть час, хоть полчаса, хоть даже 15 мин, если совсем уж некогда. Это как обычный иностранный язык - успех резко повышается, при учащении занятий, и полностью сводится к нулю при перерыве между ними больше трех дней. И я со своей настойчивостью тут ни при чем, просто так устроен мозг. Любая информация, воспринятая им, сначала кладется в кратковременную память. Даже если все понятно, она будет забыта через 4-5 дней. Но если в течение нескольких последующих дней она была вызвана / использована / дополнена - она перекладывается на долговременный уровень. Так работает мозг, и изменить это не в наших силах. Если действительно хочешь добиться успеха - учитывай это простое правило. Идти против - бессмысленно и странно.

Как видишь, люди тут готовы тебе помочь - но нужна адекватная реакция.
Твой выбор?..


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Гелла
сообщение 7.04.2006 14:32
Сообщение #19


Пионер
**

Группа: Пользователи
Сообщений: 84
Пол: Женский

Репутация: -  0  +


Цитата
Гелла, интерес пропал? Скажи, что именно тебя смутило и заставило молчать. Слишком много? Слишком резко? Что-то конкретное непонятно? Что-то непонятно, но не знаешь, что именно? Непонятно, о чем вообще речь? Говори в любой форме, но говори. Либо уж скажи, что это тебе не нужно..


Нет, всё в порядке....конечно мне это очень нужно..когда я была на форуме посл раз 2 дня назад я только сохранила эту страницу..читала всё в авономном режиме....на след день у интернет фирмы, где я покупаю карты доступа что то случилось с центральным компьтером как мне сказали в службе технической поддержки.. какая то авария...когда модем набирал номер всё время было занято.....я подождала 2 дня...они не устранили неполадку..вообщем в итоге пришлось покупать другую карту другого првайдера...

Цитата
Если честно, я особо не рассчитывал, что с первого раза все получится.. Если совсем честно - то не рассчитывал даже на то, что ты последуешь моему указанию и станешь набирать пальцами, а не скопируешь . Ты превосходишь все (ну, почти..) ожидания! Спасибо


Это Тебе Большое Спасибо:-)


program snake;
uses crt;

const
xn=1;
xx=80;
yn=1;
yx=25;
H='8';
dt=5000;

var
x0,y0,vx,vy,x,y:integer;
c:char;

begin
clrscr;
x0:=xn;
y0:=yx div 2;
vx:=1;
vy:=0;
x:=x0;
y:=y0;
while (x>=xn) and (x<=xx) and (y>=yn) and (y<=yx) do
begin
GoToXY(x0,y0);
write(' ');
GoToXY(x,y);
write(H);
x0:=x;
y0:=y;
Delay(dt);
if KeyPressed then
begin
c:=ReadKey;
case c of
'i': begin vx:=0; vy:=-1 end;
'm': begin vx:=0; vy:=1 end;
'j': begin vx:=-1; vy:=0 end;
'k': begin vx:=1; vy:=0 end;
end;
end;
Inc(x,vx); Inc(y,vy);
end;
end.


Исправила ошибку, теперь появляется одна восьмерка..она двигается по прямой и когда доходит до конца монитора останавливается....не реагирует на нажатие клавиш i,m,j,k, при этом появляется окно с текстом программы...

Цитата
Если ты работаешь в FPC (кстати - обязательно скажи, в чем ты работаешь), то зайди в Options - Environment - Editor, и там поставь Tab Size = 2 и Indent Size = 2. После этого выполни Options - Save. Возможно, тебе придется переоткрыть рабочее окно, чтоб это подействовало..


А что такое FPC? Я работаю в обычном Turbo Pascal 7.0 под DOS(на синем экране).


Цитата
5. Процедура Inc(i) - это, грубо говоря, увеличение на 1 (для целых чисел). Происходит от английского increase (увеличивать, возрастать). Иначе говоря, это эквивалентно оператору i:=i+1 . Строго говоря, такая операция производится быстрее, чем сложение, но практически все оптимизирующие компиляторы все равно заменят сложение на инкриментирование, так что все равно, что писать. Я предпочитаю пользоваться Inc'ом, и тебе советую. Есть ситуации, где это действительно упрощает дело (если говорить о перечисляемых типах, например, или даже просто о типе char). Кстати, аналогично ей, есть процедура для уменьшения, Dec(i) (от английского decrease - уменьшать, убывать), которая эквивалентна i:=i-1 .


Т.е. если в скобках мы пишем Inc(x,vx), это значит vx:=x+1 или x:=x+1 тогда зачем мы пишем ещё и vx?

Сообщение отредактировано: volvo - 2.11.2006 12:32


--------------------
И полусонным стрелкам лень
Ворочаться на циферблате
И дольше века длится день..
И не кончается объятье...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
suriv
сообщение 7.04.2006 22:04
Сообщение #20


Бывалый
***

Группа: Пользователи
Сообщений: 234
Пол: Мужской
Реальное имя: AHTOH

Репутация: -  1  +


Цитата
Т.е. если в скобках мы пишем Inc(x,vx), это значит vx:=x+1 или x:=x+1 тогда зачем мы пишем ещё и vx?


X:=X+VX


после той запятой ставиться то число на которое хотим увеличть или уменьшить
если не ошибаюсь...

Сообщение отредактировано: suriv - 7.04.2006 22:07


--------------------
Хочу в репу !

Cмотри,а то ведь получишь!
Админ.

Не получит - его фиг догонишь!
Админ №2.

P.S Вы еще третьего админа притащите сюда :D
ваш аффтар :D
Звали? :D (админ № не помню какой)

ха больше нифига не напишете
афтар

Уверен? (Moderator)
А еще можно ? (супмодер)
Хватит его мучать ! Избили уж... (админ)
Не хватит. я тоже напишу (тоже Админ)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

4 страниц V  1 2 3 > » 
 Ответить  Открыть новую тему 
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 19.11.2024 1:18
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"