Коровы и быки

Федеральное государственное  бюджетное образовательное учреждение

высшего профессионального образования

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

(ФГБОУ ВПО  “ТвГТУ”)

Кафедра информационных систем

 

 

 

 

 

 

 

 

 

 

Курсовая работа

по дисциплине «Технология программирования»

 

на тему: «Коровы и быки»

 

 

 

 

 

 

 

   Выполнил: студент 3 курса

заочного отделения

факультета ИДПО

группы ИСТ

 Анисенков  Е.М.                      

 

 

 

Содержание

 

 

 

 

 

Введение

Актуальность избранной темы объясняется существом и значимостью затрагиваемого материала. Стремительное развитие компьютерной техники в последние годы, появление мощных графических ускорителей и процессоров способствовало не менее бурному развитию компьютерных игр. Выдающиеся разработки этой отрасли – это сложнейшие программы, как правило, с очень высокими требованиями к аппаратной части компьютера. Однако для возможности отдохнуть пользователю компьютера не всегда требуется новейшая компьютерная игра. Именно этой цели – отдыху служит разработанная в рамках данного курсового проекта программа.

Объектом курсовой работы является компьютерные игры.

Целью данной курсовой работы является разработка популярной развлекательной игры Коровы и быки. Программа предоставляет возможность играть с компьютером, который играет согласно созданному алгоритму. В процессе разработки должны быть усвоены некоторые новые возможности языка С++ и среды Borland C++ Builder. В программе должны быть учтены моменты, позволяющие пользователю легко освоить программу, для этого необходимо создать удобный интерфейс.

«Коровы и быки». Программа выбирает с помощью датчика 
случайных чисел четырехзначное число с разными цифрами. 
Угадать это число. На каждом шаге играющий называет четырехзначное число, а программа сообщает, сколько цифр числа угадано («быки») и сколько цифр угадано и стоит на нужном месте («коровы»). Например, если программой задано число 1294, а играющий назвал 1423, он получит ответ «1 'корова, 3 быка».

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

  • изучение и анализ литературы по программированию компьютерных игр;
  • изучение программной среды программирования С++ Builder для создания игровой программы;
  • разработка алгоритма и программы для реализации игры «Коровы и быки».

 

 

 

  1. Аналитическая часть

 

      1. Язык программирования

Язык программирования С был разработан в начале 70–х годов. К настоящему времени он претерпел несколько этапов своего развития. Язык программирования С++ объединил в себе достоинства языка С и возможностей объектно–ориентированного программирования. К основным достоинствам языков С и С++ следует отнести гибкость и надежность, переносимость программ с одной платформы на другую и с одной операционной системы на другую. Языки С и С++ являются языками высокого уровня. Но вместе с тем обладают богатыми возможностями низкоуровневого программирования. Это делает их очень гибкими и пригодными как для начинающих пользователей, так и для профессиональных программистов.

Система программирования Borland C++ Builder объединила в себе идеи интегрированной среды разработки, реализованные компанией в системах программирования Turbo Pascal и Borland Delphi с возможностями языка программирования C++. История этой системы программирования начинается с интегрированной среды разработки Borland Turbo C.

Среда Turbo C представляла собой реализацию идей, заложенных компанией–разработчиком в системе программирования Turbo Pascal для языка программирования C. Компания Borland стремилась перенести удачную реализацию идей интегрированной среды разработки на новую основу. Компилятор Turbo C не был однопроходным, и потому время компиляции исходной программы превышало время компиляции аналогичной программы в Turbo Pascal. Кроме того, в системе программирования использовался стандартный компоновщик исполняемых файлов MS DOS.

Преимущество Turbo C заключалось в том, что эта система программирования строилась на базе стандартного языка программирования C. Данный язык получил широкое распространение среди разработчиков в качестве языка системного программирования, для него существовали компиляторы под многие типы целевых архитектур. В этом было главное отличие системы программирования Turbo C от схожей по организации системы программирования Turbo Pascal, которая строилась на основе поддержки нестандартного расширения языка Pascal.

С развитием системы программирования на базе Turbo Pascal развивались и системы программирования на основе Turbo C.

Современная реализация Borland C++ Builder ориентирована на разработку результирующих программ, выполняющихся под управлением ОС Microsoft Windows всех типов. Сама система программирования Borland C++ Builder, как и Borland Delphi, также функционирует под управлением ОС типа Microsoft Windows. Она полностью поддерживает стандарт языка C, что делает возможным создание с помощью данной системы программирования модулей и библиотек, используемых в других средствах разработки (чего очень сложно достигнуть с помощью Borland Delphi).

