Қолданушы интерфейсін құру: мысал ретінде тетрис ойыны



Кіріспе

1. Есептің қойылымы
2. Есепті шешудің әдістері
3. Алгоритм сипаты

4. Программаны сипаттау
4.1. Программаның басты айнымалылары мен құрылымдары
4.2. Программаның басты процедуралары мен функциялары

5. Интерфейчті сипаттау
6. Жұмыстың нәтижесі
7. Программа листингі

Қорытынды

Пайдаланылған әдебиеттер
Кіріспе
Көптеген жылдар бойы алгоритмге деген қызығушылық өсу үстінде. Ол ғылыми зертеулерде, техникада, эконмикада және т.с.с. көптеген салаларда есептеуіш машиналарда қолданумен байланысты. Бұл есептеуіш машиналары берілген алгоритмдерге сәйкес оның кейбір өлшемдерінің құрылымен дәл орындайды.
Бұл мүмкіндіктің тартымды болу себебі, айтып кеткен зертеулер көлеміндегі зерттелінетін процестер көп жағдайда математикалық функция, теңдеулер жүйесі, теңсіздіктер көмегімен сипатталады және осы зерттелінетін процестердің нақты мәліметтерін алу үшін математикалық объектіде кейбір іс - әрекеттер жасау қажет.
Адамға тек, керекті түрлендірулер мен есептеулердің алгоритмдерін сипаттаса болғаны, қалғанын есептеуіш машинасы өзі орындайды. Есептеуіш машиналары тек сандық алгоритмдерді орындайды деп ойламау керек. Сонымен қатар бұл машиналар алгебралық формулалар, текстер және т.б. символдарының нәтижелерін түрлендіре алады.
Алгоритмнің жазу ережесін есептеуіш машинада орындау өте қатал болып табылады – автомат адам үшін ештеңе алдын ала ойлай алмайды. Алгоритмнің ереже түріндегі жиынтығы бағдарламамалау тілі деп аталады. Ал бағдарламамалаудың кейбір тілінде жазылған әрбір алгоритм бағдарламама деп аталады.
Зерттелінетін процестің немесе объектіні ақпараттық моделіне сәйкес құрылған және ақпаратты электронды есептеуіш машинада өңдеу алгоритмін жазу үшін арнаулы бағдарламамалау жүйелері қолданылады.
Соңғы отыз жыл көлемінде кең таралған бағдарламамалау тілдерінің арасында өзінің танымалдылығымен Паскаль тілі ерекшеленеді. Менің курстық жұмысым осы тілге негізделген, яғни алгоритм құру , Паскаль тілінің ерекшеліктерін ашу және қолданушы интерфейсін құру. Мен бұл тапсырмадан мардымды нәтиже алу үшін тетрис ойынын таңдадым. Себебі тетрис ойынының алгоритмі өте жеңіл және ыңғайлы.
ПАЙДАЛАНЫЛҒАН ӘДЕБИЕТТЕР

1. Б.Бөрібаев. Информатика және компьютер. Алматы, 1995ж.
2. Г.Григас. Бағдарламалау негіздері. Москва, 1987.
3. А.И.Гусева. Тurbo Раsсаl 7.0-де бағдарламалау. Москва, 1996 ж.
4.Ж.Динисламов. Turbo Pascal тілі ортасында бағдарламалау, 2002 ж.
5. О.Камардинов. Есептеуіш техника және бағдарламалау. Алматы, 1997ж.
6. В.Б. Попов. Turbo Pascal, оқушылар үшін. Москва, 2001 ж.
7. Қ.Сарыбасов. Бағдарламалау курсы. Алматы, "Мектеп" 1989ж.
8. В.В.Фаронов. Turbo Pascal. Москва, 1999ж.
9. В.Э.Фигурнов. IBM PC пайдаланушылар үшін. Москва, 1996ж.

  
Қолданушы интерфейсін құру: мысал ретінде тетрис ойыны

Кіріспе
1. Есептің қойылымы
2. Есепті шешудің әдістері
3. Алгоритм сипаты
4. Программаны сипаттау
  4.1. Программаның басты айнымалылары мен құрылымдары
  4.2. Программаның басты процедуралары мен функциялары
