Альтернативний текстовий квестер та програма для створення квестів icon

Альтернативний текстовий квестер та програма для створення квестів




Скачати 258.02 Kb.
НазваАльтернативний текстовий квестер та програма для створення квестів
Дата04.08.2012
Розмір258.02 Kb.
ТипДокументи

Математичний факультет Циммерман Г.А.

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ

ЗАПОРІЗЬКЕ ОБЛАСНЕ ВІДДІЛЕННЯ МАЛОЇ АКАДЕМІЇ НАУК


НАУКОВЕ ВІДДІЛЕННЯ:

ОБЧИСЛЮВАЛЬНА ТЕХНІКА ТА ПРОГРАМУВАННЯ

СЕКЦІЯ: МУЛЬТИМЕДІЙНІ СИСТЕМИ, КОМП’ЮТЕРНА ГРАФІКА, ІГРОВІ ПРОГРАМИ.


«Альтернативний текстовий

квестер та програма для створення квестів

Question»

Виконав:





Балабанов В’ячеслав,

учень 10-го класу гімназії №6

м. Запоріжжя


Науковий керівник:

Климова Н. В.,

вчитель

інформатики гімназії №6


Запоріжжя, 2008

ЗМІСТ





ЗМІСТ 3

Задачі, покладені на данну програмну розробку. 6

Read Me! 8

Нвіщо потрібна ця програма? 10

Структура файлу нового формату. 11

Поглавне представлення даних. 11

11

Блок індексу наступної глави 11

Блок ініціалізації інтерфейсної частини. 11

Пояснення: 12

Структура готової програмної розробки: 14

Виводи та перспективи розвитку: 16

Програмний код: 18

Головна форма reader'a: 18

Вікно настройки Автоскрола: 26

Вікно вибору відповіді на питання: 28

Головна форма coder’a: 30

Список літератури: 32

Пре-в’ю

^ Скажи мені, що ти зараз читаєш,

І я скажу тобі, хто ти…

Народна мудрість.

За все своє життя я не зустрічав людину, яка б не прочитала жодної книги. Тому, після формування нав’язливої ідеї «Ну-треба-ж-зробити-щось-корисне-і-для-себе-і-для-інших», я запитав у себе «І що ж мені зробити?»

Так вже склалось, що в цей час я читав нову Фентезі-книгу, та міркував, як же вироджується в наш час література, та як поширений плагіат. З думками «ну ось, почитати нічого немає…» я сів у (N!)n! раз перечитувати Професора (Для тих, хто волею випадку не в курсі, Професор–це Д.Р.Р. Толкієн)

Та тут я подумав, що може не тільки я стикаюсь з цією проблемою. Запитавши у своїх друзів та подруг (професіональних рідеров) я зрозумів, що це не тільки моя проблема. Тут в моїй голові почав зріти підступний задум: написати таку програму, котра…  (див. Задачі, покладені на цю програмну розробку)
^

Задачі, покладені на данну програмну розробку.


Вже розв’язані на цей час задачі:

  • Створення двох програмних оболонок, а саме: програми для перегляду та програми для створення своїх текстових квестів;

  • Створення і відтворення концепції структури файла текстового квеста;

  • Зроблені кроки, направлені на придання програмі «класичного» виду для систем Windows;

  • Використовується файл конфігурації програми.

Зупинимося на декількох пунктах докладніше.

Attention!
^

Отже, програма для перегляду (далі viewer) надає користувачу такі можливості:


Перегляд звичайних файлів в форматі *.txt;

Відкриття та наступний спец-перегляду скомпільованих книг, реалізуючих можливості створюваних текстових квестів (далі-квестів);

Змінення кольору інтерфейсу програми, гарнітури та кольору шрифту;

Можливість використовування автоматичного зсуву тексту на визначене число рядків або сторінку за заданий користувачем проміжок часу (далі-автоскрол);

Можливість легкого відкриття 4 останніх відкритих файлів;

Можливість збереження прогресу читача (на рівні глави).

Read Me!

^

Програма для створення власних текстових квестів (далі-coder) надає користувачу такі можливості:


Можливість прямого ручного набору та редагування тексту найменшої інформативної частини скомпільованого текстового квеста (далі-глави)

Можливість вставки тексту глави з буфера обміну та з файла;

Можливість вибору з 4-х відповідей до заключного питання глави з зазначенням наступної завантажуємої глави в залежності від вибраного користувачем варіанту відповіді;

Можливість вручну змінювати індекс (номер) глави (номер автоматично збільшується на одиницю після завершення читання попередньої глави – натиснення кнопки «Наступна глава»);

Можливість збереження готової книги під будь-якою назвою з розширенням *.cbf.

^