По возможностям, внешнему виду и технологиям система программирования Borland C++ Builder схожа с системой программирования Borland Delphi. В ее основу положены те же основные идеи и технологии. Структура классов языка C++ в системе программирования Borland C++ Builder построена в той же библиотеке VCL (visual control library), в которой строится структура классов Object Pascal в системе программирования Borland Delphi. Правда, разработчик, создающий программы на C++, может не пользоваться классами VCL и взять за основу любую другую библиотеку, чего нельзя сказать о разработчике, использующем Object Pascal, – набор доступных библиотек для последнего языка сильно ограничен.

Успешное распространение систем программирования Turbo Pascal и Borland Delphi способствовало и внедрению на рынок системы программирования Borland C++ Builder от той же компании–разработчика. Эта система программирования занимает прочную позицию на рынке средств разработки для языка C++, где существует довольно жесткая конкуренция.

C++ Builder –  мощная система визуального объектно – ориентированного проектирования, позволяющая решать множество задач, в частности:

а) Создавать законченные приложения для Windows самой различной направленности, от чисто вычислительных и логических до графических и мультимедиа.

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

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

г) Создавать мощные системы работы с локальными и удаленными базами данных любых типов; при этом имеются средства автономной отладки приложений с последующим выходом в сеть.

д) Формировать и печатать сложные отчеты, включающие таблицы, графики.

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

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

Исходя из всего вышесказанного и было принято решение производить разработку программы в среде визуального программирования C++ Builder.

 

      1. Этапы разработки программных систем

Программа, работающая на компьютере, нередко отождествляется с самим компьютером, т. к. человек, использующий программу, «вводит в компьютер» исходные данные, как правило, при помощи клавиатуры, а компьютер «выдает результат» на экран, на принтер или в файл. На самом деле, преобразование исходных данных в результат выполняет процессор компьютера. Процессор преобразует исходные данные в результат по определенному алгоритму, который, будучи записан на специальном языке, называется программой. Таким образом, чтобы компьютер выполнил некоторую работу, необходимо разработать последовательность команд, обеспечивающую выполнение этой работы, или, как говорят, написать программу.

Этапы разработки программы

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

Программирование – это процесс создания (разработки) программы, который может быть представлен последовательностью следующих шагов:

1. Спецификация (определение, формулирование требований  к программе).

2. Разработка  алгоритма.

3. Кодирование (запись алгоритма на языке программирования).

4. Отладка.

5. Тестирование.

6. Создание  справочной системы.

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

На этапе разработки алгоритма необходимо определить последовательность действий, которые надо выполнить для получения результата. Если задача может быть решена несколькими способами и, следовательно, возможны различные варианты алгоритма решения, то программист, используя некоторый критерий, например, скорость решения алгоритма, выбирает наиболее подходящее решение. Результатом этапа разработки алгоритма является подробное словесное описание алгоритма или его блок–схема.

После того как определены требования к программе и составлен алгоритм решения, алгоритм записывается на выбранном языке программирования. В результате получается исходная программа.

Программа представляет собой последовательность операторов языка программирования, записанных в соответствии со схемой алгоритма.

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

Запись программы осуществляется в соответствии с синтаксисом языка. Для наглядности следует записывать по одному оператору на строке, вложенные операторы (особенно в условном операторе или операторе цикла) сдвигать на 2–3 позиции вправо. На 5–10 строк текста программы желательно записывать комментарий, что делает программу самодокументируемой; при этом можно обойтись без дополнительного описания.

Качество разрабатываемых программ определяется рядом характеристик, описывающих требуемые свойства. В зависимости от назначения программы требования, предъявляемые к характеристикам ее, могут меняться. К наиболее важным характеристикам, определяющим свойства программ, относятся надежность программ, простота пользования, мобильность, удобство эксплуатации, эффективность, совместимость, испытуемость, стоимость, полная документируемость.

Отладка – это процесс поиска и устранения ошибок. Ошибки в программе разделяют на две группы: синтаксические (ошибки в тексте) и алгоритмические. Синтаксические ошибки – наиболее легко устраняемые. Алгоритмические ошибки обнаружить труднее. Этап отладки можно считать законченным, если программа правильно работает на одном–двух наборах входных данных.

Этап тестирования особенно важен, если вы предполагаете, что вашей программой будут пользоваться другие. На этом этапе следует проверить, как ведет себя программа на как можно большем количестве входных наборов данных, в том числе и на заведомо неверных.

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

