Условия выполнения программы
Разработка эскизного и технического проектов программы
Задание
Разработать программу, моделирующую игру «Скачки». В игре участвует 10 наездников; за каждый тур игры каждый из них продвигается вперед на расстояние от одного до 5 км случайным образом. Длина дистанции - 50 км. Всего проводится 5 заездов, победителю каждого заезда начисляется 5 очков. Победителем считается наездник, набравший наибольшее количество очков во всех заездах. Перед началом заездов участник игры выбирает номер наездника, с которым он будет идентифицироваться во время игры. Количество участников игры не превышает 10. в каждом туре с вероятностью 0.1 каждый наездник может упасть, то есть продвинуться за этот тур на 0 км. Передвижение наездников отобразить графически на экране. Предусмотреть возможность случайного распределения номеров наездников. скачка программа наездник игра Назначение и область применения Область применения данной программы - досуг программиста. Поскольку программа разрабатывается под Windows, то использоваться программа может только под управлением Windows 9x.
Технические характеристики
Постановка задачи В данной задаче используется совокупность генераторов простых чисел. Для определения текущей скорости лошади используется два генератора случайных чисел - один определяет, не упала ли лошадь, второй в противном случае генерирует скорость в пределах от 1 до 5. В подзадаче случайного распределения ставок также используется генератор случайных чисел. Задача слегка изменена от оригинального условия, количество заездов не ограничено, и за каждую победу дается только по одному очку, так как очки получает только победитель, нет существенной разницы, сколько он получит, 1 или 5. победа лошадью достигается тогда, когда она проскочит больше 50 км.
Также используется набор массивов для записи промежуточных результатов и итогов.
Описание алгоритма Данная задача разбивается на несколько подзадач. . Задача распределения ставок сделана полностью средствами визуального программирования. При выборе лошади игроком в массив игроков записывается номер выбранной лошади. . Задача случайного распределения номеров представляет собой два вложенных цикла - в первом последовательно берутся игроки, во втором с постусловием генерируется случайное число - номер лошади, и сравнивается со временным массивом Boolean, в который записываются лошади, уже распределенные по игрокам. . Основная задача - собственно скачки. Используется компонент таймер, который каждую секунду запускает набор генераторов случайных чисел - для скорости и для определения падения лошади. Одновременно проверяется условие победы - пройдено больше 50 км. Прорисовка изображения осуществляется средствами canvas - очистка экрана заполненным квадратом и прорисовка лошадей, загруженных из файла bmp.
Организация входных и выходных данных Программа создана с помощью визуальной среды программирования, соответственно, внешние данные полностью вводятся в интерактивном режиме - отмечая нужных лошадей, и т.д. Внешние данные - результаты заездов, статус лошадей - падение, победа - выводятся на экран с помощью компонентов memo и имитации статусной строки (так как возможности этого компонента в данной программе не нужны, просто имитируется привычный интерфейс windows).
Выбор состава технических и программных средств Данная программа написана в среде Delphi, поэтому она требует наличия операционной системы Windows. Среда Delphi удобна для более быстрой разработки приложений для Windows. Системные требования: Windows 9х, Pentium 100 или выше, объем оперативной памяти от 8 МБ; Жесткий диск объемом не менее 500 Мб. Дополнительные средства не требуются.
Разработка рабочего проекта Разработка программы
Программа создана в визуальной среде программирования, поэтому основным ее компонентом является форма, на которой расположены элементы игры. Проект главного окна представлен на рис 1.
- Рис. 2. Главное окно программы-Form1
Главные компоненты и описание их свойств. Компонент Form1. Свойства: Caption - «скачки» События: FormCreat - инициализирует внутренние массивы, загружает из внешнего файла картинку, Выводит начальные данные о статусе побед игроков. Checkbox1 -10 - служат для выбора игроками лошадей. В программе при выборе лошади свойство enabled меняется на false, и дважды выбрать одну лошадь невозможно. При событии onclick записывается номер лошади в массив игроков и меняется свойство enabled. MEMO1 - компонент выводит данные о текущем распределении очков за победы, а также данные о случайном распределении номеров лошадей между игроками. Timer1 - служит для генерации ходов лошадей. Событие onTimer используется для генерации положения лошадей, их прорисовки и проверки условий победы. Button1 - «Новая ставка» выводится окно ввода данных о количестве игроков, после этого можно распределять лошадей между игроками. Button2 - «Начать скачку» - запускается таймер. Button3 - «Случайное распределение» - запускается подпрограмма случайного распределения лошадей между игроками. Основной алгоритм программы запускается после нажатия кнопки «Начать скачку» Запускается таймер, который каждую секунду генерирует событие, в котором обрабатывается с помощью генератора случайных чисел положение лошади в гонке, обсчитывается условие победы. В случае победы таймер выключается, а в массив результатов заносятся очки игроку, поставившему на победившую лошадь. В случае отсутствия ставки очки теряются.
Спецификация программы
Описание программы
Наименование программы - race, программа представляет собой игру, главной целью которой является угадать лошадь, которая придет первой. Игра многопользовательская, то есть одновременно могут участвовать до 10 человек. Программа предназначена для развлечения. Данная программа основана на событийном управлении. Главное событие - генерация компонентом таймером каждую секунду события, в котором и происходит вычисление по заданным правилам с помощью генератора случайных чисел положения лошади. Постоянно используются простые циклы с фиксированным числом шагов для обработки каждой лошади. С помощью ветвлений определяется условия победы лошади. В случае победы цикл прерывается. Дополнительной подзадачей является случайное распределение номеров лошадей между игроками, организованная в виде двух вложенных циклов - с фиксированным количеством циклов для игрока и с постусловием для лошадей. Используется ветвление для определения уже использованных номеров лошадей. Данная программа выполняется ЭВМ на архитектуре X86, с конфигурацией, достаточной для запуска Windows 9x. Для вызова программы нужно запустить исполняемый файл Project1.exe Входные данные вводятся интерактивно - выбором лошадей с помощью checkbox, случайным распределением с помощью соответствующей кнопки. Выходными данными являются: изображение текущего положения лошадей; статусная строка с сообщениями о падениях и победе в забеге; информация о текущем распределении очков между игроками; иформация о распределении лошадей между игроками - при случайном распределении.
Тестирование программы
После нескольких тестовых запусков программы выяснилось, что во-первых, предсказать заранее победу лошади невозможно, а во вторых, в условии задачи вероятность падения слишком высока, так как практически каждый ход какая-либо лошадь падает, что отличается от реальности и здравого смысла.
Условия выполнения программы
Для выполнения программы требуется операционная система Windows 9x и соответствующие технические характеристики ЭВМ.
Выполнение программы
Для запуска программы требуется запустить исполняемый файл Project1.exe. Далее необходимо нажать кнопку «новая ставка» - ввести в поле требуемое количество игроков. После этого мышью в любом порядке - по желанию игроков - отметить лошадей, на которые делаются ставки. Номер текущего игрока отображается внизу окна программы. Если ставки сделаны неправильно, можно заново нажать кнопку «новая ставка», тогда checkbox-ы очистятся. Можно также случайно распределить ставки с помощью соответствующей кнопки. Когда ставки полностью распределены, станет возможным нажать кнопку «начать скачку». После скачки общие результаты всех заездов отображаются в окне справа, а номер победившей лошади - внизу окна приложения. Сообщения оператору
Сообщения оператору не предусмотрены. Возможно сообщение об ошибке при отсутствии файла 1.bmp. Для исправления можно или восстановить его, или создать в любом редакторе новый файл с таким же именем, размером 20*20. Текст программы Unit1;, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,, ComCtrls, ExtCtrls, Buttons, math;= class(TForm): TButton;: TCheckBox;: TCheckBox;: TCheckBox;: TCheckBox;: TCheckBox;: TCheckBox;: TCheckBox;: TCheckBox;: TStaticText;: TBitBtn;: TTimer;: TCheckBox;: TCheckBox;: TPaintBox;: TMemo;: TButton;BitBtn1Click (Sender: TObject);CheckBox1Click (Sender: TObject);CheckBox2Click (Sender: TObject);CheckBox3Click (Sender: TObject);CheckBox4Click (Sender: TObject);CheckBox5Click (Sender: TObject);CheckBox6Click (Sender: TObject);CheckBox7Click (Sender: TObject);CheckBox8Click (Sender: TObject);CheckBox9Click (Sender: TObject);CheckBox10Click (Sender: TObject);Button1Click (Sender: TObject);FormCreate (Sender: TObject);Timer1Timer (Sender: TObject);Button2Click (Sender: TObject); {Private declarations} {Public declarations};: TForm1;:int64;:array [1..10] of integer;:tbitmap;:array [1..10] of integer;:array [1..10] of boolean;:boolean;:array [1..10] of integer; {$R *.DFM}TForm1. BitBtn1Click (Sender: TObject);i:integer;. Canvas. FillRect (paintbox1. Canvas. ClipRect);i:=1 to 10 dohorse[i]:=1;[i]:=false;. Canvas.draw (horse[i]*10, i*32-30, horseimage);;.checked:=false;.checked:=false;.checked:=false;.checked:=false;.checked:=false;.checked:=false;.checked:=false;.checked:=false;.checked:=false;.checked:=false;. Enabled:=true;. Enabled:=true;. Enabled:=true;. Enabled:=true;. Enabled:=true;. Enabled:=true;. Enabled:=true;. Enabled:=true;. Enabled:=true;. Enabled:=true;i:= 1 to 10 do arr[i]:=0; numer:=strtoint (inputbox(' ', ' Введите количество игроков', '10')); statictext1. Caption:=' Игрок'+ inttostr(numer);;TForm1. CheckBox1Click (Sender: TObject);i: integer;:=numer;[i]:=1;. Enabled:=false;:=numer-1;. Caption:='игрок ' +inttostr(numer);numer=0. Enabled:=false;. Enabled:=false;. Enabled:=false;. Enabled:=false;. Enabled:=false;. Enabled:=false;. Enabled:=false;. Enabled:=false;. Enabled:=false;. Enabled:=false;. Enabled:=true;;;TForm1. CheckBox2Click (Sender: TObject);[numer]:=2;. Enabled:=false;:=numer-1;. Caption:='игрок ' +inttostr(numer);numer=0. Enabled:=false;. Enabled:=false;. Enabled:=false;. Enabled:=false;. Enabled:=false;. Enabled:=false;. Enabled:=false;. Enabled:=false;. Enabled:=false;. Enabled:=false;. Enabled:=true;;;TForm1. CheckBox3Click (Sender: TObject);[numer]:=3;. Enabled:=false;:=numer-1;. Caption:='игрок ' +inttostr(numer);numer=0. Enabled:=false;. Enabled:=false;. Enabled:=false;. Enabled:=false;. Enabled:=false;. Enabled:=false;. Enabled:=false;. Enabled:=false;. Enabled:=false;. Enabled:=false;. Enabled:=true;;;TForm1. CheckBox4Click (Sender: TObject);[numer]:=4;. Enabled:=false;:=numer-1;. Caption:='игрок ' +inttostr(numer);numer=0. Enabled:=false;. Enabled:=false;. Enabled:=false;. Enabled:=false;. Enabled:=false;. Enabled:=false;. Enabled:=false;. Enabled:=false;. Enabled:=false;. Enabled:=false;. Enabled:=true;;;TForm1. CheckBox5Click (Sender: TObject);[numer]:=5;. Enabled:=false;:=numer-1;. Caption:='игрок ' +inttostr(numer);numer=0. Enabled:=false;. Enabled:=false;. Enabled:=false;. Enabled:=false;. Enabled:=false;. Enabled:=false;. Enabled:=false;. Enabled:=false;. Enabled:=false;. Enabled:=false;. Enabled:=true;;;TForm1. CheckBox6Click (Sender: TObject);[numer]:=6;. Enabled:=false;:=numer-1;. Caption:='игрок ' +inttostr(numer);numer=0. Enabled:=false;. Enabled:=false;. Enabled:=false;. Enabled:=false;. Enabled:=false;. Enabled:=false;. Enabled:=false;. Enabled:=false;. Enabled:=false;. Enabled:=false;. Enabled:=true;;;TForm1. CheckBox7Click (Sender: TObject);[numer]:=7;. Enabled:=false;:=numer-1;. Caption:='игрок ' +inttostr(numer);numer=0. Enabled:=false;. Enabled:=false;. Enabled:=false;. Enabled:=false;. Enabled:=false;. Enabled:=false;. Enabled:=false;. Enabled:=false;. Enabled:=false;. Enabled:=false;. Enabled:=true;;;TForm1. CheckBox8Click (Sender: TObject);[numer]:=8;. Enabled:=false;:=numer-1;. Caption:='игрок ' +inttostr(numer);numer=0. Enabled:=false;. Enabled:=false;. Enabled:=false;. Enabled:=false;. Enabled:=false;. Enabled:=false;. Enabled:=false;. Enabled:=false;. Enabled:=false;. Enabled:=false;. Enabled:=true;;;TForm1. CheckBox9Click (Sender: TObject);[numer]:=9;. Enabled:=false;:=numer-1;. Caption:='игрок ' +inttostr(numer);numer=0. Enabled:=false;. Enabled:=false;. Enabled:=false;. Enabled:=false;. Enabled:=false;. Enabled:=false;. Enabled:=false;. Enabled:=false;. Enabled:=false;. Enabled:=false;. Enabled:=true;;;TForm1. CheckBox10Click (Sender: TObject);[numer]:=10;. Enabled:=false;:=numer-1;. Caption:='игрок ' +inttostr(numer);numer=0. Enabled:=false;. Enabled:=false;. Enabled:=false;. Enabled:=false;. Enabled:=false;. Enabled:=false;. Enabled:=false;. Enabled:=false;. Enabled:=false;. Enabled:=false;. Enabled:=true;;;TForm1. Button1Click (Sender: TObject);i:integer;;:=false;. Enabled:=true;TForm1. FormCreate (Sender: TObject);i:integer;:=10;i:=1 to 10 do[i]:=false;[i]:=0;[i]:=0;;:=tbitmap.create;. LoadFromFile ('1.bmp');.transparent:=true;. TransparentColor:=clWhite;i:=1 to 10 do memo1. Lines.add ('игрок ' + inttostr(i)+' - '+inttostr (winners[i])+' побед');;TForm1. Timer1Timer (Sender: TObject);i: integer; winner:integer;. Canvas. FillRect (paintbox1. Canvas. ClipRect);.canvas. MoveTo (500,1);. Canvas. Lineto (500,400);i:=1 to 10 do. Canvas.draw (horse[i]*10, i*32-30, horseimage);random(10)=1[i]:=true;. Caption:=inttostr(i)+ ' лошадь упала';fall[i]=false then horse[i]:=horse[i]+random(5)+1;[i]:=false;horse[i]>50:= true;:=i;arr[winner]<>0 then inc (winners[arr[winner]]);;;;endrace=true. Caption:='Выиграла лошадь №' + inttostr(winner);.enabled:=false;. Lines. Clear;. Lines.add ('количесиво побед');i:=1 to 10 do memo1. Lines.add ('игрок ' +inttostr(i)+' - '+inttostr (winners[i])+' побед');. Canvas. FillRect (paintbox1. Canvas. ClipRect);i:=1 to 10 do paintbox1. Canvas.draw (horse[i]*10, i*32-30, horseimage);i:=1 to 10 do horse[i]:=1;;;TForm1. Button2Click (Sender: TObject);i: integer; k:integer; temp:array [1..10] of boolean;;i:=1 to 10 do temp[i]:=false;. Lines.clear;i:=1 to numer do:=random(10)+1;temp[k]=false then[i]:=k;[k]:=true;;arr[i]<>0;.lines.add ('игрок '+ inttostr(i)+ ' поставил на ' + inttostr(k));;. Enabled:=true;. Enabled:=false;. Enabled:=false;. Enabled:=false;. Enabled:=false;. Enabled:=false;. Enabled:=false;. Enabled:=false;. Enabled:=false;. Enabled:=false;. Enabled:=false;;
end.
Заключение
Программирование при помощи языков высокого уровня, а тем более в средах программирования является полезным не только в разрезе создания конкретных программных продуктов. Изучение даже основ дисциплины настраивает подход человека к осмыслению деятельности в разных сферах, порой далеких от компьютеров. Ведь написание программы для компьютера, в общепринятом понимании «писания кода каким-либо языком», не ограничивается введением набора команд. Этот «общепонятный» процесс лишь малая и не самая сложная часть создания программы. Более важным и сложным этапом является разработка алгоритма. Ведь от решений в алгоритме напрямую зависят большинство показателей качества будущей программы: быстродействие, экономичность ресурсов, простота и удобство использования. А чтобы создать алгоритм не обязательно быть профессиональным программистом. Так абсолютно любой человек ежедневно либо придумывает новые алгоритмы, либо пользуется уже созданными им или другими людьми. Взять тот же рецепт приготовления какого-либо блюда. Какой-либо повар придумывает рецепт, а окружающие после постоянно используют. Чем не программист, программа и операторы. Хорошая программа будет жить долго, плохую может вообще использовать не будут. А чтобы программа была полезна надо создать оптимальный алгоритм, предусмотреть различные варианты входных / выходных данных, продумать схему общения с оператором и лишь после решения этих вопросов можно переложить эту систему на какой-либо язык программирования, чтобы течение мыслей программиста было понятно машине. И машина возьмет на себя часть труда использующего её человека.
Список источников
1 Дарахвелидзе П., Марков Е. Программирование на Object Pascal. Киев, 1998. С. Симонович, Г. Евсеев Занимательное программирование Delphi М,: АСТ-пресс книга» 2001. Фаронов В.В. Delphi 4. Учебный курс.-М.:Издательство «Нолидж», 1998. Федоров А.Г. Delphi 3.0 для всех. М., 1998. Емелина, Е.И. Основы программирования на языке Паскаль. [Текст] М.: 2007. Фаронов В.В. Турбо Паскаль. Книга 1. Основы Турбо Паскаля. М., 2007 Культин Н.Б. Delphi в задачах и примерах. - СПб.: БХВ - Петербург, 2005. Delphi: быстрый старт. [Текст] - СПб.: БХВ - Петербург, 2009. Turbo Pascal / С.А. Немнюгин. [Текст] - СПб: Издательство «Питер», 2010. Мануйлов, В.Г. Разработка программного обеспечения на Паскале. [Текст] М.: 2008.
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|