50191 (610002), страница 2

Файл №610002 50191 (Разработка программы для игры "Тетрис") 2 страница50191 (610002) страница 22016-07-30СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 2)

Но несмотря на то, что целый ряд конструктивных синтаксических механизмов и особенностей реализации унаследован языком программирования C# от прародителей (C++ и Java), возможности этого нового языка программирования не ограничиваются суммой возможностей его исторических предшественников.

К числу принципиально важных решений, которые реализованы корпорацией Microsoft в языке программирования C#, можно отнести следующие:

  • компонентно-ориентированный подход к программированию (который характерен и для идеологии Microsoft.net в целом);

  • свойства как средство инкапсуляции данных (характерно также в целом для ООП);

  • обработка событий (имеются расширения, в том числе в части обработки исключений, в частности, оператор try);

  • унифицированная система типизации (соответствует идеологии Microsoft.net в целом);

  • делегаты (delegate - развитие указателя на функцию в языках C и C++);

  • индексаторы (indexer - операторы индекса для обращения к элементам класса-контейнера);

  • перегруженные операторы (развитие ООП);

  • оператор foreach (обработка всех элементов классов-коллекций, аналог Visual Basic);

  • механизмы boxing и unboxing для преобразования типов;

  • атрибуты (средство оперирования метаданными в COM-модели);

  • прямоугольные массивы (набор элементов с доступом по номеру индекса и одинаковым количеством столбцов и строк).

Приведенные выше особенности языка C# повлияли на выбор языка программирования и соответственно среды.net для программы.


2.2 Блок-схема программы

При создании программного алгоритма "Тетриса" на начальном этапе была разработана блок-схема игры. В ней было описана последовательность работы алгоритма игры (Рис.2).

Рис.2

При запуске приложения "Тетрис" происходит объявления двумерного массива, с последующим его заполнением пустыми значениями. Игра начинается при запуске таймера. Далее происходит выбор фигуры с помощью генератора случайных чисел. В соответствии с выбранной фигурой происходит заполнение первых двух строк массива. Затем происходит вход в цикл падения фигуры. Тело цикла представляет собой сдвиг фигуры на одну строку ниже и проверка на нажатие кнопок "Вправо", "Влево", "Поворот" (при нажатии этих кнопок происходит сдвиг фигуры вправо, влево и поворот вокруг своей оси соответственно). Условие окончания цикла - отсутствие свободного места под фигурой. После выхода из цикла начинается проверка полностью заполненных строк. Если такие имеются, то происходит их очистка и сдвиг всех строк, находящихся выше. Далее происходит новый выбор фигуры и повторение алгоритма. Если же заполненных строк нет, то происходит проверка на свободное место в третьей строке. Если третья строка свободна, то происходит выбор фигуры и выполнение алгоритма цикла. При заполненности третьей строки происходит остановка таймера и вывод результатов игры. Затем происходит выход из игры.


2.3 Вводимые и выводимые данные

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

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

Выводимые данные в программе представлены в виде графического отображения окна игры (Рис.3)

Рис.3

Окно игры.

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

  1. нажатие клавиш Left, Right, Up, Space;

  2. работа пользователя со строкой меню.


2.4 Разработка и отладка текста программы

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

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

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


2.5 Разработка интерфейса пользователя

Тетрис - это игра. Поэтому, при разработки интерфейса пользователя необходимо учесть ряд особенностей:

  1. Интерфейс должен быть интуитивно понятен простому пользователю компьютера.

  2. Цветовая схема не должна раздражать человека.

Рассмотрим первый пункт.

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

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


2.6 Тестирование программы

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

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

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

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

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

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

      5. необходимо тщательно подбирать тест не только для правильных (предусмотренных) входных данных, но и для неправильных (непредусмотренных);

      6. при анализе результатов каждого теста необходимо проверять, не делает ли программа того, что она не должна делать;

      7. следует сохранять использованные тесты (для повышения эффективности повторного тестирования программы после ее модификации или установки у заказчика);

      8. тестирования не должно планироваться исходя из предположения, что в программе не будут обнаружены ошибки (в частности, следует выделять для тестирования достаточные временные и материальные ресурсы);

      9. следует учитывать так называемый “принцип скопления ошибок”: вероятность наличия не обнаруженных ошибок в некоторой части программы прямо пропорциональна числу ошибок, уже обнаруженных в этой части;

      10. следует всегда помнить, что тестирование - творческий процесс, а не относиться к нему как к рутинному занятию.

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


3. Руководство пользователя

3.1 Программно-аппаратные требования

Аппаратные требования:

Необходимый объем ОЗУ 64 Мб и графическим адаптером, поддерживающим режим 800х600 и выше, глубина цвета 32 бит. Необходимое место на жестком диске 780 Кб. Клавиатура, мышь.

Программные требования:

Операционная система семейства Windows: 2000/XP (32/64) /Vista (32/64) /7 (32/64)


3.2 Порядок работы с программой

Запускаем приложение Tetris. exe (Рис.4):

Рис.4

Приложение Tetris. exe

