Жоспар №7975

Turbo Pascal тілінде Graph модулі мен графикалық функцияларды пайдаланып шашка ойынын құру

Сұрақ-жауап

Сұрағыңызға жасанды интеллект жауап береді

МАЗМҰНЫ Кіріспе..........................................................................................................................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 

Мәтінді көшіру үшін белсенді жазылым қажет.

Пайдаланушы ID: 229908

Жарияланған күні: