Pascal программалау тілінде “Шашка” ойынының программасын құру

Автор работы: Пользователь скрыл имя, 19 Ноября 2013 в 17:43, курсовая работа

Краткое описание

Қазіргі кезде жаһандық ақпараттандыру кезеңін бастан кешірудеміз. Бүгінде адамзаттың тыныс-тіршілігі электрондық құрылғылардың жұмысына негізделген. Ғылымда, медицинада, техникада, ғарыштануда және т.б. көптеген салаларда кездесетін электрондық аппараттар адам жұмысын күннен-күнге жеңілдетіп, дами түсуде. Сол себептен барлық салаларға электрондық құрылғылар негізіндегі машиналар мен автоматтар жаппай енгізілуде.

Содержание

Кіріспе..........................................................................................................................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

Прикрепленные файлы: 1 файл

Курстық жұмыс шашка.docx

— 56.34 Кб (Скачать документ)

 

Графиканы суреттеу кезінде  бағдарды экрандағы бастапқы бағытты  берілген бағытқа қарай орналастыруға  тура келеді. Ол үшін Турбо Паскальда MoveTo және MoveRel процедуралары қолданылады. MoveTo процедурасы координата бойынша бастапқыда берілген нуктені берілген нүктеге көшіреді. Жазылуы: procedure MoveTo (x, y : Integer) ;

х және у экрандағы бағдарша орналасатын координтаның нүктесі

MoveTo процедурасы бағдаршаны оның бұрынғы орнына байланысты берілген қашықтыққа орналастырады.

procedure MoveTo (Dx, Dy : Integer) ;

Dx және Dy – х және у координаталарының орын ауыстыруы.

Егер бағдарша (х, у) координатасындағы  нүктеде орналасса, онда MoveRel оған жаңа координаталарды белгілейді: (x+Dx, y+Dy). MoveTo және MoveRel процедураларының айырмашылығын келесі суреттен көруге болады.

 


 



 

Сурет 1. MoveTo процедурасы экранның сол жақ жоғары бөлігінен (х, у параметрлі), ал MoveRel процедурасы белгіленген бөліктен (Dx, Dy параметрлі) бастап санақ жүргізеді

 

Үлкен тіктөртбұрыш бұнда  экранның ауданын білдіреді. Бағдаршаны  А нүктеден В нүктесіне орналастыру керек деп есептелінеді. Егер осы жағдайда MoveTo параметрін қолданатын болса, онда процедурада параметрлер ретінде

х және у мәндерін хабарлау керек. Ал MoveRel процедурасына параметрі Dx және Dy болатындығы хабарланса, берілген бағдаршаны керек жерге орналастырады.

Графикалық терезелерді  құру. Графиктің шығуын тек жалпы экранға ғана емес, сонымен қатар терезе деп аталатын белгіленген облыста да шығаруға болатындығы белгілі болды. Турбо Паскальда графикалық режимде терезені құру үшін SetViewPort прцедурасы қолданылады. процедураның жазылуы:

procedure SetViewPort (x1, y1, x2, y2  : Integer; Clip : Boolean);

(х1, у1) – бұнда терезенің жоғарғы сол жағын анықтайтын координаталар; (х2, у2) – терезенің төменгі оң жақ бөлігін анықтайтын координаталар; Clip – терезеге сыймайтын суретті экранға шығуы тиістілігін анықтайтын параметр.

Clip параметрі TRUE және FALSE болатын екі мәнді қабылдайды. Graph модулінде анықталған мәнді екі тұрақты арқылы беруге болады, олар – ClipOn және ClipOff.

Const

      ClipOn   =True;

      ClipOff   = False;

  Егер Clip параметрі ClipOff мәніне ие болса, онда сурет терезеге толығымен шығатын болады. Ал егерде Clip параметрі ClipOn мәніне ие болса, онда суреттің белгілі бір бөлігі терезеге сыймай қалып, шеті бойынша қиылып қалады. Оның көрінісін келесі суреттен көруге болады.


 

 

 

 

 

 

Сурет-2. Сол жақ терезенің  Clip параметрі ClipOff мәнін, ал оң жақ терезе ClipOn мәні қабылдайды

 

Сызықтың суреті терезеде басталады және оның шегімен аяқталады. Сол жақ терезенің сызығы толығымен  көрінеді, ал оң жақ терезенің сызығы оның шеті бойынша қиылады.