5. Интерфейчті сипаттау
6. Жұмыстың нәтижесі
7. Программа листингі
Қорытынды
Пайдаланылған әдебиеттер

Кіріспе

Көптеген жылдар бойы алгоритмге деген қызығушылық өсу үстінде. Ол
ғылыми зертеулерде, техникада, эконмикада және т.с.с. көптеген салаларда
есептеуіш машиналарда қолданумен байланысты. Бұл есептеуіш машиналары
берілген алгоритмдерге сәйкес оның кейбір өлшемдерінің құрылымен дәл
орындайды.
Бұл мүмкіндіктің тартымды болу себебі, айтып кеткен зертеулер
көлеміндегі зерттелінетін процестер көп жағдайда математикалық функция,
теңдеулер жүйесі, теңсіздіктер көмегімен сипатталады және осы зерттелінетін
процестердің нақты мәліметтерін алу үшін математикалық объектіде кейбір іс
- әрекеттер жасау қажет.
Адамға тек, керекті түрлендірулер мен есептеулердің алгоритмдерін
сипаттаса болғаны, қалғанын есептеуіш машинасы өзі орындайды. Есептеуіш
машиналары тек сандық алгоритмдерді орындайды деп ойламау керек. Сонымен
қатар бұл машиналар алгебралық формулалар, текстер және т.б. символдарының
нәтижелерін түрлендіре алады.
Алгоритмнің жазу ережесін есептеуіш машинада орындау өте қатал болып
табылады – автомат адам үшін ештеңе алдын ала ойлай алмайды. Алгоритмнің
ереже түріндегі жиынтығы бағдарламамалау тілі деп аталады. Ал
бағдарламамалаудың кейбір тілінде жазылған әрбір алгоритм бағдарламама деп
аталады.
Зерттелінетін процестің немесе объектіні ақпараттық моделіне сәйкес
құрылған және ақпаратты электронды есептеуіш машинада өңдеу алгоритмін жазу
үшін арнаулы бағдарламамалау жүйелері қолданылады.
Соңғы отыз жыл көлемінде кең таралған бағдарламамалау тілдерінің
арасында өзінің танымалдылығымен Паскаль тілі ерекшеленеді. Менің курстық
жұмысым осы тілге негізделген, яғни алгоритм құру , Паскаль тілінің
ерекшеліктерін ашу және қолданушы интерфейсін құру. Мен бұл тапсырмадан
мардымды нәтиже алу үшін тетрис ойынын таңдадым. Себебі тетрис ойынының
алгоритмі өте жеңіл және ыңғайлы.

1. Есептің қойылымы

  Ойыншының әрекетіне сәйкес экрандағы фигураны жоғарыдан төменге қарай
жылжытуды эәне оның координатын анықтайтын программаның алгоритмін құру.
  Фигуралар бірдей өлшемді квадраттардан тұрады, фигуралар жиыны – аяқты,
фигуралардың түсу тізімімі – кез-келген тәртіппен.
  Ойыншы фигураларды өте жоғарғы тығыздықпен стаканның түбіне жиақтауы
керек (толтырылмаған квадраттар саны минималды болуы шарт). Бұл жағдайда
толық толтырылған қатар автоматты түрде стаканнан жоғалып отырады.
  Ойыншы ойынды тоқтата да, жалғасыта да алады. Ойынның деңгейін квадраттар
саны мен жылдамдығы анықтайды.

2. Есепті шешудің әдісі

  Программа Паскаль тілінде жазылған. Мынандай стандартты модульдер
пайдаланылады: crt (басылған пернелердің кодын анықтау үшін), graph
(графикалық режимде жұмыс жасау үшін), и windos (таймер үшін).
  Объектілі-бағытталған программалау қолданылған. Негізгі объектілер -
фигура және стакан.
  Таймердегі, басылған пернелердегі және таңдалған меню пунктіндегі
оқиғаларды өңдеу орындалады.

3. Алгоритмді сипаттау

