Разработка программы, реализующей игру "Тетрис" в программной среде 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