Установочный диск или CD–ROM создаются для того, чтобы пользователь мог самостоятельно, без помощи разработчика, установить программу на свой компьютер. Обычно помимо самой программы на установочном диске находятся файлы справочной информации и инструкция по установке программы (Readme–файл).

 

 

 

 

 

  1. Проектирование программной системы

 

      1. Построение функциональной схемы ПО

Строим функциональную схему для определения составляющих программы:

 

Основные


правила

игры

 


Входная информация Результат игры



 

 

 

Человек  Компьютер

 

 

 

 

      1. Описание метода решения

«Коровы и быки». Программа выбирает с помощью датчика 
случайных чисел четырехзначное число с разными цифрами. 
Угадать это число. На каждом шаге играющий называет четырехзначное число, а программа сообщает, сколько цифр числа угадано («быки») и сколько цифр угадано и стоит на нужном месте («коровы»). Например, если программой задано число 1294, а играющий назвал 1423, он получит ответ «1 'корова, 3 быка».

 

      1. Разработка программы

После запуска С++ Builder на экране появится пустая форма. Слева от нее расположено окно свойств Object Properties выделенного объекта. В верхней части расположены страницы с доступными компонентами.

Для размещения объекта на форме необходимо:

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

После этого на форме появится соответствующий элемент управления. Изменяем необходимые свойства в окне Object Properties.

Размещаем следующие компоненты:

  • BitBtn – командная кнопка с надписью и пиктограммой (страница Additional) (2 компонента).
  • CheckBox – кнопка с независимой фиксацией (флажком) и служит в качестве двоичного переключателя режимов в программе (переключается одинарным щелчком мыши на компоненте) (1 компонент).
  • СSpinEdit – редактор числа (страница Samples). Обеспечивает отображение и редактирование целого числа с возможностью его изменения с помощью двойной кнопки  (2 компонента).
  • Image – рисунок (страница Additional). Этот компонент предназначен для отображения рисунков, в том числе пиктограмм и метафайлов  (1 компонент).
  • Label – представляет собой статический текст и служит для отображения информации (страница Standard) (2 компонента).
  • MainMenu (страница Standard). Для проектирования главного меню следует положить на форму компонент TMainMenu и с помощью Object Inspector'a настроить свойства объекта. При нажатии расположенной справа в строке Items кнопки вызывается окно проектирования меню, в котором пользователь вводит текст пунктов меню в свойство Caption (ввод дефиса вызывает появление горизонтальной разделительной черты между пунктами меню, знак '&' позволяет использовать следующий за ним символ для быстрого доступа к данному пункту меню); булево свойство Checked позволяет замаркировать данный пункт меню галочкой, свойство ShortCut – выбрать горячую клавишу (или сочетание клавиш) для быстрого доступа к данному пункту меню  (1 компонент).
  • MediaPlayer – мультимедийный проигрыватель. С помощью этого компонента можно управлять различными мультимедийными устройствами  (1 компонента).
  • Panel – является несущей конструкцией для размещения на ней других элементов управления, являясь в этом случае родителем для размещенных на ней компонентов (страница Standard). Рекомендуется использовать компонент TPanel для размещения компонентов при создании пользовательского интерфейса (1 компонент).
  • RadioGroup – группа зависимых переключателей (страница Standard). Содержит специальные свойства для обслуживания нескольких связанных зависимых переключателей  (2 компонента).
  • StatusBar – панель статуса (страница Win32). Предназначена для размещения разного рода служебной информации  (1 компонент).
  • StringGrid – таблица строк (страница Additional). Этот компонент обладает мощными возможностями для представления текстовой информации в табличном виде  (1 компонент).

Кроме главной формы в проекте будет еще две формы – для вывода информации о программе и вывода описания игры.

Чтобы добавить форму к проекту необходимо нажать кнопку New Form на панели инструментов (или из меню File выбрать New à Form).

Размещаем на второй форме:

  • BitBtn – командная кнопка с надписью и пиктограммой (страница Additional) (1 компонент).
  • Image – рисунок (страница Additional). Этот компонент предназначен для отображения рисунков, в том числе пиктограмм и метафайлов  (1 компонент).
  • Label – представляет собой статический текст и служит для отображения информации (страница Standard) (1 компонента).
  • Panel – является несущей конструкцией для размещения на ней других элементов управления, являясь в этом случае родителем для размещенных на ней компонентов (страница Standard). Рекомендуется использовать компонент TPanel для размещения компонентов при создании пользовательского интерфейса (1 компонент).

