МЕНЮ


Фестивали и конкурсы
Семинары
Издания
О МОДНТ
Приглашения
Поздравляем

НАУЧНЫЕ РАБОТЫ


  • Инновационный менеджмент
  • Инвестиции
  • ИГП
  • Земельное право
  • Журналистика
  • Жилищное право
  • Радиоэлектроника
  • Психология
  • Программирование и комп-ры
  • Предпринимательство
  • Право
  • Политология
  • Полиграфия
  • Педагогика
  • Оккультизм и уфология
  • Начертательная геометрия
  • Бухучет управленчучет
  • Биология
  • Бизнес-план
  • Безопасность жизнедеятельности
  • Банковское дело
  • АХД экпред финансы предприятий
  • Аудит
  • Ветеринария
  • Валютные отношения
  • Бухгалтерский учет и аудит
  • Ботаника и сельское хозяйство
  • Биржевое дело
  • Банковское дело
  • Астрономия
  • Архитектура
  • Арбитражный процесс
  • Безопасность жизнедеятельности
  • Административное право
  • Авиация и космонавтика
  • Кулинария
  • Наука и техника
  • Криминология
  • Криминалистика
  • Косметология
  • Коммуникации и связь
  • Кибернетика
  • Исторические личности
  • Информатика
  • Инвестиции
  • по Зоология
  • Журналистика
  • Карта сайта
  • Разработка игровой программы

    Разработка игровой программы

    МИНИСТЕРСТВО ОБРАЗОВАНИЯ РОСИЙСКОЙ ФЕДЕРАЦИИ

    Таганрогский государственный радиотехнический университет

    Кафедра вычислительной техники

    _____________________________________________________________________

    Дистанционное обучение

    2000 – 2001 учебный год

    ОТЧЕТ

    о выполнении практических заданий

    по курсу

    ТЕХНОЛОГИЯ ПРОГРАММИРОВАНИЯ

    Студента группы ВД – 49

    Каретина Флориана Викторовича

    Задание выполнил ________________ _____________________

    подпись студента дата выполнения задания

    Задание проверил ________________ _____________________

    оценка подпись

    преподавателя

    _______________________

    дата проверки задания

    Рецензия преподавателя

    ______________________________________________________________________

    ______________________________________________________________________

    ______________________________________________________________________

    ______________________________________________________________________

    ______________________________________________________________________

    Описание программы созданной с помощью Turbo Visual.

    Начинается программа с подключения библиотек Turbo Visual:

    uses App, Objects, Menus, Drivers, Editors, Views;

    Основной блок программы состоит из трех команд:

    Begin

    MyApp.Init; {Подготовить работу программы}

    MyApp.Run; {Выполнить необходимые действия}

    MyApp.Done; {Завершить исполнение программы}

    End.

    Для создания собственной строки статуса вводим следующее описание:

    type

    TMyApp=object(TApplication) {Создаем объект-потомок от TApplication}

    procedure InitStatusLine; virtual; {Перекрываем старый метод

    InitStatusLine новым}

    Описание нового метода, с помощью которого создается строка статуса:

    Procedure TMyApp.InitStatusLine;

    Var R:TRect; {хранит границы строки статуса}

    Begin

    GetExtent(R); {устанавливает R в координаты всего экрана}

    R.A.Y:=R.B.Y-1; {передвигает вершину выше нижней на 1 строку}

    StatusLine:=New(PStatusLine, Init(R, {создает строку статуса}

    NewStatusDef(0,$FFFF, {устанавливает диапазон контекстного Help}

    NewStatusKey('~Alt-X~ Exit', kbAltX, cmQuit, {определяет элемент}

    NewStatusKey('~Alt-F3~ Close', kbAltF3, cmClose, {другой}

    nil)), {больше нет клавиш}

    nil))) {больше нет определений}

    End;

    Формирование меню:

    Описание в разделе типов:

    TMyApp=object(TApplication) {Создаем объект-потомок от TApplication}

    procedure InitMenuBar; virtual; {Перекрываем старый метод InitMenuBar

    новым}

    Тело процедуры:

    procedure TMyApp.InitMenuBar;

    Var R:TRect;

    Begin

    GetExtent(R); {устанавливает R в координаты всего экрана}

    R.B.Y:=R.A.Y+1;

    MenuBar:=New(PMenuBar, Init(R, NewMenu( {создать полосу меню}

    NewSubMenu('~F~ile', hcNoContext, NewMenu( {определить меню}

    StdFileMenuItems(nil)), {стандратная функция определения

    элементов}

    {меню

    File}

    NewSubMenu('~W~indow', hcNoContext, NewMenu( {определить меню}

    StdWindowMenuItems(nil)), {стандратная функция определения

    элементов}

    {меню

    Window}

    nil) {больше нет подменю}

    )))); {конец полосы}

    End;

    Создание окон и манипуляции с ними:

    Описание:

    procedure NewWindow; virtual;

    procedure HandleEvent(var Event:TEvent); virtual;

    end;

    PDemoWindow=^TDemoWindow; {тип указателя для нового объектного

    типа}

    TDemoWindow=object(TWindow) {определение нового типа окна}

    constructor Init(Bounds: TRect; WinTitle:String; WindowNo: Integer);

    end;

    PInterior=^TInterior;

    TInterior=object(TScroller)

    constructor Init(var Bounds:TRect; HS, VS: PScrollBar);

    procedure Draw; virtual;

    procedure HandleEvent(var Event:TEvent); virtual;

    end;

    Описание тела конструктора инициализации окна:

    constructor TDemoWindow.Init(Bounds: TRect; WinTitle:String; WindowNo:

    Integer);

    var

    S:String[3];

    Interior:PInterior;

    HS, VS: PScrollBar;

    begin

    Str(WindowNo,S); {устанавливает номер окна в заколовке}

    TWindow.Init(Bounds, WinTitle+' '+S, wnNoNumber);

    GetClipRect(Bounds);

    Bounds.Grow(-1,-1); {интерьер помещается внутри рамки окна}

    VS:=StandardScrollBar(sbVertical+sbHandleKeyBoard); {разрешение

    перемещения вертикального бегунка стрелками на клавиатуре}

    HS:=StandardScrollBar(sbHorizontal+sbHandleKeyBoard); {разрешение

    перемещения горизонтального бегунка стрелками на клавиатуре}

    Interior:=New(PInterior, Init(Bounds, HS, VS));

    Insert(Interior); {добавляет интерьер к окну}

    end;

    Описание конструктора инициализации интерьера:

    constructor TInterior.Init(var Bounds:TRect; HS, VS: PScrollBar);

    begin

    TScroller.Init(Bounds, HS, VS);

    GrowMode:=gfGrowHiX+gfGrowHiY;

    end;

    Описание процедуры прорисовки интерьера окна:

    procedure TInterior.Draw;

    begin

    TScroller.Draw; {Вызов стандартной прорисовки}

    WriteStr(0,0,'Текст в окне',1); {Вывод текста в окно}

    TScroller.ShowCursor; {Показать курсор}

    end;

    Описание тела процедуры создания нового окна:

    procedure TMyApp.NewWindow;

    var

    Window:PDemoWindow;

    R: TRect;

    Begin

    Inc(WinCount);

    R.Assign(0,0,26,7); {установка начального размера и позиции}

    R.Move(Random(58),Random(16)); {случайное перемещение по экрану}

    Window:=New(PDemoWindow, Init(R, 'Demo Window', WinCount));

    DeskTop^.Insert(Window); {вывести окно на панель экрана}

    End;

    Описание тела процедуры обработки команд среды

    procedure TMyApp.HandleEvent(var Event:TEvent);

    Begin

    TApplication.HandleEvent(Event); {действует как предок}

    if Event.What=evCommand Then

    Begin

    case Event.Command of {но откликается на дополнительные

    команды}

    cmNew: NewWindow; {определяет действие для команды cmNew}

    else

    Exit;

    End;

    ClearEvent(Event); {очищает событие после обработки}

    end;

    End;

    Описание тела процедуры обработки команд в окне

    procedure TInterior.HandleEvent(var Event:TEvent);

    Begin

    TScroller.HandleEvent(Event); {действует как предок}

    case Event.What of {проверка события}

    evKeyDown: {если нажата клавиша}

    Begin

    Case Event.KeyCode of {проверка: какая клавиша нажата}

    kbLeft: {стрелка влево}

    begin

    if x>0 then {если координата по Х больше 0}

    Begin

    x:=x-1; {то уменьшить ее на 1}

    SetCursor(x,y); {установить на новую координату

    курсор}

    End

    end;

    kbRight: {стрелка вправо}

    begin

    x:=x+1; {увеличить координату по Х на единицу}

    SetCursor(x,y); {установить на новую координату курсор}

    end;

    kbUp: {стрелка вверх}

    begin

    if y>0 then {если координата по Y больше 0}

    Begin

    y:=y-1; {то уменьшить ее на 1}

    SetCursor(x,y); {установить на новую координату

    курсор}

    End

    end;

    kbDown: {стрелка вниз}

    begin

    y:=y+1; {увеличить координату по Y на 1}

    SetCursor(x,y); {установить на новую координату курсор}

    end;

    end;

    Case Event.ScanCode of {проверка скан-кода клавиатуры}

    57: {если пробел}

    begin

    If GetState(sfCursorVis) Then {если курсор виден}

    TScroller.HideCursor {то скрыть его}

    Else

    TScroller.ShowCursor; {иначе показать его}

    end;

    end;

    End;

    end;

    End;

    Описание игровой программы «Стрельба по мишени».

    Игровая программа состоит из трех процедур (minv — уменьшение кол-ва

    патронов, intro — заставка, go — конец игры) и основного блока программы.

    Процедура minv (уменьшение количества патронов).

    kv:=kv-1; {уменьшение значение переменной kv (в основной программе она

    фигурирует как количество патронов) }

    setfillstyle(1,9); {установка стиля заполнения фона}

    bar((20-kv)*10+415,4,(20-kv)*10+425,12); {стирание одного патрона с экрана}

    Процедура intro; {Заставка}

    Выводит заставку игры.

    settextstyle(0,0,15); {установка стиля текста}

    setcolor(12); {установка цвета}

    outtextxy(140,100,'ТИР'); {вывод текста}

    settextstyle(0,0,2);

    setcolor(10);

    outtextxy(130,290,'ESC - ');

    setcolor(14);

    outtextxy(220,290,'Выход из программы');

    settextstyle(0,0,1);

    tp:='НАЖМИТЕ ЛЮБУЮ КНОПКУ ДЛЯ НАЧАЛА ИГРЫ';

    settextstyle(0,0,1);

    setcolor(11);

    outtextxy(320-trunc(length(tp)*4),340,tp); {вывод текста с расчетом по

    центру}

    a:=readkey;

    if ord(a)=27 then exi:=true; {если нажата клавиша Esc – выйти из игры}

    setfillstyle(1,0);

    bar(100,30,600,350);

    Процедура go – выводит заставку конца игры

    procedure go; {Конец игры}

    begin

    settextstyle(0,0,5); {установка стиля вывода текста}

    setcolor(2); {установка цвета}

    outtextxy(50,200,'ВСЕ,ДОИГРАЛИСЬ');

    settextstyle(0,0,2);

    readkey;

    UROV:=1;MENU:=true;oko:=0;

    end;

    Основное тело программы

    begin

    d:=vga;initgraph(d,r,''); {инициализация графики}

    setgraphmode(2); {установка графического режима}

    randomize; {вызов генератора случайных чисел}

    urov:=1;oko:=0; mus:=true; sou:=true;menu:=true; {первоначальная установка

    переменных}

    repeat {начало основного цикла программы}

    {Cоздание интерфейса}

    cleardevice; {очистака экрана}

    setfillstyle(1,1); {установка стиля заполнения фона}

    bar(0,0,640,2); {рисование прямоугольников вокруг рабочей области}

    bar(0,0,2,480);

    bar(0,480,640,478);

    bar(640,480,638,0);

    setfillstyle(1,9);

    bar(2,2,638,17);

    bar(2,2,5,478);

    bar(2,478,638,475);

    bar(638,2,635,478);

    setfillstyle(1,3);

    bar(5,17,635,19);

    bar(5,17,7,475);

    bar(5,475,635,473);

    bar(635,17,633,475);

    setfillstyle(9,14);

    setcolor(14); {установка цвета рисования}

    moveto(7,460); {перемещение графического курсора в указанные координаты}

    for i:=1 to 62 do {рисование песка холмиками}

    lineto(i*10+7,460+random(10));

    lineto(633,460);

    line(7,473,633,473);

    line(7,473,7,460);

    line(633,473,633,460);

    floodfill(9,469,14); {заполнение стилем области, расположенной либо внутри

    замкнутого контура, либо вне его}

    setlinestyle(0,0,1); {установка стиля линий}

    setfillstyle(8,6); {установка стиля заполнения фона}

    bar(260,408,380,470);

    setfillstyle(1,1);

    setcolor(14);

    line(260,408,260,470);

    line(260,408,380,408);

    line(380,408,380,470);

    fillellipse(320,408,23,15); {вычерчивание контура эллипса текущим цветом и

    заполнение ограниченной контуром области экрана текущим узором}

    setlinestyle(0,3,3);

    setcolor(11);

    line(320,391,320,376);

    fi:=pi;tzm:=40;tzs:=40;

    settextstyle(0,0,2);

    cou:=0; kv:=20; ov:=1; ex:=0;

    setfillstyle(1,15);setcolor(7);

    bar(250,6,310,12);

    setfillstyle(1,0);

    bar(17,2,220,17);

    setcolor(12);

    outtextxy(20,3,'Cчет:');

    setcolor(11);

    setfillstyle(1,11);

    for i:=1 to kv do fillellipse(i*10+420,8,3,3); {рисование патронов}

    if menu then intro; {если menu=true, то вызвать процедуру intro (заставка

    игры)}

    menu:=false;

    if exi then goto 1; {если exi=true (выход), то перейти на метку 1}

    repeat

    if keypressed then a:=readkey;

    settextstyle(0,0,1);

    outtextxy(280,280,'Нажмите ENTER');

    setcolor(random(16));

    settextstyle(0,0,2);

    str(urov,em);

    outtextxy(270,200,concat('УРОВЕНЬ ',em)); {вывод текста с помощью процедуры

    конкатенации}

    str(urov*1000,em);

    outtextxy(190,240,concat('Наберите ',em,' очков'));

    until ord(a)=13; {выход из цикла по клавише Enter}

    setfillstyle(1,0);

    bar(180,200,500,300);

    gettime(q1,min,sec,q2); {получение системного времени}

    mk:=min+1; {увеличение минут на 1}

    sk:=sec;

    if mk>=60 then begin {если количество минут больше 60,}

    hk:=q1+1; {то количество часов увеличить на 1}

    mk:=0; {минуты обнулить}

    end;

    repeat

    gettime(q1,min,sec,q2); {получение системного времени}

    setfillstyle(1,1); {установка стиля заполнения}

    setcolor(4); {установка цвета рисования}

    if mk=min then rk:=60-abs(sk-sec) else rk:=abs(sk-sec);

    bar(250,6,250+abs(rk),12);

    if not(bm) then begin

    gettime(q1,min,sec,q2); {получение системного времени}

    po:=random(3);

    if sec+po>=59 then begin

    tpm:=min+1;

    tps:=0;

    end

    else begin

    tpm:=min;

    tps:=sec+po;

    end;

    end;

    xnp:=round(sin(fi)*24+320);

    ynp:=round(cos(fi)*15+406);

    xkp:=round(sin(fi)*38+320);

    ykp:=round(cos(fi)*30+406);

    setlinestyle(0,3,3);

    setcolor(11);

    line(xnp,ynp,xkp,ykp);

    ok:=false;

    if keypressed then begin

    a:=readkey;

    if a=chr(77) then begin fi:=fi-0.05; ok:=true; end; {Поворот дула влево}

    if a=chr(75) then begin fi:=fi+0.05; ok:=true; end; {Повоорт дула вправо}

    if ord(a)=27 then menu:=true; {Выход в меню}

    if fi3*pi/2 then fi:=3*pi/2;

    if a=' ' then begin {Выстрел}

    if (not(fire.v)) and (not(ok)) then begin

    minv;

    for d:=1 to 100 do begin

    if sou then

    sound(random(200)+100);delay(1);

    end;

    nosound;

    fire.v:=true;

    fire.r:=35;

    fire.si:=sin(fi)*1.1;

    fire.co:=cos(fi);

    ok:=true;

    fire.xs:=-10;

    fire.ys:=-10;

    end;

    s:=s+1;

    end;

    end;

    if (kv=0) and (not(fire.v)) then ex:=ex+1;

    if fire.v then begin {Полет снаряда}

    setfillstyle(1,0);

    setcolor(0);

    bar(fire.xs-4,fire.ys-4,fire.xs+4,fire.ys+4);

    xv:=round(fire.si*fire.r+320);

    yv:=round(fire.co*fire.r+406);

    fire.r:=fire.r+5;

    fire.xs:=xv;fire.ys:=yv;

    if (fire.xs=622)

    or (fire.ys=xm) and (fire.xs-4=ym) and (fire.ys-4=tpm) and (sec>=tps) and not(mn) then begin

    bm:=true;mn:=true;

    xm:=random(560)+30;

    ym:=random(320)+30;

    vm:=random(2)+3;

    if vm+sec>=59 then begin

    tzm:=min+1;

    tzs:=abs(vm+sec-60);

    end

    else begin

    tzm:=min;

    tzs:=vm+sec;

    end;

    repeat

    nch:=random(5)+1;

    mi:=20+nch*5; {Размер мишени}

    until nch=tzm) and (sec>=tzs) then begin

    bm:=false;mn:=false;

    setfillstyle(1,0);

    bar(xm,ym,xm+mi,ym+mi);xm:=-1300;ym:=-1300;

    end;

    if ok then begin

    setcolor(0);

    line(xnp,ynp,xkp,ykp);

    end;

    until (ord(a)=27) or (ex=1) or ((mk=min) and (sec>=sk));

    oko:=oko+cou;

    str(oko,em);

    bm:=false;mn:=false;fire.v:=false;

    if cou

    until exi;

    1: closegraph; {закрытие графического режима}

    end.


    Приглашения

    09.12.2013 - 16.12.2013

    Международный конкурс хореографического искусства в рамках Международного фестиваля искусств «РОЖДЕСТВЕНСКАЯ АНДОРРА»

    09.12.2013 - 16.12.2013

    Международный конкурс хорового искусства в АНДОРРЕ «РОЖДЕСТВЕНСКАЯ АНДОРРА»




    Copyright © 2012 г.
    При использовании материалов - ссылка на сайт обязательна.