Задачі, які будуть розроблені в найближчий термін:


          • Задачі, які припускаються для viewer’a:

            • Створення плавного автоскрола,

            • Демонстрація прочитаного та непрочитаного матеріалу (в процентному чи дробному співвідношенні)

            • Чіткіша та особливіша візуалізація інтерфейсу;

            • Збільшення числа «недавніх» книг до 10-ти;

            • Створення клавіатурних комбінацій для всіх команд;

            • Змінення зовнішнього вигляду вікна питання (див. далі)

          • Задачі, які припускаються для coder’a:

            • Вставка у програму вікна, яке демонструє структуру готового квесту;

            • Приєднання до книги службової інформації для reader’a;

            • Приєднання панелі вибору зображення для питання;

            • Створення вікна попереднього перегляду квеста.

          • Задачі, які припускаються для всієї програмної розробки та змінення/доповнення/поліпшення ідеї:

            • Збільшення варіантів запитаннь –

              • Додання множинного вибору ;

              • Додання вибору числових величин (кількість монет, и т. д.);

              • Додання вибору з двох варіантів (так-ні).

            • Додання бази характеристик героя (ім’я, раса, стать, аватар) с автоматичною зміною параметрів під час перегляду.

            • Додання системи очок як варіанта квеста (за кожну відповідь на питання додаються чи віднімаються очки, якщо число очок менше чи дорівнює нулю, ігрок вмирає та переноситься на початок книги–на 1-у главу (див. далі)↓);

            • Додання рівнів складності проходження квесту (початківець\досвідчений\ветеран\майстер);

            • Додання вбудованої стандартної бібліотеки зображень з можливістю використання зображень в питаннях та наступним розширенням бібліотеки;

            • Створення довідкової системи для viwer’a и coder’a.


Про актуальність цієї програми
^

Нвіщо потрібна ця програма?


Як вже було сказано, автор (тобто я) – фанат книгочитання, - особливо я захоплююсь фентезійною та фантастичною літературою.

Але більшу частину свого часу я проводжу вибираючи книги. В наш час (а ось коли комп’ютери були великими…) дуже складно знайти хорошу книгу між такою великою кількістю можливих, що я перечитую старі добрі книги, як дехто передивляються старі добрі фільми.


Моя робота – це моя відповідь на питання: що читати та як читати.

«Що читати» - за допомогою моєї програми кожен рядовий користувач зможе створювати скомпільовані книги і, напевно, серед них будуть оригінальні, свіжі твори.

«Як читати» - за допомогою моєї програми усі книги, написані раніше, знайдуть нове життя.

Разом із тим відповідаю на можливе питання: в чому ж альтернативність моєї програми? Та в тому, що вона дає змогу рядовому користувачу створювати свої, нові, оригінальні (потрібне-добавити) текстові квести.
^

Структура файлу нового формату.

Поглавне представлення даних.



Основою моєї програмної розробки є поглавне представлення даних. Сенс цього в тому, що весь текст чітко структурований на глави, кожна з котрих включає в себе сам текст та службову інформацію стосовно варіантів відповідей на питання та індексу тих глав, до яких приведе цей варіант відповіді. Схематично цю структуру можна представити так:



^

Блок індексу наступної глави

^

Блок ініціалізації інтерфейсної частини.



^


Блок повторюється потрібну кількість разів згідно з кількістю відповідей

Пояснення:


ЗЕЛЕНИМ кольором виділені спеціальні роздільні символи.

БЛАКИТНИМ кольором виділені текстові блоки.

Вказівник може приймати значення «0» та «1», відповідає за видимість відповідного перемикача. 1–видимий, 0–невидимий.

глави для переходу–після вибору цього варіанту автоматично після натиснення кнопки «ОК» почне завантажуватися глава с цим номером.

Текст відповіді – текст, який з’являється поряд з перемикачем вибору відповіді.
^

Аналіз існуючих аналогів


Виникає природне питання, чи унікальна моя програма, чи існують аналоги?

Оскільки не тільки я стикався з цією проблемою, я проаналізував, як цю проблему розв’язують інші програмісти. Проаналізувавши більшість різноманітних програм, я помітив, що існують два види програм:

  • програми, котрі надають користувачу можливість читання будь-яких текстів з максимальним комфортом (найтиповіші з них–це : ICE Reader, CoolReader, TomReader);

  • програми, котрі надають користувачу можливість проходження фіксованого текстового квеста (наприклад "Stone of Shady Sands".).

Але через різницю інтересів користувачів, ці типи програм не в змозі задовольнити усі потреби користувачів програмного забезпечення навіть у відносно вузькому колі читання книг.

Саме тому я вирішив сполучити в своїй програмі ці два напрямки, та створити редактор текстових квестів.

Звичайно, моя програма за наданими можливостями не може стояти поряд зі спеціалізованими програмами, створеними цілим комплексом програмістів, але вона поєднує в собі риси двох різних програмних комплексів та різних напрямків, що раніше не використовувалося.
^

Структура готової програмної розробки:


Готова програмна розробка включає в себе :

  • Програму-кодувальник:


Поле вводу текста глави

Завантаження текста глави з файла

Прийняття тексту цієї глави, збереження її та переход до редагування наступної.

№ цієї глави

Введення варіантів відповіді на питання до редагуємої глави

Введення номера глави, до котрої відбудеться перехід при виборі цього варианта

