Разработка программы, реализующей игру "Тетрис" в программной среде Turbo Pascal

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

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 02.02.2013
Размер файла 87,0 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Содержание

Введение

1. Результаты выполнения работы

2. Код программы

Выводы

Список использованных источников

Приложение

Введение

Об игре ТЕТРИС

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

Правила

Случайные фигурки тетрамино падают сверху в прямоугольный стакан шириной 10 и высотой 20 клеток. В полёте игрок может поворачивать фигурку и двигать её по горизонтали, но не замедлять полёт. Фигурка летит, пока не наткнётся на другую фигурку либо на пол стакана. Если при этом заполнился горизонтальный ряд из 10 клеток, он пропадает и всё, что выше его, опускается на 1 клетку. Темп игры постепенно увеличивается. Если пропадает одновременно 4 ряда, это называется «тетрис», отсюда название игры. Игра кончается, когда новая фигурка касается верхней границы стакана. Игрок получает очки за каждую фигурку, поэтому его задача - заполнять ряды, не заполняя сам стакан как можно дольше (максимизируя очки).

Цель работы:

В этой курсовой работе мы ставили перед собой цель разработать программу, реализующую знаменитую и всеми любимую игру Тетрис в программной среде Turbo Pascal.

Главными и первоочередными задачами являются:

1) создание поля игры (стакана);

2) создание семи случайных фигур тетрамино;

3) движение фигур в поле;

4) возможность поворота фигур;

5) реализация складывания фигур в ряды;

6) удаление целых рядов и подсчёт их количества;

7) отображение последующей фигуры;

Дополнительные задачи:

1) возможность выбора фигур для игры

2) создание одной дополнительной фигуры

3) реализация игры с различной скоростью

4) сохранение результатов игры в текстовый файл

5) подсчет очков с учётом скорости

6) создание дополнительных функций: выхода, паузы

1. Результаты выполнения работы

В программе используются:

1) массивы для создания поля игры;

процедуры и функции для создания фигур, поворота фигур, удаления рядов, вывода массива на экран и т.д. например: function cvet определяет цвет фигуры; procedure cls отчищает массив поля, procedure proverka удаление полной линии и прибавление очков, procedure paint Вывод состояния массива на экран и отображение последующей фигуры, procedure figura непосредственное определение формы фигуры,

2) procedure povorot реализация поворота фигуры.;

3) Оператор выбора case: например, в случайном выборе фигуры;

4) Цикл с пост условием Repeat/Until: в главном теле программы для зацикливания процесса игры;

5) Процедура считывания с клавиатуры keypressed и readkey для управления фигурами;

6) Модуль crt,который позволяет увеличить скорость выполнения программы в отличии от модуля Graph;

Вид программы

2. Код программы

игра тетрис поле фигура

program tetris;

uses crt;

var b,a,c:array[1..10,1..20]of integer;

d:array[1..4,1..4]of integer;

e:array[1..8]of integer;

n,m,x,y:integer;

ch,fi :char;

ht,wt,fig,del,dell,colr,colre,z,s:integer;

new,pov:boolean;

line,figs,ochke:integer;

name:string;

t:text;

{--------------------------------------}

function cvet(colr:integer):integer;

begin

case colr of

1:cvet:=9;

2:cvet:=10;

3:cvet:=11;

4:cvet:=12;

5:cvet:=13;

6:cvet:=14;

7:cvet:=7;

end;

end;

{--------------------------------------}

procedure cls;

var i,j:integer;

begin

for i:=1 to 10 do

for j:=1 to 20 do a[i,j]:=0;

end;

{---------------------------------------}

procedure proverka;

var i,j,l,f,g:integer;

begin

for i:=20 downto 1 do begin

l:=0;

for j:=1 to 10 do begin

{ readkey;

write(i,' ',j,' ',l,'-'); }

if a[j,i]=1 then l:=l+1;

end;

if l=10 then begin

line:=line+1;

for f:=i-1 downto 1 do

