Допомога у написанні освітніх робіт...
Допоможемо швидко та з гарантією якості!

Використання технологій об"єктно-орієнтованого програмування для розробки схеми життя лісного біому

КурсоваДопомога в написанніДізнатися вартістьмоєї роботи

Актуальність ООП як дисципліни полягає в тому, що підготовка спеціалістів в галузі систем штучного інтелекту дозволить забезпечити потребу у фахівцях, що здатні розробляти та описувати засобами об'єктно-орієнтованого програмування для опису моделей реального світу та складних промислових систем, систем зі зворотнім зв’язком, які активно взаємодіють або управляються подіями фізичного світу і для… Читати ще >

Використання технологій об"єктно-орієнтованого програмування для розробки схеми життя лісного біому (реферат, курсова, диплом, контрольна)

ДВНЗ «ДОНЕЦЬКИЙ НАЦІОНАЛЬНИЙ ТЕХНІЧНИЙ УНІВЕРСІТЕТ»

КАФЕДРА СИСТЕМ ШТУЧНОГО ІНТЕЛЛЕКТУ

КУРСОВИЙ ПРОЕКТ

з «Об'єктно-орієнтоване програмування»

на тему: «Використання технологій об'єктно-орієнтованого програмування для розробки схеми життя лісного біому»

Студента (ки) __3__ курса СШІ-11 _ групи

Напрям підготовки ____6.50 103 _______

спеціальності __________5 010 301 ______

Домбровський Д. О

Керівник ______доцент каф. СШІ ____

Бабаков Р. М

м. _Донецк_ - 2013 год

ТЕХНІЧНЕ ЗАВДАННЯ

Варіант завдання

Тема курсової роботи — «Використання технологій об'єктно-орієнтованого програмування для розробки схеми життя лісного біому». У умовному лісі існують два типи тварин — вовки та зайці. Головна мета для вовків: помножувати свою кількість та вести полювання на зайців, для втомування голоду. Головна мета для зайців: помножувати свою кількість та не потрапляти до вовків.

Для імітації лісу умовно використовується поле з фіксованим, на початок роботи) розміром, що може змінюватися через виправлення у коді програми. Кожне поле може вміщувати безліч тварин, що полють чи розмножуються. Перед тим як рахувати розмноження тварин, виконується перевірка на наявність хижака, що починає полювати, та з деяким шансом це може закінчитися знищенням класу зайця в цьому полі. Якщо ж полювання не вдалося, то за наявністю всіх умов для розмноження двоє типів тварин поширюють свою кількість. Після чого виповнюються «крок» тварини, тобто її переміщення по полю.

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

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

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

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

План роботи

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

Таблиця 1- Дати проміжних звітних періодів за видом роботи

Дата

Найменування етапу

30.09.013

Розробка алгоритмічної частини

15.10.2013

Розробка ієрархії класів

15.11.2013

Реалізація класів

30.11.2013

Розробка інтерфейсу користувача

15.12.2013

Тестування програмного забезпечення

10.04.2013

Оформлення пояснювальної записки

19.12.2013

Захист курсового проекту

Курсовий проект повинен бути розроблений на підставі таких документів, як: методичні вказівки з оформлення студентських робіт, ДСТУ ГОСТ 7.1:2006.

Додаткові вимоги

Вибір засобів розробки

Програма імітації лісного біому повинна бути реалізована з використанням мови програмування С++. Мова програмування С++ зручна для розробки тим, що дає можливість використовувати технологію об'єктно-орієнтованого програмування. Мова С++ розрахована і для консольних проектів, що можуть виступати у якості «двигуна» інших програм.

Вимоги до організаційного забезпечення

— програмна документація має налічувати наступні документи: пояснювальна записка; технічне завдання, екранні форми, тексти програм;

— для вдалого функціонування програмної розробки необхідно скопіювати файл з розширенням *.exe на комп’ютер на якому буде проводитися тестування користувачів;

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

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

— процесор — Intel Pentium III 1 Ghz;