Егер экранға тіктөртбұрышты тұрғызу керек болған жағдайда, ол үшін бөлек төрт сызықты шығарудың қажеті жоқ, бұл кезде арнайы Rectrange процедурасын қолданса жеткілікті. Rectrange процедурасы Сызықтарының түсі мен стилі берілген тіктөртбұрышты суреттейді. Процедураны жазылымы:

procedure Rectrange (х1, у1, х2, у2 : Integer);

Бұнда (х1, у1) және (х2, у2) координаталарымен  берілген тіктөртбұрыштың сол жақ  жоғарғы және оң жақ төменгі бұрыштары  берілген.

Bar процедурасы экранға  толтырылған тіктөртбұрыштарды  шығаруға көмектеседі. Жазылуы: procedure Bar(x1, y1, x2, y2 : Integer);

(x1, y1) және (x2, y2) тіктөртбұрыштың сол жақ жоғарғы, оң жақ төменгі бөлігіне сәкес келетін координаталар. Оларды толтыру үшін SetFillStyle және SetFillPattern роцедуралары арқылы орындалатын шаблондар мен түстер қолданылады.

Сонымен қатар шеңберді де экранға шығаруға болады. Ол үшін саны көп қырлы көпбұрышты тұрғызады. Бірақ Circle процедурасын қолдану арқылы жұмысты жеңілдетудің жолы бар. Процедураның жазылуы:

procedure Circle(x, y: Integer; Rad : Word);

Бұндағы (х, у) – центрдің координаталары,  Rad – шеңбердің радиусы. Шебердің іші SetColor процедурасының көмегімен боялады. Сонымен қатар сызықтың стилі де қолданылады, ол SetLineStyle процедурасы арқылы жүзеге асады, ескере кететін жайт сызықтың типі қандай болмасын шеңбер әрқашан тұтас сызықпен салынады.

 

1. 2 Спрайттар –  ойындар программасын құру

Программалауда анимация әсерлері көптеп пайдаланылады, яғни динамикалық қозғалыстағы суретті шығару үшін жүзеге асырылады. Бұл терминді статикалық (қозғалмайтын) суретке «жан біту» немесе «тірілуі» деп аударуға болады. «Жанды суреттер» компьютерлік графикада көңіл көтеру үшін қолданылуы мүмкін, оған компьютерлік ойындар мысал бола алады. Қазіргі заманға сай киноларды анимациялардың көмегімен тұрғызылған спецэфектткрдің қолдануынсыз елестету мүмкін емес секілді. Анимациялардың сонымен қатар бұданда зор жауапкершілікті талап ететін ғылыми және инженерлік графикада өзіндік қосымшалары бар.

Ағылшын тілдік арнайы әдебиетте  computer-assisted animation және computer-generated animation терминдері қолданылады. Бірінші жағдайда адамның дәстүрлі түрде анимацияның кадрларын құру туралы айтады, ал компьютер өтіп жатқан барлық кадрларды салып отырады. Бұнда қозғалыстағы суреттерді компьютердің өзі салып жатқандығы қызықтыра түседі.

Қозғалыстағы суреттің иллюзиясы  қозғалмайтын суреттің (кадрлардың) түрлі фазадағы жалғасқан қозғалысын көрсетеді. Суреттің ауысып отыруы тез жүру керек. Адамның көзқарасы кейбір инерцияларды қамтиды. Соған байланысты кадрлардың бірінен соң бірінің жалғасын табуы қалқып жүргендей әсер қалдырады. Егер суреттің алмасып отыруының жылдамдығы төмендейтін болса, онда қозғалыстың иллюзиясы сақталғанымен қозғалыс адамға үзікті көрінетін болады. Жоғары жылдамдық болып жылдамдығы секундына 30 кадрды көрсетуі болып табылады.

Дисплейдің экранына динамикалық  суретті шығару үшін кадрлардың жалғасқан қозғалысының шығуын программалау қажет. Бұл жағдайда кадрлардың алмасуы жеткілікті деңгейде жоғары болу қажет. Динамикалық программалаудың негізгі мәселелері осында жатыр. Егер әрбі кадр саны көп графикалық элементтерден, сонымен қатар стрибуттарынан тұратын күрделі суреттерден құралған болса, мысалы, жарықты реттеу шарты және т.б., онда бұл мәселені шешу қиынға түседі.

Анимацияларды программада  қолданудың оңай жолы ол – қарапайым  түрде графикалық экранға сурет  салу болып табылады. Осы әдіс cubes прогаммасында да қолданылады. Бұнда қарапайым суреттер пайдаланылады, алайда бұл жағдайда да суреттің тартыншақтап жылтаңдауын байқауға болады.

 

         1.3 Динамикалық қозғалыстағы суреттер

