|
Основной форум Сюда все проблемы связанные с программированием. |
20.08.2008, 12:57
|
#1
|
AnyKey`щик
Регистрация: 15.08.2008
Адрес: Кемерово
Сообщений: 17
Написано 0 полезных сообщений (для 0 пользователей)
|
Не вижу ошибку
procedure NewGame;
var
key:integer;
exit,clicked:command;
begin
FillRect(0,0,getWidth,GetHeight);
lev.level:=1;
lev.img:=LoadImage('levimg'+lev.level+'.PNG');
lev.x:=(GetWidth/2)-(GetImageWidth(lev.img)/2);
lev.y:=(GetHeight/2)-(GetImageHeight(lev.img)/2);
fed.img:=LoadImage('/4.PNG');
fed.x:=(GetWidth/2)-(GetImageWidth(fed.img)/2);
fed.y:=(GetHeight/2)-(GetImageHeight(fed.img)/2);
fed.st:='right';
exit := CreateCommand('Выход', CM_EXIT, 1);
AddCommand(exit);
repeat
FillRect(0,0,getWidth,GetHeight);
if score<99 then lev.level:=1;
if (score>100) and (score<199) then lev.level:=2;
if (score>200) and (score<399) then lev.level:=3;
if (score>400) and (score<699) then lev.level:=4;
if (score>700) and (score<=1000) then lev.level:=5;
fed.speed:=lev.level;
randomize;
if fed.st='left' then
begin
fed.rand:=random(3);
fed.img:=LoadImage('/'+fed.rand+'.PNG');
end;
if fed.st='right' then
begin
fed.rand:=random(6)-3;
fed.img:=LoadImage('/'+fed.rand+'.PNG');
end;
DrawImage(lev.img,lev.x,lev.y);
DrawImage(fed.img,fed.x,fed.y);
key:=GetKeyPressed;
if key=KE_KEY2 then
fed.y:=fed.y-fed.speed;
if key=KE_KEY8 then
fed.y:=fed.y+fed.speed;
if key=KE_KEY6 then
begin
fed.st:='right';
fed.x:=fed.x+fed.speed;
end;
if key=KE_KEY4 then
begin
fed.st:='left';
fed.x:=fed.x-fed.speed;
end;
repaint;
delay(50);
clicked := getClickedCommand;
until clicked = exit;
if clicked=exit then halt;
removeCommand(exit);
end;
Когда игра доходит до етой процедуры видно черный екран
Внизу сам файл игры
|
(Offline)
|
|
20.08.2008, 14:26
|
#2
|
Модератор
Регистрация: 03.04.2007
Сообщений: 2,252
Написано 597 полезных сообщений (для 817 пользователей)
|
Ответ: Не вижу ошибку
По такому отрезку кода сложно понять, что делает программа.
|
(Offline)
|
|
20.08.2008, 15:06
|
#3
|
AnyKey`щик
Регистрация: 15.08.2008
Адрес: Кемерово
Сообщений: 17
Написано 0 полезных сообщений (для 0 пользователей)
|
Ответ: Не вижу ошибку
Я бы не назвал ето отрезком, процедура в полную ее велечину, некоторые переменные просто описаны как глобальные, сейчас опишу все действия, возможно станет понятнее.
procedure NewGame;
var
key:integer;
exit,clicked:command;
begin
FillRect(0,0,getWidth,GetHeight);
lev.level:=1;
{загружаем какртинку в зависимости от уровня}
lev.img:=LoadImage('levimg'+lev.level+'.PNG');
{находим координаты центра екрана}
lev.x:=(GetWidth/2)-(GetImageWidth(lev.img)/2);
lev.y:=(GetHeight/2)-(GetImageHeight(lev.img)/2);
{загружаем персонажа}
fed.img:=LoadImage('/4.PNG');
{находим координаты центра екрана}
fed.x:=(GetWidth/2)-(GetImageWidth(fed.img)/2);
fed.y:=(GetHeight/2)-(GetImageHeight(fed.img)/2);
{говорим что персонаж смотрит направо}
fed.st:='right';
{софт клавиша}
exit := CreateCommand('Выход', CM_EXIT, 1);
AddCommand(exit);
repeat
FillRect(0,0,getWidth,GetHeight);
{проверяем содержание переменной Score и устанавливаем уровень}
if score<99 then lev.level:=1;
if (score>100) and (score<199) then lev.level:=2;
if (score>200) and (score<399) then lev.level:=3;
if (score>400) and (score<699) then lev.level:=4;
if (score>700) and (score<=1000) then lev.level:=5;
{устанавливаем скорость персонажа в зависимости от уровня}
fed.speed:=lev.level;
{рендом для создания анимации}
randomize;
{если персонаж смотрит налеов загружаем либо 0.PNG или 1.PNG или 2.PNG, получается анимация}
if fed.st='left' then
begin
fed.rand:=random(3);
fed.img:=LoadImage('/'+fed.rand+'.PNG');
end;
{аналогично в другую сторону}
if fed.st='right' then
begin
fed.rand:=random(6)-3;
fed.img:=LoadImage('/'+fed.rand+'.PNG');
end;
{рисуем задний план и персонажа}
DrawImage(lev.img,lev.x,lev.y);
DrawImage(fed.img,fed.x,fed.y);
{управление}
key:=GetKeyPressed;
if key=KE_KEY2 then
fed.y:=fed.y-fed.speed;
if key=KE_KEY8 then
fed.y:=fed.y+fed.speed;
if key=KE_KEY6 then
begin
fed.st:='right';
fed.x:=fed.x+fed.speed;
end;
if key=KE_KEY4 then
begin
fed.st:='left';
fed.x:=fed.x-fed.speed;
end;
repaint;
delay(50);
clicked := getClickedCommand;
{ждем нажатия клавиши выход}
until clicked = exit;
if clicked=exit then halt;
{удаляем софт клавишу}
removeCommand(exit);
end;
|
(Offline)
|
|
21.08.2008, 00:37
|
#4
|
Оператор ЭВМ
Регистрация: 11.11.2007
Сообщений: 26
Написано 6 полезных сообщений (для 10 пользователей)
|
Ответ: Не вижу ошибку
замени lev.img:=LoadImage('levimg'+lev.level+'.PNG');
на lev.img:=LoadImage('/levimg'+lev.level+'.PNG');
несколько советов:
1. Вместо строк 'right' и 'left' используй константы:
const
left=1;
right=2;
if key=KE_KEY6 then
begin
fed.st:=right;//fed.st типа integer
fed.x:=fed.x+fed.speed;
end;
if key=KE_KEY4 then
begin
fed.st:=left;
fed.x:=fed.x-fed.speed;
end;
2. не используй софт клавиш
3. загрузи все изображения в масив а потом используй, а не грузи каждый раз
4. вместо fed.rand:=random(6)-3; пиши fed.rand:=random(3)+3;
random(6)-3 возвращает от -3 до 2
ты грузиш рисунки -3.PNG -2.PNG -1.PNG 0.PNG 1.PNG 2.PNG
Последний раз редактировалось vitalik1, 21.08.2008 в 00:53.
|
(Offline)
|
|
21.08.2008, 15:06
|
#5
|
AnyKey`щик
Регистрация: 15.08.2008
Адрес: Кемерово
Сообщений: 17
Написано 0 полезных сообщений (для 0 пользователей)
|
Ответ: Не вижу ошибку
чем плохи софт клавиши? Я заметил что в основной игровой процедуре они как то странно глючат и какие альтернативы использовать?
изначально я пробовал через массив, но не работало...
procedure NewGame;
var
key,i:integer;
exit,clicked:command;
img:array[0..5] of image;
begin
FillRect(0,0,getWidth,GetHeight);
lev.level:=1;
lev.img:=LoadImage('/levimg'+lev.level+'.PNG');
lev.x:=(GetWidth/2)-(GetImageWidth(lev.img)/2);
lev.y:=(GetHeight/2)-(GetImageHeight(lev.img)/2);
DrawImage(lev.img,lev.x,lev.y);
delay(3000);
repaint;
lev.lev:=LoadImage('/level'+lev.level+'.PNG');
lev.x:=(GetWidth/2)-(GetImageWidth(lev.lev)/2);
lev.y:=(GetHeight/2)-(GetImageHeight(lev.lev)/2);
for i:=0 to 5 do
img[i]:=LoadImage('/'+i+'.PNG');
fed.x:=(GetWidth/2)-(GetImageWidth(img[1])/2);
fed.y:=(GetHeight/2)-(GetImageHeight(img[i])/2);
fed.st:=right;
repeat
FillRect(0,0,getWidth,GetHeight);
fed.speed:=2;
randomize;
if fed.st=left then
fed.rand:=random(3);
if fed.st=right then
fed.rand:=random(3)+3;
DrawImage(lev.lev,lev.x,lev.y);
DrawImage(img[fed.rand],fed.x,fed.y);
key:=GetKeyPressed;
if key=KE_KEY2 then
fed.y:=fed.y-fed.speed;
if key=KE_KEY8 then
fed.y:=fed.y+fed.speed;
if key=KE_KEY6 then
begin
fed.st:=right;
fed.x:=fed.x+fed.speed;
end;
if key=KE_KEY4 then
begin
fed.st:=left;
fed.x:=fed.x-fed.speed;
end;
repaint;
delay(50);
until key=ke_key0;
end;
немного оптимизировал код
массив
Последний раз редактировалось Smarik, 21.08.2008 в 16:21.
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 06:36.
|