— оперативна пам’ять — 64 Mb RAM;

— жорсткий диск — 1 Gb HDD;

— клавіатура;

— монітор.

Розробник

Домбровський Д.О.

(підпис)

(П.І.Б.)

Керівник

доцент, Бабаков Р.М.

(підпис)

(посада, П.І.Б.)

РЕФЕРАТ Пояснювальна записка: 40 с., 11 рис., 0 табл., 23 джерел Об'єктом розробки є лісовий біом з природним балансом між ними.

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

Для досягнення цієї цілі були застосовані такі методи й технології, як: об'єктно-орієнтоване програмування засобами C++.

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

Програмний продукт має такі особливості: виконаний як консольне рішення, швидка робота програмного застосунку. Програмний додаток може бути використаний, як приклад використання засобів об'єктно-орієнтованого програмування і може вказувати на перевагу цього способу програмування.

Програмний продукт був розроблений згідно з вимогами та реалізований у середовищі Visual Studio 2010. Було розроблено пояснювальну записку.

ЗМІСТ Вступ

1. Аналіз предмета розробки

2. Розробка алгоритмічної частини

3. Розробка програмної частини

4. Розробка інтерфейсу програми Висновок Перелік використаної літератури Додаток А. Лістинг програми ВСТУП Об'єктно-орієнтоване програмування (ООП) — парадигма програмування, в якій основними концепціями є поняття об'єктів і класів. Об'єктно-орієнтоване програмування — це методика розробки програм, в основі якої лежить поняття об'єкта, як певної структури, яка описує об'єкт реального світу, його поведінку. Завдання, яке вирішується з використанням методики ООП, описується в термінах об'єктів і операцій над ними, а програма при такому підході являє собою набір об'єктів і зв’язків між ними.

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

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

Важливість дисципліни «Об'єктно-орієнтоване програмування» полягає в тому, що вивчення даної дисципліни дозволяє сформувати базові поняття об'єктно-орієнтованого програмування, отримати навички застосування засобів об'єктно-орієнтованого програмування при вирішенні прикладних завдань, розвити системне мислення.

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

Метою даної курсової роботи є розробка програми засобами об'єктно-орієнтованого програмування з використанням програмної мови С++, що виконує моделювання схеми життя лісового біому.

1. АНАЛІЗ ПРЕДМЕТА РОЗРОБКИ Об'єктом розробки є ліс (біом лісу) та життя тварин в ньому.

Ліс — це сукупність землі, рослинності, в якій домінують дерева та чагарники, тварин, мікроорганізмів та інших природних компонентів, що в своєму розвитку біологічно взаємопов'язані, впливають один на одного і на навколишнє середовище.

Територія з високою щільністю дерев. Рослинні угруповання, що формуються на таких територіях, є характерними для великих площ суходолу в різних районах Земної кулі. Їхніми найважливішими функціями в біосфері є зв’язування вуглекислого газу, утворення біотопів, придатних для життя багатьох видів тварин, рослин та грибів, регулювання гідрологічного режиму, розвиток та підтримка ґрунтів.

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

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

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

Деревина лісів містить лігнін, котрий є речовиною, що розкладається відносно повільно у порівнянні з іншими органічними матеріалами — такими як целюлоза та крохмаль. Цим зумовлений відносно повільний (у порівнянні з іншими рослинними співтовариствами) кругообіг органічних речовин в лісі.

Найбільшими лісовими біомами є такі:

Дощові ліси (вологий тропічний ліс) Тайга Твердодеревинні ліси помірного поясу Тропічні сухі ліси

2. РОЗРОБКА АЛГОРИТМІЧНОЇ ЧАСТИНИ Щоб приступити до програмної розробки необхідно сформулювати складні алгоритми, що можливо потребують попереднього аналізу та розробки. До таких алгоритмів можна віднести виконання головного коду програми та його основні частини: процес пересування тварини по полю та процес полювання хижака (що входить в пересування). Слід одразу зазначити що програма припиняє свою роботу лише за бажанням користувача, тобто програма не може припинити роботу за власним бажанням.

