Показать сообщение отдельно
Старый 06.04.2007, 23:29   #8
Raiter
Гигант индустрии
 
Регистрация: 04.08.2006
Сообщений: 2,642
Написано 53 полезных сообщений
(для 92 пользователей)
Re: Помогите убить баг...

ну ведь у меня проверяется

1) координата MaxY,MinY \ MaxX, MinX в зависимости от типа движения (вверх, вниз, вправо, влево)
Например если вниз, то так:

For Tail = Each TypeTail
If Tail = First TypeTail Then MaxY = Tail\Ypos
If Tail\Xpos = Ball\Xpos And Tail\Ypos > MaxY Then MaxY = Tail\Ypos
Next

2) Если достигнут максимум\минимум, проверяются тайлы, которые находятся справа, слева \ вверху внизу. Если существует например только тайл, который находится справа и достигнут максимум по Y, то шарик перемещается вправо. Если и справа и слева есть тайлы то путь выбирается рандомно. Если ни справа ни слева нет тайлов - шарик никуда не двигается.

Вот например при движении вниз:

If Ball\Ypos < Ty Then
Ball\Ypos = Ball\Ypos + 1
For Sprite = Each TypeSprite
If Sprite\Ypos - Ball\Ypos = 24 And Sprite\Xpos = Ball\Xpos Then
For Tail = Each TypeTail
If Tail = First TypeTail Then MaxY = Tail\Ypos
If Tail\Xpos = Ball\Xpos And Tail\Ypos > MaxY Then MaxY = Tail\Ypos
Next
If MaxY => Ty + 25 Then
Sprite\Ty = Ty + 25
Else
Sprite\Ty = MaxY
If ST(Sprite\Xpos - 25,Sprite\Ypos) = True Then Tp = 0
If ST(Sprite\Xpos + 25,Sprite\Ypos) = True Then Tp = 1
If ST(Sprite\Xpos - 25,Sprite\Ypos) = False And ST(Sprite\Xpos + 25,Sprite\Ypos) = False Then Tp = 2
If ST(Sprite\Xpos - 25,Sprite\Ypos) = True And ST(Sprite\Xpos + 25,Sprite\Ypos) = True Then Tp = Rnd(1)

If Tp = 0 Then Sprite\Tx = Sprite\Xpos - 25
If Tp = 1 Then Sprite\Tx = Sprite\Xpos + 25
If Tp = 2 Then Sprite\Tx = Sprite\Xpos
End If
TypePath = 2
End If
Next
End If

А вот функция проверки существования тайла:

Function ST(Sx,Sy)
R = 0 : For Tail2 = Each TypeTail
If Tail2\Xpos = Sx And Tail2\Ypos = Sy Then R = R + 1
Next
If R > 0 Then : Return True : Else : Return False : End If
End Function

А вот так шарики двигаются:

For Sprite = Each TypeSprite
If TypePath = 1 Then
If Sprite\Xpos < Sprite\Tx Then Sprite\Xpos = Sprite\Xpos + 1
If Sprite\Xpos > Sprite\Tx Then Sprite\Xpos = Sprite\Xpos - 1

If Sprite\Xpos = Sprite\Tx Then
If Sprite\Ypos < Sprite\Ty Then Sprite\Ypos = Sprite\Ypos + 1
If Sprite\Ypos > Sprite\Ty Then Sprite\Ypos = Sprite\Ypos - 1
End If
End If
If TypePath = 2 Then
If Sprite\Ypos < Sprite\Ty Then Sprite\Ypos = Sprite\Ypos + 1
If Sprite\Ypos > Sprite\Ty Then Sprite\Ypos = Sprite\Ypos - 1

If Sprite\Ypos = Sprite\Ty Then
If Sprite\Xpos < Sprite\Tx Then Sprite\Xpos = Sprite\Xpos + 1
If Sprite\Xpos > Sprite\Tx Then Sprite\Xpos = Sprite\Xpos - 1
End If
End If
Next

Так где мой алгоритм недописан?
Обясните мне - непонятливому плиз!
(Offline)