Динамикалық суреттерді программалаудың көп таралған тәсілдері спрайттарды қолдану болып табылады. Спрайттар әсіресе компьютерлік ойындарды программалауда жиі қолданылады. Спрайт әдебиеттерде динамикалық графикалық суреттерді құрайтын ақпараттық және программалық құраушысы ретінде анықталады. Спрайт экранда басқа суреттерден тәуелсіз қозғала алатын шағын көлемді гафикалық суреттерден тұрады. Спрайт негізгі суретті жауып тұру арқылы орналасады.

Ендеше спрайттың программалауын қарастыруға болады. Ең алдымен спрайттың  келесі түрдегі құрылыммен байланысты екндігін айта кету керек:

type

     SpriteType = record

          Height. Width : integer;

          Data                : pointer;

     end;

Бұл жазылымның жолы спрайттың  өлшемі туралы ақпараттан (оның биіктігі мен ені) және суреттің алып тұрған орнының жадына бағытталған бағдаршадан тұрады. Осы іс-әрекеттерді орындау үшін CreatSprite және KillSprite процедуралары қолданылады. Сонымен қатар бір ғана нүктені сақтау үшін 1 байт көлемінде жады кететіндіге болжам жасалған.

 

procedure CreateSprite(var Sprite : SpriteType; Width, Height : integer);

 

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;

Бұл берілген спрайттың құрылымына сәйкес спрайтты құру және жою оның алып тұрған жадында орын алумен немесе босатылуымен анықталады. Енді бұрыннан бар процедураны пайдаланып жады (GetSprite) түрінде болатын тікбұрышты үшбұрышты экранға шығарамыз, ал оның экранға шығарылуы (DrawSprite) арқылы жүзеге асады:

procedure getsprite (var sprite : spritetype; x1, y1, x2, y2 : integer);

 

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 : integer);

 

var

      index, xi, yi : integer;

 

begin

      index := 0;

      for  yi := 0 to sprite.height - 1 do

           for x := 0 to sprite.width - 1 do

           begin

                 putpixel (xi + x, yi + y, sprite.data^[index] ;

                 inc (index);

            end;

end;

Бұл процедуралардың біріншісі  экранның аумағында берілген әрбір  нүктенің түсін жай ғана жадыға сақтап отырады, ал екіншісі оған қарама-қарсы  әрекет жасайды. Көрсетілген процедуралардың  барлығы sprite программасында қолданылған, келесі есептен көруге болады.

Sprite программасы

program sprite;

 

uses

      crt, graph, graphs;

 

type

      byterraytype = array[0. .65534] of byte;

      bytearrayptr = ^bytearraytype;

      spritetype = record

            height, width : integer;

            data                : bytearrayptr;

      end;

var

      backgroundsprite, testsprite : spritetype;

      xd, yd, ox, oy, i, x, y          : integer;

 

procedure killsprite(var sprite : spritetype);

procedure createsprite(var sprite : spritetype; width, height : integer);

procedure getsprite(var sprite : spritetype; x1, y1, x2, y2 : integer);

procedure drawsprite(var sprite : spritetype; x, y : integer);

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 = -20) then

                xd := -xd;

            if (y  = getmaxy - 20) or (y = -20) then

                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 = -20) then

            xd := -xd;

      if (y = getmaxy - 20) or (y = -20) then

            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 + 22);

      drawsprite(testsprite, x, y);

      ox := x;

      oy := y;

      inc(x, xd);

      inc(y, yd);

      if (x = getmaxx - 20) or (x = -20) then

          xd := -xd;

      if (y = getmaxy - 20) or (y = -20) then

          yd := -yd;

      drawsprite(backgroundsprite, ox, oy);

end;

drewsprite(testsprite, x, y);

readln;

close_graph;

end.