2.1 Загальний алгоритм виконання програми

2.2 Алгоритм пересування по головному полю

2.3 Алгоритм полювання

3. РОЗРОБКА ПРОГРАМНОЇ ЧАСТИНИ Для розробки програми імітації були використані класи. Під час написання курсової роботи, класами були описані об'єкти та їх зв’язки, серед класів можна виділити:

- Tree

- Animal

Для створення двох основних класів вовк та заєць, використовується спадкування. Параметри класу Animal передаються в наступні класи:

- Wolf

- Rabbit

Клас Tree (Дерево) налічує наступні члени та методи:

— X, Y — ціла змінна, що означає розташування дерева. Визначається на початку програми, автоматично, в випадковому порядку. У конструкторі класу зазначена генерація цих параметрів.

Клас Animal (Тварина) налічує наступні члени та методи:

- X, Y — ціла змінна, що означає розташування тварини. Визначається на початку програми, автоматично, в випадковому порядку. У конструкторі класу зазначена генерація цих параметрів.

- Male — булева змінна, що означає стать тварини. У конструкторі класу зазначена генерація цих параметрів.

- Year — ціла змінна, що означає стартовий та поточний вік тварини. У конструкторі класу зазначена генерація цих параметрів.

- Hungry — ціла змінна, що означає параметр голоду тварини.

Ці параметри повністю наслідують два, все зазначених, класи. Логічним було б винести параметр Hungry з к класу Animal, та додати його до успадкованого класу Wolf, адже в програмі, голод використовується тільки для вовків. Але це дає змогу додати одну функцію, що може змінювати параметр голоду в зайців, і таким чином контролювати їх за допомогою рослинності на полі.

Глобальні функції програми:

- void finding () — або пошук. Ця функція реалізує пошук всіх елементів на даній позиціі.

- void move () — функція що реалізує переміщення всіх тварин на полі. Виконується кожного кроку.

- void add (int k) — функція розмноження. Додає до списку вовків чи кроликів новий елемент. В якості параметру що передається у метод виступає кількість елементів що необхідно створити. Це необхідно для регулювання росту вовків та зайців, адже вовки більш витриваліші, ніж нащадки зайців, тому їх на раз народжується менше.

- void add (int x, int y) — копія функції розмноження, а ле її особливість полягає у тому, що вона використовується для додавання у список та на поле лише один елемент і на зазначені координати x та y.

- void display (int font) — функція, що при виборі в меню варіанта роботи з графікою виводить всі положення звірів та дерев, а також кожен раз після виконання ходу стирає та відображає все знову. В неї передається робочий параметр, що означає виводити положення звірів чи ні.

- void hunt () — функція що відповідає за полювання. З назви зрозуміло що функція виконує процес полювання вовка на зайців.

- void menu1() — функція що викликає меню та дозволяє міняти параметри на полі.

- void timer () — основна функція що виконує всю послідовність программи.

- void menu_params () — виконує вивід параметрів, що смінюються.

Клас являє собою головне інструментальне засіб C++ для об'єктноорієнтованого програмування. Клас дуже схожий на структуру, в якій згруповані елементи, відповідні даними про деякий об'єкт, і оперують цими даними функції (звані методами). Ви дізнаєтеся, що об'єкт являє собою деяку сутність, наприклад телефон. Клас C++ дозволяє вашим програмам визначати всі атрибути об'єкта. У разі, коли об'єктом є телефон, клас може містити такі елементи даних, як номер і тип телефону (кнопковий або дисковий) і функції, що працюють з телефоном, наприклад dial, answer, і hang_up. Групуючи дані про об'єкт і кодуючи їх в одній змінної, ви спрощуєте процес програмування і збільшуєте можливість повторного використання свого коду. Під час розробки програми було розроблено 2 класи: tree, animal.

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

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

