Игровое приложение «Тетрис»
МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ
Федеральное государственное
автономное образовательное учреждение
высшего профессионального
«САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ
АЭРОКОСМИЧЕСКОГО ПРИБОРОСТРОЕНИЯ»
КАФЕДРА ВЫЧИСЛИТЕЛЬНЫХ СИСТЕМ И СЕТЕЙ
КУРСОВАЯ РАБОТА
ЗАЩИЩЕНА С ОЦЕНКОЙ
РУКОВОДИТЕЛЬ
доцент, канд. техн. наук |
Л.Н. Бариков | |||
должность, уч. степень, звание |
подпись, дата |
инициалы, фамилия |
ПОЯСНИТЕЛЬНАЯ ЗАПИСКА |
Игровое приложение «Тетрис» |
по дисциплине: ПРОГРАММИРОВАНИЕ НА ЯЗЫКАХ ВЫСОКОГО УРОВНЯ |
|
|
РАБОТУ ВЫПОЛНИЛ
СТУДЕНТ ГР. |
4141 |
М.Г.Олейник | |||
подпись, дата |
инициалы, фамилия |
Санкт-Петербург
2012
Оглавление
1. Постановка задачи………………………………………………………………
2. Спецификация…………………………………………..
2.1 Спецификация………………………………………………
3. Текст программы………………………………………
Аннотация………………………………………………………
Оглавление…………………..…..……………………
3.1 Тест программы………………………………………………………
3.2 Результаты тестирования…………………
4. Описание программы………………………………
Аннотация…………..………………………………………
Оглавление……………………………………………………
4.1 Общие сведения…………………………………………
4.2 Функциональное значение………....
4.3 Описание логической
структуры………………………………………………………
4.4 Спецификация………………………………………………
4.6 Используемые технические
средства…………………………………………………………
4.7 Вызов и загрузка……………………………………
4.8 Входные данные и выходные
данные.…………………………………………………………
5. Описание применения …………………………
Аннотация………………………………………………………
Оглавление……………………………………………………
5.1 Назначение программы…………………………
5.2 Условия применения………………………………
5.3 Описание задачи………………………………………
5.4 Входные и выходные данные……………
5.5 Характеристики занимаемой памяти…………………………………………………………..
Заключение……………………………………………………
Список используемой литературы……………………………………………………
Введение
В данном документе описывается программа "Тетрис". Данная работа предназначена для закрепления учебного материала, изученного по курсу “ПЯВУ”.
Программа осуществляет вывод на экран случайным образом падение различных фигур. Входными данными является управление падающими фигурами.
Назначение программы - развлечение играющих, совершенствование их координации и логического мышления. Программа может применяться в качестве игровой на разных типах персональных компьютеров.
История игры Тетрис начинается в июне 1985 года. Тетрис был изобретен Алексеем Пажитновым, а затем был интегрирован на ПК IBM Вадимом Герасимовым. После чего ига Тетрис начала распространяться по всей Москве, а затем уже и по всему миру. Сначала она была доставлена в Венгрию, где венгерские программисты интегрировали Тетрис для Apple II и Commodore 64.
Игра была замечена в мире, и несколько представителей крупных компаний, обращались к автору Тетриса, чтобы купить права на распространение игры. Алексей подписывает контракт с Mirrorsoft UK и Spectrum Holobyte, предоставляя им права на компьютерным версии Тетрис. После того, как первые копии Тетриса для домашних компьютеров были преданны, игра приобрела популярность среди населения и стала самой продаваемой компьютерной игрой в Англии и США в 1988 году.
Существует множество способов реализации данной программы. Их можно разделить по функциональности:
- математическое описание движений фигур;
- графическое отображение движений фигур;
В математической части рассматриваются основные принципы и законы движений фигур. Это самая важная часть программы. От неё зависит правильная работоспособность программы. Для её реализации можно использовать различные алгоритмы. Например описать движение фигуры двумя линейными функциями. Одна будет отвечать за расположение фигуры по горизонтали, другая по вертикале. Меняя за определенные промежутки времени значения переменных этих функций, будет меняться положение фигуры на плоскости. Третья функция будет отвечать за очистку полностью заполненных горизонталей. Основными недостатками этого способа является объявление большого числа переменных, отвечающих за описание уже упавших фигур, и создание большого числа дополнительных функций, отвечающих за поворот фигур вокруг своей оси.
Другой способ математического описания движения фигур и заполнения поля тетриса - создание двумерной матрицы n*k. Через определенный промежуток времени будет изменяться значения, соответствующие положению фигур на плоскости и уже упавшим фигурам. Т.е. значение матрицы расположенное на n-ой строке и в k-ом столбце, будет соответствовать части фигуры расположенной на n-ой горизонтали и k-ой вертикали.
Приведенные выше способы не являются единственными. Они лишь наиболее популярны в реализации программы "Тетрис" среди программистов.
Для графического отображения фигур и поля тетриса также существует большое количество различных способов. Например, двигать на плоскости уже готовые рисунки фигур "Тетриса". Тогда рисунки фигур будут храниться отдельными графическими файлами в памяти компьютера. Сложность данного способа реализации заключается в отображении уже упавших фигур и отображение повернутой фигуры вокруг своей оси. Для этого придется постоянно создавать новый рисунок поля из рисунков, хранимых в памяти компьютера.
Ещё один способ графического отображения фигур и поля тетриса - использование готовых элементов языка программирования. Наиболее часто для этих целей используют таблицы. Изменяя цвет ячеек таблицы через определенные промежутки времени можно отобразить на экране движение фигур и заполненные области поля. Также возможно использование таких элементов, как кнопки, области для надписей (Label). Изменяя их цвет, также можно отобразить движение фигур и заполненные области. Но у такого способа есть огромный минус - объявление большого числа таких элементов.
Так же возможно использование встроенных графических возможностей языка программирования. При рисовании фигур тетриса можно использовать простое изображение квадрата. Для его изображения необходимо знать лишь координаты верхнего левого угла, а также значение ширины квадрата.
При разработки программы для игры Тетрис был использовал объектно-ориентированный язык программирования Visual C#. Математическая часть программы была создана с помощью двумерной матрицы. Графическое отображение было реализовано с помощью графических возможностей языка Visual C#.
- Постановка задачи
Используя технологию структурного программирования, разработать программу «Тетрис».
Программа должна осуществлять вывод на экран случайным образом последовательное падение шести различных фигур. Входными данными являются ввод сдвига фигур по горизонтали вправо и влево, а также поворот фигур вокруг своей оси по часовой стрелки. Должно происходить удаление заполненных строк.
МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ
Федеральное государственное
автономное образовательное учреждение
высшего профессионального
«САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ
АЭРОКОСМИЧЕСКОГО
КАФЕДРА ВЫЧИСЛИТЕЛЬНЫХ СИСТЕМ И СЕТЕЙ
ПРОГРАММА |
Игровое приложение «Тетрис» |
Спецификация |
44.4141.12-01 |
РАБОТУ ВЫПОЛНИЛ
СТУДЕНТ ГР. |
4141 |
М.Г.Олейник | |||
подпись, дата |
инициалы, фамилия |
Санкт-Петербург
2012
- Спецификация
- Спецификация
Обозначение |
Наименование |
Примечание |
44.4141.12-01 |
Документация |
|
Программа "Игровое приложение | ||
«Тетрис» | ||
Спецификация | ||
44.4141.12-12 |
Документация |
|
Программа "Игровое приложение | ||
«Тетрис» | ||
Текст программы | ||
44.4141.12-13 |
Документация |
|
Программа "Игровое приложение | ||
«Тетрис»" | ||
Описание программы | ||
44.4141.12-31 |
Документация |
|
Программа "Игровое приложение | ||
«Тетрис» | ||
Описание примечания |
МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ
Федеральное государственное автономное образовательное учреждение высшего профессионального образования
«САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ
АЭРОКОСМИЧЕСКОГО
КАФЕДРА ВЫЧИСЛИТЕЛЬНЫХ СИСТЕМ И СЕТЕЙ
ПРОГРАММА |
Игровое приложение «Тетрис» |
Текст программы |
44.4141.12-12 |
РАБОТУ ВЫПОЛНИЛ
СТУДЕНТ ГР. |
4141 |
М.Г.Олейник | |||
подпись, дата |
инициалы, фамилия |
Санкт-Петербург
2012
- Текст программы
Аннотация
В документе приводится текст программы игрового приложения «Тетрис», написанного на языке С#, а так же результаты отладки и тестирования.
Оглавление
- Текст программы………………………………………………………
………………10 - Результаты тестирования………………………………………………
……………...31
3.1 Текст программы
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace _7Tetris
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
//byte DX = 10, DY = 20;
Brush[] COLR = { Brushes.Aqua, Brushes.Orange, Brushes.Blue, Brushes.Red, Brushes.Green, Brushes.Azure, Brushes.Violet, Brushes.Tomato, Brushes.SteelBlue, Brushes.PapayaWhip };
Bitmap[] Cirpich;
Graphics c;
Bitmap POLE = new Bitmap(212, 422);
Figura fig; Figura[] mfig = new Figura[7];
byte[,] Area = new byte[10, 21];
Random rnd = new Random();
private void Form1_Load(object sender, EventArgs e)
{
c = Graphics.FromImage(POLE);
c.FillRectangle(new SolidBrush(Color.FromArgb(0, 45, 45)), 0, 0, 210+ 4, 420 + 4);
for (int x = 0; x < 11; x++) { c.DrawLine(new Pen(Color.FromArgb(0, 70, 70)), x * 21 + 1, 1, x * 21, 420 + 3); }
for (int x = 0; x < 21; x++) { c.DrawLine(new Pen(Color.FromArgb(0, 70, 70)), 1, x * 21 + 1, 210 + 3, x * 21); }
Cirpich = new Bitmap[COLR.Length];
for (int i = 0; i < COLR.Length; i++)
{
Cirpich[i] = new Bitmap(21, 21);
c = Graphics.FromImage(Cirpich[i])
c.FillRectangle(COLR[i], 0, 0, 21, 21);
c.DrawLine(new Pen(Color.FromArgb(70, Color.Black), 2), new Point(1, 20), new Point(20, 20));
c.DrawLine(new Pen(Color.FromArgb(70, Color.Black), 2), new Point(20, 20), new Point(20, 1));
}
string[] figuri = { "3840", "3712", "1632", "17952", "3648", "3616", "9792" };
for (int i = 0; i < figuri.Length; i++)
mfig[i] = new Figura(figuri[i]);
}
private void Form1_Paint(object sender, PaintEventArgs e)
{
e.Graphics.DrawImage(POLE, 0, 0);
if (fig != null)
{
for (int x = 0; x < 4; x++)
for (int y = 0; y < 4; y++)
{
if (fig.pic[x, y])
e.Graphics.DrawImage(Cirpich[
}
}
for (int x = 0; x < 10; x++)
for (int y = 0; y < 20; y++)
{
if (Area[x, y] > 0)
{
e.Graphics.DrawImage(Cirpich[
}
}
}
private bool figure_ok()
{
for (int x = 0; x < 4; x++)
{
for (int y = 0; y < 4; y++)
{
if (fig.y + y > -1)
if (fig.pic[x, y])
if (x + fig.x < 0 | x + fig.x == 10) return false;
else if (Area[x + fig.x, y + fig.y] > 0 | fig.y + y == 20)
}
}
return true;
}
private void Stop_figur()
{
byte numLine = 0;
int[] DLine = new int[4];
for (int y = 0; y < 4; y++)
{
for (int x = 0; x < 4; x++)
{
if (fig.y + y > -1)
if (fig.pic[x, y])
{
Area[fig.x + x, fig.y + y] = fig.Col;
DLine[numLine] = fig.y + y;
bool DL = true;
for (int i = 0; i < 10; i++)
{
}
if (DL) numLine += 1;
}
}
}
if (DLine[0] > 0) DelLine(DLine);
}
private void DelLine(int[] d)
{
double iL = 0;
for (int i = 0; i < 4; i++)
{
int y1 = d[i];
if (d[i] == 0) break;
iL += 1;
for (int x = 0; x < 10; x++)
{
for (int y = y1; y > 0; y--)
{
Area[x, y] = Area[x, y - 1];
}
}
}
this.Refresh();
}
private void timer1_Tick(object sender, EventArgs e)
{
if (fig == null)
{
fig = new Figura(); fig.pic = mfig[rnd.Next(0, 7)].pic;
if (!figure_ok())
{
Stop_figur();
fig = null; timer1.Enabled = false;
return;
}
}
fig.y++;
if (!figure_ok())
{
fig.y--; Stop_figur();
fig = null;
} this.Refresh();
}
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
if (fig == null) return;
switch (e.KeyValue)
{
case 37:
fig.x -= 1; if (!figure_ok()) fig.x += 1;
break;
case 32:
if (timer1.Enabled) timer1.Enabled = false;
else timer1.Enabled = true;
break;
case 39:
fig.x += 1; if (!figure_ok()) fig.x -= 1;
break;
case 38:
fig.rotate(); if (!figure_ok()) fig.urotate();
break;
case 40:
fig.y += 1;
if (!figure_ok())
fig.y -= 1;
break;
}
this.Refresh();
}
}
}
public class Figura
{
public sbyte x, y;
public byte Col;
public bool[,] pic;
public Figura()
{
Random rnd = new Random();
x = 3; y = -2;
Col = Convert.ToByte(rnd.Next(1, 9));
}
public Figura(string f)
{
pic = new bool[4, 4];
for (int x = 0; x < 4; x++)
for (int y = 0; y < 4; y++)
{
string h9 = Convert.ToString((Convert.
if (h9 == "1") pic[x, y] = true;
else pic[x, y] = false;
}
}
public void rotate()
{
bool[,] p2 = new bool[4, 4];
for (int x = 0; x < 4; x++)
{
for (int y = 0; y < 4; y++)
p2[3 - y, x] = pic[x, y];
}
pic = p2;
}
public void urotate()
{
bool[,] p2 = new bool[4, 4];
for (int x = 0; x < 4; x++)
{
for (int y = 0; y < 4; y++)
{
p2[x, y] = pic[3 - y, x];
}
}
pic = p2;
}
}
3.2 Результаты тестирования
МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ
Федеральное государственное
автономное образовательное учреждение
высшего профессионального
«САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ
АЭРОКОСМИЧЕСКОГО
КАФЕДРА ВЫЧИСЛИТЕЛЬНЫХ СИСТЕМ И СЕТЕЙ
ПРОГРАММА |
Игровое приложение «Тетрис» |
Описание программы |
44.4141.12-13 |
РАБОТУ ВЫПОЛНИЛ
СТУДЕНТ ГР. |
4141 |
М.Г.Олейник | |||
подпись, дата |
инициалы, фамилия |
Санкт-Петербург
2012
- Описание программы
Аннотация
В документе указаны общие
Оглавление
- Общие сведения…………………………………………………………
……………...36 - Функциональное назначение……………………………………………………
……..36 - Описание логической структуры…………………………………………………….
..36 - Спецификации функций……………………………………………………………
….36 - Используемые технические средства………………………………………………….39
- Вызов и загрузка…………………………………………………………
……………...39 - Входные данные и выходные данные………………………………………………....39
4.1 Общие сведения
Программа написана на языке С#, реализована на ПЭВМ IBM PC и состоит из меню программы и набора функций. В совокупности это реализует полноценное игровое приложение «Тетрис». Для функционирования данной программы необходимо наличие ПЭВМ, совместимой с IBM PC, на которой установлена ОС Windows. Технические средства должны обеспечивать вывод результатов на экран.
4.2 Функциональное назначение
Назначение программы - развлечение играющих, совершенствование их координации и логического мышления. Программа может применяться в качестве игровой на разных типах персональных компьютеров.
4.3 Описание логической структуры
Программа написана на языке С# и состоит из реакций программы на нажатия клавиш. Программа осуществляет вывод на экран случайным образом падение различных фигур. Входными данными является управление падающими фигурами.
4.4 Спецификация
Для реализации данного курсовой работы был выбран язык программирования Visual C#. Язык основан на строгой компонентной архитектуре и реализует передовые механизмы обеспечения безопасности кода. Язык программирования C# объединил лучшие черты целого ряда предшественников, а именно ветви языков B - C - C++.
От языка программирования C++ языком C# унаследованы следующие механизмы: "перегруженные" операторы, небезопасные арифметические операции с плавающей точкой, а также ряд других особенностей синтаксиса.
Несмотря на весьма существенные различия между компонентной объектной моделью COM (основного стандарта Microsoft для компонентного проектирования и реализации программного обеспечения) и моделью Java Beans, базовым стандартом Sun Microsystems для компонент (зависимой от языка реализации), язык программирования C# имеет довольно много общего с языком Java.
Перечислим наиболее характерные черты сходства языков программирования C# и Java. Прежде всего, оба языка относятся к категории объектно-ориентированных и предполагают единственность наследования. Другими важными особенностями, которые сближают языки программирования C# и Java, являются механизмы интерфейсов, обработки исключительных ситуаций, а также процессов или "нитей" (threads). "Сборка мусора" и пространства имен реализованы в этих двух языках сходным образом. Оба языка программирования характеризуются сильной (строгой) типизацией и динамической загрузкой кода при выполнении программы.
Но несмотря на то, что целый ряд конструктивных синтаксических механизмов и особенностей реализации унаследован языком программирования C# от прародителей (C++ и Java), возможности этого нового языка программирования не ограничиваются суммой возможностей его исторических предшественников.
К числу принципиально важных решений,
которые реализованы
- компонентно-ориентированный подход к программированию (который характерен и для идеологии Microsoft.net в целом);
- свойства как средство инкапсуляции данных (характерно также в целом для ООП);
- обработка событий (имеются расширения, в том числе в части обработки исключений, в частности, оператор try);
- унифицированная система типизации (соответствует идеологии Microsoft.net в целом);
- делегаты (delegate - развитие указателя на функцию в языках C и C++);
- индексаторы (indexer - операторы индекса для обращения к элементам класса-контейнера);
- перегруженные операторы (развитие ООП);
- оператор foreach (обработка всех элементов классов-коллекций, аналог Visual Basic);
- механизмы boxing и unboxing для преобразования типов;
- атрибуты (средство оперирования метаданными в COM-модели);
- прямоугольные массивы (набор элементов с доступом по номеру индекса и одинаковым количеством столбцов и строк).
Приведенные выше особенности языка C# повлияли на выбор языка программирования и соответственно среды.net для программы.
4.5 Используемые технические средства
Для нормального функционирования программы требуется следующие аппаратные требования:
Необходимый объем ОЗУ 64 Мб и графическим адаптером, поддерживающим режим 800х600 и выше, глубина цвета 32 бит. Необходимое место на жестком диске 780 Кб. Клавиатура, мышь.
Программные требования:
Операционная система семейства Windows: 2000/XP (32/64) /Vista (32/64) /7 (32/64)
4.6 Вызов и загрузка
Вызов и загрузка программы осуществляется в следующей последовательности.
В ОС Windows запустить файл “Тетрис.exe” из папки, на экране появится меню, в котором вы можете начать игру либо выйти из приложения.
4.7 Входные и выходные данные
Входные данные для программы представляют собой нажатия клавиш мыши и клавиатуры.
Выходные данные представляют собой анимированное изображение на экране.
МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ
Федеральное государственное
автономное образовательное учреждение
высшего профессионального

- Игровое физкультурное упражнение в группе раннего возраста по сказке «Курочка Ряба»
- Игровой и соревновательный методы на уроках физической культуры в средней школе
- Игровой метод в обучении иностранному языку
- Игровой метод в физическом воспитании детей младшего щкольного возраста
- Игровой метод, как эффективное средство обучения грамматике иностранного языка
- Игровой метод обучения иностранному языку
- Игровые методики организации и обучения младших школьников с умственной отсталостью
- Игровая терапия
- Игровая форма обучения химии
- Игровое взаимодействие в обучении школьников правилам дорожного движения и поведения на дорогах
- Игровое внимание хоккеистов
- Игровое обучение иноязычному общению
- Игровое обучение И.Я. учащихся общеобразовательной школы
- Игровое поведениея приматов