Программаның басында  графикалық режим анықталғаннан  кейін төрт қиылысқан түзуден тұратын спрайт тұрғызылады. Бұл сурет жадыда сақталып, while not keypressed do... арқылы экранға қозғалып шығады. Циклдағы қосымша шартты операторлар спрайттың енгізудің шекаралық облысымен «соударение»сін шекарадан зеркальное отображение бағытында жөндеп отырады. Бірінші циклде қозғалыс бос кеңістікте орын алады, екінші циклде қозғалыс хаостық түрде орналасқан түзу сызық қиындыларымен толтырылған кеңістікте орындалады. Тіпті қатты қозғалмаған жағдайдың өзінде де қозғалыс қалқыма түрінде көрінеді. Екінші жағдайда спрайттың соңынан қаралау із қалдыруы жағымсыз реакцияның бірі болып табылады. Ал соңғы үшінші цикл егер де сурет белгілі бір құнды талап еткен жағдайда не істеу керек екендігін көрсетеді. Бұнда берілген шарт бойынша облыс фонынан құралатын екінші спрайтты енгізу керек. Содан қозғалыстағы спрайт түссіздене бастайды, бірақ қайта салып отыруға уақыт кетеді де сурет мерцаюший бола бастайды. Бұл жайсыздықтан құтылу үшін спрайт арқылы процедураның жұмысын оңтайландыру арқылы жүзеге асады. Осы бағыттағы шешуші қадам бұл – ассемблерде жазылған Паскаль тіліндегі программалау мен процедураларды қолданудан бас тарту болып табылады. Турбо Паскаль ассемблердің кодын қоюына мүмкіндік береді, бірақ бұл мүмкіндікті пайдалану үшін ассемблерде программалауды білу қажет.

 

2. Шашка ойынын  Паскаль программалау тілінде  құру

2.1 Шашка ойнынын  алгоритмдік түсінігі

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Қорытынды

 

Курстық жұмысымды қорытындылай келе Паскаль тіліндегі графикалық режимде шашка ойандарының программасын құру туралы көптеген мағлұмат алғанымды  айта кеткім келеді. Graph режимінің көмегімен іске асатындығы байқалды.

Функция графигін Паскаль программалау тілінде тұрғызу графикадағы өзекті тақырыптардың бірі болып табылады. Бұл арқылы графиканың программасын құрып қана қоймай, оның графикалық түрде әсемделген бейнесін, яғни суретін алуға, анимацияларды қолдануға және де ойын барысын құруға болады.

4.0 баламасынан бастап Турбо Паскальдың құрамына басқа баламаларда да өзгеріссіз қалатын Graph программаішілік  қуатты кітапхана орнатылған. Кітапхана, жалпы алғанда, 50-ден астам процедуралар мен функциялардан құралады, сонымен қатар, программистке графикалық экранда әртүлі басқару әдістерін ұсынады. Кітапханамен танысуды жеңілдету үшін оның құрамына кіретін процедуралар мен функциялар функционалдық принцип бойынша топталған.

Graph модулі көптеген графикалық операторлармен жұмыс істеуге мүмкіндік береді. Бұл модуль көмегімен тек сурет салып қана қоймай, оны қозғалысқа келтіретін бағдарламалар да құруға болады. Сонымен қатар, компьютер мүмкіндігіндегі барлық бояу түрлерін пайдаланып, әр түрлі тәсілдермен әрлеуге, мәтіндер жазуға болатындығына курстық жұмысымды зерттеу кезінде көз жеткіздім. Ал Graph модулінің өзі график тұрғызуға қажетті бірнеше негізгі функциялардан тұрады. GraphResult – қате орындалған графиктік операциялардың кодын шығарады, GetColor – функциясы ағымдағы түстің мәнін қайтарады, GetPixel – Х және У координаталары бойынша орналасқан нүкте түсінің кодын анықтайды, GetX және GetY – ағымдағы нүктенің тік және көлденең координаталар мәнін қайтарады, PutPixel – Х, У координатасындағы нүктелерді экранға шығару, Line – координатасы (Х1, Y1) болатын нүктелері (Х2, Y2) координатасының нүктелерін түзу жүргізу арқылы қосылуды іске асырады, Rectangle – тіктөртбұрыш жақтарымен, координата осьтеріне параллель координаталары (X1,Y1) және (X2, Y2) тіктөртбұрышының диогональдарының бірін анықтайды, Bar – боялған тіктөртбұрыш, Circle – (X, Y) нүктесіндегі шеңбердің центрі шығарылады (integer типті), Arc – экранға (X, Y) нүктесіндегі шеңбердің центрінің доғасы шығарылады, бұрыштары градуспен белгіленеді, ал доға сағғат тіліне қарсы бағытталады, сол секілді және тағы басқа функциялар мысал бола алады. Бұл функциялар әр түрлі типтерді қамтып, график тұрғызуға қажетті элементтерді толықтырып отырады.

Информация о работе Pascal программалау тілінде “Шашка” ойынының программасын құру