4. Программаны сипаттау

  4.1. Программаның басты құрылымы мен айнымалылары

Типтелген константалар:

Стакандағы клеткалар саны:
max : byte =20;
max : byte =30;
Клетканың көлемі:
size : byte =12;
Қиындық деңгейі – бастапқы қозғалыс жылдамдығы мен стаканның толықтығын
анықтайды:
level : byte =1;
Фигураны төменге түсіру уақыт аралығы:
speed:real=0.4

Объектілер

Фигура:
TBlock=object
mx,my,x,y:byte; Ені мен ұзындығы бойынша квадраттар саны мен координаты
matr:TmatrixBlock; Егер квадрат болса, матрица элементі бірге тең
болады.
t:byte; Фигураның типі
pos:1..4; Фигураның жаңдайы
p,p2:pointer; квадрат суретімен оның экрандағы жағдайының көрсеткіші
s,s2:word;
procedure initmatrix; сатрицаға бастапқы мәнді бекіту
constructor init;
procedure rotate;virtual; фигураны бұру
procedure draw;virtual; фигураны қайтадан салу
procedure clear;virtual; фигураны өшіру
destructor done;
end;

Стакан:
Tfield=object
x1, y1: integer ; алаңның координаттары
matr:TMatrixField; егер сәйкес бөлігі толтырылса, онда бірге тең
constructor init(level:byte); levelдеңгйінің бастапқы мәнін белгілеу
procedure draw; Стаканды қайта салу
procedure clear ; Стаканды экраннан өшіру
function full:boolean; Егере стакан толса, онда true мәнін қайтарады
function fline (n:byte):boolean; Егер n-ші қатар толса, true мәнін
қайтарады
procedure dline (n:byte); n-ші қатарды өшіреді
private
x2,y2:integer; ені мен ұзыгдығы
end;

Жиек:
tramka=object
x,y,width,heigth:integer; координаты, ені мен ұзыгдығы
lighted:boolean; Егер true болса, онда жиегі сызылған
col1,col2,col3:integer; Екпінді және екпінді емес жиек фонының түсі
s:word; жадтың сәйкес көлемі
public
constructor init( x1, y1, xx , yy :word);
procedure mkactive; Терезені жиекке орнату
procedure light; Жиекті шығару
procedure unlight; Екпінді емес жиектің түсі
procedure draw; Жиекті қайта салу
procedure clear; Экранды бастапқы қалпына келтіру
destructor done;
end;

Тік меню:
tsubmenu=object(tramka)
punkts:menutype; меню пункттерінің атының массиві
n:byte; пункт саны
col4:integer; Меню пункттерің түсі
constructor init(const pnk:menutype;n1:byte;x1,y1:word);
procedure draw;
function result:byte; Меню пункттерінің арасындағы қозғалысты
қалыптастырады және таңдалған пункттің номерін береді.
private h:integer; Бір пункттің биіктігі
end;

Көлденең меню:
tmainmenu=object(tsubmenu)
constructor init(const pnk:menutype;n1:byte);
procedure draw;
function result:byte;
procedure getkoords(i:byte;var x,y:word);
end;

  4.2. Басты процедуралар мен функцияларды сипаттау

Модуль tetobj:
  procedure kv ( var p : pointer ; VAR s : word ) - көрсеткішті квадрат
суретіне және жадтың сәйкес көлеміне жылжытады

Модуль Int:
 procedure drawmenu ( var res : longint ); Менюді экранға шығарады
  procedure entername(score:longint;var name:string); Ойыншының атын
экранға шығару
  procedure best; Үздік нәтижелер кестесін шығару
  procedure clearbest; Нәтижелер кестесін тазарту

Модуль Game:
  procedure startgame(var bl:tblock;var f:tfield;var score:integer); Алаң
бойынша фигураны қозғалтатын, менюді шақыратын және нәтижелерді өңдейтін
негізгі процедура
  function fall ( const bl : tblock ; const f : tfield ): boolean ; Фигура
стаканның түбіне түссе True мәнін қайтарады
  function left(const bl:tblock; const f:tfield):boolean;
  function right(const bl:tblock; const:tfield):boolean;
  function CanBeRotated(const block:tblock;const field:tfield): boolean;