В об'єктно-орієнтованому програмуванні конструктор класу (від англ. Constructor, іноді скорочують ctor) — спеціальний блок інструкцій, що викликається при створенні об'єкта. Конструктор C++ - це особливий метод, що має ім'я, що збігається з ім'ям класу.

Конструктори були використані у 2 класах, у них задавались або генерувались стартові параметри об'єктів класу.

Динамічна ідентифікація типу даних — механізм у деяких мовах програмування, що дозволяє визначити тип даних змінної або об'єкта під час виконання програми.

Динамічне визначення типів не було використане, бо в нас не має базового класу, тому ніде створити базовий вказівник.

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

Наслідування — це процес, за допомогою якого, один об'єкт може успадковувати властивості іншого об'єкту і додавати до них риси, характерні тільки для нього. При написані програми було використане наслідування. Два класи: Wolf, Rabbit наслідували параметри з класу Animal.

Стандартна Бібліотека Шаблонів надає набір добре сконструйованих та злагоджено працюють разом узагальнених компонентів C++. Особлива турбота була проявлена?? для забезпечення того, щоб всі шаблонні алгоритми працювали не тільки зі структурами даних у бібліотеці, але також і з вбудованими структурами даних C++. Наприклад, всі алгоритми працюють із звичайними покажчиками. Ортогональний проект бібліотеки дозволяє програмістам використовувати бібліотечні структури даних зі своїми власними алгоритмами, а бібліотечні алгоритми — зі своїми власними структурами даних. Добре певні семантичні вимоги і вимоги складності гарантують, що компонент користувача буде працювати з бібліотекою і що він буде працювати ефективно. Ця гнучкість забезпечує широку застосовність бібліотеки.

Інша важливе міркування — ефективність. C ++ успішний, тому що він об'єднує виразну потужність з ефективністю. Багато зусиль було витрачено, щоб перевірити, що кожен шаблонний компонент в бібліотеці має узагальнену реалізацію, яка має ефективність виконання з різницею в межах декількох відсотків від ефективності відповідної програми ручної кодування.

4. РОЗРОБКА ІНТЕРФЕЙСУ ПРОГРАМИ

4.1 Вступ Интерфейс командной строки (англ. Command line interface, CLI) — разновидность текстового интерфейса (CUI) между человеком и компьютером, в котором инструкции компьютеру даются в основном путём ввода с клавиатуры текстовых строк (команд), в UNIX-системах возможно применение мши. Также известен под названием консоль.

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

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

На устройстве-консоли, которое печатало текст на бумаге, интерфейс командной строки был единственным возможным. На видеотерминалах интерфейс командной строки применяется по таким причинам:

Небольшой расход памяти по сравнению с системой меню.

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

Естественное расширение интерфейса командной строки — пакетный интерфейс. Его суть в том, что в файл обычного текстового формата записывается последовательность команд, после чего этот файл можно выполнить в программе, что возымеет такой же (не меньший) эффект, как если бы эти команды были по очереди введены в командную строку. Примеры — .bat-файлы в DOS и Windows, shell-скрипты в Unix-системах.

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

4.2 Меню У відповідності з завданням моя розробка повинна давати можливість контролювати всі процеси в програмі. Таким чином було створене меню, що викликається при запуску програми та при натиску Esc в процесі роботи програми. При відкритті меню, виконання програми ставиться на паузу. Це меню містить наступні пункти:

- «Запуск с отрисовкой графики», запускає програму з відображенням у консолі всіх об'єктів.

- «Запуск без отрисовки графики», запускає програму без відображення у консолі всіх об'єктів.

- «Пошаговый с отрисовкой графики», запускає програму з відображенням у консолі всіх об'єктів, у режимі прослідковування.

- «Пошаговый без отрисовки графики», запускає програму без відображенняя у консолі всіх об'єктів, у режимі прослідковування Рисунок 4.1 — Меню Рисунок 4.2 — Стартові параметри.

Рисунок 4.3 — Зміна стартових параметрів.

Рисунок 4.4 — Робота в режимі «Пошаговый с отрисовкой графики»