Збереження книги


  • Програму – reader:


Іконка програми

Головне меню (см.↓)

Текст глави

Відкрити

Автоскрол

Наступна глава

Вихід



Головне меню reader’a складається з:



  1. Подменю «Файл»

    1. Пункту «Открыть» – відкриває існуючий файл чи скомпільовану книгу.

    2. Пункту «Автоскролл» – перелистує відкриту главу з заданою в пункті «Настройки => Автоскролл…» швидкістю.

    3. Пункту «Следующая глава» – видає вікно питання, після відповіді переходить на наступну главу.(напр. Див. рис.)



    1. Пункту «Недавнее…» – Показує останні 4 файла з можливістю їх швидкого відкриття (шляхи до файлів зберігаються в .INI файлі).

    2. Пункту «Выход» – Без коментарів.

  1. Подменю «Настройки». Складається з 3х пунктів:

    1. Пункт «Фон» – налаштовує кольор вікна.

    2. Пункт «Шрифт» – вікно настройки гарнітури, кольору, розміру та типу шрифта.

    3. Пункт «Автоскролл» – настройки швидкості автоскрола(в секундах, необхідних для пролистування двох сторінок).

  2. Подменю «Справка» – «О программе», котрий викликає модальне вікно, зображене на малюнку.



^

Виводи та перспективи розвитку:


Хоч ця програмна розробка призначена для легкої підготовки книг за моєю технологією будь-яким рядовим користувачем, з наступним читанням книг – квестів, вона також може бути використана для організації тестового контролю знань учнів в ігровій формі, що поліпшить засвоюваність складного матеріалу учбового процесу.

Ця програмна розробка буде використана в програмному забезпеченні мультимедійного кабінету Гімназії №6 м. Запоріжжя, що допоможе виявити її сильні та слабкі сторони, допомогти в її удосконаленні.

Планується також створення сайту, присвяченого цій програмній розробці, де кожен бажаючий зможе скачати нові версії, колекцію скомпільованих книг, створених користувачами, прочитати довідку, чи звернутися за допомогою.


Приклад текстового печатного квесту (щоб читач зрозумів стартові можливості цього жанру, та в той же час побачив, які можливості надає моя програма у смислі автоматизації та реалізації польоту фантазії, наданого нам сучасними комп’ютерними технологіями). Наприклад, такий текст скомпільованої книги:

%1#1*2*Перейти к главе 2?*1*3*Перейти к главе 3?$Глава 1 //текст главы 1\\

%2#1*3*Перейти к главе 3?*1*1*Перейти к главе 1?$//Текст главы 2\\

%3#1*1*Перейти к главе 1?*1*2*Перейти к главе 2?$//Текст главы 3\\


Видасть на екран такий текст:











^

Програмний код:

Головна форма reader'a:


unit Readform;


interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, Menus, StdCtrls, ExtCtrls, ComCtrls, DateUtils, ToolWin,

ActnMan, ActnCtrls, ImgList, ActnList;


{

Скроллирует на 2 строки вниз:

SendMessage(out.Handle, EM_LINESCROLL, 0, 2);

Показать форму модально

Form.ShowModal;

}

type

TRecentstr=record

rec1:string;

rec2:string;

rec3:string;

rec4:string;

end;

TAdress=record

ARB1:word;

ARB2:word;

ARB3:word;

ARB4:word;

end;

TMain = class(TForm)

out: TMemo;

Menu: TMainMenu;

N1: TMenuItem;

N2: TMenuItem;

N3: TMenuItem;

N4: TMenuItem;

Loadfile: TOpenDialog;

N5: TMenuItem;

N6: TMenuItem;

ChangeColor: TColorDialog;

Changefont: TFontDialog;

N7: TMenuItem;

N8: TMenuItem;

Timer1: TTimer;

SB: TStatusBar;

TB: TToolBar;

open: TToolButton;

IL1: TImageList;

Separ1: TToolButton;

Separ2: TToolButton;

N11: TMenuItem;

N12: TMenuItem;

Separ3: TToolButton;

Background: TToolButton;

ActionList1: TActionList;

acOpen: TAction;

acClose: TAction;

acScroll: TAction;

bScroll: TToolButton;

readprogress: TProgressBar;

testprog: TTimer;

Recent: TMenuItem;

N13: TMenuItem;

N21: TMenuItem;

N31: TMenuItem;

N41: TMenuItem;

Nchap: TMenuItem;

NextChapter: TAction;

bNextChapter: TToolButton;

ToolButton2: TToolButton;

procedure N2Click(Sender: TObject);

procedure N5Click(Sender: TObject);

procedure N6Click(Sender: TObject);

procedure FormResize(Sender: TObject);

procedure Timer1Timer(Sender: TObject);

procedure FormCreate(Sender: TObject);

procedure N12Click(Sender: TObject);

procedure acScrollExecute(Sender: TObject);

procedure testprogTimer(Sender: TObject);

procedure N21Click(Sender: TObject);