Бұл функциялар сәйкесінше фигураны оңға, солға немесе төңкеру мүмкін болса,
true мәнін қайтарады
  procedure NextFigure(var t1,p1:integer); Келесі фигураны шығарады, оның
типі мен жағдайын қайтарады
  procedure OutScore(score : integer); Есепті шығару

5. Интерфейсті сипаттау

  Программаны орындауға жібергеннен соң экранда фигурасы бар ойын алаңы,
келесі блок туралы информациямен есеп шығады. Ойын басында пауза тәртібінде
тұрады. Экранның жоғарысында – меню.
  Басты меню мынандай пункттерді қамтиды:
    • Ойын( Game)
    • Үздік нәтижелер (Best Results)
    • Баптау (Options)
  Менюдің қажетті пунктін бағдар және 'enter' пернесі арқылы таңдауға
болады. Бұл жағдайда ішкі меню ашылады.
  'Ойын' менюі жаңа ойын бастауға, басталған ойынды жалғастыруға немесе
ойыннан шығуға мүмкіндік береді.
  'Үздік нәтижелер' менюі – үздік нәтижелер кестесін көру немесе оны
тазарту үшін.
  'Баптау’ менюінің арқасында экранның өлшемін өзгертуге немесе ойынның
деңгейін анықтауға болады. Бірінші деңгейде стакан бос. Келесі деңгейлерде
стаканның төменгі қатарлары толтырылған.
  Егер ойын кезінде кез-келген сәтте Esc пернесін басса, онда меню ашылады.
Ойын тоқтатылады. Continue меню пункті арқылы ойынды жалғастыруға болады.

6. Жұмыс нәтижесі

7. Программа листингі

program main;
uses tetobj,game,crt,graph,ramki,int;
var bl:tblock;f:tfield;
score:integer;
s:string;
procedure myinitgraph;
var gd,gm:integer;
begin
gd:=detect;
initgraph(gd,gm,'c:bpbgi');
if graphresult0 then
begin writeln('Graphic Error');readkey;halt end;
end;
begin
release(heaporg);
randomize;
myinitgraph;
repeat startgame(bl,f,score) until 1=2;
entername(score,s);
CLOSEGRAPH;
end.

unit TetObj;
interface
uses crt,graph;
const maxX:byte=20;
maxY:byte=30;
size:byte=12;
level:byte=1;
speed:real=0.4;
type TMatrixField=array[0..31,1..45]of 0..1;
TMatrixBlock=array[1..4,1..4]of 0..1;
TBlock=object
mx,my,x,y:byte;
matr:TmatrixBlock;
t:byte;
pos:1..4;
p,p2:pointer;
s,s2:word;
procedure initmatrix;
constructor init;
constructor init2(t1,pos1:byte);
procedure rotate;virtual;
procedure draw;virtual;
procedure clear;virtual;
destructor done;
end;
Tfield=object
x1,y1:integer;
matr:TMatrixField;
constructor init(level:byte);
procedure draw;
procedure clear;
function full:boolean;
function fline (n:byte):boolean;
procedure dline (n:byte);
private
x2,y2:integer;
end;
implementation