Рисунок 4.5 — Робота в режимі «Пошаговый без отрисовки графики»

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

При розробці програми були використані такі засоби ООП, як класи, конструктори, спадкування, стандартна бібліотека класів.

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

Для досягнення цієї цілі були застосовані такі методи й технології, як: об'єктно-орієнтоване програмування засобами C++.

програма імітація об'єктний орієнтований ПЕРЕЛІК ВИКОРИСТАНОЇ ЛІТЕРАТУРИ

1. Бьерн Страуструп «Язык программирования C++» специальное издание. Москва, Санкт — Петербург, 2002.

2. Г. Шилдт «Теория и практика Си++.» СПб.:BHV — Санкт-Петербург, 1996.

3. Шилдт Г. «Самоучитель C++ «БХВ-Петербург, 3-е издание 2003 г.

4. Н. Подбельский «Язык С++»; Питер, Санкт — Петербург 2004.

5. Валерий Лаптев «С++ Экспресс курс», БХВ — Санкт-Петербург, 2004.

6. А. Л. Фридман «Язык программирования С++ «курс лекций; Интернет Университет Информационных технологий; Москва 2003

7. Т. А. Павловская «С/С++ Программирование на языке высокого уровня» учебник для вузов; Питер, Санкт — Петербург 2004.

8. Брюс Эккель. Философия C++ (ориг. название: Thinking in C++. Introduction to Standard C++)

9. Стенли Липпман. Язык программирования C++. Вводный курс (ориг. название: C++ Primer)

10. Электронный курс http://www.intuit.ru/department/pl/cpp/ А. Л. Фридман «Язык программирования C++»

11. Касаткин А. И., Вальвачев А. Н. Профессиональное программирование на языке Си: От Турбо Си к С++. — Минск: Вышэйшая школа, 1992. — 240с.

12. Павловская Т. А. С/С++. Программирование на языке высокого уровня. — СПб.: Питер, 2003. — 461с.

13. http://www.parallel.ru

14. http://ru.wikipedia.org/wiki

15. http://msdn.microsoft.com/ru-ru/library/skef48fy.aspx

16. http://flank1er.blogspot.com/2012/11/glut-opengl.html

Додаток, А Лістинг програми

#include «stdafx.h»

#include

#include

#include

#include

#include

#include

using namespace std;

//размерность поля

const int w=50;

const int h=50;

int old=50; //через сколько шагов кролики могут размножаться

int delay=33; //задержка в миллисекундах

long int step=0; //кол-во пройденых шагов (выполненых итераций)

int endstep=0; //кол-во перемотки шагов вперед

int death=100;

int razmW=1;

int razmR=1;

int colW=5;

int colR=10;

int colT=10;

int font=0;

int pauser=0;

class tree

{ public:

int x, y;

tree ()

{

x=rand ()%w;

y=rand ()%h;

}

};

class animal

{

public:

int x, y; //положение

bool male; //пол

int year; //возраст

int hungry; //голод

animal ()

{

male=rand ()%2;

x=rand ()%w;

y=rand ()%h;

year=rand ()%50+25;

hungry=700+rand ()%100;

}

};

class wolf: public animal

{

public:

wolf ()

{

}

};

class rabbit: public animal

{

public:

rabbit ()

{

}

};

template struct list

{

TT key;

list *pred,*next;

void del ()

{

this->pred->next = this->next;

this->next->pred=this->pred;

delete this;

}

} ;

template class spisok