for g:=1 to 10 do begin a[g,f+1]:=a[g,f];

b[g,f+1]:=b[g,f];

end;

i:=i+1;

end;

end;

end;

{----------------------------------------}

procedure paint;

var i,j:integer;

begin

gotoxy(40,3);

textcolor(15);

ochke:=line*(20-del);

write('line:',line,' point:',ochke);

gotoxy(41,4);

write('scor: ',del);

for i:=1 to 10 do

for j:=1 to 20 do

case a[i,j] of

1:begin textcolor(b[i,j]);

gotoxy(i+20,j);

write('0');

end;

2:begin

textcolor(cvet(colr));

gotoxy(i+20,j);

write('0');

end;

0:begin textcolor(red);

gotoxy(i+20,j);

write('.');

end;

end;

for i:=1 to 4 do

for j:=1 to 4 do begin

case d[i,j] of

0:begin textcolor(red);

gotoxy(i+40,j+5);

write('.');

end;

1:begin

textcolor(cvet(colre));

gotoxy(i+40,j+5);

write('0');

end;

end;

end;

end;

{----------------------------------}

procedure figura(x,y,n,st:integer);

var i:integer;

begin

case n of

1:begin a[x,y]:=st;

a[x+1,y]:=st;

a[x+2,y]:=st;

a[x+1,y+1]:=st;

if (a[x,y+1]=1)or(y=19)or(a[x+2,y+1]=1)or(a[x+1,y+2]=1) then new:=true;

wt:=3;

ht:=2;

colr:=1;

end;

{--------}

2:begin a[x+1,y]:=st;

a[x+1,y+1]:=st;

a[x+1,y+2]:=st;

a[x,y+1]:=st;

if (a[x,y+2]=1)or(y=18)or(a[x+1,y+3]=1) then new:=true;

wt:=2;

ht:=3;

colr:=1;

end;

{--------}

3:begin a[x+1,y]:=st;

a[x,y+1]:=st;

a[x+1,y+1]:=st;

a[x+2,y+1]:=st;

if (a[x,y+2]=1)or(y=19)or(a[x+1,y+2]=1)or(a[x+2,y+2]=1) then new:=true;

wt:=3;

ht:=2;

colr:=1;

end;

{--------}

4:begin a[x,y]:=st;

a[x,y+1]:=st;

a[x+1,y+1]:=st;

a[x,y+2]:=st;

if (a[x,y+3]=1)or(y=18)or(a[x+1,y+2]=1) then new:=true;

wt:=2;

ht:=3;

colr:=1;

end;

{--------}

5:begin a[x,y]:=st;

a[x+1,y]:=st;

a[x+2,y]:=st;

a[x+3,y]:=st;

if (a[x,y+1]=1)or(y=20)or(a[x+1,y+1]=1)or(a[x+2,y+1]=1)or(a[x+3,y+1]=1) then new:=true;

wt:=4;

ht:=1;

colr:=2;

end;

{--------}

6:begin a[x,y]:=st;

a[x,y+1]:=st;

a[x,y+2]:=st;

a[x,y+3]:=st;

if (a[x,y+4]=1)or(y=17) then new:=true;

wt:=1;

ht:=4;

colr:=2;

end;

{--------}

7:begin a[x,y]:=st;

a[x,y+1]:=st;

a[x+1,y+1]:=st;

a[x+1,y]:=st;

if (a[x,y+2]=1)or(y=19)or(a[x+1,y+2]=1) then new:=true;

wt:=2;

ht:=2;

colr:=3;

end;

{--------}

8:begin a[x+1,y]:=st;

a[x+2,y]:=st;

a[x,y+1]:=st;

a[x+1,y+1]:=st;

if (a[x,y+2]=1)or(y=19)or(a[x+1,y+2]=1)or(a[x+2,y+1]=1) then new:=true;

wt:=3;

ht:=2;

colr:=4;

end;

{--------}

9:begin a[x,y]:=st;

a[x,y+1]:=st;

a[x+1,y+1]:=st;

a[x+1,y+2]:=st;