constructor tfield.init;
var i,j:byte;
begin
for i:=1 to maxX do
for j:=1 to maxY do
matr[i,j]:=0;
for i:=0 to maxX+1 do
matr[i,maxY+1]:=1;
for j:=1 to maxY do begin
matr[0,j]:=1;
matr[maxX+1,j]:=1;
end;
randomize;
for i:=1 to level-1 do
for j:=1 to MaxX div 2 do
matr[random(maxX-2)+1,maxY-i+1]:=1;
x1:=20;y1:=40;
x2:=size*maxX;
y2:=size*maxY;
setviewport(x1,y1,x1+x2,y1+y2,true) ;
end;
procedure tblock.initmatrix;
var i,j:byte;
begin
for i:=1 to 4 do
for j:=1 to 4 do
matr[i,j]:=0;
case t of
1:case pos of
1,3: begin
mx:=4;
my:=1;
for j:=1 to mx do matr[j,1]:=1;
end;
2,4: begin
mx:=1;
my:=4;
for j:=1 to my do
matr[1,j]:=1;
end;
end;
2: case pos of
1,3: begin
mx:=3;
my:=2;
matr[1,1]:=1;
matr[2,1]:=1;
matr[2,2]:=1;
matr[3,2]:=1;
end;
2,4: begin
mx:=2;
my:=3;
matr[1,2]:=1;
matr[1,3]:=1;
matr[2,1]:=1;
matr[2,2]:=1;
end;
end;
3: case pos of
1: begin
mx:=3;
my:=2;
matr[2,1]:=1;
matr[1,2]:=1;
matr[2,2]:=1;
matr[3,2]:=1;
end;
2: begin
mx:=2;
my:=3;
matr[1,1]:=1;
matr[1,2]:=1;
matr[1,3]:=1;
matr[2,2]:=1;
end;
3: begin
mx:=3;
my:=2;
matr[2,2]:=1;
matr[1,1]:=1;
matr[2,1]:=1;
matr[3,1]:=1;
end;
4: begin
mx:=2;
my:=3;
matr[2,1]:=1;
matr[2,2]:=1;
matr[2,3]:=1;
matr[1,2]:=1;
end;
end;
4: case pos of
1,3: begin
mx:=3;
my:=2;
matr[2,1]:=1;
matr[3,1]:=1;
matr[1,2]:=1;
matr[2,2]:=1;
end;
2,4: begin
mx:=2;
my:=3;
matr[1,1]:=1;
matr[1,2]:=1;
matr[2,2]:=1;
matr[2,3]:=1;
end;
end;
5: begin
mx:=2;
my:=2;
for i:=1 to 2 do
for j:=1 to 2 do
matr[i,j]:=1;
end;
6: case pos of
1: begin
mx:=2;
my:=3;
matr[2,1]:=1;
matr[2,2]:=1;
matr[2,3]:=1;
matr[1,3]:=1;
end;
2: begin
mx:=3;
my:=2;
matr[1,1]:=1;
matr[2,1]:=1;
matr[3,1]:=1;
matr[3,2]:=1;
end;
3: begin
mx:=2;
my:=3;
matr[1,1]:=1;
matr[1,2]:=1;
matr[1,3]:=1;
matr[2,1]:=1;
end;
4: begin
mx:=3;
my:=2;
matr[1,1]:=1;
matr[1,2]:=1;
matr[2,2]:=1;
matr[3,2]:=1;
end;
end;
7: case pos of
1: begin
mx:=2;
my:=3;
matr[1,1]:=1;
matr[1,2]:=1;
matr[1,3]:=1;
matr[2,3]:=1;
end;
2: begin
mx:=3;
my:=2;
matr[1,2]:=1;
matr[2,2]:=1;
matr[3,2]:=1;
matr[3,1]:=1;
end;
3: begin
mx:=2;
my:=3;
matr[2,1]:=1;
matr[2,2]:=1;
matr[2,3]:=1;
matr[1,1]:=1;
end;
4: begin
mx:=3;
my:=2;
matr[1,2]:=1;
matr[1,1]:=1;
matr[2,1]:=1;
matr[3,1]:=1;
end;
end;
end;
end;

procedure kv ( var p: pointer;VAR s:word );
var p2:pointer;
S2:WORD;
begin
s:=imagesize(0,0,size,size);
getmem(p2,s);
getimage(0,0,size,size,p2^);
setfillstyle(1,4);
setcolor(12);
bar(0,0,size,size);
rectangle(2,2,size-1,size-2);
getmem(p,s);
getimage(0,0,size,size,p^);
putimage(0,0,p2^,normalput);
freemem(p2,s);
p2:=nil;
end;

constructor tblock.init;
var x1,y1,x2,y2,i,j:integer;
begin
randomize;
t:=random(100)mod 7 +1;
pos:=random(3)+1;
initmatrix;
x:=(maxX-mx) div 2;
y:=2;
kv(p,s);
p2:=nil;
end;
constructor tblock.init2;
begin
t:=t1;
pos:=pos1;
initmatrix;
x:=(maxX-mx) div 2;
y:=2;
kv(p,s);
p2:=nil;
end;

