forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Основной форум (http://forum.boolean.name/forumdisplay.php?f=49)
-   -   Запись в ресурс (http://forum.boolean.name/showthread.php?t=6392)

Smarik 21.09.2008 22:51

Запись в ресурс
 
Здравствуйте, интересует такой вопрос, есть ли функция записи в ресурс? Аналог readline только наоборот, writeline...ну вы меня поняли =).

EVIL_USER 21.09.2008 23:47

Ответ: Запись в ресурс
 
А каким раком оно сохраняться будет?
Препаковывать то джар никто не станет, он средствами телефона по идее изменяться не должен (а то бы вирусов писали все кому не лень).
Хотя оно конечно может в папке с сейвами сохраниться, но тут уже надо смотреть у каждого конкретного мобильника как оно реализовано.
Но это собственно уже так, лирические отступления.

В общем, пиши в файл.

Smarik 22.09.2008 15:10

Ответ: Запись в ресурс
 
Цитата:

Сообщение от EVIL_USER (Сообщение 86600)
А каким раком оно сохраняться будет?
Препаковывать то джар никто не станет, он средствами телефона по идее изменяться не должен (а то бы вирусов писали все кому не лень).
Хотя оно конечно может в папке с сейвами сохраниться, но тут уже надо смотреть у каждого конкретного мобильника как оно реализовано.
Но это собственно уже так, лирические отступления.

В общем, пиши в файл.

Тоесть создавать файл в телефоне и в него писать? Не очень понял, я пытаюсь реализовать "Рекорды игры". Если можно то код напишите.

Phantom 22.09.2008 15:45

Ответ: Запись в ресурс
 
Тогда тебе в rms надо писать. Либа есть. Но помочь не могу. Я её не юзал. Вообще ещё с rms не работал ни разу.

Romanzes 22.09.2008 18:43

Ответ: Запись в ресурс
 
Вот как делал я:

Сначала в какой-нибудь процедуре типа init пишешь
Код:

ScrW:=GetWidth;
ScrH:=GetHeight;
scores_rs:=OpenRecordStore('scores');
//Если нет Highscores, то заполняем таблицу Романами
if GetRecordStoreSize(scores_rs)=0 then
begin
  for i:=1 to 10 do h:=AddRecordStoreEntry(scores_rs,'Roman$'+IntegerToString((11-i)*5000));
end;

Процедура для записи нового рекорда:
Код:

procedure AddHighscore; //Запрос имени игрока для занесения в таблицу рекордов
var
  i,place: integer;
  scores: array[1..10] of integer;
  TextId: integer;
  ok: command;
begin
  for i:=1 to 10 do scores[i]:=StringToInteger(Copy(ReadRecordStoreEntry(scores_rs,i),
          Pos(ReadRecordStoreEntry(scores_rs,i),'$')+1,
          Length(ReadRecordStoreEntry(scores_rs,i)))); //Считываем таблицу из Record store
  if player1.score>scores[10] then //Если место выше 10-го
  begin
    ClearForm;
    ShowForm;
    SetFormTitle('Круто!');
    TextId:=FormAddImage(LoadImage('/ThumbUp.png'));
    TextId:=FormAddTextField('Введите ваше имя:','',5,TF_ANY);
    ok:=CreateCommand('OK',CM_OK,1);
    AddCommand(ok);
    while GetClickedCommand<>ok do Delay(100);
    for i:=10 downto 1 do if player1.score>scores[i] then place:=i; //Вычисляем занятое место
    for i:=9 downto place do //Переносим часть таблицы вниз
      ModifyRecordStoreEntry(scores_rs,ReadRecordStoreEntry(scores_rs,i),i+1);
    //И вписываем имя игрока!
    ModifyRecordStoreEntry(scores_rs,FormGetText(TextId)+'$'+IntegerToString(player1.score),place);
    ShowCanvas;
  end;
  RemoveCommand(ok);
  HighScores; //Показываем рекорды
end;

Процедура для считывания и отображения рекордов:

Код:

procedure Highscores; //Рекорды
var
  i:integer;
  WinX,WinY,WinW,WinH: integer; //Координаты "окна" рекордов
  s: string;
  back: command;
begin
  Font(0);
  WinW:=128;
  WinH:=font32.TextHeight*10+6;
  WinX:=(ScrW-WinW) div 2;
  WinY:=(ScrH-WinH) div 2;
  SetColor(200,200,0);
  FillRect(0,0,ScrW,ScrH);
  SetColor(200,200,200);
  FillRoundRect(WinX,WinY,WinW,WinH,6,6);
  SetColor(0,0,0);
  DrawRoundRect(WinX,WinY,WinW,WinH,6,6);
  for i:=1 to 10 do //Рисуем таблицу рекордов
  begin
    s:=ReadRecordStoreEntry(scores_rs,i);
    font32.DrawString(IntegerToString(i)+'. '+Copy(s,0,Pos(s,'$')),
                              WinX+3,WinY+3+(i-1)*font32.TextHeight);
    font32.DrawString(Copy(s,Pos(s,'$')+1,Length(s)),WinX+WinW-3-
                              font32.TextWidth(Copy(s,Pos(s,'$')+1,
                      Length(s))),WinY+3+(i-1)*font32.TextHeight);
  end;
  back:=CreateCommand('Back',CM_CANCEL,1);
  AddCommand(back);
  Repaint;
  while GetClickedCommand<>back do Delay(100);
  RemoveCommand(back);
  Menu;
end;

Если здесь че непонятно, спрашивай.

Smarik 22.09.2008 21:27

Ответ: Запись в ресурс
 
Спасибо большое, оставлю ето на дисерт, еще пробблемы бывают с основным циклом и процедурами, сейчас схематично попробую объяснить.
процедура лого
процедура новой игры
процедура рекордов
процедура помощи
процедура о разработчиках
процедура меню
бегин
процедура лого
процедура меню
енд;
я в каждой процедуре после завершения ее работы пишу вызов процедуры лого чтобы потом попасть в меню, не очень красиво, но днйствинно, проблема в том что я использую графическое меню (Menu32) И их функция selected после выбора например процедуры помощь всегда будет хранить в себе число 2, тоесть при входе в процедуру помощь, жмем назад запускается процедура лого, далее проверяется selected в нем стоит 2 и он запускает процедуру помощи...так бесконечно, как зачистить selected? или как вы работаете с основным циклом чтобы все грамотно было?

Romanzes 22.09.2008 21:55

Ответ: Запись в ресурс
 
Вот, покури исходник:
http://forum.boolean.name/attachment...0&d=1218131066

odd 23.09.2008 06:15

Ответ: Запись в ресурс
 
При инициализации Init. Переменная selected тут же обнуляется. На крайний случай есть процедура SetCursor. Так что нечего гнать на библиотеку. Там всё правильно. Это видимо ты selected хранишь в какой-то переменной и забываешь её сбрасывать при создании нового меню.

Smarik 24.09.2008 15:47

Ответ: Запись в ресурс
 
Цитата:

Сообщение от odd (Сообщение 86670)
При инициализации Init. Переменная selected тут же обнуляется. На крайний случай есть процедура SetCursor. Так что нечего гнать на библиотеку. Там всё правильно. Это видимо ты selected хранишь в какой-то переменной и забываешь её сбрасывать при создании нового меню.

никакие переменные для етого не использовал, но то что игра сама начинается ето факт, причина может не в библиотеке, еще не понравилось в menu32 что значение в Selected заносится при наводе на пункт меню, а не при щелчке по нему, усложняет некоторые моменты.

odd 25.09.2008 06:23

Ответ: Запись в ресурс
 
А, ты про сенсорный экран говоришь... Ладно, я гляну в чем там дело...
Помнится кто-то заокеанский тоже на Lib_sensor жаловался...

Smarik 25.09.2008 20:40

Ответ: Запись в ресурс
 
Причем тут сенсор, просто я поставил условие
repeat
until clicked=4
4 - ето пункт меню выход, решил протестить, просто навел на выход не нажимая и игра завершилась

odd 26.09.2008 06:30

Ответ: Запись в ресурс
 
Библиотека не опрешивает клаву. Это ты должен прописать сам.
Например, так:
PHP код:

repeat
    Delay
(50);
    
key:=KeyToAction(GetKeyClicked);
    if 
key=GA_FIRE then break;
until false;
s:=selected;
if 
s=0 then ....
if 
s=1 then ....
if 
s=2 then .... 


Kurdt 26.09.2008 13:50

Re: Запись в ресурс
 
Юзай в репите одну процедуру, далее в цыкле вызывется другая процедура, после ее окончания снова в цикле срабатует автоматом первая процедура, и ненадо ее вызывать везде... немного фантазии

типа такого
Код:

Procedure puskrepeat;
Var i:integer;
Begin
exitpusk:=false;
Repeat

i:=puskmain(i);

until exitpusk;

end;


Smarik 27.09.2008 18:35

Ответ: Re: Запись в ресурс
 
Цитата:

Сообщение от Kurdt (Сообщение 86907)
Юзай в репите одну процедуру, далее в цыкле вызывется другая процедура, после ее окончания снова в цикле срабатует автоматом первая процедура, и ненадо ее вызывать везде... немного фантазии

типа такого
Код:

Procedure puskrepeat;
Var i:integer;
Begin
exitpusk:=false;
Repeat

i:=puskmain(i);

until exitpusk;

end;


Как раз вот такой епанутый метод я и использовал, теперь предтавим
repeat
procedure logo
procedure menu
if 1=1 then procedure game
if 1=2 then procedure about
if 1=3 then procedure exit
procedure result
until
включаем игру видим лого, попадаем в меню, там выбираем например "Об игре" прочитали, выходим назад, а что сзади? Сзади по циклу идет result, посмотрели результат непонятного чего и иедм опять смотреть лого, меню, выбираем игру, играем и хотим выйти в меню...но меню нет по циклу, смотрим результат, лого и вот оно меню...посоветуйте что нить по продуманнее.

Smarik 27.09.2008 18:53

Ответ: Запись в ресурс
 
ну чтоб не создавать кучу тем и не превращать форум в помойку, лучше превращу в помойку ету тему.
Как можно свернуть приложение?
Как можно проверить сколько оперативки свободно?
Вообще как работать с железом, есть стандартные функции или какие то библиотеки?


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

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