if (a[x,y+2]=1)or(y=18)or(a[x+1,y+3]=1) then new:=true;

wt:=2;

ht:=3;

colr:=4;

end;

{--------}

{--------}

10:begin a[x,y]:=st;

a[x+1,y]:=st;

a[x+1,y+1]:=st;

a[x+2,y+1]:=st;

if (a[x,y+1]=1)or(y=19)or(a[x+1,y+2]=1)or(a[x+2,y+2]=1) then new:=true;

wt:=3;

ht:=2;

colr:=5;

end;

{--------}

11:begin a[x+1,y]:=st;

a[x+1,y+1]:=st;

a[x,y+1]:=st;

a[x,y+2]:=st;

if (a[x+1,y+2]=1)or(y=18)or(a[x,y+3]=1) then new:=true;

wt:=2;

ht:=3;

colr:=5;

end;

{--------}

12:begin a[x,y]:=st;

a[x,y+1]:=st;

a[x+1,y+1]:=st;

a[x+2,y+1]:=st;

if (a[x,y+2]=1)or(y=19)or(a[x+1,y+2]=1)or(a[x+2,y+2]=1) then new:=true;

wt:=3;

ht:=2;

colr:=6;

end;

{--------}

13:begin a[x,y]:=st;

a[x+1,y]:=st;

a[x,y+1]:=st;

a[x,y+2]:=st;

if (a[x,y+3]=1)or(y=18)or(a[x+1,y+1]=1) then new:=true;

wt:=2;

ht:=3;

colr:=6;

end;

{--------}

14:begin a[x,y]:=st;

a[x+1,y]:=st;

a[x+2,y]:=st;

a[x+2,y+1]:=st;

if (a[x,y+1]=1)or(y=19)or(a[x+1,y+1]=1)or(a[x+2,y+2]=1) then new:=true;

wt:=3;

ht:=2;

colr:=6;

end;

{--------}

15:begin a[x+1,y]:=st;

a[x+1,y+1]:=st;

a[x+1,y+2]:=st;

a[x,y+2]:=st;

if (a[x,y+3]=1)or(y=18)or(a[x+1,y+3]=1) then new:=true;

wt:=2;

ht:=3;

colr:=6;

end;

{--------}

{--------}

16:begin a[x,y+1]:=st;

a[x,y]:=st;

a[x+1,y]:=st;

a[x+2,y]:=st;

if (a[x,y+2]=1)or(y=19)or(a[x+1,y+1]=1)or(a[x+2,y+1]=1) then new:=true;

wt:=3;

ht:=2;

colr:=7;

end;

{--------}

17:begin a[x+1,y]:=st;

a[x,y]:=st;

a[x+1,y+1]:=st;

a[x+1,y+2]:=st;

if (a[x+1,y+3]=1)or(y=18)or(a[x,y+1]=1) then new:=true;

wt:=2;

ht:=3;

colr:=7;

end;

{--------}

18:begin a[x+2,y]:=st;

a[x,y+1]:=st;

a[x+1,y+1]:=st;

a[x+2,y+1]:=st;

if (a[x,y+2]=1)or(y=19)or(a[x+1,y+2]=1)or(a[x+2,y+2]=1) then new:=true;

wt:=3;

ht:=2;

colr:=7;

end;

{--------}

19:begin a[x,y]:=st;

a[x,y+1]:=st;

a[x,y+2]:=st;

a[x+1,y+2]:=st;

if (a[x,y+3]=1)or(y=18)or(a[x+1,y+3]=1) then new:=true;

wt:=2;

ht:=3;

colr:=7;

end;

{--------}

{--------}

20:begin a[x,y]:=st;

{ a[x,y+1]:=st;

a[x+1,y+1]:=st;

a[x+2,y+1]:=st;

a[x+1,y+2]:=st; }

if (a[x,y+1]=1)or(y=20){or(a[x+1,y+3]=1)or(a[x+2,y+2]=1)} then new:=true;

wt:=1;

ht:=1;