{

public:

list *beg;

spisok ()

{

beg=0;

srand (int (time)); //**********

list *p;

p=new (list );//создать первый элемент

beg=p;//запомнить адрес в переменную beg, в которой хранится начало списка

p->pred=0;p->next=0;//запомнить адресные поля

}

void finding () //сравнивание положение всех элементов списка

{

list *r=beg;

list *r2=beg;

for (int i=0;r->next≠0; r=r->next)

{

if (r->key.year < old) r->key.year++;

r2=beg;

for (int i=0;r2->next≠0; r2=r2->next)

{

if ((r->key.x == r2->key.x) && ((r->key.y == r2->key.y)))

if (r->key.male ≠ r2->key.male)

if ((r->key.year>=old)&& (r2->key.year>=old))

{

if (strcmp (typeid (TT).name ()," class wolf")==0)

add (razmW);

else

add (razmR);

//размжножение

//r->key.year=0;

//r2->key.year=0;

}

}

}

}

void move ()

{

list *p=beg;;

while (p)

{

if (p->key.x==0) p->key.x++; //если у левой грани то двигаемся вправо

else

if (p->key.x==w) p->key.x—; //если у правой грани двигаемся влево

else

p->key.x+=rand ()%3−1; //если не у граней, то в любую сторону

//аналогично

if (p->key.y==0) p->key.y++;

else

if (p->key.y==h) p->key.y—;

else

p->key.y+=rand ()%3−1;

//p->key.hungry—;

p=p->next;

}

}

void add (int k)

{

list *p;

for (int i=0; i

{

p=new (list ); //создать новый элемент и заполнить ключевое поле

list *r=beg;//встать на начало списка

for (int i=0;r->next≠0; r=r->next); //пройти по списку до конца списка

p->next=0;

r->next=p;

p->pred=r;

}

}

void add (int x, int y)

{

list *p;

p=new (list ); //создать новый элемент и заполнить ключевое поле

list *r=beg;//встать на начало списка

for (int i=0;r->next≠0; r=r->next); //пройти по списку до конца списка

p->next=0;

r->next=p;

p->pred=r;

}

void display (int font)

{

int wlf=0;

if (strcmp (typeid (TT).name ()," class wolf")==0)

wlf=1;

else if (strcmp (typeid (TT).name ()," class rabbit")==0)

wlf=2;

else wlf=3;

char CH;

switch (wlf)

{

case 1:

CH='W'; break;

case 2:

CH='*'; break;

case 3:

CH=5; break;

}

list *p=beg;

int kol=0;

COORD position;

HANDLE hConsole = GetStdHandle (STD_OUTPUT_HANDLE);

if (font==0)

while (p)

{

kol++;

p=p->next;

}

else

while (p)

{

kol++;

position.X = p->key.x;

position.Y = p->key.y;

SetConsoleCursorPosition (hConsole, position);

cout <<< p->key.male;

p=p->next;

}

//сдвигаем курсор ниже границы

if (font==1)

{

position.X = 0;

position.Y = h+1;

}

if (wlf==1 && font==1)

position.Y+=1;

SetConsoleCursorPosition (hConsole, position);

if (wlf==2)

cout << «Зайцы :» << kol <<" n" ;

else

if (wlf==1)

cout << «Волки :» << kol;

if (wlf==1)

cout<<" n Step: «<< step;

}

};

spisok W;

spisok R;

spisok T;

//функция удаление элемента списка, передаем в неё указатель на список с помошью & и указатель на элемент списка

template

list * del (spisok *A, list *rp)

{

list *rp2;

if (rp->pred==0) //если первый элемент списка

{

A->beg=rp->next;

delete rp;

A->beg->pred=0;

rp=A->beg;

} else

if (rp->next==0) //если посл элемент

{

rp=rp->pred;

delete rp->next;

rp->next=0;

cout <<" 2″ ;

} else

{ //если в середине

//rp=rp->next; //переходим на след элемент

//удаляем предыдущий

rp2=rp->pred;

rp->pred->next = rp->next;

rp->next->pred=rp->pred;

delete rp;

rp=rp2;

}

return rp;

}

void hunt ()

{

list *wp;

wp=W.beg;

list *rp;

list *rp2;

rp=R.beg;

while (wp) //цикл по волкам

{

rp=R.beg;

wp->key.hungry—;

if (wp->key.hungry<=0)

{

if (wp->next≠0)

wp=del (&W, wp);

if (wp==W.beg) continue;

}

while (rp->next≠0) //цикл по кроликам

{

if ((wp->key.x==rp->key.x) && (wp->key.y==rp->key.y)) //находятся в одной ячейке то удаляем кролика

{

wp->key.hungry+=10; //пополняем голод волка

rp=del (&R, rp);

continue;

}

if (!rp->next) break; //проверк после удаления, если мы стали на посл элемент, то выходим из цыкла

rp=rp->next; //переход на след кролика

}

if (!wp->next) break;

wp=wp->next; //переход на след волка

}

}

void menu1();

void timer ()

{

setlocale (LC_ALL," RUS");

int stop;

while (1)

{

if (_kbhit ())

{

if (getch ()==27)

{

menu1();

}

}

step++;

R.finding ();

W.finding ();

W.move ();

R.move ();

hunt ();

if (step>endstep)

{

system («CLS»);

if (font==1)

T.display (font);

R.display (font);

W.display (font);

Sleep (delay);

if (pauser==1)

if (getche ()==27) menu1();

}

}

}

void menu_params ();

void menu1()

{

system («cls»);

cout<<" ttttВыберите режим работы: nnn" ;

cout<<" ttt1. Запуск с отрисовкой графики. n" ;

cout<<" ttt2. Запуск без отрисовки графики. n" ;

cout<<" ttt3. Пошаговый с отрисовкой графики. n" ;

cout<<" ttt4. Пошаговый без отрисовки графики. n" ;

switch (getch ())

{

case '1': /*cout<<" Первый пункт" ;*/ font=1; pauser=0; break;

case '2': /*cout<<" Второй пункт" ;*/ font=0; pauser=0; break;

case '3': /*cout<<" Третий пункт" ;*/ font=1; pauser=1; break;

case '4': /*cout<<" Четвыртый пункт" ;*/ font=0; pauser=1; break;

}

system («cls»);

menu_params ();

cout<<" nnnn Для продолжения работы, нажмите Spase." ;

cout<<" n Для изменения стартовых параметров, нажмите Enter." ;

//getche ();

if (getch ()==13)

{

for (;;)

{

system («cls»);

menu_params ();

cout<<" n9. Выходnn" ;

switch (getch ())

{

case '1': cout<<" n Количество волков: «;

cin>>colW; break;

case '2': cout<<" n Количество кроликов: «;

cin>>colR; break;

case '3': cout<<" n Количество деревьев: «;

cin>>colT; break;

case '4': cout<<" n Количество шагов, через которое кролики начнут размножаться: «;

cin>>colR; break;

case '5': cout<<" n Задержка в милисекундах: «;

cin>>delay; break;

case '6': cout<<" n Перемотка шагов со старта: «;

cin>>endstep; break;

case '7': cout<<" n Количество детенышей у волков при разможножении: «;

cin>>razmW; break;

case '8': cout<<" n Количество детенышей у кроликов при разможножении: «;

cin>>razmR; break;

case '9': return;

}

}

cout<<" n Количество детенышей у кроликов при разможножении: «;

cin>>razmR;

cout<<" nnn" ;

menu_params ();

if (getch ()=='9') return;

}

}

void menu_params ()

{

cout<<" tt Cтартовые параметрыnn" ;

cout<<" n1. Количество волков: «<

cout<<" n2. Количество кроликов: «<

cout<<" n3. Количество деревьев: «<

cout<<" n4. Количество шагов, через которое кролики начнут размножаться: «<

cout<<" n5. Задержка в милисекундах: «<

cout<<" n6. Перемотка шагов со старту: «<

cout<<" n7. Количество детенышей у волков при разможножении: «<

cout<<" n8. Количество детенышей у кроликов при разможножении: «<

//getche ();

}

int _tmain (int argc, _TCHAR* argv[])

{

setlocale (LC_ALL," RUS");

srand ((int)time);

menu1();

W.add (colW);

R.add (colR);

T.add (colT);

timer ();

getche ();

return 0;

}

Показати весь текст
Заповнити форму поточною роботою