procedure N13Click(Sender: TObject);

procedure N31Click(Sender: TObject);

procedure N41Click(Sender: TObject);

procedure N8Click(Sender: TObject);

procedure acCloseExecute(Sender: TObject);

procedure NextChapterExecute(Sender: TObject);

private

{ Private declarations }

public

stringscroll:boolean;

{ Public declarations }

end;


var

Main: TMain;

tim:Ttime;

inps, outs:string;

u:cardinal;

p:byte;

code:byte;

strcode:string;

fi:text;

scroll:boolean;

rprogress:cardinal;

inifile:text;

strscroll, pgscroll:word;

RS:TRecentStr;

chapter:word;

ch:string;

interinit:string;

interstr:string;

ad:Tadress;


implementation


uses ascrollch, about, questform;

{$R *.dfm}


procedure loadchapter(chapter:word);

begin

main.out.Lines.Clear;

outs:='';

interinit:='';

if chapter = 0 then chapter := 1;

u:=0;

ch:='';

repeat

repeat

inc(u);

until inps[u]='%';

ch:='';

inc(u);

repeat

ch:=ch+inps[u];

inc(u);

until inps[u]='#';

until strtoint(ch)=chapter;

inc(u);

repeat

interinit:=interinit+inps[u];

inc(u);

until inps[u]='$';

inc(u);

repeat

outs:=outs+inps[u];

inc(u);

until inps[u]='%';

main.out.Text:=outs;

end;


procedure initquest(interinit:string);

begin

u:=1;

if interinit[u]='1' then

begin

Qform.RB1.Visible:=true;

inc(u,2);

repeat

interstr:=interstr+interinit[u];

inc(u);

until interinit[u]='*';

ad.ARB1:=strtoint(interstr);

interstr:='';

inc(u);

repeat

interstr:=interstr+interinit[u];

inc(u);

until (interinit[u]='$')or (interinit[u]='*');

Qform.label1.caption:=interstr;

Qform.label1.Visible:=true;

interstr:='';

end;

inc(u);

if interinit[u-1]='*' then

if interinit[u]='1' then

begin

Qform.RB2.Visible:=true;

inc(u,2);

repeat

interstr:=interstr+interinit[u];

inc(u);

until interinit[u]='*';

ad.ARB2:=strtoint(interstr);

interstr:='';

inc(u);

repeat

interstr:=interstr+interinit[u];

inc(u);

until (interinit[u]='$')or (interinit[u]='*');

Qform.label2.caption:=interstr;

Qform.label2.Visible:=true;

interstr:='';

end;

inc(u);

if interinit[u-1]='*' then

if interinit[u]='1' then

begin

Qform.RB3.Visible:=true;

inc(u,2);

repeat

interstr:=interstr+interinit[u];

inc(u);

until interinit[u]='*';

ad.ARB3:=strtoint(interstr);

interstr:='';

inc(u);

repeat

interstr:=interstr+interinit[u];

inc(u);

until (interinit[u]='$')or (interinit[u]='*');

Qform.label3.caption:=interstr;

Qform.label3.Visible:=true;

interstr:='';

end;

inc(u);

if interinit[u]='*' then

if interinit[u]='1' then

begin

Qform.RB4.Visible:=true;

inc(u,2);

repeat

interstr:=interstr+interinit[u];

inc(u);

until interinit[u]='*';

ad.ARB4:=strtoint(interstr);

interstr:='';

inc(u);

repeat

interstr:=interstr+interinit[u];

inc(u);

until (interinit[u]='$')or (interinit[u]='*');

Qform.label4.caption:=interstr;

Qform.label1.Visible:=true;

interstr:='';

end;

end;


procedure TMain.N2Click(Sender: TObject);

begin

main.out.Lines.Clear;

if loadfile.Execute and Fileexists(Loadfile.FileName) then

begin

if rs.rec1<>loadfile.FileName then

begin

rs.rec4:=rs.rec3;

rs.rec3:=rs.rec2;

rs.rec2:=rs.rec1;

rs.rec1:=loadfile.FileName;

end;

N13.Caption:=rs.rec1;

N21.Caption:=rs.rec2;

N31.Caption:=rs.rec3;

N41.Caption:=rs.rec4;

if extractfileext(loadfile.FileName)='.cbf' then

begin

main.Nchap.Enabled:=true;

assignfile(fi, loadfile.filename);

reset(fi);

while not eof(fi) do

begin

readln(fi, outs);

inps:=inps+outs;

end;

!!!!NO DECODER(BETA)!!!!