procedure tblock.draw;
var i,j:byte;
begin
s2:=imagesize(0,0,mx*size,my*size);
getmem(p2,s2);
getimage((x-1)*size,(y-1)*size,(x-1 +mx)*size,
(y-1+my)*size,p2^);
for i:=1 to mx do
for j:=1 to my do
if matr[i,j]0 then putimage((x+i-2)*size,
(y+j-2)*size,p^,normalput);
end;
procedure tblock.clear;
var x1,x2,y1,y2:integer;
begin
putimage((x-1)*size,(y-1)*size,p2^, normalput);
freemem(p2,s2);
p2:=nil;
end;
procedure tblock.rotate;
begin
if pos4 then inc(pos)else pos:=1;
x:=x+((mx+1) div 2);
y:=y+((my+1) div 2);
x:=x-((mx+1) div 2);
y:=y-((my+1) div 2);
initmatrix;
end;

procedure tfield.draw;
var i,j:byte;
p:pointer;
s,r,a,b:word;
col:word;
ar:array [1..5,1..4]of word;
begin
setfillstyle(1,blue);
bar(0,0,x2,y2);
setcolor(3);
for i:=1 to maxX-1 do
line(size*i,0,size*i,y2);
for i:=1 to maxY-1 do
line(0,size*i,x2,size*i);

ar[1,1]:=75*maxX*size div 100+4;
ar[1,2]:=35*maxY*size div 150-4;
ar[1,3]:=12;
ar[1,4]:=MaxX*size div 6;

ar[2,1]:=7*maxX*size div 10+3;
ar[2,2]:=75*maxY*size div 150-2;
ar[2,3]:=14;
ar[2,4]:=MaxX*size div 8;

ar[3,1]:=3*maxX*size div 10-6;
ar[3,2]:=1*maxY*size div 10-4;
ar[3,3]:=13;
ar[3,4]:=MaxX*size div 10;

for i:=1 to 3 do begin
setcolor(ar[i,3]);
a:=ar[i,1];b:=ar[i,2];
r:=ar[i,4];
{1}line(a,b,a+(r*3 div 10) ,b-(r*95)div 100);
line(a-(r*3 div 10) ,b-(r*95)div 100,a,b);
line(a+(r*3 div 10),b-(r*95)div 100,a-(r*3 div 10),
b-(r*95)div 100);
{2}line(a,b,a+(r*3 div 10) ,b+(r*95)div 100);
line(a-(r*3 div 10) ,b+(r*95)div 100,a,b);
line(a-(r*3 div 10),b+(r*95)div 100,a+(r*3 div 10),
b+(r*95)div 100);
{3}line(a,b,a-(r*95)div 100,b+(r*3 div 10));
line(a-(r*95)div 100,b-(r*3 div 10),a,b);
line(a-(r*95)div 100,b-(r*3 div 10),a-(r*95)div 100,
b+(r*3 div 10));
{4}line(a,b,a+(r*95)div ... жалғасы

Сіз бұл жұмысты біздің қосымшамыз арқылы толығымен тегін көре аласыз.
Ұқсас жұмыстар
Java - объектіге бағытталған бағдарламалау тілі ортасында ойындар құрастыру
Информатика курсында оқушыларды оқытуда компьютерлік ойындарды пайдалану
ОЙЫН СФЕРАСЫ ЖӘНЕ ОНЫ ҚҰРУ ЖОЛДАРЫ
Ақпараттық технологиялар ұғымы
КОМПЬЮТЕРЛІК ОЙЫНДАРДЫ ҚҰРУ ТЕХНОЛОГИЯЛАРЫ
Ақпарат және информатика бойынша материалдар
CISCOIOS командаларын орындау үшін желі
Java туралы жалпы түсiнiк
Android телефондарға арналған алғашқы интерфейс
Қазіргі заманғы Qazaq Premier League (Футбол) кроссплатформалы бағдарламасын құру
Пәндер