forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   2D-программирование (http://forum.boolean.name/forumdisplay.php?f=13)
-   -   Помогите убить баг... (http://forum.boolean.name/showthread.php?t=3115)

Raiter 06.04.2007 17:03

Помогите убить баг...
 
Вложений: 2
Короче делаю игру по типу лайнс... Про неё можна прочитать в теме "Играли бы вы в это?" в болтовне...

В аттаче лежит "редактор" и игра..

В игре управление мышой... (правой кнопкой добавить шарик)
Вводить название левла без формата .rtr

Баг заключается в сделующем. Когда мы толкаем шарики - они должны "скользить о бортики". Что это работает можна увидеть загрузив уровень "1". (Пока толкать можна только 1 шарик). Но если загрузить другие уровни. "2", "5" например, то можна заметить баг при толкании... Шарик не скользит, а выходит за пределы уровня... (это только в некоторых местах уровня)... Короче сами увидите...

помогите убить баг ... я никак не могу понять откуда он взялся... :SOS:

+ если кому нада. управление в редакторе:

Создать новый тайл - N
Сохранить уровень - S
Выход - Q
Выделить - левая кнопка мыши
Снять выдиление - правая или пробел

перемещать кнопками управления курсора :)

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

Raiter 06.04.2007 19:33

Re: Помогите убить баг...
 
up

только ща заметил что архив не приаттачил! оказываеццо что моих файлов на форуме ужо на 31 мб :( пришлось усё нах снести...

да ишо! если вы уже скачали то там наверняка при компиляции вылетит ошибка... в том месте просто нужно заменить Tail2 на Tail... случайно поставил 2.. и только что заметил...

архив ща поправлю

alcoSHoLiK 06.04.2007 20:10

Re: Помогите убить баг...
 
Это не баг, это ошибка в логике алгоритма движения. Там я еще парочку таких заметил.

Если тебе начнут отлавиливать баги, кто тогда будет программистом? Один раз помочь несложно, но если такое случилось раз, то по ходу разработки подбные "баги" будут выскакивать постоянно. Нужно набраться опыта, а если будут писать за тебя, опыта не будет.

UPD:
Советую прокомментировать весь код. Вероятность помощи повысится на 60% процентов.

Raiter 06.04.2007 20:26

Re: Помогите убить баг...
 
1) это вообще первая моя просьба помочь исправить код на этом форуме!
2) другие ошибки, которые были до этого я исправлял сам!
3) про другие не исправленные ошибки я знаю. например то что Ball может вылазить за пределы уровня... но их я исправлять ведь не прошу! с ними я и сам разберусь... бывают моменты когда просто никак не понимаеш в чём собственно дело.. вот у меня такой момент сейчас... почему тогда в уровне "1" всё нормально, а в других в некоторых местах происходит эта фигня? я не знаю.. вот и прошу помочь!

ZanoZa 06.04.2007 20:39

Re: Помогите убить баг...
 
никто кроме тебя, твой код не поймет. имхо

Raiter 06.04.2007 20:47

Re: Помогите убить баг...
 
чего это? имхо оч даже понятный код :)

alcoSHoLiK 06.04.2007 21:41

Re: Помогите убить баг...
 
Понятный он будет с комментариями.
Цитата:

почему тогда в уровне "1" всё нормально, а в других в некоторых местах происходит эта фигня? я не знаю.. вот и прошу помочь!
Вроде очевидно, что в первом уровне некуда вылезть - там прямоугольник. В 3-м тоже.
Остальные же уровни предполагают проверку пути, по которому движется шарик. Если он собирается вылезть за поле, нужно это пресекать и заставить его двигаться другим путем (их всегда не меньше двух при перемещении между клетками по диагонали).
В 4-м уровне шарик двигается по прямой, игнорируя пределы поля.

Это не баг, это просто недописанный алгоритм передвижения.

Raiter 06.04.2007 23:29

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

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

Raiter 06.04.2007 23:47

Re: Помогите убить баг...
 
Вложений: 2
или блин не сикать координаты Max и Min, а просто поверерять тайлы не и по Х,и по Y ?

пример в аттаче. голубым - проверяемые тайлы

Raiter 07.04.2007 20:55

Re: Помогите убить баг...
 
кстать если просто не в состоянии помочь то лучьше помолчать! а если писать - то по существу!

alcoSHoLiK 07.04.2007 22:07

Re: Помогите убить баг...
 
Цитата:

Сообщение от Raiter
ну млять спасибо за помощЬ!

У тебя даже на суток терпения не хватило)

Думаю, если автор позволяет себе разводить такой оффтоп в собственной же теме, она его больше не интересует.


Часовой пояс GMT +4, время: 16:04.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot