Сохраняем игру
А теперь на примере примитивной задачи продемонстрируем, как программа может сохранять нужные ей данные, чтобы в следующий раз начать с того места, на котором остановилась.
Задача: Пусть в файле Данные.txt записано какое-нибудь число, скажем, 10. После запуска программа должна раз в секунду печатать последовательные целые числа, начиная с числа, записанного в этом файле. Больше ничего делать ей не нужно. Понаблюдав некоторое время за печатью чисел, вы завершаете выполнение проекта. Вся соль задачи в том, чтобы при следующем запуске программа начала печатать не с 10, а с того числа, на котором завершился проект.
Ваши действия:
1. Вам необходимо сделать так, чтобы при запуске программы число считывалось из файла и счет начинался именно с него.
2. Вам необходимо сделать так, чтобы при завершении работы следующее за последним из напечатанных чисел число записывалось в файл на место того, что там было раньше. Тогда в следующий раз счет сам собой начнется с него.
Создайте таймер. Настройте его интервал на 1 секунду.
Программа:
'Процедура, выполняемая при запуске проекта:
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim Чтение As New System.IO.StreamReader("E:\VB\Данные.txt")
Число = Чтение.ReadLine 'Чтение числа, с которого начать счет
Чтение.Close()
End Sub
'Процедура таймера, выполняемая раз в секунду
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
Debug.WriteLine(Число) 'Печать числа
Число = Число + 1 'Получаем следующее число
End Sub
'Процедура, выполняемая при завершении работы проекта:
Private Sub Form1_Closed(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Closed
Dim Запись As New System.IO.StreamWriter("E:\VB\Данные.txt")
Запись.WriteLine(Число) 'Запись в файл числа, на котором закончен счет
Запись.Close()
End Sub
Здесь я использовал событие формы Closed. Оно наступает в частности при завершении работы проекта нажатием на крестик в правом верхнем углу формы.
Идея сохранения самых сложных игр не отличается от идеи сохранения в только-что рассмотренной программе. Пусть ваша игра трехмерная и проходит на сложной местности. Пусть поведение персонажей тоже сложное. Если вы немного разбираетесь в механике игр, то знаете, что положение персонажа на местности описывается набором из нескольких чисел. То же можно сказать о его внешности, поведении, характере, вооружении, истории его жизни и обо всем другом в игре. Только числа и кое-где текст. Когда вы сохраняете игру, сохраняются не вид экрана, не движения персонажей, не вся та жизнь, о которой я только-что говорил, а только числа и текст, которые их описывают. Все эти числа и текст отправляются в файл. Когда вы снова запускаете игру с сохраненного места, компьютер считывает из файла эти числа и текст и по ним вычисляет и вид экрана, и историю персонажей, и все-все-все. Вы оказываетесь в том месте игры, в котором остановились перед сохранением.
Задание 13.
Создайте игру «Угадай число». Компьютер загадывает число из диапазона от 1 до миллиарда. Человек должен его отгадать. Причем за наименьшее число попыток. При каждой попытке компьютер показывает номер попытки, число, предложенное человеком, и подсказку – «мало» или «много». Поскольку даже у самых умных математиков на угадывание уйдет несколько десятков попыток, то в процессе угадывания может возникнуть желание сохраниться до лучших времен. При запуске игры в следующий раз компьютер должен спросить, начинать ли новую игру или продолжать старую. Если старую, то компьютер должен распечатать все то, что было распечатано в прошлый раз – все номера попыток, числа, подсказки.