Программа, создающая нагромождение шаров (20 мин)
Создадим заголовок:
GRAPHICS3D 640,480
cam = CREATECAMERA()
l = CREATELIGHT()
ROTATEENTITY l, 45, 45, 0
Создадим и оттектурируем плоскость:
grass = LOADTEXTURE("C:\MEDIA\GRASS.JPG")
SCALETEXTURE grass, 16, 16
p =
CREATEPLANE()
POSITIONENTITY p, 0, -5, 0
ENTITYTEXTURE p, grass
Зададим тип плоскости, равным 1, тип шаров будет равным 2:
ENTITYTYPE p, 1
Шары (2) могут сталкиваться с плоскостью (1), которая определяется, как многогранник(2), при этом они будут останавливаться (1):
COLLISIONS 2, 1, 2, 2
Шары (2) могут сталкиваться с другими шарами (2), которые определяются, как сферы(1), при этом они будут скользить(2):
COLLISIONS 2, 2, 1, 2
Когда переменная s равна 0, это означает, что нужно создать новый шар:
s = 0
Бесконечный цикл:
REPEAT
IF s = 0 THEN
Создаем шар, если s = 0, задаем его тип (2) и радиус сферы столкновения (1):
s =
CREATESPHERE()
ENTITYTYPE s, 2
ENTITYRADIUS s, 1
Задаем случайное местоположение шара на высоте 12:
POSITIONENTITY s, RND(-5,5), 12, RND(10,20)
END IF
Заносим текущие координаты шара в три переменные:
sx# = ENTITYX(s)
sy#
= ENTITYY(s)
sz#
= ENTITYZ(s)
Шар перемещается вниз под воздействием гравитации:
MOVEENTITY s, 0, -0.3, 0
Проверяем столкновения:
UPDATEWORLD
Если координаты шара не изменились, то он прочно застрял и нужно бросать новый шар:
IF sx# = ENTITYX(s) AND sy#=ENTITYY(s) AND SZ# = ENTITYZ(s) THEN s = 0
Завершаем цикл, визуализируем сцену:
IF KEYDOWN(1) THEN EXIT
RENDERWORLD
FLIP
FOREVER