Для того чтобы начать игру необходимо нажать Меню - Новая игра. Для изменения сложности игры необходимо зайти в Меню - Сложность. Для временной остановки игры необходимо нажать Меню - Пауза или клавишу Space. Для продолжения игры нажать Меню - Продолжить (Рис.5).

Рис.5

Строка меню

Управление фигурами осуществляется с помощью клавиш Left, Right, Up (подробнее Меню - Справка - Управление) (Рис.6).

Рис.6

Окно "Управление"

Для выхода из программы необходимо нажать Меню - Выход). Так же можно посмотреть сведения о программном продукте и разработчике (Меню - Справка - О программе) (Рис.7).

Рис.7

Окно "О программе"


Заключение

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



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

  1. Г. Шилдт C#: Учебный курс. - Спб.: Питер, 2003. - 512с

  2. Либерти, Д. Программирование на Си Шарп. - М.: Символ-плюс, 2005. - 684 с.

  3. Ватсон К. Си Шарп/К. Ватсон. - М.: Лори, 2005. - 862 с.

  4. Жарков В.А. Компьютерная графика, мультимедиа и игры на Visual C# 2005. - М.: Жарков пресс, 2005. - 812с.

  5. http://www.excode.ru/art6225p1.html


Приложения


Листинг 1

  1. private void Form1_Load (object sender, EventArgs e)

  2. {

  3. for (i = 0; i < 24; i++) // заполнение массива пустыми значениями

  4. {

  5. for (j = 0; j < 15; j++)

  6. {

  7. Tet [i, j] = false;

  8. Res = true;

  9. }

  10. }

  11. SF = false; // фигура не существует

  12. textBox2. Text = "0";

  13. }

  14. private void timer_Tick (object sender, EventArgs e)

  15. {

  16. if (SF == false)

  17. {

  18. Random a = new Random (); // выбор фигуры

  19. NumbeF = a. Next (0,6);

  20. SF = true;

  21. P = true; // появление фигуры на первой позиции

  22. }

  23. if (SF == true)

  24. {

  25. if (NumbeF == 0) // квадрат

  26. {

  27. if (P == true) // условие появления квадрата в первой позиции

  28. {

  29. Tet [0, 7] = true;

  30. Tet [0, 8] = true;

  31. Tet [1, 7] = true;

  32. Tet [1, 8] = true;

  33. P = false; // фигура не появляется на первой позиции

  34. i = 1;

  35. j = 7;

  36. }

  37. if (i < 23 && (Tet [i + 1, j] == false && Tet [i + 1, j + 1] == false)) // условие сдвига фигуры

  38. {

  39. Tet [i - 1, j] = false;

  40. Tet [i - 1, j + 1] = false;

  41. Tet [i + 1, j] = true;

  42. Tet [i + 1, j + 1] = true;

  43. i = i + 1;

  44. }

  45. else

  46. {

  47. SF = false; // фигура не существует

  48. }

  49. }

  50. if (NumbeF == 1) // сапожок

  51. {

  52. if (P == true) // условие появления сапожка в первой позиции

  53. {

  54. Tet [0, 7] = true;

  55. Tet [1, 7] = true;

  56. Tet [1, 8] = true;

  57. Tet [1, 9] = true;

  58. P = false;

  59. i = 1;

  60. j = 8;

  61. Razp = 0;

  62. }

  63. if (Razp == 0) // фигура сапожок в положение 0

  64. {

  65. if (i < 23 && Tet [i + 1, j - 1] == false && Tet [i + 1, j] == false && Tet [i + 1, j + 1] == false) // проверка свободного места под фигурой

  66. {

  67. Tet [i, j] = false;

  68. Tet [i, j + 1] = false;

  69. Tet [i - 1, j - 1] = false;

  70. Tet [i + 1, j - 1] = true;

  71. Tet [i + 1, j] = true;

  72. Tet [i + 1, j + 1] = true;

  73. i = i + 1;

  74. }

  75. else

  76. {

  77. SF = false;

  78. }

  79. }

  80. if (Razp == 1) // фигура сапожок в положение 1

  81. {

  82. if (i < 22 && Tet [i + 2, j - 1] == false && Tet [i + 2, j] == false) // проверка свободного места под фигурой

  83. {

  84. Tet [i - 1, j] = false;

  85. Tet [i + 1, j - 1] = false;

  86. Tet [i + 2, j - 1] = true;

  87. Tet [i + 2, j] = true;

  88. i = i + 1;

  89. }

  90. else

  91. {

  92. SF = false;

  93. }

  94. }

  95. if (Razp == 2) // фигура сапожок в положение 2

  96. {

  97. if (i < 22 && Tet [i + 1, j - 1] == false && Tet [i + 1, j] == false && Tet [i + 2, j + 1] == false) // проверка свободного места под фигурой

  98. {

  99. Tet [i, j] = false;

  100. Tet [i, j + 1] = false;

  101. Tet [i, j - 1] = false;

  102. Tet [i + 1, j - 1] = true;

  103. Tet [i + 1, j] = true;

  104. Tet [i + 2, j + 1] = true;

  105. i = i + 1;

  106. }

  107. else

  108. {

  109. SF = false;

  110. }

  111. }

  112. if (Razp == 3) // фигура сапожок в положение 3

  113. {

  114. if (i < 22 && Tet [i, j + 1] == false && Tet [i + 2, j] == false) // проверка свободного места под фигурой

  115. {

  116. Tet [i - 1, j] = false;

  117. Tet [i - 1, j + 1] = false;

  118. Tet [i, j + 1] = true;

  119. Tet [i + 2, j] = true;

  120. i = i + 1;

  121. }

  122. else

  123. {

  124. SF = false;

  125. }

  126. }

  127. }


Листинг 2

  1. SolidBrush Brush2 = new SolidBrush (System. Drawing. Color. LightCyan); // создание кисти

  2. SolidBrush Brush3 = new SolidBrush (System. Drawing. Color. Red);

  3. Font font = new Font ("Times New Roman", 30, FontStyle. Bold | FontStyle. Italic); // описание стиля надписи

  4. for (a = 2; a < 24; a++)

  5. {

  6. for (b = 0; b < 15; b++)

  7. {

  8. Graphics myGraphics = CreateGraphics (); // создание поверхности для рисования

  9. if (Tet [a, b] == true)

  10. {

  11. LinearGradientBrush Brush1 = new LinearGradientBrush (new Rectangle (20 * b,20 * a, 20, 20), Color. Aqua, Color. Blue, 45);

  12. Rectangle r1 = new Rectangle (20 * b,20 * (a - 1), 20, 20); // объединение заполненных ячеек в область

  13. myGraphics. FillRectangle (Brush1, r1); // закрашивание заполненной области

  14. }

  15. if (Tet [a, b] == false)

  16. {

  17. Rectangle r1 = new Rectangle (20 * b,20 * (a - 1), 20, 20); // объединение незаполненных ячеек в область

  18. myGraphics. FillRectangle (Brush2, r1); // закрашивание незаполненной области

  19. }

  20. }

  21. }


Листинг 3

  1. private void button2_KeyUp (object sender, KeyEventArgs e)

  2. {

  3. key = e. KeyCode. ToString ();

  4. if (key == "Right") // проверка нажатие клавиши "Вправо"

  5. {

  6. timer. Enabled = false;

  7. if (NumbeF == 0 && j < 13 && Tet [i - 1, j + 2] == false && Tet [i, +2] == false) // проверка свободного места справо

  8. {

  9. Tet [i, j + 2] = true;

  10. Tet [i - 1, j + 2] = true;

  11. Tet [i, j] = false;

  12. Tet [i - 1, j] = false;

  13. j = j + 1;

  14. }

  15. if (NumbeF == 1)

  16. {

  17. if (Razp == 0 && j < 13 && Tet [i, j + 2] == false && Tet [i - 1, j] == false) // проверка свободного места справо

  18. {

  19. Tet [i - 1, j] = true;

  20. Tet [i, j + 2] = true;

  21. Tet [i, j - 1] = false;

  22. Tet [i - 1, j - 1] = false;

  23. j = j + 1;

  24. }

  25. if (Razp == 1 && j < 14 && Tet [i - 1, j + 1] == false && Tet [i, j + 1] == false && Tet [i + 1, j + 1] == false) // проверка свободного места справо

  26. {

  27. Tet [i - 1, j] = false;

  28. Tet [i, j] = false;

  29. Tet [i + 1, j - 1] = false;

  30. Tet [i - 1, j + 1] = true;

  31. Tet [i, j + 1] = true;

  32. Tet [i + 1, j + 1] = true;

  33. j = j + 1;

  34. }

  35. if (Razp == 2 && j < 13 && Tet [i, j + 2] == false && Tet [i + 1, j + 2] == false) // проверка свободного места справо

  36. {

  37. Tet [i, j + 2] = true;

  38. Tet [i + 1, j + 2] = true;

  39. Tet [i, j - 1] = false;

  40. Tet [i + 1, j + 1] = false;

  41. j = j + 1;

  42. }

  43. if (Razp == 3 && j < 13 && Tet [i - 1, j + 2] == false && Tet [i, j + 1] == false && Tet [i + 1, j + 1] == false) // проверка свободного места справо

  44. {

  45. Tet [i - 1, j + 2] = true;

  46. Tet [i, j + 1] = true;

  47. Tet [i + 1, j + 1] = true;

  48. Tet [i - 1, j] = false;

  49. Tet [i, j] = false;

  50. Tet [i + 1, j] = false;

  51. j = j + 1;

  52. }

  53. }

  54. }

  55. }

Характеристики

Тип файла
Документ
Размер
11,35 Mb
Тип материала
Учебное заведение
Неизвестно

Список файлов курсовой работы

Свежие статьи
Популярно сейчас
Зачем заказывать выполнение своего задания, если оно уже было выполнено много много раз? Его можно просто купить или даже скачать бесплатно на СтудИзбе. Найдите нужный учебный материал у нас!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
7026
Авторов
на СтудИзбе
260
Средний доход
с одного платного файла
Обучение Подробнее