Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для мобильных телефонов > MidletPascal > Основной форум

Основной форум Сюда все проблемы связанные с программированием.

Ответ
 
Опции темы
Старый 20.08.2008, 12:57   #1
Smarik
AnyKey`щик
 
Аватар для Smarik
 
Регистрация: 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;
Когда игра доходит до етой процедуры видно черный екран
Внизу сам файл игры
Вложения
Тип файла: zip FedorGame.zip (93.5 Кб, 386 просмотров)
(Offline)
 
Ответить с цитированием
Старый 20.08.2008, 14:26   #2
ViNT
Модератор
 
Регистрация: 03.04.2007
Сообщений: 2,252
Написано 597 полезных сообщений
(для 817 пользователей)
Ответ: Не вижу ошибку

По такому отрезку кода сложно понять, что делает программа.
(Offline)
 
Ответить с цитированием
Старый 20.08.2008, 15:06   #3
Smarik
AnyKey`щик
 
Аватар для Smarik
 
Регистрация: 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
vitalik1
Оператор ЭВМ
 
Регистрация: 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
Smarik
AnyKey`щик
 
Аватар для Smarik
 
Регистрация: 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)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Опять я, не вижу ошибки в кодинге temned Основной форум 8 29.09.2008 21:11
Помогите найти ошибку! archerix Основной форум 3 08.09.2006 02:51
Найди ошибку Samhein Основной форум 10 14.01.2006 21:26


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


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com