Разработка программы, реализующей игру 'Тетрис' в программной среде Turbo Pascal
Содержание
Введение
. Результаты выполнения работы
. Код программы
Выводы
Список использованных источников
Приложение
Введение
Об игре
ТЕТРИС
"Тетрис" был написан программистом Алексеем Пажитновым в июне
1985. В то время он работал в ВЦ Академии Наук СССР и занимался изучением
проблем искусственного интеллекта, экспериментируя с простейшими головоломками.
Принцип "Тетриса" позаимствован у популярной в шестидесятые годы
прошлого века игры "Пентамино". Смысл данной головоломки сводится к
следующему. Если взять пять квадратов и сгруппировать их всеми возможными
способами, то получатся более десятка различных фигур - элементов
"Пентамино". Далее, используя эти фигуры, необходимо выполнять
простейшие задания, например, складывать более крупные квадраты.
Правила
Случайные
фигурки тетрамино
<#"600652.files/image001.gif">
2. Код программы
игра тетрис поле фигура
program
tetris;crt;b,a,c:array[1..10,1..20]of integer;:array[1..4,1..4]of
integer;:array[1..8]of integer;
n,m,x,y:integer;,fi
:char;,wt,fig,del,dell,colr,colre,z,s:integer;
new,pov:boolean;,figs,ochke:integer;:string;:text;
{--------------------------------------}cvet(colr:integer):integer;colr
of
:cvet:=9;
2:cvet:=10;
:cvet:=11;
:cvet:=12;
:cvet:=13;
:cvet:=14;
7:cvet:=7;;;
{--------------------------------------}cls;i,j:integer;i:=1
to 10 doj:=1 to 20 do a[i,j]:=0;;
{---------------------------------------}proverka;i,j,l,f,g:integer;
begini:=20 downto
1 do begin:=0;j:=1 to 10 do begin
{ readkey;(i,'
',j,' ',l,'-'); }a[j,i]=1 then l:=l+1;;l=10 then begin:=line+1;f:=i-1 downto 1
dog:=1 to 10 do begin a[g,f+1]:=a[g,f];[g,f+1]:=b[g,f];;:=i+1;;;;
{----------------------------------------}paint;
var
i,j:integer;(40,3);
textcolor(15);:=line*(20-del);('line:',line,'
point:',ochke);(41,4);('scor: ',del);i:=1 to 10 doj:=1 to 20 doa[i,j] of
:begin
textcolor(b[i,j]);(i+20,j);('0');;
:begin(cvet(colr));(i+20,j);('0');;
:begin
textcolor(red);(i+20,j);('.');;;i:=1 to 4 doj:=1 to 4 do begind[i,j] of
:begin
textcolor(red);(i+40,j+5);('.');;
:begin(cvet(colre));(i+40,j+5);('0');;;;;
{----------------------------------}figura(x,y,n,st:integer);i:integer;n
of
:begin
a[x,y]:=st;[x+1,y]:=st;[x+2,y]:=st;[x+1,y+1]:=st;(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;:=3;:=2;:=1;;
{--------}
:begin
a[x+1,y]:=st;[x+1,y+1]:=st;[x+1,y+2]:=st;[x,y+1]:=st;(a[x,y+2]=1)or(y=18)or(a[x+1,y+3]=1)
then new:=true;:=2;:=3;:=1;;
{--------}
:begin
a[x+1,y]:=st;[x,y+1]:=st;[x+1,y+1]:=st;[x+2,y+1]:=st;(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;:=3;:=2;:=1;;
{--------}
:begin
a[x,y]:=st;[x,y+1]:=st;[x+1,y+1]:=st;[x,y+2]:=st;(a[x,y+3]=1)or(y=18)or(a[x+1,y+2]=1)
then new:=true;:=2;:=3;:=1;;
{--------}
:begin
a[x,y]:=st;[x+1,y]:=st;[x+2,y]:=st;[x+3,y]:=st;(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;:=4;:=1;:=2;;
{--------}
:begin
a[x,y]:=st;[x,y+1]:=st;[x,y+2]:=st;[x,y+3]:=st;(a[x,y+4]=1)or(y=17) then
new:=true;:=1;:=4;:=2;;
{--------}
:begin
a[x,y]:=st;[x,y+1]:=st;[x+1,y+1]:=st;[x+1,y]:=st;(a[x,y+2]=1)or(y=19)or(a[x+1,y+2]=1)
then new:=true;:=2;:=2;:=3;;
{--------}
:begin
a[x+1,y]:=st;[x+2,y]:=st;[x,y+1]:=st;[x+1,y+1]:=st;(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;:=3;:=2;:=4;;
{--------}
:begin
a[x,y]:=st;[x,y+1]:=st;[x+1,y+1]:=st;[x+1,y+2]:=st;(a[x,y+2]=1)or(y=18)or(a[x+1,y+3]=1)
then new:=true;:=2;:=3;:=4;;
{--------}
{--------}
:begin
a[x,y]:=st;[x+1,y]:=st;[x+1,y+1]:=st;[x+2,y+1]:=st;(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;:=3;:=2;:=5;;
{--------}
:begin
a[x+1,y]:=st;[x+1,y+1]:=st;[x,y+1]:=st;[x,y+2]:=st;(a[x+1,y+2]=1)or(y=18)or(a[x,y+3]=1)
then new:=true;:=2;:=3;:=5;;
{--------}
:begin
a[x,y]:=st;[x,y+1]:=st;[x+1,y+1]:=st;[x+2,y+1]:=st;(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;:=3;:=2;:=6;;
{--------}
:begin
a[x,y]:=st;[x+1,y]:=st;[x,y+1]:=st;[x,y+2]:=st;(a[x,y+3]=1)or(y=18)or(a[x+1,y+1]=1)
then new:=true;:=2;:=3;:=6;;
{--------}
:begin
a[x,y]:=st;[x+1,y]:=st;[x+2,y]:=st;[x+2,y+1]:=st;(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;:=3;:=2;:=6;;
{--------}
:begin
a[x+1,y]:=st;[x+1,y+1]:=st;[x+1,y+2]:=st;[x,y+2]:=st;(a[x,y+3]=1)or(y=18)or(a[x+1,y+3]=1)
then new:=true;:=2;:=3;:=6;;
{--------}
{--------}
:begin
a[x,y+1]:=st;[x,y]:=st;[x+1,y]:=st;[x+2,y]:=st;(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;:=3;:=2;:=7;;
{--------}
{--------}
:begin
a[x+2,y]:=st;[x,y+1]:=st;[x+1,y+1]:=st;[x+2,y+1]:=st;(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;:=3;:=2;:=7;;
{--------}
:begin
a[x,y]:=st;[x,y+1]:=st;[x,y+2]:=st;[x+1,y+2]:=st;(a[x,y+3]=1)or(y=18)or(a[x+1,y+3]=1)
then new:=true;:=2;:=3;:=7;;
{--------}
{--------}
:begin a[x,y]:=st;
{
a[x,y+1]:=st;[x+1,y+1]:=st;[x+2,y+1]:=st;[x+1,y+2]:=st;
}(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;:=1;:=1;:=3;;
{--------};;
{----------------------------------}povorot(n:integer);x<(12-ht)
thenn of
1:fig:=2;
:fig:=3;
:fig:=4;
:fig:=1;
:fig:=6;
:fig:=5;
:fig:=9;
:fig:=8;
:fig:=11;
:fig:=10;
:fig:=13;
:fig:=14;
:fig:=15;
:fig:=12;
:fig:=17;
17:fig:=18;
:fig:=19;
:fig:=16;;;
{--------------------------------};(20,14);('Enter
your name: ');(name);;(red);(35,10);('TETRIS');(1);(10,20);('Made by: Tretyakov
Ilia, Sinkovskaia Lida, Ivanova Aleksandra');(30,12);(14);(name,' Vvedite
skorost: ');
read(del);:=del;:=0;(20,13);(13);('Vvedite
nomera figur(1-8) (esli vse(v) vkonce(o)): ');
read(fi);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;(fi='v')or(fi='o');
clrscr;:=5;:=1;:=random(19)+1;
repeat;:=dell;:=figs;fi='v'
then figs:=random(19)+1 else:=false;:=random(20)+1;z:=1 to 8 do if e[z]=figs
then new:=true;new=true;:=1;:=5;:=false;(1,1,figs,1);:=colr;
for z:=1 to 4 dos:=1
to 4 do d[z,s]:=a[z,s];
figura(1,1,figs,0);(x,y,fig,0);n:=1
to 9999 do beginkeypressed then ch:=readkey else ch:=' ';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;[4,3]:=1;(31,10);(yellow);('Dlia vihoda nagmi<q> novaia
igra<lubaia klavisha>');;;(del);;
y:=y+1;(x,y,fig,2);
paint;new=true;(x,y,fig,1);;z:=1
to 10 dos:=1 to 20 do beginc[z,s]<>a[z,s] then
b[z,s]:=cvet(colr);[z,s]:=a[z,s];;(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;:=0;;(t,'record.txt');
append(t);(' ');
write(t,'
(',name,' ',ochke,');');(t); ch='q';.
Выводы
В этой работе мы создали игру
тетрис в программной среде Turbo Pascal, нам удалось решить
главную задачу, то есть создать:
поле игры, семь случайных
фигур тетрамино;
движение фигур в поле;
поворот фигур;
складывание фигур в ряды;
удаление целых рядов и
подсчёт их количества;
отображение последующей
фигуры.
Также дополнительно мы
реализовали: возможность выбора фигур для игры, создание одной дополнительной
фигуры, реализация игры с различной скоростью, сохранение результатов игры в
текстовый файл, подсчет очков с учётом скорости, создание дополнительных
функций: выхода, паузы.
Вся игра реализована в модуле
библиотеки crt что позволяет использовать данную программу на компьютерах без
графических библиотек и компьютерах имеющих малый объём оперативной памяти. Нам
не удалось создать версию игры с графической библиотекой, но в дальнейшем мы
планируем доработать программу, для возможности выбора режима игры (crt
или Graph).
Список использованных
источников
1. Епашенков
А.М., Епашенков В.А. Программирование в среде Turbo Pascal 7.0 / 3-е изд., стереотип. - М.: Диалог-Мифи, 1996.
2. Интернет
сайт #"600652.files/image002.gif">
procedure cls отчищает
массив поля
- procedure proverka удаление полной линии и прибавление
очков
- procedure paint Вывод состояния массива на экран и отображение
последующей фигуры
procedure figura
непосредственное определение формы фигуры
procedure povorot реализация
поворота фигуры