МАЗМҰНЫ
Кіріспе..........................................................................................................................3
1. Графикадығы функциялар мен процедуралар...............................................5
1. 1 Turba Pascal-дағы Graph модулі........................................................................5
1. 2 Спрайттар – ойындар программасын құру......................................................11
1. 3 Динамикалық қозғалыстағы суреттер..............................................................12
2. Шашка ойынын Паскаль программалау тілінде құру................................17
2.1 Шашка ойнының түсінігі....................................................................................17
2.2 Шашка тақташасын құру....................................................................................19
Қорытынды..............................................................................................................24
Қолданылған әдебиеттер тізімі.............................................................................26
Кіріспе
Қазіргі кезде жаһандық ақпараттандыру кезеңін бастан кешірудеміз.
Курстық жұмыстың мақсаты: Паскаль программалау тілінде шашка ойынының
Курстық жұмыстың мақсатына сүйене отырып, негізгі міндеттер келесі
Паскаль программалау тілінде графика құру барысында функция туралы
Графиканың толық мүмкіндіктерін тереңірек зерттеу;
Graph және Crt модулдерін пайдалану арқылы программа құру;
Паскаль программалау тіліндегі шашка ойындарын құрастырудың негізгі ерекшеліктерін
Паскаль программалау тіліндегі шашка ойынының программасын құру тақырыбына
Паскаль программалау тілінде графикалық жұмыстар екі режимде іске
Мәтіндік режимге қарағанда графикалық режимде монитордың экранында саны
Графикадығы функциялар мен процедуралар
1.1Turba Pascal-дағы Graph модулі
Turbo Pascal программалау тілінде символдық режимнен бөлек графиктік
GRAPH модуліндегі процедуралар мен функцияларын пайдаланып экранға қандайда
InitGraph (Var Driver, Mode: integer; Path: string);
мұндағы Driver– графикалық режимді анықтайтын параметр;
Mode – орнатылған драйверге байланысты берілетін графиктік режим
Path – графиктік драйвер файлының атауы және жолы.
Driver параметрінің мәні Graph модулінде берілген тұрақтылардың тізбегімен
Кесте 1.
Тұрақтылар мен кодты анықтайтын драйверлер
Тұрақтының атауы Сандық коды
Detect 0 (Автоанықтау)
CGA 1
MCGA 2
EGA 3
EGA64 4
EGAMono 5
IBM8514 6
HercMono 7
ATT400 8
VGA 9
PC3270 10
Егер Driver параметрінің мәні Detect мәнімен тең болса
GraphResult функцияcы Integer типінің мәнін қабылдайды, ол қате
GraphResult: Integer;
Кесте 2.
GraphResult функцияcы үшін қателер коды
Тұрақты атауы Коды
GrOk 0 Қате жоқ
GrInitGraph -1 Графиктік режим анықталмаған
GrNotDetected -2 Адаптер типі анықталмаған
GrFileNotFind -3 Драйвер типі табылмайды
GrInvalidDriver -4 Анықталған файлда драйвер табылмайды
GrNoLoadMem -5 Драйверді жүктеуге жады көлемі жетпейді
GrNolScanMem -6 Аймақты қарастыруға жады көлемі жетпейді
Gr NoFloodMem -7 Аймақты толтыруға жады көлемі жетпейді
GrFontNotFound -8 Қаріп файлы табылмайды
GrNoFontMem -9 Қаріп файлы табылмайды
GrInvalidMode -10 Анықталған драйверге сәйкес келмейтін режим
GrError -11 Жалпы қате
GrIOError -12 Енгізу-шығару қатесі
GrInvalidFond -13 Қаріптің дұрыс емес пішімі
GrInvalidFondNum -14 Қаріптің нөмері дұрыс емес
GraphResult функциясына қаратпадан кейін қателік белгілері жойылады, сондықтан
Көптеген графикалық процедуралар мен функциялар экранға ағымдық позицияны
GetMaxX және GetMaxY функциялары Word типінің мәнін қабылдайды,
usesGrap;
var
a, b: Integer;
begin
a := Detect;
InitGraph (a, b, ‘’);
WriteLn (GetMaxX, GetMaxY:5);
Readln;
CioseGraph
end.
GetColor функциясы ағымдағы түстің мәнін қайтарады. Функцияның жазылуы:
Function GetColor : Word
Бұл функция SetColor функциясы арқылы өзгертілген түстің мәнін
GetX және GetY функциялары Integer типінің мәнін қабылдайды,
GetX және GetY функцияларының мәндері экранның сол жақ
Function GetX : Integer;
FunctionGetY : Integer;
GetPixel функциясы Word типінің мәнін қабылдайды, ол Х
Function GetPixel (X, Y: Integer) : Word;
Бұндағы Х, Ү –нүкте координаталары.
Графикалық режимді анықтағаннан кейін осы аталған режимнен шығудың
procedure CloseGraph;
Турбо Паскальда суретті экранға шығару кезінде түрлі түстерді
Белгілі бір түсті қажет ететін суреттерді шығаратын Graph
procedure SetColor(Color : Word);
Color параметрі қабылдай алатын Graph модуліндегі тұрақтылардың тізбегі
Кесте 3.
Түстің тұрақтылары мен кодттары
Тұрақтының атауы Коды Түсі
Black 0 Қара
Blue 1 Қанық көк
Green 2 Қанық жасыл
Cyan 3 Көк-жасыл
Red 4 Қызыл
Magenta 5 Қошқыл көк
Brown 6 Қоңыр
LightGray 7 Ашық сұр
DarkGray 8 Қанық сұр
LightBlue 9 Көк
LightGreen 10 Ашық жасыл
LightCyan 11 Ашық көк-жасыл
LightRed 12 Қызғылт
LightMagenta 13 Таңқурай түсті
Yellow 14 Сары
White 15 Ақ
Blink 128 Жарқыл
Графиканы суреттеу кезінде экрандағы тұйықталған облысты толтыру (түспен
procedure SetFillStyle (Oattern : Word; Color : Word);
Кесте 4.
Тұрақтылар, оладың кодталуы мен толтыру түрлері
Тұрақтының атауы Коды Толтырылуы
EmptyFill 0 Біртекті фонның түсімен боялған (өрнегі жоқ)
SolidFill 1 Біртекті түспен боялған (SetColor процедурасымен)
LineFill 2
LtSlashFill 3
SlashFill 4
BkSlashFill 5
LtBkSlashFill 6
HatchFill 7
XHatchFill 8
InterleaveFill 9
WideDotFill 10
CloseDotFill 11
UsesFill 12 Қолданушының таңдауы бойынша
Графиканы суреттеу кезінде бағдарды экрандағы бастапқы бағытты берілген
х және у экрандағы бағдарша орналасатын координтаның нүктесі
MoveTo процедурасы бағдаршаны оның бұрынғы орнына байланысты берілген
procedure MoveTo (Dx, Dy : Integer) ;
Dx және Dy – х және у координаталарының
Егер бағдарша (х, у) координатасындағы нүктеде орналасса, онда
Сурет 1. MoveTo процедурасы экранның сол жақ
Үлкен тіктөртбұрыш бұнда экранның ауданын білдіреді. Бағдаршаны
х және у мәндерін хабарлау керек. Ал MoveRel
Графикалық терезелерді құру. Графиктің шығуын тек жалпы экранға
procedure SetViewPort (x1, y1, x2, y2 :
(х1, у1) – бұнда терезенің жоғарғы сол жағын
Clip параметрі TRUE және FALSE болатын екі мәнді
Const
ClipOn =True;
ClipOff = False;
Егер Clip параметрі ClipOff мәніне ие болса, онда
Сурет 2. Сол жақ терезенің Clip параметрі ClipOff
Сызықтың суреті терезеде басталады және оның шегімен аяқталады.
Егер экранға тіктөртбұрышты тұрғызу керек болған жағдайда, ол
procedure Rectrange (х1, у1, х2, у2 : Integer);
Бұнда (х1, у1) және (х2, у2) координаталарымен берілген
Bar процедурасы экранға толтырылған тіктөртбұрыштарды шығаруға көмектеседі. Жазылуы:
(x1, y1) және (x2, y2) тіктөртбұрыштың сол жақ
Сонымен қатар шеңберді де экранға шығаруға болады. Ол
procedure Circle(x, y: Integer; Rad : Word);
Бұндағы (х, у) – центрдің координаталары, Rad
2 Спрайттар – ойындар программасын құру
Программалауда анимация әсерлері көптеп пайдаланылады, яғни динамикалық қозғалыстағы
Ағылшын тілдік арнайы әдебиетте computer-assisted animation және computer-generated
Қозғалыстағы суреттің иллюзиясы қозғалмайтын суреттің (кадрлардың) түрлі фазадағы
Дисплейдің экранына динамикалық суретті шығару үшін кадрлардың жалғасқан
Анимацияларды программада қолданудың оңай жолы ол – қарапайым
Динамикалық қозғалыстағы суреттер
Динамикалық суреттерді программалаудың көп таралған тәсілдері спрайттарды қолдану
Ендеше спрайттың программалауын қарастыруға болады. Ең алдымен спрайттың
type
SpriteType = record
Height. Width : integer;
Data
end;
Бұл жазылымның жолы спрайттың өлшемі туралы ақпараттан (оның
procedure CreateSprite(var Sprite : SpriteType; Width, Height :
begin
if Sprite.Data nil then
KillSprite(Sprite) ;
Sprite.Width := Width;
Sprite.Height := Height;
getmem(Sprite.Data, Width*Height);
end;
procedure KillSprite(var Sprite : SpriteType);
begin
with Sprite do
begin
FreeMem(Date, Width * Height);
Width := 0;
Height := 0;
Data := nil;
end;
end;
Бұл берілген спрайттың құрылымына сәйкес спрайтты құру және
procedure getsprite (var sprite : spritetype; x1, y1,
var
index, x, y : integer;
begin
createsprite(sprite, x2-x1+1, y2-y1+1);
index := 0;
for y := y1 to y2 do
for x := x1 to x2 do
begin
sprite.data^[index] := getpixel (x, y);
inc (index);
end;
end;
procedure drawsprite (var sprite : spritetype; x, y
var
index, xi, yi : integer;
begin
index := 0;
for yi := 0 to sprite.height -
for x := 0 to sprite.width - 1
begin
putpixel (xi + x, yi + y, sprite.data^[index]
inc (index);
end;
end;
Бұл процедуралардың біріншісі экранның аумағында берілген әрбір нүктенің
Sprite программасы
program sprite;
uses
crt, graph, graphs;
type
byterraytype = array[0. .65534] of byte;
bytearrayptr = ^bytearraytype;
spritetype = record
height, width : integer;
data
end;
var
backgroundsprite, testsprite : spritetype;
xd, yd, ox, oy, i, x, y
procedure killsprite(var sprite : spritetype);
…
procedure createsprite(var sprite : spritetype; width, height :
…
procedure getsprite(var sprite : spritetype; x1, y1, x2,
…
procedure drawsprite(var sprite : spritetype; x, y :
…
begin
open_graph;
setgraphmode(ega64lo);
line(10, 1, 10, 20);
line(1, 10, 20, 10);
line(1, 1, 20, 20);
line(20, 1, 1, 20);
gersprite(testsprite, 0, 0, 21, 21);
x := 0;
y := 0;
xd := 1;
yd := 1;
white not keypressed do
begin
drawsprite(testsprite, x, y);
inc(x, xd);
inc(y, yd);
if (x = getmaxx - 20) or (x
xd := -xd;
if (y = getmaxy - 20) or
yd := -yd;
end;
readln;
clearviewport;
setcolor(green);
for i := 0 to 100 do
line(random(getmaxx), random(getmaxy), random(getmaxx),
random(getmaxy));
x := 0;
y := 0;
xd := 1;
xy := 1;
while not keypressed do
begin
drawsprite(testsprite, x, y);
inc(x, xd);
inc(y, yd);
if (x = getmaxx - 20) or (x
xd := -xd;
if (y = getmaxy - 20) or (y
yd := -yd;
end;
readln;
clearviewport;
setcolor(green);
for i := 0 to 100 do
line(random(getmaxx), random(getmaxy), random(getmaxx),
random(getmaxy));
x := 0;
y := 0;
xd := 1;
yd := 1;
while not keypressed do
begin
getsprite(backgroundsprite, x, y, x + 22, y +
drawsprite(testsprite, x, y);
ox := x;
oy := y;
inc(x, xd);
inc(y, yd);
if (x = getmaxx - 20) or (x
xd := -xd;
if (y = getmaxy - 20) or (y
yd := -yd;
drawsprite(backgroundsprite, ox, oy);
end;
drewsprite(testsprite, x, y);
readln;
close_graph;
end.
Программаның басында графикалық режим анықталғаннан кейін төрт қиылысқан
2. Шашка ойынын Паскаль программалау тілінде құру
2.1 Шашка ойнының түсінігі
Руские шашки ойынының ережесі.
1. Ойынға 2 ойыншы қатысады, ойынның басында олардың
Жай шашкалар екі тәсілмен жүре алады:
а) тыныш қадам – жай шашканы алдағы кез
ә)күрес – диогональ бойынша келесі алаң бос болса,
Суретте b6 ақ жай шашкасы күресті бітіріп 2
Дамканың жүрісі де екі түрлі болады:
а) тыныш қадам – диогональ бойынша барлық бағытта
ә) күрес –артындығы алаң бос болса, дамка диогональ
Егер жүріс ереже бойынша жасалмаса, дәл сол шашкамен
2. Ескертулер.
Күрес кезінде шашкалар жүріс біткеннен кейін алынып қалады.
Бұл кезде ақтардың жеңіп кетуіне керемет мүмкіндік бар.
Шашкаларға бір реттен артық соғуға болмайды.
Бұнда ақтар күрес жүргізетін жүрәстер берілген: : e1:c3:a5;
3. Ойынның мақсаты.
Соғу немесе қарсыластың барлық шашкаларын жауып тастау (жүріс
4. Нотация және белгілеу шарттары.
Шашка тақташасындағы әрбі алаң өзінің мағынасын білдіреді. Ол
Шашканың c3-тен d4-ке жүрген тыныш қадамы с3-d4 деп
11.a3-b4 d6-e5 жазылымы 11 жүріс кезінде ақ шашка
Сурет 3. Шашаканың тақташасы
2. 2 Шашка тақташасын құру
uses crt,graph;
procedure Kletka(x1,y1,c:integer;d:integer);
begin
Setcolor(c);
Setfillstyle(1,c);
Bar(x1,y1,x1+d,y1+d);
end;
var gd,gm,x1,y1,x2,y2,d1,i,j,r,x:integer;
begin
initgraph(gd,gm,'');
d1:=round((getmaxY-60)/8);{kletkanin uzundugu}
r:=d1 div 2;
x:=(getmaxX-8*d1-50)div 2;{taktashanin sol zhagu}
Setcolor(8);
Rectangle(x,1,x+8*d1+50,8*d1+60);{taktashanin konturu}
Setfillstyle(1,8);
Bar(x,1,x+8*d1+50,8*d1+60);{bayaimiz}
x1:=x+30;y1:=20;{а-8 kletkasinin sol zhak zhogargu burushi}
for i:=1 to 8 do
begin
for j:=1 to 8 do
if odd(i+j) then Kletka(x1+d1*(i-1),y1+d1*(j-1),15,d1)
else Kletka(x1+d1*(i-1),y1+d1*(j-1),0,d1);
end;
Setcolor(15);
for i:=0 to 7 do{ a..h koldenen zhazilimi}
outtextxy(x+30+d1*i+d1 div 2,450,chr(ord(i+97)));
for i:=7 downto 0 do{1..8 tiginen zhazilimi}
outtextxy(x+15,440-d1*i-d1 div 2,chr(ord(i+49)));
readln
end.
uses crt;
{1 kletka salamiz}
procedure Kletka(x,y,c:integer);
var i,j:integer;
begin
textcolor(c);
for i:=1 to 3 do{koldeneninen 3 sizik}
begin
gotoXY(x,y+i-1);
for j:=1 to 4 do{tiginen endi simboldar 4
write(#219);
end;
end;
var i,j,x,y,c:integer;
begin
clrscr;
{8х8 alanin salamiz}
for i:=1 to 8 do
begin
x:=1+(i-1)*4;
for j:=1 to 8 do
begin
if (i+j) mod 2=0 then c:=15 else c:=6;
y:=1+(j-1)*3;
Kletka(x,y,c);
end;
end;
readln
end.
Берілген есепте crt және graph модульдері қолданылған. Setcolor
Клеткалардың сол жақ жоғарғы және оң жақ төменгі
program Chess;
uses
Graph;
const
Size = 20;
var
grDriver, grMode, x, y: Integer;
begin
grDriver := Detect;
InitGraph(grDriver, grMode, 'c:/bp/bgi');
SetFillStyle(SolidFill, Blue);
FloodFill(1, 1, Black);
SetColor(Red);
for y := 1 to 8 do
for x := 1 to 8 do begin
if Odd(x + y) then
SetFillStyle(SolidFill, White)
else
SetFillStyle(SolidFill, Black);
Rectangle(x * Size, y * Size, (x +
FloodFill(x * Size + 1, y * Size
end;
ReadLn;
CloseGraph;
end.
{ekranga shaxmat taktashasin salamiz}
uses Graph
Var
x0,y0: integer; {koordinati lebogo berxnogo ugla doski}
x,y: integer; {koordinata lebogo berxnogo ugla kletka}
w: integer; {razmer kletki}
I,j: integer {nomer stroke u kolonki}
grDriver: integer;
grMode: integer;
ErrCode: integer;
Begin
grDriver := detect;
InitGraph(grDriver, grMode, ‘e:\tp\bgi’) ;
ErrCode := GraphResult;
If ErrCode = grOk then
Begin
X0:=100;
Y0:=100;
W :=25;
X:=x0;
Y:=y0;
For i:=1 to 8 do {vosem strok}
Begin
For j:= 1 to 8 do{vosem kletok b
Begin
{esli summa nomera stroke u nomera kolonki, na
If (( i+j) mod 2) = 0
Then SetFillStyle (SolidFill,Brown)
Else SetFillStyle(SolidFill,Yellow)
Bar (x,y,x+w,y+w) ;
X:=x+w;
Y:=y+w;
end;
readln;
end
CloseGraph;
End.
Берілген есеп массив арқылы құрылған. N мен S
type el=0..1;
var a:array[0..9,0..9] of el;
N,S,i,x,y:integer;
inp,outp:text;
begin
assign(inp,'input.txt');
reset(inp);
assign(outp,'output.txt');
rewrite(outp);
readln(inp,N);
for i:=1 to N do
begin
readln(inp,x,y);
a[x,y]:=1;
end;
S:=N*4;
for x:=1 to 8 do
for y:=1 to 8 do
if a[x,y]=1 then
begin
if a[x-1,y]=1 then dec(S);
if a[x+1,y]=1 then dec(S);
if a[x,y-1]=1 then dec(S);
if a[x,y+1]=1 then dec(S);
end;
writeln(outp,S);
close(outp);
end.
Қорытынды
Курстық жұмысымды қорытындылай келе Паскаль тіліндегі графикалық режимде
Функция графигін Паскаль программалау тілінде тұрғызу графикадағы өзекті
4.0 баламасынан бастап Турбо Паскальдың құрамына басқа баламаларда
Graph модулі көптеген графикалық операторлармен жұмыс істеуге мүмкіндік
Курстық жұмыстың барысында негізгі мақсат шашка ойынының программасын
Дисплейдің экранына динамикалық суретті шығару үшін кадрлардың жалғасқан
Қазіргі кезде компьютерлік ойындардың түрлері өте көп. Оларды
Қолданылған әдебиеттер тізімі
В.В. Фаронов Turbo Pascal учебное пособие, «Питер Пресс»
Н.С. Заурбеков, Б.Ж. Жұмажанова. Алгоритмдеу және программалау тілдері
Ж.Қ. Масанов Б.А. Бельгибаев, А.С. Бижанова, Қ.Қ. Мақұлов.
С. А. Немнюген. Turbo Pascal практикум – Санкт-Петербург
А.Н. Моргун. Решение задач средствами языка Turbo Pascal
Ю.А. Шпак. Turbo Pascal 7.0 на примерах Киев,
7. И.Г. Семакин.А.П. Шестаков, Основвы программирования -
Москва, баспасы «Мастерство» 2008.
8. Д. Гуденко, Д. Петрченко, Сборник задач по
Питер 2003.
9. Культин. Программирование в Turbo Pascal 7.0 и
10. Мухамбетова Ғ.Г. “Паскаль тілінен практикум”Орал, РИО 2006ж.
11. Ахо Альфред А., Хопкрофт Джон Э., Ульман
Вильямс,«Структуры данных и алгоритмы» - 2001.
12. О.П. Зеленяк, «Практикум программирования на Тurbo Pascal»
13. Федоренко Ю. М. «Алгоритмы и программы
2001.
14. С. А. Немнюген. Turbo Pascal учебник –
15. Turbo Pasсal в задачах и премерах. Санкт-Петербург
16. О.А. Меженный самоучитель Turbo Pasсal «Диалектика» 2003.
2
Х
Dx
A
Y
B
Dy