Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Программирование с нуля - это совсем просто! 137) Программирование спрайтовых игр: Работа с файлами


Школа программирования

137) Программирование спрайтовых игр: Работа с файлами

Средства работы с файлами в Blitzbasic не сильно отличаются от стандартных возможностей файловой обработки других сред программирования. Перед началом работы файл надо открыть на запись либо на чтение, затем выполнить необходимые операции по его обработке, после чего - закрыть.

Для открытия файла (файл должен существовать!) с последующей модификацией его содержимого применяется команда

  OpenFile (filename$)

filename$ - строка, содержащая полный или относительный (относительно каталога с запускаемой программой) путь к файлу.

Команда возвращает условное значение идентификатора файла, по которому в дальнейшем к нему можно обращаться в ходе обработки.

  fout = OpenFile("c:\projects\games\starwars\scores.dat")

Чаще всего файл открывается либо только на чтение, либо только на запись. Открытие файла только для чтения выполняется командой

  ReadFile (filename$)
  fin = ReadFile ("c:\projects\games\starwars\scores.dat")

Открытие файла только для записи (при этом все старое содержимое файла при открытии уничтожется!) выполняется командой

WriteFile (filename$)

Если файл не существует, то он создается (пустым).

В случае ошибки выполнения команды (например, попытки открытия несуществующего файла командой OpenFile) в качестве значения идентификатор файла возвращается ноль.

Для закрытия ранее открытого файла применяется команда

CloseFile(идентификатор-файла)
CloseFile( fout )

Если файл после обработки не закрыть, то записанные в нем данные могут быть утеряны!

Запись в файл

Blitzbasic предлагает удобные функции для записи значений разных типов в файл.

WriteInt (filehandle, myinteger)
WriteFloat (filehandle, myfloat)
WriteString (filehandle, mystring)

Эти функции предлагают соответственно запись в файл (в конец файла, следом за последним данным) целого значения, дробного и строки (что удобно, строка может быть произвольной длины). Первым параметром указывается идентификатор ранее открытого файла.

Чтение из файла

Схожими по назначению функциями, которые считывают ранее записанные в файл данные, будут следующие:

ReadInt (filehandle)
ReadFloat (filehandle)
ReadLine (filehandle)

Они возвращают в качестве своего значения очередные считанные из файла данные - целое, дробное или строку.

Кроме того, полезная функция

Eof (filehandle)

возвращает true, если в ходе выполнения последней операции ввода-вывода был достигнут конец файла (файл был прочитано полностью)

Другие полезные функции

FileSize (filename$) - возвращает размер файла в байтах
CopyFile from$, to$ - копирует файл from$ (путь к файлу) в файл to$
DeleteFile filename - удаляет файл
CurrentDir$() - возвращает текущий каталог
CreateDir path - создает каталог
DeleteDir directory - удаляет каталог (он должен быть пустым!)
FileType (filename$) - если возвращает 1, то файл есть; если 0-файла нету. если 2-это не файл, а каталог :)

Пример

В данном коде показано, как первоначально создается файл mydata.dat, затем в него последовательно сохраняются значения разных типов, а затем вновь считываются и показываются на экране. При считывании необходимо, конечно, придерживаться порядка записи этих данных в файл (если первым записывались данные целого типа, то и считывать их надо первыми):

  Int1% = 10
  Num1# = 3.14
  String1$ = "Это строка"

  ; открываем для записи
  fileout = WriteFile("mydata.dat")

  ; поочередно записываем
  WriteInt( fileout, Int1 )
  WriteFloat( fileout, Num1 )
  WriteLine ( fileout, String1 )

  ; закрываем
  CloseFile( fileout )

  ; открываем для чтения
  filein = ReadFile("mydata.dat")

  Read1% = ReadInt( filein )
  Read2# = ReadFloat( filein )
  Read3$ = ReadLine ( filein )
   
  ; закрываем
  CloseFile( filein )

  ; выводим на экран
  Print Read1
  Print Read2
  Print Read3

  WaitKey()

Следующий пример - сканирование содержимого текстового файла и вывод его на экран:

  file$="c:\tmp\pismo.txt"
  filein = ReadFile(file$)

  ; цикл, пока не конец файла
  while not Eof(filein)
  Print ReadLine$(filein)
  Wend

Необязательное задание.
Сделайте программу - имитатор таблицы лучших результатов, которая запрашивает у пользователя его имя (необходимо написать маленький редактор командной строки - ввод символов и возможность уничтожения последней буквы с помощью клавиши backspace), присваивает ему некоторое случайное числовое значение ("достижение в баллах") и сохраняет во внутреннем массиве лучших результатов длиной 10 элементов.
Таблица результатов после каждого ввода имени сохраняется на диске в файле.
Добавьте в программу функцию показа лучших результатов (считывание таблицы из файла) по нажатию клавиши F1.


(c) 2004-2006 Сергей Бобровский bobrovsky as russianenterprisesolutions.com

Школа программирования с нуля
Все предыдущие выпуски базового курса всегда тут:
http://www.infiltration.ru/p/


Вышел мой учебный курс "Технологии Delphi. Разработка приложений для бизнеса".
http://shop.piter.com/book/978591180282/

В книге описаны десятки технологий, каждой из которых посвящены отдельные книги. Таким образом, купив одну мою книгу, вы существенно сэкономите :) В книге полностью описан язык Delphi (версия 2006, полностью совместимая с Turbo Delphi) для обеих платформ - Win32 и .NET. Охвачены также темы работы с файлами на этих платформах, создания файл-серверных, клиент-серверных, распределенных приложений, веб-программ (Indy, ASP.NET, веб-сервисы). Описаны языки SQL и OCL. Немало глав посвящены истории программирования и различных технологий. Особое внимание уделено созданию программ с помощью технологии ECO и языка моделирования UML - программы фактически рисуются, и теперь даже для создания корпоративных приложений и их переноса в Интернет не обязательно знать программирование!
Отдельная часть отведена технологиям организации групповой работы, управления требованиями, контроля версий, локализации и тестирования.
Тут подробнее про книгу.

Другие мои книги, которые пока доступны в продаже:


Дизайн рассылки: Алексей Голубев - Web-дизайн и web-программирование


В избранное