Поиск:

Ответ в темуСоздание новой темы Создание опроса
> игра сокобан 
:(
    Опции темы
xvr
Дата 1.12.2009, 20:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 48
Всего: 223



Цитата(ratgunter @ 1.12.2009,  18:05)
Блин, подскажите пожалуйста без всяких насмешек:
У меня есть Label1 и у него в Caption записано число 7.
Напишите плиз подробно, как это число записать в файл, 

Код

FILE* f=fopen("file.txt","wt");
fprintf(f,"%d\n",Label1->Caption.c_str());
fclose(f);


Цитата

а потом как его считать и загрузить например в Label2->Caption, 

Код

FILE* f=fopen("file.txt","rt");
int val;
fscanf(f,"%d",&val);
Label2->Caption=val;
fclose(f);



PM MAIL   Вверх
ratgunter
Дата 1.12.2009, 20:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 63
Регистрация: 17.11.2008

Репутация: нет
Всего: нет



Спасибо.
PM MAIL   Вверх
ratgunter
Дата 2.12.2009, 15:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 63
Регистрация: 17.11.2008

Репутация: нет
Всего: нет



Простите за тупой вопрос:
А перед написанием этих строк, где и что надо прописать(например прога ругается на  FILE и f)
Блин ступил, надо добавить stdio.h да?

Это сообщение отредактировал(а) ratgunter - 2.12.2009, 15:25
PM MAIL   Вверх
ratgunter
Дата 2.12.2009, 15:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 63
Регистрация: 17.11.2008

Репутация: нет
Всего: нет



У меня Label1->Caption==91;
А когда я открываю свой текстовый файл, то в нем не 91, а 17070136
Что это за цифры?

PM MAIL   Вверх
xvr
Дата 2.12.2009, 16:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 48
Всего: 223



Цитата(ratgunter @ 2.12.2009,  15:56)
У меня Label1->Caption==91;
А когда я открываю свой текстовый файл, то в нем не 91, а 17070136
Что это за цифры?

Это адрес строки  smile Я немного ошибся в формате printf - надо так
Код

fprintf(f,"%s\n",Label1->Caption.c_str());

PM MAIL   Вверх
ratgunter
Дата 2.12.2009, 17:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 63
Регистрация: 17.11.2008

Репутация: нет
Всего: нет



Спасибо! Сохраняет нормально!

Добавлено через 4 минуты и 47 секунд
Но теперь загружает из фала неправильно)
как загрузить например цифру 7
и как загрузить например Имя игрока
PM MAIL   Вверх
xvr
Дата 2.12.2009, 20:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 48
Всего: 223



Цитата(ratgunter @ 2.12.2009,  17:10)
Спасибо! Сохраняет нормально!

Добавлено @ 17:14
Но теперь загружает из фала неправильно)
как загрузить например цифру 7
и как загрузить например Имя игрока

Читать тоже строкой в массив
Код

char buf[1024];
fgets(buf,sizeof(buf),file);
Label1->Caption=AnsiString(buf).Trim();
Trim тут нужен что бы убрать символ '\n' в конце строки. Но при этом обрежутся все пробелы в начале и конце

PM MAIL   Вверх
ratgunter
  Дата 2.12.2009, 20:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 63
Регистрация: 17.11.2008

Репутация: нет
Всего: нет



Т.е. вот этот код
Код

char buf[1024];
fgets(buf,sizeof(buf),file);
Label1->Caption=AnsiString(buf).Trim();

надо написать вместо вот этого
Код

FILE* f=fopen("file.txt","rt");
int val;
fscanf(f,"%s",&val);
Label2->Caption=val;
fclose(f);

Или как?

Это сообщение отредактировал(а) ratgunter - 2.12.2009, 20:54
PM MAIL   Вверх
Platov
Дата 2.12.2009, 22:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 155
Регистрация: 23.7.2009

Репутация: 2
Всего: 2



может так легче будет...

Код

TStringList * text = new TStringList ; //общая часть

//запись
text->Clear;
text->Add(Label1->Caption);//число
text->Add(Label2->Caption);//имя
text->SaveToFile("file.txt");


//чтение
if (FileExists("text.txt")
 {
  text->LoadFromFile("text.txt");
  if (text->Count>1)
   {
    Label1->Caption=text->Strings[0]; //число
    Label2->Caption=text->Strings[1]; //имя
   }
 }


delete text; //общая часть


и число и имя будут жить в одном файле (это намёк на то что не следует каждый Label сохранять в отдельном файле... сохрани всё что надо в один конфигурационный файл)

Это сообщение отредактировал(а) Platov - 2.12.2009, 22:14
PM MAIL   Вверх
xvr
Дата 2.12.2009, 22:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 48
Всего: 223



Цитата(ratgunter @ 2.12.2009,  20:52)
Т.е. вот этот код
надо написать вместо вот этого

Угу

PS. Platov абсолютно прав по поводу сохранения всего в один файл (с помощью TStringList)

PM MAIL   Вверх
ratgunter
Дата 2.12.2009, 22:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 63
Регистрация: 17.11.2008

Репутация: нет
Всего: нет



Спасибо xvr и Platov!!!!
PM MAIL   Вверх
ratgunter
Дата 5.12.2009, 12:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 63
Регистрация: 17.11.2008

Репутация: нет
Всего: нет



Хочу сказать спасибо всем кто помогал. В игре у меня щас все работает. Осталось самое ужасное- редактор уровней.
Вообще что мне надо сделать:
1) Редактор уровней
2) Возможность сохранять созданные уровни, а потом их загружать.
3) К названию уровня добавлять имя создателя. 
 Прошу всех помочь в создании. Сперва хочу понять как, на чем и где его размещать в билдере и сам алгоритм:
