Помощь - Поиск - Пользователи - Календарь
Полная версия: Kraz
Форум «Всё о Паскале» > Pascal, Object Pascal > Написание игр
orgx100
Здраствуйте дорогие читатели, возникла каверзная ситуация...вообщем к главному..
Вот нада написать программу, гонки с препятсвиями, возникла ситуация с созданием двумерного масива для создания поля препятсвий, сам накидал чуток но чет аж паскаль начал глючить smile.gif вобщем вот она самаНажмите для просмотра прикрепленного файла , кто может помагите в течения 1-2 дня, ну или просто на будущие подскажите, и не судите строго по написанию, тока начал учиться ....
volvo
Причина отказа программы работать - банальна, обычный Range Check Error - вылет за границу. В данном случае - за границу типа.

Проблема - вот в этом куске кода:
Цитата
 s1:=0;     {Зануление с1}
xa1:=50;
ga1:=0; {Зануление га1}
for j:=1 to f do {Начало двумерного массива, столбец }
begin
ga1:=ga1+1; {накрутка га1 }
xa1:=xa1*ga1; { задание дистанции между столбцами массива,тоесть колонны выхода колец.}

Вот именно в последней строке и происходит вылет. Потому что переменная xa1 описана, как Integer - стало быть может хранить значения от -32768 до 32767, а при J = 6 ты пытаешься запихать туда 6000*6=36000.
orgx100
да с этим понятно поменял на лонг, но толку, сама игра прерываеться на создании масива, и даже начальные местоположение непоказывает, мб кто знает или подкинет пример написания масива или как то по другому , чтоб создать это поле помех, появляющихся с правого угла , рандомно в строках появляють помехи, и с дальнейшим появление за этими же помехами нового ряда, я пока еще несообразил.Заране спасибо.
volvo
Цитата
да с этим понятно поменял на лонг, но толку
... от этого никакого и не будет. Думать начни. Какими ты значениями оперируешь, подумай! У тебя что хранится во всех этих массивах-то? Координаты точек на экране? Извини, разрешение экрана это 640*480, а не сотни тысяч.

А теперь, внимание, маленький эксперимент: меняем типы ВСЕХ переменных и массивов, кроме GD и GM (они должны быть типа Integer) на LongInt, меняем также ВСЕ подпрограммы, чтобы они принимали и возвращали только LongInt, и добавляем в программу одну строку:
 s1:=0; { Зануление с1 }
xa1:=50;
ga1:=0; { Зануление га1 }
for j:=1 to f do
begin
ga1:=ga1+1; { накрутка га1 }
writeln(j:3, xa1:15, ga1:15); { <--- !!! Вот эту !!! }
xa1:=xa1*ga1;
for i:=1 to n do
, чтобы узнать, с какими ты значениями работаешь, насколько они велики... Что видим? А вот что:

1 50 1
2 50 2
3 100 3
4 300 4
5 1200 5
6 6000 6
7 36000 7
8 252000 8
9 2016000 9
10 18144000 10
11 181440000 11
12 1995840000 12

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

Во-первых, имена переменным дай нормальные, чтоб можно было не читая твои сноски, а сразу, читая любой кусок программы, разобраться, что там происходит. Во-вторых - код отформатируй лесенкой, а то глаза ломаются, туда-сюда скакать. И в третьих - все-таки разберись, что у тебя происходит в этом цикле, откуда такие огромные значения... И только потом пытайся исправить что-то и запускать...
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.