Размещаем на третьей форме:

  • BitBtn – командная кнопка с надписью и пиктограммой (страница Additional) (1 компонент).
  • Memo – многострочный текстовый редактор (страница Standard). Используется для ввода и/или отображения многострочного текста.

Сохраняем проект.

Переходим к написанию кода программы.

Чтобы заставить С++ Builder самостоятельно сделать заготовку для процедуры обработчика события OnClick, дважды подряд без заметной паузы щелкните мышью по вновь вставленному компоненту. В ответ С++ Builder активизирует окно кода, и вы увидите в нем такой текстовый фрагмент:

 void __fastcall TForm1::CSpinEdit1Change(TObject *Sender)

{

}

Проектируем обработчики для кнопок инструментальной панели и пунктов меню.

 

Заключение

В результате выполнения курсовой работы была разработана программа на языке С++, реализующая алгоритм игры Коровы и быки.

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

По результатам тестирования программы можно сделать вывод о том, что программа полностью соответствует поставленной задаче.

 

 

 

Список использованной литературы

  1. Архангельский А.Я. Программирование в С++ Builder 6. –М.: «Издательство БИНОМ», 2003 г. –1152 с.
  2. Гагарина Л.Г., Кокорева Е.В., Виснадул Б.Д. Технология разработки программного обеспечения. –М.: ИД «Форум»: ИНФРА – М, 2008. –400 с.
  3. Гарднер М. Крестики–нолики. –М.: Мир, 1988. –215 c.
  4. Глушаков С.В., Зорянский В.Н., Хоменко С.Н. Программирование в среде Borland C++ Builder 6. –Харьков: Фолио, 2003. – 508 с.
  5. Гофман В.Э. Borland C++ Builder. –Спб.: BHV–Петербург, 2003. –488 с.
  6. Дубровский В. Н., Калинин А. Т.  Математические головоломки. –М.: Знание,  1990. –354 с.
  7. Жоголев Е.А. Введение в технологию программирования (конспект лекций). –М.: "ДИАЛОГ–МГУ", 1994. –286 с.
  8. Культин Н. C++ Builder в задачах и примерах. СПб.: БХВ–Петербург, 2005. –336 с.
  9. Лапчик М.В.  Borland C++.  –М.: Нолидж, 2007. –616 с.
  10. У. Болл, Г. Коксетер. Математические эссе и развлечения. –М.: Мир, 1986. –187 с.

 

 

Приложение. Листинг программы

include <iostream>

#include <ctime> 

 

using namespace std; 

 

int mass1[4],mass2[4], inp;

 

 

 

void zadum()

 

{

 

 

    srand(time(0)); 

   mass1[0] = rand()%9 + 1; 

   for (int I = 1; I <= 3; I++) 

       mass1[I] = rand()%10;

 

}

 

void razb()

 

{

 

 

    int del = 10; 

   for(int i = 3; i  > -1; i--)

 

 

    {

 

 

        mass2[i] = inp % 10; 

       inp /= 10;

 

 

    } 

 

 

}

 

int b()

 

{

 

 

    int res = 0; 

   for (int I = 0; I < 4; I++) 

       if (mass1[I] == mass2[I]) 

           res++; 

   return res;

 

}

 

int c()

 

{

 

 

    int res = 0; 

   for (int I = 0; I < 4; I++) 

       for (int J = 0; J < 4; J++) 

           if (mass1[I] == mass2[J] && I != J) 

               res++; 

   return res;

 

}

 

void game()

 

{

 

 

    zadum(); 

   cout << "Число  Б К\n" 

        << "----------\n"; 

   for(;;)

 

 

    {

 

 

        cin >> inp; 

       razb(); 

       cout << "       " << b() << " " << c() << "\n"; 

       if (b() == 4)

 

 

        { 

           cout << "Вы выйграли!!!\n"; 

           break;

 

 

        }

 

 

    }

 

}

 

void main()

 

{

 

 

    setlocale(0, "Russian"); 

   char M; 

   cout << "Здравствуйте, это игра 'Быки и коровы'.\n" 

        << "Компьютер задумал 4-хзначное число. Ваша задача - отгадать его посредством ввода чисел.\n" 

        << "Если цифра совпадает, но стоит на другом месте - это корова, если стоит на том же месте - бык.\n\n"; 

   for (;;)

 

 

    { 

       game();

 

 

        cout << "Ещё раз? (Д/Н)\n"; cin >> M; 

       if (M == 'н' || M == 'Н') 

       break;

 

 

    }

 

 

    system("pause");

 

 


 



Коровы и быки