colr:=3;

end;

{--------}

end;

end;

{----------------------------------}

procedure povorot(n:integer);

begin

if x<(12-ht) then

case n of

1:fig:=2;

2:fig:=3;

3:fig:=4;

4:fig:=1;

5:fig:=6;

6:fig:=5;

8:fig:=9;

9:fig:=8;

10:fig:=11;

11:fig:=10;

12:fig:=13;

13:fig:=14;

14:fig:=15;

15:fig:=12;

16:fig:=17;

17:fig:=18;

18:fig:=19;

19:fig:=16;

end;

end;

{--------------------------------}

begin

clrscr;

gotoxy(20,14);

write('Enter your name: ');

read(name);

clrscr;

textcolor(red);

gotoxy(35,10);

Write('TETRIS');

textcolor(1);

gotoxy(10,20);

WRITE('Made by: Tretyakov Ilia, Sinkovskaia Lida, Ivanova Aleksandra');

gotoxy(30,12);

textcolor(14);

write(name,' Vvedite skorost: ');

read(del);

dell:=del;

z:=0;

repeat

gotoxy(20,13);

textcolor(13);

write('Vvedite nomera figur(1-8) (esli vse(v) vkonce(o)): ');

read(fi);

case fi of

'1':begin z:=z+1; e[z]:=1; end;

'2':begin z:=z+1; e[z]:=5; end;

'3':begin z:=z+1; e[z]:=7; end;

'4':begin z:=z+1; e[z]:=8; end;

'5':begin z:=z+1; e[z]:=10;end;

'6':begin z:=z+1; e[z]:=12;end;

'7':begin z:=z+1; e[z]:=16;end;

'8':begin z:=z+1; e[z]:=20;end;

end;

Until (fi='v')or(fi='o');

clrscr;

x:=5;

y:=1;

figs:=random(19)+1;

repeat

randomize;

repeat

del:=dell;

fig:=figs;

if fi='v' then figs:=random(19)+1 else

repeat

new:=false;

figs:=random(20)+1;

for z:=1 to 8 do if e[z]=figs then new:=true;

until new=true;

y:=1;

x:=5;

new:=false;

figura(1,1,figs,1);

colre:=colr;

for z:=1 to 4 do

for s:=1 to 4 do d[z,s]:=a[z,s];

figura(1,1,figs,0);

repeat

figura(x,y,fig,0);

for n:=1 to 9999 do begin

if keypressed then ch:=readkey else ch:=' ';

case ch of

'a':if (x>1)and(a[(x-1),y]<>1) then x:=x-1;

'd':if (x<11-wt)and(a[(x+wt+1),y]<>1) then x:=x+1;

'x':begin dell:=del; del:=1;end;

's':povorot(fig);

'p':readkey;

'm':begin new:=true;

a[4,3]:=1;

gotoxy(31,10);

textcolor(yellow);

write('Dlia vihoda nagmi<q> novaia igra<lubaia klavisha>');

end;

end;

delay(del);

end;

y:=y+1;

figura(x,y,fig,2);

paint;

Until new=true;

figura(x,y,fig,1);

proverka;

for z:=1 to 10 do

for s:=1 to 20 do begin

if c[z,s]<>a[z,s] then b[z,s]:=cvet(colr);

c[z,s]:=a[z,s];

end;

Until (new=true)and((a[4,3]=1)or(a[3,3]=1)or(a[5,3]=1)or(a[6,3]=1));

write('Nagmi <q> dlia vihoda ili <t> dlia prodolgenia igre..');

ch:=readkey;

line:=0;

cls;

Assign(t,'record.txt');

append(t);

writeln(' ');

write(t,' (',name,' ',ochke,');');

close(t);

until ch='q';

end.

Выводы

В этой работе мы создали игру тетрис в программной среде Turbo Pascal, нам удалось решить главную задачу, то есть создать:

- поле игры, семь случайных фигур тетрамино;

- движение фигур в поле;

- поворот фигур;

- складывание фигур в ряды;