{p:=ord(inps[1]);

delete(inps,1, 1);

//dekoder start

u:=1;

while u < length(inps)do

begin

inc(u);

// if inps[u]<>'#'then begin

code:=ord(inps[u]);

code:=code xor p;

inps[u]:=chr(code);

// end

// else

// repeat

// inc(u);

// until inps[u]='#';

end;

// outs:=outs+ inttostr(p);

//outs:=outs+' ';

//outs:=outs+inps;

//decoder end}

!!!!NO DECODER(BETA)!!!!

loadchapter(chapter);

end

else

Main.out.lines.loadfromfile(loadfile.FileName);

main.testprog.Enabled:=true;

end;

end;


procedure TMain.N5Click(Sender: TObject);

begin

if changecolor.Execute then

Main.out.Color:=Changecolor.Color;

end;


procedure TMain.N6Click(Sender: TObject);

begin

if changefont.Execute then out.Font:=changefont.Font;

end;


procedure TMain.FormResize(Sender: TObject);

begin

out.Width:=main.Width-10;

out.Height:=main.Height-98;

end;


procedure TMain.FormCreate(Sender: TObject);

begin

assignfile(inifile, ExtractFilePath(Application.ExeName)+'config.ini');

if fileexists(ExtractFilePath(Application.ExeName)+'config.ini') then

begin

reset(inifile);

readln(inifile, strscroll);

readln(inifile, pgscroll);

readln(inifile, rs.rec1);

N13.Caption:=rs.rec1;

readln(inifile, rs.rec2);

N21.Caption:=rs.rec2;

readln(inifile, rs.rec3);

N31.Caption:=rs.rec3;

readln(inifile, rs.rec4);

N41.Caption:=rs.rec4;

readln(inifile, Rprogress);

closefile(inifile);

end;

out.Width:=main.Width-10;

out.Height:=main.Height-98;

end;


procedure TMain.Timer1Timer(Sender: TObject);

begin

if main.stringscroll then

SendMessage(main.out.Handle, EM_LINESCROLL, 0, 2);

if main.stringscroll=false then

SendMessage(main.out.Handle, WM_VSCROLL, SB_PAGEDOWN, 0);

end;


procedure TMain.N12Click(Sender: TObject);

begin

custscroll.show;

main.Timer1.Enabled:=false;

end;


procedure TMain.acScrollExecute(Sender: TObject);

begin

if not scroll then

begin

main.Timer1.Enabled:=true;

scroll:=true;

main.bScroll.Down:=true;

end

else

begin

main.Timer1.Enabled:=false;

scroll:=false;

main.bScroll.Down:=false;

end;

end;


procedure TMain.testprogTimer(Sender: TObject);

begin

rprogress:=SendMessage(main.out.Handle, EM_GETFIRSTVISIBLELINE, 0, 0);

if Rprogress <> 0 then

main.readprogress.Position:=round((Rprogress/main.out.Lines.Count)*1000);

end;


procedure TMain.N21Click(Sender: TObject);

begin

if fileexists(rs.rec2) then

begin

loadfile.FileName:=rs.rec2;

begin

rs.rec4:=rs.rec3;

rs.rec3:=rs.rec2;

rs.rec2:=rs.rec1;

rs.rec1:=loadfile.FileName;

N13.Caption:=rs.rec1;

N21.Caption:=rs.rec2;

N31.Caption:=rs.rec3;

N41.Caption:=rs.rec4;

if extractfileext(loadfile.FileName)='.cbf' then

begin

assignfile(fi, loadfile.filename);

reset(fi);

readln(fi, inps);

p:=ord(inps[1]);

delete(inps,1, 1);

//dekoder start

u:=1;

while u < length(inps)do

begin

inc(u);

// if inps[u]<>'#'then

// begin

code:=ord(inps[u]);

code:=code xor p;

inps[u]:=chr(code);

// end

// else

// repeat

// inc(u);

// until inps[u]='#';

end;

outs:=outs+ inttostr(p);

outs:=outs+' ';

outs:=outs+inps;

//decoder end

Main.out.Text:=outs;

end

else

Main.out.lines.loadfromfile(loadfile.FileName);

main.testprog.Enabled:=true;

end;

end;

end;

procedure TMain.N13Click(Sender: TObject);

begin

if fileexists(rs.rec1) then

begin

Loadfile.FileName:=rs.rec1;

rs.rec4:=rs.rec3;

rs.rec3:=rs.rec2;

rs.rec2:=rs.rec1;

Loadfile.filename:=rs.rec1;

N13.Caption:=rs.rec1;

N21.Caption:=rs.rec2;

N31.Caption:=rs.rec3;

N41.Caption:=rs.rec4;

if extractfileext(loadfile.FileName)='.cbf' then

begin

assignfile(fi, loadfile.filename);

reset(fi);

readln(fi, inps);

p:=ord(inps[1]);

delete(inps,1, 1);

//dekoder start

u:=1;

while u < length(inps)do

begin

inc(u);

// if inps[u]<>'#'then

// begin

code:=ord(inps[u]);

code:=code xor p;

inps[u]:=chr(code);

// end

// else

// repeat

// inc(u);

// until inps[u]='#';

end;

outs:=outs+ inttostr(p);

outs:=outs+' ';

outs:=outs+inps;

//decoder end

Main.out.Text:=outs;

end

else

Main.out.lines.loadfromfile(loadfile.FileName);

main.testprog.Enabled:=true;

end;

end;


procedure TMain.N31Click(Sender: TObject);

begin

if fileexists(rs.rec3) then

begin

rs.rec4:=rs.rec3;

rs.rec3:=rs.rec2;

rs.rec2:=rs.rec1;

rs.rec1:=loadfile.FileName;

N13.Caption:=rs.rec1;

N21.Caption:=rs.rec2;

N31.Caption:=rs.rec3;

N41.Caption:=rs.rec4;

if extractfileext(loadfile.FileName)='.cbf' then

begin

assignfile(fi, loadfile.filename);

reset(fi);

readln(fi, inps);

p:=ord(inps[1]);

delete(inps,1, 1);

//dekoder start

u:=1;

while u < length(inps)do

begin

inc(u);

// if inps[u]<>'#'then

// begin

code:=ord(inps[u]);

code:=code xor p;

inps[u]:=chr(code);

// end

// else

// repeat

// inc(u);

// until inps[u]='#';

end;

outs:=outs+ inttostr(p);

outs:=outs+' ';

outs:=outs+inps;

//decoder end

Main.out.Text:=outs;

end

else

Main.out.lines.loadfromfile(loadfile.FileName);

main.testprog.Enabled:=true;

end;

end;


procedure TMain.N41Click(Sender: TObject);

begin

if fileexists(rs.rec4) then

begin

rs.rec4:=rs.rec3;

rs.rec3:=rs.rec2;

rs.rec2:=rs.rec1;

rs.rec1:=loadfile.FileName;

N13.Caption:=rs.rec1;

N21.Caption:=rs.rec2;

N31.Caption:=rs.rec3;

N41.Caption:=rs.rec4;

if extractfileext(loadfile.FileName)='.cbf' then

begin

assignfile(fi, loadfile.filename);

reset(fi);

readln(fi, inps);

p:=ord(inps[1]);

delete(inps,1, 1);

//dekoder start

u:=1;

while u < length(inps)do

begin

inc(u);

// if inps[u]<>'#'then

// begin

code:=ord(inps[u]);

code:=code xor p;

inps[u]:=chr(code);

// end

// else

// repeat

// inc(u);

// until inps[u]='#';

end;

outs:=outs+ inttostr(p);

outs:=outs+' ';

outs:=outs+inps;

//decoder end

Main.out.Text:=outs;

end

else

Main.out.lines.loadfromfile(loadfile.FileName);

main.testprog.Enabled:=true;

end;

end;


procedure TMain.N8Click(Sender: TObject);

begin

Form2.showmodal;

end;


procedure TMain.acCloseExecute(Sender: TObject);

begin

assignfile(inifile, ExtractFilePath(Application.ExeName)+'config.ini');

rewrite(inifile);

writeln(inifile, strscroll);

writeln(inifile, pgscroll);

writeln(inifile, rs.rec1);

writeln(inifile, rs.rec2);

writeln(inifile, rs.rec3);

writeln(inifile, rs.rec4);

writeln(inifile, Rprogress);

closefile(inifile);

close;

end;


procedure TMain.NextChapterExecute(Sender: TObject);

begin

initquest(interinit);

Qform.showmodal;

loadchapter(chapter);

end;


end.

^

Вікно настройки Автоскрола:


Unit ascrollch;


interface


uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, Mask, ComCtrls, Buttons;


type

Tcustscroll = class(TForm)

Label1: TLabel;

ascroll: TTrackBar;

Label2: TLabel;

Label3: TLabel;

BitBtn1: TBitBtn;

asedit: TEdit;

Label4: TLabel;

Pagescroll: TTrackBar;

Pageedit: TEdit;

RadioButton1: TRadioButton;

RadioButton2: TRadioButton;

Label5: TLabel;

Label6: TLabel;

procedure FormCreate(Sender: TObject);

procedure BitBtn1Click(Sender: TObject);

procedure aseditChange(Sender: TObject);

procedure ascrollChange(Sender: TObject);

procedure pageeditChange(Sender: TObject);

procedure pagescrollChange(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;


var

custscroll: Tcustscroll;


implementation


uses Readform;


{$R *.dfm}


procedure Tcustscroll.FormCreate(Sender: TObject);

begin

custscroll.Color:=main.color;

custscroll.ascroll.Position:=round(main.timer1.interval/1000);

custscroll.asedit.Text:=inttostr(custscroll.ascroll.position);

custscroll.pagescroll.Position:=round(main.timer1.interval/100);

custscroll.pageedit.Text:=inttostr(custscroll.pagescroll.position);

end;


procedure Tcustscroll.BitBtn1Click(Sender: TObject);

begin

strscroll:=custscroll.ascroll.Position*1000;

pgscroll:=custscroll.pagescroll.Position*1000;

if radiobutton1.Checked then

begin

main.Timer1.Interval:=strscroll;

main.stringscroll:=true;

end;

if radiobutton2.Checked then

begin

main.Timer1.Interval:=pgscroll;

main.stringscroll:=false;

end;

main.Timer1.Enabled:=true;

main.bScroll.Down:=true;

close;

end;


procedure Tcustscroll.aseditChange(Sender: TObject);

begin

try

custscroll.ascroll.Position:=strtoint(custscroll.asedit.text);

if custscroll.ascroll.Position>custscroll.ascroll.Max then

custscroll.ascroll.Position:=custscroll.ascroll.max;

if custscroll.ascroll.Position
custscroll.ascroll.Position:=custscroll.ascroll.min;

except

showmessage('Неправильный формат')

end;

end;


procedure Tcustscroll.ascrollChange(Sender: TObject);

begin

try

custscroll.asedit.text:=inttostr(custscroll.ascroll.position);

except

showmessage('Неправильный формат')

end;

end;


procedure Tcustscroll.pageeditChange(Sender: TObject);

begin

try

custscroll.pagescroll.Position:=strtoint(custscroll.pageedit.text);

if custscroll.pagescroll.Position>custscroll.pagescroll.Max then

custscroll.pagescroll.Position:=custscroll.pagescroll.max;

if custscroll.pagescroll.Position
custscroll.pagescroll.Position:=custscroll.pagescroll.min;

except

showmessage('Неправильный формат')

end;

end;


procedure Tcustscroll.pagescrollChange(Sender: TObject);

begin

try

custscroll.pageedit.text:=inttostr(custscroll.pagescroll.position);

except

showmessage('Неправильный формат')

end;

end;


end.

^

Вікно вибору відповіді на питання:


unit questform;


interface


uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls;


type

TQForm = class(TForm)

RB1: TRadioButton;

RB2: TRadioButton;

RB3: TRadioButton;

Rb4: TRadioButton;

Label1: TLabel;

Label2: TLabel;

Label3: TLabel;

Label4: TLabel;

bOk: TButton;

BCancel: TButton;

procedure bOkClick(Sender: TObject);

procedure BCancelClick(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;


var

QForm: TQForm;


implementation


uses Readform;


{$R *.dfm}


procedure TQForm.bOkClick(Sender: TObject);

begin

main.out.Lines.Clear;

if RB1.Checked then readform.chapter:=readform.ad.ARB1;

if RB2.Checked then readform.chapter:=readform.ad.ARB2;

if RB3.Checked then readform.chapter:=readform.ad.ARB3;

if RB4.Checked then readform.chapter:=readform.ad.ARB4;

Rb1.Visible:=false;

Rb2.Visible:=false;

Rb3.Visible:=false;

Rb4.Visible:=false;

label1.Visible:=false;

label2.Visible:=false;

label3.Visible:=false;

label4.Visible:=false;

label1.caption:='';

label2.caption:='';

label3.caption:='';

label4.caption:='';

close;

end;


procedure TQForm.BCancelClick(Sender: TObject);

begin

close;

end;


end.
^

Головна форма coder’a:


unit MainCreateForm;


interface


uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, Mask, Spin;


type

TForm1 = class(TForm)

Chap: TMemo;

Vtext1: TEdit;

Vtext2: TEdit;

Vtext3: TEdit;

Vtext4: TEdit;

Label1: TLabel;

Save: TButton;

Exit: TButton;

Button3: TButton;

NextChapter: TButton;

Savefile: TSaveDialog;

Openfile: TOpenDialog;

Cnumber: TSpinEdit;

Label2: TLabel;

ChOV1: TEdit;

ChOv2: TEdit;

ChOv3: TEdit;

ChOv4: TEdit;

procedure Button3Click(Sender: TObject);

procedure NextChapterClick(Sender: TObject);

procedure ExitClick(Sender: TObject);

procedure SaveClick(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;


var

Form1: TForm1;

f:text;

txt:string;

textout:string;

textinit:string;

k:cardinal;

p:byte;

code:byte;


implementation


{$R *.dfm}


procedure TForm1.Button3Click(Sender: TObject);

begin

if Openfile.Execute and fileexists(openfile.FileName) then

chap.Lines.LoadFromFile(openfile.FileName);

end;


procedure TForm1.NextChapterClick(Sender: TObject);

begin

if chap.Text<>'' then

begin

if (Vtext1.Text<>'')and(ChOv1.Text<>'') then

textinit:=textinit+'1*'+ChOv1.Text+'*'+Vtext1.Text+'*';

if (Vtext2.Text<>'')and(ChOv2.Text<>'') then

begin

textinit:=textinit+'1*'+ChOv2.Text+'*'+Vtext2.Text+'$';

end;

if (Vtext3.Text<>'')and(ChOv3.Text<>'') then

begin

textinit:=textinit+'1*'+ChOv3.Text+'*'+Vtext3.Text+'$';

end;

if (Vtext4.Text<>'')and(ChOv4.Text<>'') then

begin

textinit:=textinit+'1*'+ChOv4.Text+'*'+Vtext4.Text+'$';

end;

textinit[length(textinit)]:='$';

if cnumber.Value=0 then cnumber.Value:=1;

txt:=txt+'%'+inttostr(cnumber.value)+'#'+textinit+chap.Text+'#13#10';

cnumber.Value:=cnumber.Value+1;

chap.Lines.Clear;

textinit:='';

Vtext1.Text:='';

Vtext2.Text:='';

Vtext3.Text:='';

Vtext4.Text:='';

ChOv1.Text:='';

ChOv2.Text:='';

ChOv3.Text:='';

ChOv4.Text:='';

end;

end;


procedure TForm1.ExitClick(Sender: TObject);

begin

close;

closefile(f);

end;


procedure TForm1.SaveClick(Sender: TObject);

begin

if Savefile.Execute then

begin

// randomize;

// p:=random(30)+1;

// p:=27;

// k:=0;

// while k < length(txt)do

// begin

// inc(k);

// code:=ord(txt[k]);

// code:=code xor p;

// txt[k]:=chr(code);

// end;

// textout:=textout+ chr(p);

// textout:=textout+' ';

textout:=textout+txt;

end;

assignfile(f, Savefile.FileName);

if fileexists(savefile.FileName) then

append(f)

else

rewrite(f);

writeln(f,textout);

closefile(f);

textout:='';

txt:='';

end;


end.
^




Список літератури:


  1. Фаронов В. В. Delphi. Программирование на языке высокого уровня: Учебник для вузов – СПб.: Питер, 2006.

  2. Фаронов В. В. Turbo Pascal 7.0. Начальный курс : учебное пособие. – М. : КНОРУС, 2005.

  3. Фаронов В. В. Delphi 4. Учебный курс.-М.: «Нолидж», 1999.

  4. Анджей САПКОВСКИЙ - Башня Ласточки.

  5. Анджей САПКОВСКИЙ - Владычица озера.

  6. Анджей САПКОВСКИЙ - ГЛАС РАССУДКА I.

  7. Анджей САПКОВСКИЙ - Крещение огнем.

  8. Анджей САПКОВСКИЙ - Кровь эльфов.

  9. Анджей Сапковский - Меч Предназначения.

  10. Андрей БЕЛЯНИН - Вкус вампира.

  11. Андрей БЕЛЯНИН - Рыжий рыцарь.

  12. Ольга Громыко - Ведьма-хранительница.

  13. Ольга Громыко - Верховная Ведьма.

  14. Ольга Громыко - Профессия Ведьма-01.

  15. Терри ГУДКАЙНД - Второе правило волшебника, или Камень Слез - Меч Истины-2.


Схожі:

Альтернативний текстовий квестер та програма для створення квестів iconТема: Word. Створення документа
Мета: Уміти підготувати програму-редактор до роботи І створювати найпростіший текстовий документ
Альтернативний текстовий квестер та програма для створення квестів iconПодатковий депозитний сертифікат як альтернативний фіскальний інструмент рабушенко А. В. «Фінанси І кредит»
Рівень впливу прямо залежить від способу стягнення податку, досконалості та стабільності податкової системи, а також ступеня розвитку...
Альтернативний текстовий квестер та програма для створення квестів iconПрограма курсу
В цьому курсі розглядаються сучасні технічні та програмні засоби створення, обробки, зберігання та передавання мультимедійних складових,...
Альтернативний текстовий квестер та програма для створення квестів iconПлан заходів щодо створення обласної інноваційної інфраструктури на виконання Державної цільової економічної програми „Створення в Україні інноваційної інфраструктури”
Державної цільової економічної програми „Створення в Україні інноваційної інфраструктури” на 2009-2013 роки, затвердженої постановою...
Альтернативний текстовий квестер та програма для створення квестів iconE d u c a t I o n
Програма Education призначена для створення замовлень на виготовлення документів про освіту, студентських та учнівських квитків та...
Альтернативний текстовий квестер та програма для створення квестів iconКлючове слово для тематичного покажчика. Комп’ютерна програма
Мета розробки. Створення системи алгоритмів для забезпечення повного аналізу, обробки графів та розв’язання економічних задач на...
Альтернативний текстовий квестер та програма для створення квестів iconПрограма новий крок до створення Європейського дослідницького простору
Сьома рамкова програма – новий крок до створення Європейського дослідницького простору
Альтернативний текстовий квестер та програма для створення квестів iconПрограма науково-виробничої практики студентів за спеціальністю „психологія”
З метою створення умов для її написання студенти проходять виробничу (переддипломну) практику
Альтернативний текстовий квестер та програма для створення квестів iconСтворення додатку на базі mfc за допомогою майстра та його українізація
Для того щоб програма була мультивіконна необхідно вибрати з пункт Multiple documents(1).(мал. 16)
Альтернативний текстовий квестер та програма для створення квестів iconПро створення Ради з гуманітарних питань Національного авіаційного університету
З метою створення належних умов для підвищення ефективності виховного процесу, всебічного І гармонійного розвитку студентів, формування...
Додайте кнопку на своєму сайті:
Документи


База даних захищена авторським правом ©zavantag.com 2000-2013
При копіюванні матеріалу обов'язкове зазначення активного посилання відкритою для індексації.
звернутися до адміністрації
Документи