Връщане към Училищен курс по програмиране на C# (2013/2014)

Първа курсова задача за училищен курс по програмиране на C# (2013/2014)

Публикуваме условието на първата курсова задача за училищния курс по програмиране на C# (2013/2014).

Срокът за предаване на задачата е 29.6.2014 г. (две седмици след приключване на курса). Решенията си изпращайте като архив на електронния адрес на курса. За да бъде приета за успешно изпълнена курсовата задача, решението ви трябва да покрива всички изисквания. Изпълнението на допълнителните задачи не е задължително.

Космически кораб

Описание

Да се разработи конзолна игра, която симулира пътуването на космически кораб през космоса. Пространството е осеяно със случайно разположени астероиди и сблъсък на кораба с някой от тях би бил пагубен за екипажа. Играчът трябва да управлява движението на космическия кораб, така че да предотврати сблъсък за възможно най-дълъг период от време. В допълнение, скоростта на движение на кораба през пространството се увеличава с напредване на времето.

Изисквания

  • Космическият кораб има сложна форма, съставена от няколко символа на конзолата; възможно е да изберете форма по ваше желание, но ето една примерна:
    =+=+>
     |o|
    =+=+>
  • Движението на космическия кораб през космоса е хоризонтално (отляво надясно) спрямо гледната точка на играча; самият космически кораб се намира винаги в най-лявата част на екрана, като в резултат на това се създава впечатление, че астероидите се движат отдясно наляво към кораба;
  • С клавишите стрелка нагоре и стрелка надолу, играчът може да придвижва космическия кораб в съответната посока, така че да маневрира между астероидите;
  • Никоя част от космическия кораб не може да напуска екрана;
  • Астероидите заемат един символ (означете ги със ‘*’), появяват се в най-дясната част на екрана на случаен принцип и след това се придвижват наляво според текущата скорост на космическия кораб;
  • След достигане на левия край на екрана, астероидите изчезват от игралното поле;
  • Скоростта на движение на космическия кораб през пространството (в хоризонтална посока) в началото е ниска, но се увеличава пропорционално на изминатото разстояние;
  • Скоростта на маневриране на космическия кораб в следствие на командите на играча е фиксирана;
  • Програмата засича какво разстояние е изминато от космическия кораб;
  • Ако при придвижването си астероид засегне произволна част от космическия кораб, играта приключва и играчът получава информация какво разстояние е изминал, запазвайки кораба невредим;
  • Положенията на космическия кораб и астероидите се пазят в паметта по подходящ начин;
  • Движението на космическия кораб през пространството се изобразява чрез печатане на игралното поле кадър по кадър на конзолата;
  • За да се минимизират нежеланите премигвания на екрана, на всеки кадър екранът не трябва да се изчиства, а само да се препечатват необходимите символи на съответните места;
  • Да се използват подходящи типове данни, конструкции за условни преходи и цикли;
  • Да се разбие кодът на програмата на уместни методи;
  • Да се документира програмата с подходящи коментари;
  • Да се форматира кодът на програмата по прегледен начин и да се използват уместни имена на променливи и функции.

Допълнителни условия (за ентусиасти)

  • С клавишите стрелка наляво и стрелка надясно, играчът да може да придвижва космическия кораб в съответните посоки по екрана, така че да има по-голяма свобода в маневрирането между астероидите;
  • Да се използват възможностите за цветен печат в конзолата, така че космическият кораб и астероидите да имат разнообразни цветове;
  • Астероидите да имат различна големина и форма, както и да се представят с различни символи (или комбинации от символи);
  • Астероидите да могат да се движат под случайни ъгли, а не само хоризонтално (например: на всеки три премествания наляво, конкретният астероид да се придвижва и един ред надолу);
  • Освен астероиди, на игралното поле могат да се появяват обекти даващи различен брой точки и такива, които намаляват скоростта;
  • Гъстотата на появяващите се астероиди да се увеличава с течение на времето;
  • Освен изминатото разстояние, програмата да следи и изтеклото време;
  • При натискане на клавиша “P”, играта да замръзва в режим на пауза до повторното му натискане, а с клавиша “Esc” – да излиза от играта.

Постоянен линк към тази тема: https://acad.david.bg/kursove/2013-2014-uchilishten-kurs-po-programirane-na-csharp/kursova-zadacha-1/