середа, 23 березня 2011 р.

5 Головоломок

Моя новая флеш-игра вышла в большой интернет!


На этот раз я выпустил сборник из пяти логических задач. Сейчас она участвует в конкурсах на двух крупнейших порталах: Kongregate и Newgrounds. Очень нужна ваша поддержка в голосовании! Оно происходит по ссылкам:

5 Головоломок на Kongregate
5 Головоломок на Newgrounds

И ещё одно: В 70й и 87 ротах Сергей Тихонович согласен учитывать успешность решения задач в игре в общем рейтинге, наряду с баллами за практические и лабораторные занятия. Так что не забывайте отправлять свои результаты после прохождения уровней. :)

субота, 19 березня 2011 р.

Языки

Кто знает какие-то иностранные языки кроме английского? Напишите мне, есть интересное предложение :)

пʼятниця, 18 березня 2011 р.

Моделирование движения тел - основы

Сделаем программу, в которой цветной круг будет летать по экрану и отскакивать от краёв.
Что нужно знать для того, чтобы задать положение круга на экране?
Положение его центра (Х, Y) и радиус R. Для красоты круг можно рисовать некоторым цветом C
Что нужно знать, чтобы круг двигался?
Проекции его скорости на оси х и у: VX и VY.
На компьютере движение тела моделируется следующим образом:
Выбирается небольшой шаг времени DT, и с этим шагом каждый раз вычисляются новые координаты тела. Для прямолинейного движения формула будет:
X=X+VX*DT
Y=Y+VY*DT
Т.е. координата по оси Х будет той, что была, плюс то расстояние, на какое тело успело переместиться за время DT. Аналогично и для игрека.
Теперь как математически выразить отражение круга от края экрана?
Рассмотрим четыре его положения:
В положениях левее круга 1 и правее круга 3 происходит отражение от вертикальных границ. Это значит, что скорость VX должна поменять знак.
Если круг будет левее положения 1, то для него будет верным неравенство X<=R. Если он правее круга 3, то верно неравенство X>=600-R.
Поэтому команда отражения от вертикальных стенок будет выглядеть так:
IF X<=R OR X>=600-R THEN VX=-VX
В положениях ниже круга 2 и выше круга 4 менять знак должна скорость VY.
Поэтому, аналогично
IF Y<=R OR Y>=300-R THEN VY=-VY
Теперь сформулируем алгоритм, по которому круг будет летать по экрану
  1. Перевести экран в графический режим
  2. Инициализировать переменные
  3. Стереть старое положение круга
  4. Просчитать новое положение круга
  5. Нарисовать круг
  6. Проверить отражение
  7. Перейти к пункту 3
Сделаем на основе алгоритма программу, используя соображения, приведённые ранее.
Пункт 1 реализуется двумя стандартными строками:
10 SCREEN 9
20 CLS
Пункт 2: зададим переменным случайные стартовые значения
30 X=60+RND*400
40 Y=60+RND*200
50 R=10+RND*40
60 C=INT(1+RND*15)
70 DT=0.1
80 VX=RND*20-10
90 VY=RND*20-10
Таким образом, координата центра круга по оси х будет в пределах от 60 до 460, по оси у – от 60 до 260, радиус круга – от 10 до 50, цвет – любым целым числом от 1 до 15 (именно до 15-ти, т.к. RND всегда строго меньше единицы).
Шаг времени задаём равным 0,1 секунды, если понадобится – отрегулируем потом. Проекции скорости по осям х и у будут в пределах от -10 до 10.
Пункт3. Чтобы стереть изображение, его нужно нарисовать нулевым цветом, т.е. чёрным
100 CIRCLE(X,Y),R,0
Пункт 4. Применяем выведенные формулы
110 X=X+VX*DT
120 Y=Y+VY*DT
Пункт 5 – рисуем круг в новых координатах
130 CIRCLE(X,Y),R,C
Пункт 6 – применяем выведенные формулы отражения
140 IF X<=R OR X>=600-R THEN VX=-VX
150 IF Y<=R OR Y>=300-R THEN VY=-VY
Пункт 7 – возвращаемся к пункту 3 алгоритма, т.е. к 100й строке программы
160 GOTO 100
Запускаем программу, наблюдаем, наслаждаемся плодами труда своего J
Итак, если вы всё внимательно делали и разобрались, то удовлетворительное написание рубежа вам обеспечено. Для хороших и отличных оценок нужно уметь моделировать гравитацию и движение нескольких тел. Это вопрос будет разобран с следующей статье.

Моделирование движения тела под действием силы тяжести

На прошлой лабораторной работе мы получили программу, которая выводит на экран летающий круг, отражающийся от краёв.
10 SCREEN 9
20 CLS
30 X=60+RND*400
40 Y=60+RND*200
50 R=10+RND*40
60 C=INT(1+RND*15)
70 DT=0.1
80 VX=RND*20-10
90 VY=RND*20-10
100 CIRCLE(X,Y),R,0
110 X=X+VX*DT
120 Y=Y+VY*DT
130 CIRCLE(X,Y),R,C
140 IF X<=R OR X>=600-R THEN VX=-VX
150 IF Y<=R OR Y>=300-R THEN VY=-VY
160 GOTO 100
Теперь добавим сюда гравитацию. Вспоминаем физику. При движении брошенного тела, с ускорением g меняется вертикальная составляющая его скорости, VY. Значит, в программу нужно добавить 2 строки:
Инициализируем переменную G
75 G=1
Вычисляем новую вертикальную скорость
135 VY=VY+G*DT
Заодно отключим стирание предыдущего положення круга, чтобы он оставлял след. Это делается отключением строки 100. Её можно не удалять, а просто поставить после номера строки апостроф:
100 ‘CIRCLE(X,Y),R,0
Запускам программу, наблюдаем за изменениями в движении.
Теперь о том, как будет использоваться эта программа на рубеже.
Нужно будет в строках 30, 40, 50, 75, 80 и 90 вместо случайных значений задать некоторые числа - координаты круга, его радиус, ускорение свободного падения и начальную скорость.
Далее, запустив программу, нужно будет проследить его траекторию и зарисовать её.
Посмотрите, как ведёт себя круг при:
X
Y
R
G
VX
VY
1
100
120
80
1
4
-1
2
110
280
10
-1
-5
5
3
500
10
5
0
3
2
4
450
150
20
0.5
2
6
5
300
180
15
10
8
-15
С Днём студента!

четвер, 17 березня 2011 р.

Самостоятельная работа по теме Ввод данных

Задание 1.
Написать программу, которая реализует следующие функции:

На экране рисуется отрезок. Клавишами W, S, D, A можно изменять положение одного из концов отрезка, а клавишами 8, 4, 2, 6 - другого. Клавишами 1 и 3 можно изменять его цвет. По клавише 5 происходит очистка экрана.

Задание 2.
Написать программу, которая реализует следующие функции:

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