- удаление целых рядов и подсчёт их количества;

- отображение последующей фигуры.

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

Вся игра реализована в модуле библиотеки crt что позволяет использовать данную программу на компьютерах без графических библиотек и компьютерах имеющих малый объём оперативной памяти. Нам не удалось создать версию игры с графической библиотекой, но в дальнейшем мы планируем доработать программу, для возможности выбора режима игры (crt или Graph).

Список использованных источников

1. Епашенков А.М., Епашенков В.А. Программирование в среде Turbo Pascal 7.0 / 3-е изд., стереотип. - М.: Диалог-Мифи, 1996.

2. Интернет сайт http://ru.wikipedia.org/wiki.

3. Интернет сайт http://256bit.ru/informat/eu_pascal.

Приложение

Блок схемы:

- function cvet определяет цвет фигуры

Размещено на http://www.allbest.ru/

- procedure cls отчищает массив поля

Размещено на http://www.allbest.ru/

- procedure proverka удаление полной линии и прибавление очков

Размещено на http://www.allbest.ru/

- procedure paint Вывод состояния массива на экран и отображение последующей фигуры

Размещено на http://www.allbest.ru/

procedure figura непосредственное определение формы фигуры

Размещено на http://www.allbest.ru/

- procedure povorot реализация поворота фигуры

Размещено на http://www.allbest.ru/

Размещено на Allbest.ru


Подобные документы

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

    курсовая работа [343,7 K], добавлен 20.01.2015

  • Обоснование необходимости разработки программы для игры "Тетрис". Математическая и графическая части алгоритма. Выбор языка и среды программирования. Отладка текста программы, разработка интерфейса пользователя. Тестирование, руководство пользователя.

    курсовая работа [1,5 M], добавлен 17.01.2011

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

    курсовая работа [506,3 K], добавлен 17.12.2014

  • Разработка программы, реализующей игру "Змейка" в среде Turbo Pascal. Возможность создания игры в модуле библиотеки crt, что позволяет использовать программу на компьютерах без графических библиотек и компьютерах, имеющих малый объём оперативной памяти.

    курсовая работа [190,5 K], добавлен 02.02.2013

  • История развития языка программирования Java. История тетриса - культовой компьютерной игры, изобретённой в СССР. Правила проведения игры, особенности начисления очков. Создание интерфейса программы, ее реализация в среде Java, кодирование, тестирование.

    курсовая работа [168,1 K], добавлен 27.09.2013

  • Описание принципа развивающей игры в слова "Виселица". Разработка программы, реализующей задачу данной игры на языке Delphi. Обоснование выбора среды программирования, листинг файла, результаты отладки и тестирования, руководство для пользователя.

    курсовая работа [572,7 K], добавлен 14.07.2012

  • Язык программирования Pascal и его турбооболочка. Аналитический обзор игрового программного обеспечения. Функции модуля Crt. Постановка задачи создания несложной игровой программы "Турбозмей", алгоритм реализации и описание пользовательского интерфейса.

    курсовая работа [100,4 K], добавлен 15.05.2014

  • Создание игровой системы "Тетрис": количество игр, режимы сложности, интерфейс пользователя, игровая статистика, обработка исключений. Структура входных и выходных данных. Диаграммы и описание классов. Блок-схема алгоритма программы, результаты ее работы.

    курсовая работа [1,9 M], добавлен 13.06.2012

  • Разработка алгоритма поставленной задачи по обработке числовой информации в среде Turbo Pascal 7.0 с базовым языком программирования Pascal, отладка программы, реализующей разработанный алгоритм. Описание структуры программы, ее вспомогательных процедур.

    курсовая работа [668,0 K], добавлен 25.02.2010

  • Написание игры "Lines" на языке Object Pascal в среде Delphi. Алгоритм работы программы. Описание метода генерации поля. Используемые константы и переменные. Форма приложения после старта игрового процесса. Основные элементы формы и обработки событий.

    курсовая работа [225,0 K], добавлен 12.04.2012

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.