Lite-C Dersler Machera & Quadraxas

Embed Size (px)

Citation preview

IindekilerGiris ve Motoru tanimakDegiskenlerFonksiyonlarBitmaplar PanellerDigitler ve WindowButonlar ve SlidersDizgiler ve Yazilar3B koordinatlarCisimler, objelerDavranislarIsaretilerIIelse yapisiKlavyeFareHata AyiklamaIleri dzey hata ayiklamaNesneleri hareket ettirmeGamestudio'da IizikSprite kullanimiModel animasyonuBone Animasyonu 1Bone Animasyonu 2Degiskenler 2MultiplayerACKNEXTURKOns:Bu eviri normalae kitap a:enine sahip aegilai. Ancak baktim eviriler bir kitap kaaar u:un srm benae hepsini birletirmeye karar veraim. Herhalae u anaa GameStuaioyu en iyi bilen Trk Quaaraxas tarafinaan evirilmeye balanan ancak altinci aerste evirilmesi birakilan, orfinali George Pivru tarafinaan ya:ilmi bu Lite-c aerslerini Trkeye evirme ilemini 8 Kasim 2009 tarihinae tamamlaaim. Su anaa Gamestuaio programlama aili hakkinaa bulabilecegini: en aetayli Trke kaynak. Benim tavsiyem bukaynaga balamaaan nce C ya aa C programlama ailini grenmeni:. Ben C tavsiye eaiyorum nk C , C ailini ae kapsaaigi iin si:e aaha fayaasi olacaktir. Ayrica bu programlama aillerinaen bir tanesinigrenmeni:, bu kaynagi iki gn ierisinae hi:li bir ekilae grenmeni:i saglayacaktir. Ancak unutmayin bu kaynak Temel Lite-c programlama bilgisi iermekteair. Daha ayrintili bilgi iin yine George Pirvu tarafinaan ha:irlanan Acknex User Maga:ine (AUM)ve Gamestuaionun kenai Manualine bakmani:gerekmekteair. Koalari kopyala yapitir yerine kenaini: ya:arak uygulamani: harcaaigini: vaktin bir ok aaha verimli gemesini saglayacaktir. Son olarak Quaaraxasa Gamestuaioaaki abalarinaan aolayiteekkr bor bilirim. MACHERAAiklamalar:Bu kaynakta Quadraxas'in bazi ek dersleri ile birlikte 24 tane Lite-c(WED ve MED'den de anlatimlar iermektedir) dersi bulunmaktadir.Joystik dersi gerek duyulmadigi iin evrilmemistir. Dersler orjinali ile ayni sirada ilerlemektedir. Quadraxas ilk 6 dersi hazirlamistir. Quadraxas'in dersleri iin gerekli dosyalar 'Q-dosyalar klasrnde bulunmaktadir.Benim hazirladigim dersler iin ise kaynagin orjinalini asagidaki linkler kismindan indirmeniz gerekmektedir. Orijinal kaynaktaki Workshop 07 klasr ve sonrasindaki klasrlerde bulunan kod ve kaynaklari benim derslerim iinkullanabilirsiniz. Dersler iin Gamestudio'nun son srmn indirmeniz bazi kodlama degisiklerinden dogacak sikintilarin nne geecektir. Indirme linki yine linkler kismindadir.Linkler:Machera'nin dersleri iin Orijinal Lite-c Workshops : http://server.conitec.net/down/litec.zipGamestudio A7 7.80, 30 gnlk deneme srm: http://server.conitec.net/down/gstudiosetup.exeAcknexturk anasayIa: http://www.acknexturk.com/Conitec Gamestudio anasayIa: http://www.3dgamestudio.com/DIKKAT! Bu kaynak tamamen cretsiz olup dileyen herkes kullanabilir. Kaynagin baska yerlerdeyayinlanmasi ise http://www.acknexturk.com/lite-c-workshop linkine ynlendirmek kaydiyla serbesttir. Direk yayinlama KESINLIKLE YASAKTIR! Orijinal kaynagin tm haklari George pirvu'ya aittir.Gamestudio Contiec GmbH Tm haklar sakldr.Gamestudio Conitec GmbH All Rights Reserved. ACKNEXTURKDers 1: Motoru 1animak8u yaziyi okuyorsaniz buyuk lhLlmalle LlLe-C free veya A7 surumlerlnden blrlnl kurmu;sunuz demekLlr. 8a;laLLakl llkglll yerde Manual" ve SLu ScrlpL LdlLor" gruyorsunuz.Manual : 1um LlLe-C fonkslyonlarini ve aiklamalarini leren dkumanLasyon. lnglllzce olarak moLorda bulunanLumfonksylonlarinkullanimini anlaLir. 8ubelge 1urke yeLercume edllecek.ScrlpL LdlLr lse glrl; yazisinda grulen kodlari yazdigimiz,derledlglmlz haLalarini glderdlglmlz edlLr.Modellerlnlzl yapmak lln MLu(Model LdlLor) kullanablllrslnlz. Lger A7 kurduysaniz beraberlndegelml; olmali. ucreLslzLlLe-Csurumunukurduysaniz glrl; yazisindakl llnkdenMLul lndlreblllrslnlz.LveL, ;lmdl scrlpL edlLru (SLu)ain.llle->Cpen Liklayin ve CameSLudlo veya LlLe-C lree nln kurulu oldugu klasre gelln. work" lsmlnde blr klasr olmali glrln ve llnden small.c" lslmll dosyayi ain.////////////////////////////////////////////////////////////////////////////// small.c - small llLe-C example////////////////////////////////////////////////////////////////////////////vold maln()[// Load Lhe level named "small.hmp"level_load("small.hmp"), // now creaLe Lhe "earLh.mdl" model aL x = 10, y = 20, z = 30 ln our 3u worldenL_creaLe("earLh.mdl", vecLor(10, 20, 30), nuLL),// nuLL Lells Lhe englne LhaL Lhe model doesn'L have Lo do anyLhlng}?ukaridakllerl gruyor olmalisiniz. 1urke kar;iligi:////////////////////////////////////////////////////////////////////////////// small.c - kuuk llLe-Crnegl////////////////////////////////////////////////////////////////////////////vold maln()[// "small.hmp" lslmll levell yuklelevel_load("small.hmp"), // "earLh.mdl" modellnl 3u dunyanin x = 10, y = 20, z = 30 konumunda olu;Lur. enL_creaLe("earLh.mdl", vecLor(10, 20, 30), nuLL),// nuLL moLora modelln hlblr;ey yapmayacagini syluyor}8urada ye;llrenkLe yazilan ve 1urke'ye evlrdlglmlz kisimlar yorum(commenL)" dlr. ?orumlar, programcinin yazdigi kodlari aiklamasini, Lakimdakl dlger programcilara noLlar birakmasini, www.acknexLurk.com - Cuadraxas.LlLe-C uerslerlali;masini lsLemedlgl kodlari devre di;i birakmasini veya unuLmamak lln noL almasini saglar. 8unlar program derlenlrken es gelllrler. uerleylcl lln hlblr mana lermeze ve yorumun lerlgl derlemeyl ve programi eLkllemez. ?orumlarali;Lirilmazsadecekodabakanlnsanlarllnanlamlidir. uerlenlrken dlkkaLe alinmaz. 2 ;ekllde yorum yazablllrslnlz. - 8lrlnclsl ;eklldekl glbl// (lfL /" , shlfL+7) koydukLan sonra. // dan sonra yazacaginiz meLln yorum oldugunu anlayablleceglnlz ;ekllde edlLr Larafindan renklendlrllecekLlr.- lklnclsl /* ve */ arasina yorum yazmak . // sadece Lek saLirda yorum yazmamiza lmkan saglar. ok saLirli blr yorum yazarken veya blr kod keslmlnl devre di;i birakmak lsLedlglmlz bunlari /* ve */ arasina aliriz. 8unlarda yorum oldugu anla;ilacak ;ekllde renklendlrlllr.Aslinda yorumlari saymazsaniz numuzdekl kod 4-S saLirlik blr kod. 8una ragmen bu Lamamen ali;abllenblr llLe-cprogrami! LdlLrunusL kismindakl araubugundan dugmeslnebasarak ali;Lirmayi deneyln. 5u grunLuyle kar;ila;mi; olmalisiniz.8u rnek blr levelln nasil yuklendlglnl ve ob[enln nasil oldugunu gsLerlyor. kodumuz hlblr kuLuphane eklemedlglmlzde(nasil eklendlglnl greceglz) oLomaLlk olarak eklenen kuLuphaneler sayeslnde, alL+enLer lle Lam ekran moduna geeblllr, fS lle zunurluk degl;Llreblllrslnlz. 5lmdlllk hl 8lr;eyanlamami;olablllrslnlzkl, dogal olanidabu, endl;elenmeyln. Penuzhlblr;eyanlaLmadim zaLen.Per;eye numuzdekl derslerde deglneceglz. ,)Siradakl ders: uegl;kenlerwww.acknexLurk.com - Cuadraxas.LlLe-C uerslerlL|te-C Ned|r?LlLe-CkisacaCameSLudlooyungell;Llrme pakeLlnlnmoLoruAcknex'ln programlamadllldlr. 1eorlde normalC dlllnden hlblr farki yokLur,fakaL moLorazelblr kuLuphane,derleylclveedlLor bulunmasindan dolayi bazi nokLalarda farklilik gsLereblllr.Acknex kuLuphanesl moLorun yeLeneklerlnln blr llsLesl olarak du;unuleblllr. 8u kuLuphaneyl oyunumuza(programimiza) ekleyerek moLorun buLun zelllklerlnl kullanablllrlz. kisaca kuLuphaneler programimizin programda kullanilan fonkslyon/zelllk/yeLeneklerl bllmeslnl saglayan eklerdlr. uerleylcl lse kodumuzu maklne koduna dnu;Lurup yazdigimiz kodlari .exe hallne geLlren yazilimdir. Ld|torLdlLr kodlarimizi yazdigimiz gell;ml; blr meLln edlLru andiran blr araLir. ScrlpL LdlLor lsml verllen ara ;u ;ekllde grunur: LdlLrun kullanimi dlger edlLrlere gre baslLLlr. Ayarlardan renklerl ve fonLu degl;Llreblllrslnlz.Motorkullanacagimiz moLor CameSLudlokurulumuylagelenAcknex oyunmoLoru. MoLor oyun yapiminda lhLlya duyulabllecek blrok yeLenege sahlpLlr.(llzlk, arpi;ma Algilama,2d ve 3d zelllkler, MulLlplayer, Shader uesLegl vb.). MoLor ulrecLx9kullandigi veexederledlgl lln;uansadece Wlndows lln oyun gell;Llrmede kullanilablllyor. 2Cen Cyun SLudyosu ' nun yapmi; oldugu kabus22 ve C48oboL oyunlarida bu moLoru kullanmakLadir.www.acknexLurk.com - Cuadraxas.LlLe-C uerslerlDers|erPerhangl blr moLoru kullanmanin ve lsLedlglmlz oyunu yapmanin programlamadan geLlglnl zaLen blllyoruz. Acknex moLorunu kullanabllmek llnde LlLe-C yl kullanabllmek gereklyor. Lger zaLen C blllyorsaniz dogru yerdeslnlz. uerslerl hizli blr ;ekllde Lamamlayarak yolunuza koyulablllrslnlz. Lger daha nce hl programlama yapmadiysaniz endl;elenmeyln. ?ava; ba;lar ve programlamadan korkmazsaniz ba;langi sevlyeslnl aLlaLmak zor olmayacakLir. 8u a;amadan sonrada gerlsl orap skugu glbl gellr. 8a;langi sevlyeslnl aLlaLLikLan sonra bu l;l yapmak hem eglencell hem de merak uyandiricidir.Lger numuzdekl24 kuuk dersl lzlersenlz, daha nce hl programlama yapmami; olsaniz blle ba;langi sevlyeslnln usLunde LlLe-C greneblllrslnlz. Per ders lln yakla;ik 1 saaLe lhLlyaciniz olacak ama emln olun dersler blLLlglnde bunu yapLiginiza pl;man olmayacaksiniz. uerslerln odaginda oyun programlama var zlra LlLe-C ok buyuk oranda bllglsayar oyunu programlama lln kullaniliyor. 8u yuzden ba;langi ve hemen usLu a;amalari lln LlLe-C nln bu zelllklerl oyun programlama yeLeneklerl uzerlnde duracagiz. Ayni zamanda C dlll hakkinda bllgl vereceglz ama C kisminda fazla derlne lnmeyeceglz. 1eorlde ve praLlkLe LlLe-C ve C blrblrlne ok benzer oldugundan geerll C bllglnlz varsa bu derslerl daha kisa surede sadece MoLor speslflk kisimlarini grenerek Lamamlayablllrslnlz.Per ders Lam ali;an kodda lerecek. 8u kodlari ali;Lirabllmek lln en az A7.07 veya ucreLslz LlLe-C 1.07 verslyonu gereklldlr. Lger LlLe-C den ali;maya ba;layacaksiniz, A7 Lrlal surenlzl kullanmak yerlne, LlLe-C ucreLslz surumu Lerclh edeblllrslnlz. ucreLslz surum zelllk kisiLlamadir ama ba;langi lln yeLerlldlr ve sure kisiLlamasi yokLur. WLu kullanimina geeceglnlz zaman 1rlal surum kullanmaya ba;larsiniz. MLu (Model LdlLr) ucreLslz blr yazilimdir. LlLe-C free ve ucreLslz MLu ;u adreslerden lndlrlleblllr:A7 ueneme Surumu : hLLp://server.conlLec.neL/down/gsLudlo_seLup707.exeLlLe-C lree : hLLp://server.conlLec.neL/down/llLec_seLup.exeModel LdlLor lree:hLLp://server.conlLec.neL/down/med_seLup.exeDers 8a|ik|ari ]u ]ek||de:MoLoru 1animakuegl;kenlerlonkslyonlar8lLmaplar ve anellerSayilar ve encerelerSLrglnler,yazilar ve fonLlarozlsyon,ai,boyuLCb[eleruavrani;larolnLerlarlf-Llse kullanimiklavyeyl kullanmakMouse kullanmak ve Mouse LvenLlerl!oysLlck kullanmak8uglardan kurLulmakllerlduzey uebugglngCb[e ParekeLlllzlk MoLoruSprlLe ve Anlmasyonlu SprlLelarModeller ve Anlmasyonlu Modelerllerl uuzey Anlmasyon, kemlkler(8one)1he 8one CollecLorClobal ve ?erel uegl;kenlerl Anlamakwww.acknexLurk.com - Cuadraxas.LlLe-C uerslerlDers 2: Deg|ken|er8lr degl;ken bllglsayarinizin belleglnde yer edlnlr ve belll blr lsme sahlpLlr. llnde belll sayilari saklayablllr ve bu lsml sayeslnde ula;ilir/kullanilir. Crnegln,var merm| = 7,var sag||k,var hak = 3, ]] oyuncunun 3 hakki var8u blrka kuuk saLir lln syleyeblleceklerlmlz:1) uegl;kenler kullanilmadan nce var anahLar kellmesl kullanilarak Lanimlanmalidir. Lger Lanimlamadan nce sag||k = 100,dersenlz, moLor sagllk kellmeslnln ne oldugunu bllmedlglnden kodunuz derleme sirasinda haLa verlr ve ali;maz.Not. Notmol c JllloJekl lot,looq,floot,Jooble qlbl ooobtot kellmeletJe qeetllJlt. 2) uegl;kenlere llk deger aLayablllrslnlz. var merm| = 7,dedlglnlzde merml degl;kenl Lanimlanir ve llnde 7 degerlnl LuLar. Ama bunu yagmak ;arL deglldlr. var sag||k, yazdigimizda sagllk degl;kenl Lanimlanir ama blr llk degerl yokLur.3) kodumuza yorum" ekleyeblllrlz.var hak = 3, ]] oyuncunun 3 hakki var da // dan sonrakl kisim yorumdur ve ne yazarsa yazsin kodun ali;masinda blr degl;lkllk meydana geLlrmez. 8unu blr ncekl dersLe aiklami;Lim.4) Per Lanimlama l;l , (nokta|i v|rg|) lle blLer. ogu yenl ba;layan bunlari koymayi unuLLugu lln garlp haLalar alir.S) var lle Lanimlanan degl;kenler en fazla 6 hanell(+en fazla 3 vlrgulden sonra) sayi LuLablllr. ?anl var degl;kenler en fazla 999999.999 en az -999999.999 olablllrler. Lger daha buyuk/kuuk sayilara lhLlyaciniz varsa c/c++ dakl dlger degl;ken Lurlerlnl(lnL,long,double vb.) kullanablllrlsnlz. 8u ders serlslnde var" uzerlnden gldeceglz.6) uegl;kenler blr harf veya _ lle ba;lamak zorundadir. uegl;ken lslmlerl rakam lle ba;layamaz Parf,sayilar ve _ di;inda slmge ve 1urke karakLerler(C,,;5,il,gC,uu) leremez.var _zeka,var para,var c4_say|s|,var #89zs, ]] sembo| |er|yorvar 12.savasc|, ]] sayi ||e ba|amivar sag|ik, ]] 1rke karakter.?e;ll olanlar geerll kirmizi olanlar geerslz degl;ken lslmlerldlr.7) uegl;ken lslmlerl buyuk/kuuk harf duyarlidir. var neadShotSay|s|,var headshotsay|s|,var nLADSnC1SAISI,uegl;kenlerlnln her blrl farkli degl;kenler olarak algilanir.8) Son olarak, degl;kenlerlnlze manLikli lslmler vermek her zaman yarariniza olacakLir. var sadasd,var _x_azx_1, var |33212, var xtwq, glbl lslmler yelnevar konum, var puan, var ka|kan, glbl degl;kenler kullanmak kod yazmanizi ve lslmlerlhaLirlamazini kolayla;Lirir.www.acknexLurk.com - Cuadraxas.LlLe-C uerslerlekala, bu kadar Leorl yeLer blrazda bu degl;kenler nasil l;llyor onu grellm.8u dokumanla beraber gelen ders2.c dosyasini SLu lle ain.Ayarlarinizin dogru olup olmadigini konLrol eLmek lln, CpLlons-> references-> LnvlromenL sekmeslne gelln ve en alLLakl use CurrenL llle for 1esL 8un" seeeglnln l;areLll olduguna emln olun. 8u seenek LesL run" (ara ubugundakl slyah ok) dugmeslne basLiginizda o an aik olan dosyanin ali;Lirilmasini saglar. Lger ayarlariniz Lamamsa LesL run" dugmeslne Liklayin ve kodu ba;laLin.MoLor ali;acak ve kar;inizda kirmizi blr ekran bellrecek. kirmizi olmasina aldirmayin kod da byle ayarlandigi lln kirmizi oldu. korkmayin llerlkl derslerde nasil farkli renk ayarlandigini greceglz. enceremlz:?eLerlnce heycanlandirici degll :u 1ab a basin ve konsola ain(8unu programlamadik Lablkl, ncekl dersLe kodumaza ba;ka blr kuLuphane eklemezsek sLandarL zelllklerln bulundugu blr kuLuphane eklenlr deml;Llm. 1A8 a basinca ailan konsol bu kuLuphanenln eserl. 1ab Lu;u sol LarafLakl CapsLock Lu;unun uzerlndekl). konsola a = S, yazip enLere basin, 1A8 a Lekrar basip konsolu glzleyln. a ve c S oldu.www.acknexLurk.com - Cuadraxas.LlLe-C uerslerl1A8 a Lekrar basin ve varolan yaziyi slllp yerlne b = 3, yazip LnLer a basin.Anlamli gelmeye ba;ladi mi? C , a lle b nln Loplami glbl duruyor. a ve lln farkli sayilar deneyln lkna olacaksiniz ,) LSC ye basarak moLor pencereslnl kapaLin ve moLorumuzu ufak blr hesap maklnesl yapan koda bakmaya ba;layalim...////////////////////////////////////////////////////////////////////var a = 0,var b = 0,var c = 0,/////////////////////////////////////////////////////////////////////AnLL* panulsplay =[dlglLs(3S, 10, "a = 0.f", *, 1, a),dlglLs(3S, 19, "b = 0.f", *, 1, b),dlglLs(3S, 28, "c = 0.f", *, 1, c),flags = vlSl8LL,}/////////////////////////////////////////////////////////////////////funcLlon maln()[vldeo_mode = 1, // grunLuyu 320x200 e ayarlarscreen_color.red = 1S0, // ve arkaplanini kirmizi yap.whlle (1)[c = a + b,walL (1),}}www.acknexLurk.com - Cuadraxas.LlLe-C uerslerlClamaz!!?!! 8udane?MerakeLmeylnblzkodunsadecemav|olankismiylallglleneceglz. ulger kisimlar llerldegreceglmlz, yazilari vedegl;kenlerl ekranda gsLermel;lnl yapiyor. ?anl blzlm llgllendlglmlz kisimlar:var a = 0,var b = 0,var c = 0,8uraya kadar olan kismi dersln ba;inda grdugumuz baslL degl;ken Lanimlari. Pepslne Lanimlanirken llk deger olarak 0 (sifir) verllml;. llk ali;Lirdigimizda Lum degl;kenlerl 0 olarak grmemlzln sebebl bu. ArLik blr degl;kenl oyunumuzda kullanirken nasil Lanimlayacagimizi blllyoruz.c = a + b,Pmm... 8uda olduka baslL c degl;kenlnl a ve b degl;kenlerlnln Loplamina e;lLllyor. kuuk blr deney yapin ve c = a + b, dekl +(arLi) l;areLlnl -(eksl) lle degl;Llrln, ali;Lirin(LesL run) ve a lle b ye degerler verln.8ekledlglmlz glbl ali;iyor. ArLik Loplama yerlne ikarma l;leml yapiliyor ve c ye e;lLlenlyor. ArLik llLe-c nlndegl;kenlerlnl grendlk. uegl;kenlerellkdeger aLanablleceglnl syleml;Llkdegll ml?8akalim gerekLen dogru mu bu? kodda degl;lkllk yapin ve ;u hale geLlrln(sifirlar yerlne farkli degerler glrln):var a = 20,var b = 1S,var c = 0,www.acknexLurk.com - Cuadraxas.LlLe-C uerslerlMoLor yenl degerlerl okudu ve llk ali;mada 20 den 1S ikarip c ye e;lLledl.Ayni ;ekllde arpma lln* blme llnde ] l;areLlnl kullanablllrslnlz. c = a + b, yerlne daha karma;ik blr;eyler yazablllrdlk ama bu kadar yeLerll, slsLeml anladiginizi Lahmln edlyorum. 8lrazda ba;ka ;eylerden bahsedellm.funcLlon maln ln alLindakl vldeo_mode = 1, // grunLuyu 320x200 e ayarlarscreen_color.red = 1S0, // ve arkaplanini kirmizi yap.SaLirlarini grdunuz mu? LlLe-c de lkl e;lL degl;ken vardir nceden tanim|i ve ku||anici tanim|i. 8azi degl;kenler moLor programlanirken Lanimlanmi;Lir, bunlar nceden Lanimli degl;kenlerdlr ve moLorun bazi zelllklerlnlkonLrol ederler. Crnegln v|deo_mode nceden Lanimli blr degl;kendlr ve moLorun ekraninin zunurlugunu bellrler(benlm rneglmde 320x200). 8u degl;ken 1 lle 11 arasida deger alir.(Pangl degerln hangl zunurluge denk geldlglnl grmek lln kod uzerlnde vldeo_mode a Liklayin ve edlLrun alL kismindakl Command Pelp" e bakin.).screen_co|or lse zel blr Lur(vekLr - llerdegreceglz) degl;kendlr ve3Lane(red- green-blue) degeralir. screen_colorred(kirmizi), green(ye;ll) ve blue(mavl ) uzerlnden ekran renglnln degl;Llrlmeslnl saglar. 8en sadece red(kirmizi) blumunu kullandim, kendlnlz dlger gelerlede oynayarak lsLedlglnlz rengl ayarlayablllrlsnlz.scteeo_colot.teJ = 150, nln alLina scteeo_colot.qteeo= 150,ve scteeo_colot.bloe = 150,ekleyln ve 1S0degerlerlyle (herblrl farkli olablllr) oynayarak rengl degl;Llrmeyl deneyln. Anlayamadiysaniz merak eLmeyln vekLrlere sonra deglneceglz. Cnceden Lanimli degl;kenlerln Lam llsLesl Manual" de bulunablllr.lazlayerle;medlysemerakeLmeylnllkba;Laanlamakzordurvebukadarbllglylevereblleceglmlz rneklerdeokkisiLli oldugundanLamanlayamami;olablllrslnlz. llkkezokuyorsanizblrkezdaha okuyun ok daha fazla yerle;ecekLlr. (8azi fllmlerl 2. kez lzledlglnlzde daha ok anlamaniz glbl.)Siradakl ders: lonkslyonlarda gru;mek uzere,lyl ali;malar, - Cuadraxaswww.acknexLurk.com www.acknexLurk.com - Cuadraxas.LlLe-C uerslerlDers 3: Ionks|yon|ar8u dersLe programlama yaparken en sik kullanacagimiz gelerden fonkslyonlari greceglz. 8lr rnekle ba;layalim,funct|on top|ama_yap(){a = 3,b = S,c = a + b,}lonkslyonlar var glbl moLor gelerlnl leren LlLe-C komuLlari dlzlsldlr.8u blrka kuuk saLir lln syleyeblleceklerlmlz:1)lonkslyonlarfunct|onanahLar kellmeslnl Laklpedenblr lslmveblr lfL paranLez() kullanarak Lanimlanir. aranLezler fonkslyona ek parameLreler gemek lln kullanilir ama ;u anda blz paramLre kullanmadigimiz lln aralari bo;.Not. Notmol c JllloJekl lot,looq,floot,Jooble qlbl ooobtot kellmeletJe qeetllJlt. lookslyoolotN1l1*,51klNC*qlbl mototobjeletlolJeJooJoteblllt.oJooJotoleosoytlotvotolotok Jooet. ooobtot kellmesloe motot objeletlJooJotoleblllt.(uooJotme tetotooolottlocok.)2)lonkslyonun lerlgl{ }paranLezlerl arasidir. 8uraya fonkslyonun gvdesl, fonkslyonun ll vb. de denlr.3)lonkslyonun gvdesl blr veya daha fazla llLe-c deylml lerlr. ueylmler , (nokLali vlrgul) lle blLer.4) uegl;ken lslmlerl Lanimlamadakl kurallar fonkslyonlar llnde geellrdlr.S) 8lr fonkslyon ve blr degl;ken ayni lsme sahlp olmamalidir. PaLalara neden olur.5lmdl ya;imiza gre Loplamya;adigimiz gun sayisini hesaplayan blr fonksylon yazmayi deneyellm. Cnce 8lrka degl;ken Lanimlamamiz gerekecek :var yas|m = 19, ]]yi| o|arak yaim.var y||dak|_gun_say|s| = 36S, ]]b|r yi|dak| gn sayisivar top|am_gun, ]]bunu hesap|ayacagiz, ka gn yaadigimiz.Penuz daha nce grmedlglmlz blr ;ey yapmadik. 3 Lane degl;ken Lanimladik, lklslne llk deger verdlk ve blrlne vermedlk. ?e;ll yazilarin yorum oldugunu unuLmayin. ,funct|onanahLar kellmeslyle ba;layacagimizi blllyoruz. 8en fonkslyonun adina gun_hesapla koyuyorum.funct|on gun_hesap|a(){aranLezlerl koymayi unuLmadimve{ekledlm. ArLikfonkslyonumunlerlglnl yazablllrlm. ?a;adigimiz gun sayisini hesaplayacagimiza gre ya;imiz lle blr yildakl gun sayisini arpmamiz gerek. ?anl:top|am_gun = 19 x 36S5lmdlde 19 ve 36S yerlne nceden bellrledlglm degl;ken lslmlerlnl yazarsam:www.acknexLurk.com - Cuadraxas.LlLe-C uerslerltop|am_gun = yas|m x y||dak|_gun_say|s|LlLe-c ye benzemeye ba;ladi ama lkl nemll nokLa:- LlLe-c de (ve C,C++,!ava,P glbl dlllerde) arpma yapmak lln xdegll*kullaniriz.- ?lnde bu dlllerde her l;lem ve Lanimlama , lle blLer deml;Llk.5lmdl buna gre duzenleme yaparsak:funct|on gun_hesap|a(){ top|am_gun = yas|m * y||dak|_gun_say|s|,}lonkslyonum sadece bu l;l yapacagi lln arLik l;l blLLl ve yapacagi l;lemlerl yazdigim kismi yanl gvdeslnl } kapaLLim.8u fonkslyonun ali;ip ali;madigini deneyebllmek lln dersln yaninaders3.cdosyasini ekledlm. 8u dosyayi sed lle ain, ;yle blr kod lle kar;ila;acaksiniz:#lnclude #lnclude ////////////////////////////////////////////////////////////////////var yaslm = 19,var ylldakl_gun_saylsl = 36S,var Loplam_gun, // hesaplayacagimiz sayi////////////////////////////////////////////////////////////////////AnLL* pulsplay =[dlglLs (10, 10, S, *, 1, Loplam_gun),flags = vlSl8LL,}/////////////////////////////////////////////////////////////////////okLakari;ikdegll. 8lrazncebahseLLlglmlz3degl;kenvehalagrmedlglmlzblrAnLL. 5lmdlllksadecebununekrandaLoplam_gundegl;kenlnl gsLerdlglnl bllmenlzyeLerll. 8lrkaders sonra anellerln ne oldugunu greceglz. 5lmdl konumuz fonkslyon oldugundan ve sonucu grebllmek lln ekranda yazdirilmasi gerekLlglnden bunu ekledlm.www.acknexLurk.com - Cuadraxas.LlLe-C uerslerl?azdigimiz fonkslyonu ders2.c nln alLina ekleyellm. 5unu elde edeceglz:#lnclude #lnclude ////////////////////////////////////////////////////////////////////var yaslm = 19,var ylldakl_gun_saylsl = 36S,var Loplam_gun, // hesaplayacagimiz sayi////////////////////////////////////////////////////////////////////AnLL* pulsplay =[dlglLs (10, 10, S, *, 1, Loplam_gun),flags = vlSl8LL,}///////////////////////////////////////////////////////////////////// funcLlon gun_hesapla()[Loplam_gun = yaslm * ylldakl_gun_saylsl,}5lmdl(LesL run) dugmeslne basarak kodumuzu deneyellm. ali;Li... Ama hlblr ;ey olmadi. Sadece slyah blr ekran ve blr sifir. lonkslyonu dogru yazdigimizdan emlnlz pekl problem ne?lonkslyonlar LanimladikLan sonra l;lerlnl yapabllmek lln kullanilmalari (agrilmalari) gereklr. Aynen blr arabanin fren yapmasi lln frene basmak gerekmesl glbl. Arabanin fren yapabllme kablllyeLl vardir ve gerekll donanim arabada mevcuLLur ama frene basmadika araba yava;lamaz. 8lzde burada funcLlon gun_hesapla() yi yazarak arabamiza gun hesaplamak lln gerekll donanimi verdlk ama henuz arabamizin bu zelllglnl kullanmadik. ekl bunu nasil yapacagiz? 8lr ok fonkslyonum olsa program hangl l;leml nce yapar, sirasini nasil bellrlerlm?LlLe-C ,C,C++,[ava glbl dlllerde komuLlar ma|n() adi verllen zel blr fonkslyondan l;lenmeye ba;lar. maln lsml nceden Lanimlidir ve bu fonkslyonu yazdigimizda LlLe-C saLirlari l;lemeye buradan ba;layacagini blllr. Aynen dlger Lum fonkslyonlar glbl lkl paraLez[ } ler ve gvdeye sahlpLlr. ?azdigimiz oyun/program maln ln llndekl(gvdeslndekl) llk saLirdan ba;lar ve sonrakl saLirlardan devam eder. www.acknexLurk.com - Cuadraxas.LlLe-C uerslerlmaln fonkslyonunu kodumuza ekleyellm:#lnclude #lnclude ////////////////////////////////////////////////////////////////////var yaslm = 19,var ylldakl_gun_saylsl = 36S,var Loplam_gun, // hesaplayacagimiz sayi////////////////////////////////////////////////////////////////////AnLL* pulsplay =[dlglLs (10, 10, S, *, 1, Loplam_gun),flags = vlSl8LL,}///////////////////////////////////////////////////////////////////// funcLlon gun_hesapla()[Loplam_gun = yaslm * ylldakl_gun_saylsl,}funcLlon maln()[screen_color.red = 128,gun_hesapla(),}8lr;eyler uyandirdi mi? l;lemler malnden l;lenmeye ba;ladigina gre frene basmak lsLedlglmlzl buradan sylememlz gerek. screen_color.red = 128, daha nce yapLigimiz glbl ekrani kirmizi yapiyor.Malnln llne ekledlglmlz gun_hesapla(), saLiri blzlm fonkslyonumuzu agirmamizi sagliyor. lonkslyonlar agrilirken herhangl blr anahLar kellme kullanmazlar. 8lz zaLen gun hesapla fonkslyonu Lanimladigimiz lln arLik moLor onun ne oldugunu blllyor ve blz gun_hesapla(), dedlglmlzde gun_hesapla lslmll fonkslyonun llk saLirindan ali;maya ba;liyor. , vlrgul koymayi unuLmuyoruz. 5lmdl Lekrar ali;Liralim.Aldigimiz grunLu:www.acknexLurk.com - Cuadraxas.LlLe-C uerslerlve fonkslyonumuz ali;Li.lonkslyonlar ve degl;kenler konusunda nemll blr nokLa:8lldlglmlz glbl degl;kenlerl kullanmadan nce Lanimlamamiz gereklyordu. Aynisi fonkslyonlar llnde geerll. ?azdigimiz kod blr klLap glbl en ba;indan okunmaya ba;lar ve moLor malnl grdugun, l;Le maln bunun ne oldugunu blllyorum" der ve ali;Lirmaya ba;lar. Malnln orLasinda gun_hesapla(), dlye blr fonkslyon agrisi lle kar;ila;irsa ve blz bu fonkslyonu malnden sonra Lanimladiysak veya Lanimlamadiysak, moLor gun_hesapla da ne? 8llmlyorum." der ve haLa verlr. Ama eger malnden nce Lanimlarsak zaLen oraya kadar okudugu lln gun_hesapla nin ne oldugunu blllyordur, fonkslyonun gerekLlrdlgl l;lemlerl yapar. ekl ya blr fonkslyonu kullandigimiz yerden sonra Lanimlamak zorunda kalirsak veya A ve 8 adinda lkl fonkslyonumuz varsa ve A 8 yl, 8 A yi agiriyorsa? lonkslyonlar A-8 ;ekllnde siralarsak 8 aisindan problem yokLur ama A fonkslyonu llnde 8 agrisini grdugunde 8 ye henuz gellnmedlglnden ne oldugunu bllemez ve haLa aliriz. 8-A ;ekllnde yaparsak da 8 aisindan problem olu;ur. 8unu zmek lln protot|plerl kullaniriz. Cncellkle gun_hesapla()[ .... } fonkslyonunu malnln alLina (malnden sonra) alalim. ve nasil blr haLa lle kar;ila;acagimizi grup, bu haLayi proLoLlp kullanarak zellm.www.acknexLurk.com - Cuadraxas.LlLe-C uerslerl#lnclude #lnclude ////////////////////////////////////////////////////////////////////var yaslm = 19,var ylldakl_gun_saylsl = 36S,var Loplam_gun, // hesaplayacagimiz sayi////////////////////////////////////////////////////////////////////AnLL* pulsplay =[dlglLs (10, 10, S, *, 1, Loplam_gun),flags = vlSl8LL,}/////////////////////////////////////////////////////////////////////funcLlon maln()[screen_color.red = 128,gun_hesapla(),} funcLlon gun_hesapla()[Loplam_gun = yaslm * ylldakl_gun_saylsl,}gun_hesapla fonkslyonunu maln ln alLina aldik. ali;Lirdigimizda alacagimiz haLa:www.acknexLurk.com - Cuadraxas.LlLe-C uerslerluerleylcl gun_hesapla ya denk geldl ve gun_hesapla ya daha nce rasLlamadigindan ve ne oldugunu bllmedlglnden haLa verdl. ekl proLoLlp nedlr? nereye ve nasil yazilir?#lnclude #lnclude funct|on gun_hesap|a(), ]]protot|p| buraya ek|ed|m////////////////////////////////////////////////////////////////////var yaslm = 19,var ylldakl_gun_saylsl = 36S,var Loplam_gun, // hesaplayacagimiz sayi////////////////////////////////////////////////////////////////////AnLL* pulsplay =[dlglLs (10, 10, S, *, 1, Loplam_gun),flags = vlSl8LL,}/////////////////////////////////////////////////////////////////////funcLlon maln()[screen_color.red = 128,gun_hesapla(),} funcLlon gun_hesapla()[Loplam_gun = yaslm * ylldakl_gun_saylsl,}roLoLlpler fonkslyonumuzun gvdesl olmayan Lanimlaridir. roLoLlp derleylclye byle blr fonkslyonun var oldugunu ama henuz Lanimlamadigini syler. roLoLlpler(ayni zamanda fonkslyonlarda) ba;ka blr fonkslyonun llnde yer alamaz.Plblr [ } arasinda deglldlr. 8unun di;inda proLoLlpler herhangl blr yere yazilablllr(Lablklagrildigi yerden nce :) ) ama sayfanin en ba;ina yazilmasi hem l;lnlzl kolayla;Lirir hemde duzenll olur. 8lr fonkslyonu slldlglnlzde proLoLlplerl nerdeydl dlye aramaniza gerek kalmaz. roLoLlpler usLLe gruldugu glbl funcLlon anahLar kellmeslnl fonkslyonumuzun adini ve () lerlnl lerlr ve nokLali vlrgul lle son bulur. [ } lermez. l;Le bunlara roLoLlp" veya fonkslyonun ba;ligi denlr.www.acknexLurk.com - Cuadraxas.LlLe-C uerslerlekala ;unlar ne demek:#|nc|ude #|nc|ude 8unlar llk dersLe kisa olarak bahseLLlglmlz, kodumuza ba;ka kodlari ekleme l;lnl yapiyor. lnglllzcede lermek manasina gelen lnclude" kellmesl yardimiyla ba;ka kodlari kendl kodumuza ekleyeblllrlz.8u saLirlar l;leLlleblllr saLirlar deglldlr. 8unlar derleme l;lemlne ba;lanmadan nce derleylclye bu kodlari benlm koduma ekledememlzl saglar. ve derleylcl de sankl o dosyalardakl kodlar blzlm kodumuzda Lam olarak lnclude kullandigimiz yerde yaziliymi; glbl davarnir ve o ;ekllde derler. Acknex.h dosyasinda moLorda nceden Lanimli olan Lum fonkslyonlarin proLoLlplerl yer alir. 8u sayede blz moLorda Lanimli blr fonkslyonu kullandigimizda byle blr fonkslyon oldugunu blllr ve bunlari ali;Lirir. (Acknex.h La proLoLlplerl olan fonkslyonlari moLor aik kaynak kodlu olmadigi lln gremeylz. Acknex.h da proLoLlplerl bulunan Lum fonkslyonlar derlenml; halde gamesLudlo klasrundekl acknex.dll" dosyasinda bulunur.)defaulL.c nln lse blzlmde yazablleceglmlz herhangl blr llLe-c doyasidir. 8u dosyada her programi LesL ederken l;lmlze yarayacak kalipla;mi; fonkslyonlar bulunu.lS e basinca zunurluk degl;mesl, esc ye basinca moLorun kapanmasi, f11 lle lsLaLlsLlk ve lS panelelnln ikmasi, kamera sablLse 0 a basip harekeLe gelrllebllmesl glbl genel fonkslyonlar lerlr. ?azigidigimiz programlar lln hayaLl deglldlr. Lklenmesl ;arL deglldlr.8u seferllk bu kadar yeLer, parameLre alabllen fonkslyonlari da anlaLacakLim fakaL bu ders yenl ba;layanlar lln yeLerlnce uzun ve yorucu oldu blle. 8lr dahakl sefere bu dersln devami oalrak kisa blr ;ekllde parameLre alan fonkslyonlari anlaLip, sonrakl dersLe aneller ve 8lLmaplar" konusundan devam edeceglz.Siradakl ders: arameLre Alabllen lonkslyonlarda gru;mek uzere,lyl ali;malar, - Cuadraxaswww.acknexLurk.com www.acknexLurk.com - Cuadraxas.LlLe-C uerslerl CS D I D D u l C C A ? A 8 8 nc1ude acknexh nc1ude de1au1tc 1uncton gunhesap1a prototp buraya ek1edn var yasn var y1dakgunsays var top1angun hesap1ayacaginiz sayi ^uLl p0sp1ay dgts top1angun 11ags v1S18lL 1uncton nan screenco1orred gunhesap1a 1uncton gunhesap1a top1angun yasn y1dakgunsays AnLL5 8 v 5 CS L 1uncton nan screenco1orred gunhesap1a yasn yasini yap gunhesap1a L l ? u A A8AML18LLL8 1uncton nan screenco1orred gunhesap1a gunhesap1a 5 l 8 ?A5v 8 1uncton gunhesap1avar yas top1angun yasn y1dakgunsays 8 u CS C A C A 1uncton gunhesap1avar top1angun y1dakgunsays A nc1ude acknexh nc1ude de1au1tc 1uncton gunhesap1a prototp buraya ek1edn var yasn var y1dakgunsays var top1angun hesap1ayacaginiz sayi ^uLl p0sp1ay dgts top1angun 11ags v1S18lL 1uncton nan screenco1orred gunhesap1a gunhesap1a 1uncton gunhesap1avar yas top1angun yas y1dakgunsays 5Lgunhesap1a ve gunhesap1a8 CS 8 1uncton gunhesap1avar yas n1uncton gunhesap1avar A D C C 8 8v A nc1ude acknexh nc1ude de1au1tc 1uncton gunhesap1a prototp buraya ek1edn var y1dakgunsays var top1angun hesap1ayacaginiz sayi var top1angun ^uLl p0sp1ay dgts top1angun dgts top1angun 11ags v1S18lL 1uncton nan screenco1orred gunhesap1a gunhesap1a 1uncton gunhesap1avar yas top1angun yas y1dakgunsays CS 5 8 8 5 1uncton nan screenco1orred gunhesap1a gunhesap1a 8 L 1uncton gunhesap1avar yas top1angun yas y1dakgunsays 8 51uncton gunhesap1avar yas var donduru1ecekdeger donduru1ecekdeger yas y1dakgunsays return donduru1ecekdeger l return donduru1ecekdeger l CS l 8 gunhesap1a gunhesap1a 8 u? top1angun gunhesap1a top1angun gunhesap1a Z S 1uncton gunhesap1avar yas return yasy1dakgunsays 8 8 CS NC1LAk kNLkLLk 1uncton top1anavar brncvar knc return brncknc ? 5 8 1 u S ? u 5 5 l C

CS D 8 8 8 LC kZ 81CAuuS 8 u S AS18lnC8l1MAAnLLC 8 8l1MA 8I1MA 8l1MA u 5 8l1MA 8I1MA A Ln1l1?1Lx1 u 8 P? u

P8 uA 8 CS u 8 LC kZ 81CAuuS 8 C CS ku ////////////////////////////////////////////////////////////////////#include #include ////////////////////////////////////////////////////////////////////BMAP* first_pcx = "first.pcx"; // ilk bmapmPANEL* pan_ilkpanel = // ilk panelim{ pos_x = 0; pos_y = 0; layer = 1; bmap = first_pcx; flags = OVERLAY | SHOW; } /////////////////////////////////////////////////////////////////////function main() { video_mode = 7; screen_color.blue = 150; } CS L u 8 k A 8C8 1 HizliNot:flaglar,objelerin(panel,entityvb)kapatilipailabilen,(veyaayarlanipresetlenebilen), nitelikleridir. !leriki derslerde detaya inecegiz. PANEL* pan_ilkpanel ={ pos_x = 0; pos_y = 0; layer = 1; bmap = first_pcx;flags = OVERLAY | SHOW; }lANLL8l1MA 8 A M C AnLL 8 CS 8MA 8 8MA L WE> 8 v x? L CS L L L CVLkLA SnCW u CVLkLA?8C8 SnCW M lLL 8 1 CvL8LA? CvL8LA? lCvL8LA? 8CvL8LA?ALlA A u LAk A CvL8LA? CS u SPCW C P AnLL l CvL8LA?LlCP1 l SPCW l SPCWSPCWu Z SPCW SPCW CS W