1) Создать txt файл, в котором будет 10 рядов по 10 столбцов. 
 Пусть 1-ящик
           2-стена
           3-место для ящика
           4-крот.
Вопросы:
Как этот txt файл загрузить на форму, как для каждой цифры загрузить картинку(например "Крот.jpg")
Как потом это все двигать ну т.д.
Прошу помочь, надо сдавать 13 декабря.
PM MAIL   Вверх
xvr
Дата 5.12.2009, 15:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 48
Всего: 223



Цитата(ratgunter @ 5.12.2009,  12:33)
Вообще что мне надо сделать:
1) Редактор уровней
2) Возможность сохранять созданные уровни, а потом их загружать.
3) К названию уровня добавлять имя создателя. 
 Прошу всех помочь в создании. Сперва хочу понять как, на чем и где его размещать в билдере и сам алгоритм:
1) Создать txt файл, в котором будет 10 рядов по 10 столбцов. 
 Пусть 1-ящик
           2-стена
           3-место для ящика
           4-крот.
Вопросы:
Как этот txt файл загрузить на форму, 

Собственно сам уровень внутри редактора (и игры) лучше хранить в виде массива (2х мерного)
Код

char level[10][11];
11й char для завершающего 0. Сами данные хранить в виде символов (1/2/3/4 или лучше каких нибудь более осмысленных, например '*# K')
Запись в файл (параметр - имя создателя уровня):
Код

void SaveLevelToFile(AnsiString creator, AnsiString file_name)
{
 TStringList* sl=new TStringList;
 for(int i=0;i<10;++i) sl->Add(level[i]);
 sl->Add(creator);
 sl->SaveToFile(file_name);
 delete sl;
}
Чтение, возвращает имя создателя уровня:
Код

AnsiString LoadLevelFromFile(AnsiString file_name)
{
 TStringList* sl=new TStringList;
 sl->LoadFromFile(file_name);
 for(int i=0;i<10;++i) strncpy(level,sl->Strings[i].c_str(),10);
 AnsiString rv=sl->Strings[10];
 delete sl;
 return rv;
}
Инициализация массива уровней (для нового уровня)
Код

void init()
{
 for(int i=0;i<10;++i)
  {
   memset(level[i],' ',10);
   level[i][10]=0;
  }
}

Цитата

как для каждой цифры загрузить картинку(например "Крот.jpg")
Куда ее надо грузить?
Цитата

Как потом это все двигать ну т.д.
А не надо это двигать. Простейший редактор можно сделать просто задавая содержимое для каждой конкретной ячейки. Т.е. рисуем на экране курсор вокруг текущей ячейки (например рамкой), по нажатию определенных клавишь на клавиатуре помещаем в нее определенное значение (как на экране, так и в массиве level)

PM MAIL   Вверх
ratgunter
Дата 5.12.2009, 16:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 63
Регистрация: 17.11.2008

Репутация: нет
Всего: нет



Вопрос: я все же не пойму, ну запустил я билдер, у меня появилась пустая форма. И мне прям на ней создавать уровень? 
PM MAIL   Вверх
vikaz
Дата 5.12.2009, 22:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 869
Регистрация: 15.2.2006

Репутация: 10
Всего: 12



Цитата(ratgunter @  5.12.2009,  18:35 Найти цитируемый пост)
Вопрос: я все же не пойму, ну запустил я билдер, у меня появилась пустая форма. И мне прям на ней создавать уровень?  

Что значит прям здесь? Вам нужно написать еще одну небольшую программу, или встроить в игру, редактор уровней. Для этого нужно найти подходящий компонент для реализации массива 10х10 и на его базе и писать всю визуализацию..... Для этого можно ,попробовать, динамически построить сетку из TImage. Тем самым Вы сможете графически отображать что будет находиться в каждой клетке , ну а выбор, что может быть в определенной ячейке, можно сделать через PopupMenu. 


--------------------
user posted image

Нет ничего настолько исправного, чтобы в нем не было ошибок. /Ф. Петрарка/ 
PM MAIL ICQ Skype   Вверх
Страницы: (7) Все « Первая ... 3 4 [5] 6 7 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0598 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.