Tuesday, June 23, 2015

គន្លឹះក្លាយជាអ្នក Programmer

ចង់ក្លាយជាអ្នកសរសេរកម្មវិធីគឺជាដំណើរនៃការកើនឡើងនៃអ្នកជំនាញបច្ចេកទេស និង ព័ត៌មានវិទ្យា ដែលជាតម្រូវការគ្រប់ស្ថាប័ន និងគ្រប់វិស័យដើម្បីអភិវឌ្ឈន៍ ឈានទៅ រកភាព ទំនើបកម្ម ។ ប៉ុន្តែការឈានទៅក្លាយជាអ្នកសរសេរកម្មវិធី មិនមែនប្រើពេល១ថ្ងៃ ១ខែ ឬមួយឆ្នាំនោះទេ ពោលគឺត្រូវការខិតខំប្រឹងប្រែងទាំងបញ្ញាស្មារតី ដាក់ចិត្តខំប្រឹងទើប បានសម្រេច។ 1១- ដំបូងត្រូវយល់ពីមុខវិជ្ជាខាងក្រោមអោយច្បាស់សិន វាដូចជាកក្តវិទ្យាដែរ។ – Logic តក្កវិទ្យា – Discrete mathematics គណិតវិទ្យា ២- យល់ដឹងពី គន្លឹះ Database ដូចជាការ Query, View និង Procedure ជាមួយ កម្មវិធីកញ្ចប់ Database : – MS Access – MS SQL – DB V – Fox Pro – Paradox – MySQL ៣- សម្រេចចិត្តធ្វើជាអ្នកសរសេកម្មវិធីប្រភេទណា? – Web Programmer – Desktop Programmer – Operating System (OS) oriented programmer(tied to a single operating system or set of operating systems) – Platform-independent programmer – Distributed applications programmer – Library/platform/framework/core programmer – System programmer – Kernel programmer – Driver Programmer – Compiler Programmer – Programming Scientist 4- សិក្សារពីបច្ចេកទេស និង ភាសារដែលត្រូវនឹងជំរើសជំនាញរបស់យើង។ WEB PROGRAMMER គឺជាអ្នកជំនាញសរសេរកម្មវិធី ឬ​ លើគេហទំព័រ ដែលវាត្រូវបានប្រព្រឹត្តឡើងបានតាមរយៈអ៊ីនធឺណែត និងដំណើរការលើ Browser(ដូចជា : Firefox, Internet Explorer, Chrome…)។ 1ដូច្នេះយើងត្រូវយល់ពីបច្ចេកទេស និងភាសាស្តង់ដាដូចជា : – HTTP – FTP – POP3 – SMTP – TCP – IP Protocol – HTML, CSS, JS – XML – ASP – PHP – JSP យល់ពី រចនាសម្ព័ន្ធនៃការគ្រប់គ្រងគេហទំព័រលើ Web Hosting CPanel Base Web services protocols (HTTP, FTP, SMTP, and POP3 or IMAP4) Web server software Email server and client software យល់ពី Browse & Tool មួយចំនួនក្នុងការគ្រប់គ្រង Webpage : – Web Development toolbar on website : ប្រើសម្រាប់មើលកូដដូចជា inspect element ដោយប្រើ F12 ឬ add on plugin ខាងក្រៅទៀត និង HTML & CSS checker ត្រួតពិតកំហុសនៃការសរសេ HTML & CSS ជាដើម។ – យល់ពីប្រភេទ Browser ដែលយើងដំណើរការកម្មវិធី – ដឹងពីប្រភពនៃទិន្នន័យដែលយើងអាចយកទាញយកលើប្រើលើគេហំទព័រយើងបាន ដូចជាគេហទំព័រព័ត៌មាន, Wiki, blog, journals – យល់ពី Social sites (social portals, bookmarking sites, note-taking sites) – យល់ដឹងពីប្រព័ន្ធនៃគេហំព័ររបស់យើងដើម្បីអោយមានភាពជោគជ័យ Posted in គន្លឹះ C/C++, C#, គន្លឹះកុំព្យូទ័រ | ប្រវត្តិ​អ្នក​បង្កើត​ភាសា C Posted on by TEAV Chhun Nan (ទំនាក់ទំនង ផ្សាយពាណិជ្ជកម្ម 077778647-070778647) Dinnis Ritchie ​ដែល​មាន​ឈ្មោះ​ពេញជា Dennis MacAlistair Ritchie ឬ​ត្រូវបាន​ហៅថា dmr ​ដែល​ជា​ឈ្មោះ​ហៅក្រៅ និង ជា​ឈ្មោះ​ប្រើ​ប្រាស់​ក្នុង email address នៅកន្លែង​ធ្វើការ​របស់គាត់ ។ Dennis Ritchie កើតនៅ​ថ្ងៃ​ទី៩ ខែកញ្ញា ១៩៤១ នៅ Bronxville ក្រុង New York គាត់បានទទួលបរិញ្ញាប័ត្រខាង​រូបវិទ្យា និង គណិតវិទ្យា ពី​សាកលវិទ្យាល័យ Harvard ។ Web IT2 copyចាប់ពី​ឆ្នាំ ១៩៦៧ គាត់បាន​បម្រើ​ការងារ​នៅមជ្ឈមណ្ឌល​ស្រាវជ្រាវ​វិទ្យាសាស្រ្ដ​កុំព្យូទ័រ​ក្នុង​មន្ទីពិសោធន៍​ដែល​មាន​ឈ្មោះ​ថា Bell Labs ។ 1Dennis Ritchie គឺជាអ្នកវិទ្យាសាស្រ្ដ ​ផ្នែក​កុំព្យូទ័រ​ដ៏កំពូលម្នាក់របស់ជនជាតិអាមេរិកាំង ។ នៅលើ​ពិភពលោកបានទទួល​ស្គាល់ គាត់ថាជាអ្នកប្រាជ្ញ​បង្កើត​ភាសា C (កំឡុង​ឆ្នាំ​១៩៧៨ ជាមួយលោក Brian Kernighan) ​ ដែល​ជាភាសា​សរសេរ​កម្មវិធី​ជា​មូលដ្ឋាន មួយសម្រាប់​កុំព្យូទ័រ​លើសពីនេះគាត់​ក៏​ជាអ្នកពូកែ​សម្រាប់​ភាសា​កម្មវិធី​ ផ្សេងៗ​ទៀត​ព្រមទាំង​ប្រព័ន្ធ​ប្រតិបត្តិការ UNIX និង Multics ​ផងដែរ ។ ​តួនាទី និង កិត្តិយស Dennis MacAlistair Ritchie បានទទួលរង្វាន់ប្រចាំ​ឆ្នាំ​ពី​សមាគម​កុំព្យូទ័រ (Turing Award) ​ក្នុង​ឆ្នាំ​១៩៨៣ ទៅលើ​ការបង្រៀនទ្រឹស្ដីទាក់ទងទៅនឹង ”Reflections on Software Research” និង​បង្កើត​ទ្រឹស្ដី GOS (Generic Operating System) ​ដែល​អនុវត្តន៍ដោយ​ប្រព័ន្ធ​ប្រតិបត្តិការ UNIX ។ ឆ្នាំ ១៩៩៩ បានទទួលមេដាយ​ថ្នាក់​ជាតិ​ផ្នែក​បច្ចេកវិទ្យា របស់អាមេរិកាំង​ដែល​ប្រគល់ដោយលោកប្រធានាធិបតី Clinton ​ក្នុង​រជ្ជកាលនោះវាជាមេដាយ​ដែល​បានមក ពីការ​ខិតខំ​របស់លោក​ក្នុង​ការអភិវឌ្ឍន៍​ប្រព័ន្ធ​ប្រតិបត្តិការ UNIX ​ដែល​ធ្វើការ​ជាមួយនឹង​ភាសា C ជាហេតុធ្វើ​ឲ្យ​មានភាព​ប្រសើរ​ឡើងនៃការ​ប្រើ​ប្រាស់ Hardwar និង Software ​ក្នុង​មុខងារ​ប្រព័ន្ធ Computer Network ធ្វើ​ឲ្យ​អាមេរិកាំងឈានមុខគេ​ក្នុង​យុគសម័យ​ព័ត៌មាន​វិទ្យា ។ ​ឆ្នាំ​២០០៧ លោក Dennis Ritchie បានចូលនិវត្តន៍ ក្នុង​ពេល​ដែល​គាត់​កំពុង​ជាប្រធាន​ផ្នែក Lucent Technology System Software ។ 1 Posted in គន្លឹះ C/C++, C#, គន្លឹះកុំព្យូទ័រ | តើហេតុអ្វីចាំបាច់រៀន C++? Posted on by TEAV Chhun Nan (ទំនាក់ទំនង ផ្សាយពាណិជ្ជកម្ម 077778647-070778647) សម្រាប់​ប្អូនៗ​ដែល​កំពុង​រៀននៅតាមមហាវិទ្យាល័យនានា​ផ្នែក IT (Computer Science) ប្អូនៗ​ត្រូវដឹងថាភាសារ​កម្មវិធី (Programming Language) ដែល​ប្អូនត្រូវយកចិត្តទុកដាក់​បំផុត​ជាដំបូង​នោះគឺភាសា C++ ដែល​ប្អូនរៀន​ក្នុង​ឆ្នាំ​ដំបូងនៃ​ផ្នែក IT ហេតុអ្វី? Web IT2 copy+ ភាសា C++ ជាភាសារដំបូង​ដែល​នាំ​ឲ្យ​ប្អូនបានចាប់ផ្ដើម​ស្គាល់​ពីអ្វី​ដែល​ហៅថា Classes ដែល​ជាប្រភពនៃការ​បង្កើត Objects ហើយវា​ត្រូវបាន​អនុវត្តន៍​យ៉ាង​ពេញលេញ​ជាមួយនឹង​ភាសា​កម្រិត​ខ្ពស់​ដូចជា C#, Java, F#, Objective-C, PHP… ។ កាលណាប្អូនមាន​មូលដ្ឋាន Classes នេះរឹងមាំប្អូនអាចរៀនភាសា​ប្រភេទ OOP ដែល​បាននិយាយ​ខាងលើ​នេះដោយងាយ ជា​ពិសេស​គឺប្អូនមាន​លទ្ធភាព​អាច​បង្កើត Libraries (សម្រាប់ Windows OS គឺ .DLL file ដែល​ប្អូន​ធ្លាប់​បានឃើញ ឬ .so សម្រាប់ Android) ក្នុង​ការងារ Projects ធំៗ ។ + ភាសា C++ ក៏​ជាភាសារ​មូលដ្ឋាន​ដែល​ដែល​ប្អូនៗ​បានហ្វឹកហាត់ការអត់ធ្មត់​ជាមួយនឹង​ការ​ សរសេរ​កូដដ៏​ច្រើន​សម្រាប់​បង្កើត​កម្មវិធី​ណាមួួយ (ត្រូវចាំថាអ្នក Programmer គឺមានភាពអត់ធ្មត់ និង ការតស៊ូ ដើម្បី​សម្រេច​លើគោល​បំណង​នៃការ​បង្កើត​កម្មវិធី​ណាមួយ) ។ +ភាសា C++ ជា​មូលដ្ឋាន​ដែល​ប្អូនៗ​បានស្វែងយល់ពីអ្វី​ដែល​ហៅថា Algorithm (មានសិស្សជា​ច្រើន​នៅមានភាពមិនច្បាស់លាស់ពីអ្វី​ដែល​ហៅថា Algorithm វាជាការងាយយល់ទេ វិធីសាស្រ្តនិង​ដំណាក់​កាលជាជំហ៊ានៗ​ដែល​ប្អូនៗ​យកមកដោះស្រាយ​បញ្ហា​ណាមួយ​ ហើយទទួលបានជោកជ័យដូច​បំណង​នោះហើយហៅថា Algorithm ត្រូវចាំថាការដោះស្រាយ​បញ្ហា​មួយ​វានឹង​មាន Algorithms ច្រើន​អាចយកមក​ប្រើ​បាន) ។ 1+ភាសា C++ ជា​មូលដ្ឋាន​ដែល​បង្រៀនប្អូន​ឲ្យ​ស្គាល់​ពីអ្វី​ដែល​ហៅថា Data Structure ដោយប្អូននឹងរៀនពី Arrays, Pointer, LinkList, Stack, Queu… ដែល​ជាវិធីនៃការ​គ្រប់គ្រង​ទិន្នន័យ​បែប​លក្ខណៈ flat មួយមុននឹងប្អូនៗ​ឈានទៅរកការ​សិក្សា​អំពី Database Management ,Generics, Collections,LAMDA, LINQ នៅ​ក្នុង C# ឬ Java +ភាសា C++ នឹងនាំ​ឲ្យ​ប្អូនៗ​បានយល់ពីអ្វី​ដែល​ហៅថា Control Structure ក្នុង​ការធ្វើ​ឲ្យ​កម្មវិធី​ដែល​ប្អូនបាន​បង្កើត​អាចធ្វើអ្វីមួយតាម​តម្រូវ​ ការ ។ ពេល​ដែល​ប្អូនៗ​សិក្សា​ពី Control Structure ប្អូននឹងដឹងថាអ្វីទៅ​ដែល​ហៅថា Expression និង Logic (ដែល​ប្អូនបានរៀន​ក្នុង​គណិតវិទ្យា​ដូចជា តក្កវិទ្យា និង សំនុំជាដើម) ។ ជាសង្ខេបកាលណាប្អូនៗ ​មាន​មូលដ្ឋាន​ភាសា C++ រឹងមាំប្អូនៗ​នឹងអាចរៀនភាសា​កម្រិត High level ដូចជា C#, Java, PHP ឬ​ក៏​មាន​បំណង​ចង់​សិក្សា​របៀប​សរសេរ​កម្មវិធី សម្រាប់ Android, Windows Phone ឬ iOS (iPod,iPhone, និង iPad បាន​លឿន) ។ Posted in គន្លឹះ C/C++, C#, គន្លឹះកុំព្យូទ័រ | បង្កើត​ Game គ្រួ័រ Posted on by TEAV Chhun Nan (ទំនាក់ទំនង ផ្សាយពាណិជ្ជកម្ម 077778647-070778647) បង្កើត​ Game Tic Tac Toe ជាមួយកម្មវិធី Java 1Tic Tac Toe គឺ​ជា​ល្បែង​កំសាន្ត​មួយ​ដ៏ពេញ​និយម ដែល​ក្រឡា​លេង​មាន​៩​ ចន្លោះ​នៅ​លើ​ក្រដាស។ មាន​មនុស្ស​ពីរ​អ្នក​លេង, ម្នាក់​ប្រើ​សញ្ញា​ O, និង​ម្នាក់ទៀត​ប្រើសញ្ញា​ X, គួស​តាម​សញ្ញា​របស់​ខ្លួន​ម្ដង​ម្នាក់ៗតាម​វេន​របស់​ខ្លួន។ អ្នកឈ្នះ​​គឺ ជា​អ្នក​ដែល​ដាក់សញ្ញាឬ​គួស​សញ្ញា​របស់​ខ្លួន​បាន​មុន​ចំនួន​៣តាម ទិស​ឈរ , ដេក ឬខ្វែង។ ហើយ​ប្រសិន​បើ​ក្រោយ​ពី​បាន​ដាក់​ពេញ​ចន្លោះ​ក្រឡា​អស់​ហើយ​នៅ​តែ​មិន​មែន​អ្នក​ឈ្នះឬ​អ្នក​ចាញ់​នោះ គឺ​មាន​ន័យ​ថា​ ស្មើ​គ្នា។ សូម​ក្រឡេក​មើលរូប​គំរូ​ចំនួន​៣​ខាង​ក្រោម​នេះ​: 1(a) អ្នក​កាន់ X ឈ្នះ ​​​​​​​​​​​​​​ (b) ស្មើគ្នា (c) អ្នក​កាន់ ក្នុង​អត្ថបទ​នេះ នឹង​ឧទ្ទេស​នាមអ្នក​ពី​ដំណោះ​ស្រាយដើម្បីរចនា​នឹង​កសាង​នូវ​កម្ម​វិធី​កំសាន្ត​មួយ​នេះ​ដោយ​ប្រើ​ភាសា​ Java។ នេះ​គឺ​ជា​ដំនោះ​ស្រាយ​ដែល​បាន​ឧទ្ទេស​នាម​ដោយ​ Daniel Liang ក្នុង​សៀវ​ភៅ “Introduction to Java Programming“។ វិភាគ​និង​រចនា​ បណ្ដា​រូប​ឧទាហរណ៏​ដែល​អ្នក​បាន​ឃើញ​ខាង​លើ​គឺ​គ្រាន់​តែ​ជា​ករណី​ខ្លះ​នៃ​ល្បែង​កំសាន្ត​នេះ​ដែល​យើង​យក​មក​បង្ហាញនូវ​សកម្ម​ភាព ​ឈ្នះ​ចាញ់​។តា​ម​ពិត​ទៅ ល្បែង​កំសាន្ត​ Tic Tac Toe នៅ​មាន​ចំនុច​ពិសេសៗនិង​ស្មុគ្រ​ស្មាញ​ច្រើនជាង​នេះ​​​ទៀត ដើម្បី​បង្កើត​បាន​ Class សម្រាប់​ធ្វើ​បទ បង្ហាញលើ​សកម្មភាព​ឈ្នះ​ចាញ់នេះ , យើង​ត្រូវ​ស្រាវ​ជ្រាវ និង​យល់អោយ​ច្បាស់​ជាង​នេះ អំពីល្បែង​កំសាន្ត​មួយ​នេះ ។ Web IT2 copyឧបមា​ថា​ដំបូង​ឡើយ​គឺ មាន​ក្រឡា​ទាំង​អស់ (cell) ទំនេរ​(មិន​ទាន់គួស), ហើយ​អ្នក​លេង​ទី​១​គឺ​ប្រើ​សញ្ញាX,អ្នក​លេង​ទី​២​គឺ​ប្រើ​សញ្ញា​ O។ ដើម្បី​ អនុវត្ត​ជំហាន​ដើរ​ នោះ​អ្នក​លេង​ រំកិល Cursor ដល់​ក្រឡាណា​មួយ​រួច​ចុច​នៅទីនេះ ។,បើ​សិន​ជា​ក្រឡា​ណា​មួយ​​ O (ឬ X)មិន​ទាន់​គួស​ នោះ​អ្នក​ទី២នឹង​ត្រូវគួស​បន្ត,​ហើយ​ផ្ទុ​យ​មក​វិញ​បើ​ក្រឡា​នោះ​មាន​គេ​គួស​ហើយ​គឺ​មិន​អនុញ្ញាតិ​អោយ​គួស​លើ​ទៀត​ឡើយ។ តាម​រយៈ​ការ​ពណ៌នា​ខាង​លើ​ យើង​ឃើញ​ថា​ ចំពោះ​ក្រឡា​(Cell)នីមួយ​ គឺ​ជា​ Object GUI (Graphic User Interface – ផ្ទៃ​ប្រសព្វ​អ្នក​ប្រើ)មួយ​ដែល​អាច​​សំរួល​ការ​ងារ​ពេល​មាន​ការ​ចុច​បញ្ជាលើវា​និង​បង្ហាញសញ្ញា​ដែល​បាន​កំណត់​ណាមួយ។ Object នេះ​អាច ជា​ ប៊ូតុង(button) ឬ​ជា​ផ្ទាំង មួយ (panel)។ ការ​គួសចេញ​​លើ panelមួយ​គឺ​វា​នឹង​មាន​ភាព​រស់​រវើក​ជាង បើ​ធ្វើ​នឹង​ការ​គួស​លើbutton, ដោយ​ហេតុ​ថា​នៅ​លើ​ panelមួយ​គឺ​យើង​អាច​គួសបណ្ដាស​ញ្ញា X និង O ជាមួយ​ទំហំ​ណា​មួយ​ក៏​បាន​ ដែល​យើ​ង​បាន​​, ហើយ​ចំណែក​នៅ​លើ​ button មួយ​គឺ​យើង​អាច​បង្ហាញ​​ចេញ​តែ​ចំពោះ​អក្សរឈ្មោ (text label)។ ដោយ​ហេតុ​​ផល​នេះ​យើង​នឹង​ប្រើ​ប្រាស់​ panel មួយ​ដើម្បី​ធ្វើ​បទ​បង្ហាញ​ ក្រឡា​មួយ​របស់​ក្ដា​លេងឬ​ក្រដាស​លេង។ ធ្វើ​របៀ​ប​ណា​​យើង​អាច​ដឹងសញ្ញាបច្ចុប្បន្ន​របស់​ក្រឡានីមួយ​ៗ​តើ​តើ​វាជា (ទំនេរ, X, ឬ O)? នៅ​ក្នុង​ Class Cell យើង​នឹង​ប្រើ​លក្ខណៈ​សម្គាល់​មួយ​(property)ឈ្មោះថា​ token មាន​ប្រភេទ​ទិន្ន័យ​ជា​ char។ Class Cell មាន​ភារកិច្ចគួសសញ្ញាពេលក្រឡា​ទំនេរពេល​ចុច Mouse (Mouse is clickede), ដូច្នេះ​​យើង​ត្រូវ​ការ​សរសេរកូដ​មួយ​ដើម្បី​រង​ចាំ​ស្ដាប់ព្រឹត្តការ​ ( Event Listener) ឈ្មោះថា MouseEvent និង​កំណាត់​កូដ​មួយ​ផ្សេង​ទៀត​ដើម្បី​គួស បណ្ដាញ​សញ្ញា​ X ឬ O។ Class Cell អាច​កំនត់ន័យបាន​ដូច​រូប​ភាព​បង្ហាញខាង​ក្រោម​នេះ : 1Class Cell គួស​សញ្ញា​ក្នុង​ចន្លោះ​​ក្រឡា token: សម្រាប់សំគាល់​ក្នុង​ក្រឡា, តម្លៃ​កំណត់ស្រាប់គឺ ” – getToken(): ផ្ដល់​តំលៃ​អោយ​ដឹង​ សញ្ញា​ដែល​កំពុង​​មាន​លើ​ចន្លោះ​ក្រឡា​. – setToken(token: char): ដាក់សញ្ញា​ថ្មី​អោយ​ចន្លោះ​ក្រឡា​. – paintComponent(g: Graphics): គូស​សញ្ញា​​នៅ​ចន្លោះ​ក្រឡា – mouseClicked(e: MouseEvent): សម្រួលការ​ងារ​ពេល​​មាន​ព្រឹត្តិការ​ចុចលើ​ចន្លោះ​ក្រឡា​នោះ ។ក្ដា​លេង​​ល្បែង​កំសាន្ត​ Tic Tac Toe ​រួម​មាន​ 9 ចន្លោះ​, បង្កើត​ឡើង​ដោយ​ឃ្លា​បញ្ជា new Cell[3][3]. ដើម្បី​កំណត់វេន​ដើរ​ជា​បន្ត​បន្ទាប់​របស់​អ្នក​លេង​​ យើង​នឹង​ប្រើអថេរ​មួយ​ឈ្មោះថា​ whoseTurn (វេននរណា​ដើរ) ជាមួយ​ប្រភេទ ទិន្ន័យ char. ដំបូង​ឡើយ​ whoseTurn នឹង​មាន​តម្លៃ ‘X’,ក្រោយ​មក​ប្ដូរជា​ ‘O’ និង​គឺ​បន្ត​បន្ទាប់​ផ្លាស់​ប្ដូរ​វេន រវាង​តម្លៃ​ទាំង​ពីរ​គ្រប់​ពេល​ណា​ដែល​ចន្លោះ​ក្រឡា​ណា​ដែល​បាន​គួស។ ពេល​ដែល​ការ​ប្រកួត​ចប់​នោះ​តម្លៃ​របស់ whoseTurn នឹង​ប្ដូរ​មក​ជា ‘ ‘. ធ្វើ​យ៉ាង​ណា​ដើម្បី​ដឹង​ថា​ ល្បែងកំសាន្ត​​ត្រូវ​បាន​បញ្ចប់​ហើយ​ឬ​នៅ ? តើ​មាន​នរណា​ឈ្នះ​ហើយ​ឬ​នៅ? ​ហើយ​នរណា​ជា​អ្នក​ឈ្នះ​ បើ​មាន ? យើង​អាច​បង្កើត​បាន​ Method មួយ​ឈ្មោះ​ថា​ isWon (char token) ដើម្បី​ពិនិត្យ​មើល​ថា​ អ្នកលេង​ដែល​មាន​ការ​កំណត់សំគាល់ token បាន​ទទួល​ជ័យ​ជំនះ​ហើយ​ឬ​នៅ , និង Method មួយ​ទៀត គឺ isFull() ដើម្បី​ពិនិត្យ​មើល​ថា​ តើ​ក្រឡា​ទាំង​អស់​ត្រូវ​បាន​គួស​អស់​ឬ​នៅ ។ ជាមួយ​និង​ការ​វិភាគ​ដូច្នេះ, យើង​ឃើញ​ថា​ចំា​បាច់​ត្រូវ​ការ 2 Classes . Class ដំបូង​គឺ Cell, ជាមួយ​តួនាទី របស់​វា​គឺ សំរួល​ការ​ងា​ដែល​កើត​មាន​លើ​ក្រឡាង​ណា​មួយ​។ Class ទី​ពីរ​គឺ​ TicTacToe មាន​មុខ​ងា​រ​និងតួនាទី អនុវត្ត​និង​សម្រួល​ការ​ងារ​ទាំង​ស្រុង​លើ បណ្ដា​​ក្រឡា។ ទំនាក់ទំនង​ Class ទាំង​ពីរ​នេះ​អាច​បង្ហាញចេញ​ជា​រូប​ភាព​ខាង​ក្រោម​នេះ : 1- whoseTurn: ចង្អុល​បញ្ជាក់​ពី វេន​ដើរ​របស់​អ្នក​ដើរ, ដំបូង​គឺ X. – cell: Array មានទិស ទំហំ 3 x 3 ក្រឡា. – jlblStatus: ស្លាកមួយ (label) ដើម្បី​បង្ហាញ​ស្ថាន​ភាព​របស់ game. – TicTacToe(): បង្កើតឡើង GUI – isFull(): អោយ​តំលៃ ជា true បើ​ក្រឡា​ទាំង​អស់​ត្រូវ​បាន​គួស. – isWon(token: char): អោយ​តំលៃ ជា true ​បើ​សិន​អ្នក​លេង​មាន​សញ្ញា token បាន​ឈ្នះ. ដោយ ​ហេតុ​ថា​ Class Cell ប្រើ​បាន​តែ​ក្នុង Class TicTacToe ហេតុនេះ​វា​អាច កំនត់អត្ថន័យ​ខាង​ក្នុង​ Class TicTacToe (ហៅ​ថា​ inner class). កូដ​លំអិត​របស់​កម្ម​វិធី​ សសរសេរ​ដូច​ខាង​ក្រោម​នេះ : 001 002 import java.awt.*; import java.awt.event.*; 003 import javax.swing.*; 004 import javax.swing.border.LineBorder; 005 006 public class TicTacToe extends JApplet { 007 // កំណត់វេនបន្ត​បន្ទាប់​របស់​អ្នក​លេង​, តម្លៃ​ដំបូង​គឺ X 008 private char whoseTurn = 'X'; 009 010 // បង្កើត​ក្រឡា​ឡើង 011 private Cell[][] cells = new Cell[3][3]; 012 013 // បង្កើត​ label កំណត់​ស្ថានភាព​របស់​ល្បែង​កំសាន្ត 014 private JLabel jlblStatus = new JLabel("X's turn to play"); 015 016 /** Initialize UI */ 017 public TicTacToe() { 018 // Panel p សម្រាប់​ដាក់បណ្ដា​ក្រឡា​ 019 JPanel p = new JPanel(new GridLayout(3, 3, 0, 0)); 020 for (int i = 0; i < 3; i++) 021 for (int j = 0; j < 3; j++) 022 p.add(cells[i][j] = new Cell()); 023 024 // ផ្លាស់​ប្ដូរ​ខ្សែ​ព្រំដែន​របស់​ក្រឡា និង​label សណ្ឋាន​ភាព 025 p.setBorder(new LineBorder(Color.red, 1)); 026 jlblStatus.setBorder(new LineBorder(Color.yellow, 1)); 027 028 // បញ្ចូន panel និង​ label ទៅ​ក្នុង​ applet 029 add(p, BorderLayout.CENTER); 030 add(jlblStatus, BorderLayout.SOUTH); 031 } 032 033 /** 034 កំណត់​មើល​ថា​ តើ​ក្រឡា​ទាំង​អស់​ត្រូវ​បាន​ គួស​ហើយ​ ឬ​នៅ  035 */ 036 public boolean isFull() { 037 for (int i = 0; i < 3; i++) 038 for (int j = 0; j < 3; j++) 039 if (cells[i][j].getToken() == ' ') 040 return false; 041 042 return true; 043 } 044 045 /** 046  កំណត់​មើល​ថាតើ​អ្នក​លេង​ដែល​កាន់យក​សញ្ញា token បាន​ឈ្នះ ហើយ​ ឬ​នៅ  047 */ 048 public boolean isWon(char token) { 049 for (int i = 0; i < 3; i++) 050 if ((cells[i][0].getToken() == token) 051 && (cells[i][1].getToken() == token) 052 && (cells[i][2].getToken() == token)) { 053 return true; 054 } 055 056 for (int j = 0; j < 3; j++) 057 if ((cells[0][j].getToken() == token) 058 && (cells[1][j].getToken() == token) 059 && (cells[2][j].getToken() == token)) { 060 return true; 061 } 062 063 if ((cells[0][0].getToken() == token) 064 && (cells[1][1].getToken() == token) 065 && (cells[2][2].getToken() == token)) { 066 return true; 067 } 068 069 if ((cells[0][2].getToken() == token) 070 && (cells[1][1].getToken() == token) 071 && (cells[2][0].getToken() == token)) { 072 return true; 073 } 074 075 return false; 076 } 077 078 // inner class មួយ តំណាង​អោយ ក្រឡា​មួយ​ចន្លោះ  079 public class Cell extends JPanel { 080 // សញ្ញា​សម្គាល់​របស់​ចន្លោះ ក្រឡា​នេះ  081 private char token = ' '; 082 083 public Cell() { 084 setBorder(new LineBorder(Color.black, 1)); // ផ្លាស់​ប្ដូរ​ខ្សែ​ព្រំ​ដែន​ក្រឡា 085 addMouseListener(new MyMouseListener()); // ចុះ​ឈ្មោះ listener 086 } 087 088 /** 089 អោយ​តំលៃ​ជា​សញ្ញា​សំគាល់​របស់​ក្រឡា​ 090 */ 091 public char getToken() { 092 return token; 093 } 094 095 /** 096 បញ្ចូល​សញ្ញា​ថ្មី​អោយ​ក្រឡា 097 */ 098 public void setToken(char c) { 099 token = c; 100 repaint(); 101 } 102 103 /** 104 គួស​ក្រឡា​ 105   */ 106 protected void paintComponent(Graphics g) { 107 super.paintComponent(g); 108 109 if (token == 'X') { 110 g.drawLine(10, 10, getWidth() - 10, getHeight() - 10); 111 g.drawLine(getWidth() - 10, 10, 10, getHeight() - 10); 112 } 113 else if (token == 'O') { 114 g.drawOval(10, 10, getWidth() - 20, getHeight() - 20); 115 } 116 } 117 118 private class MyMouseListener extends MouseAdapter { 119 /** សំរួល​ការ​ងារ​ពេល​មាន​ការ​ចុះ​ Mouse ក្នុង ក្រឡា */ 120 public void mouseClicked(MouseEvent e) { 121 // បើ​សិន​ជា​ក្រឡា​នៅ​ទំនេរ​ ហើយ​ល្បែង​កំសាន្ត​នៅ​មិន​ទាន់​បញ្ចប់ 122 if (token == ' ' && whoseTurn != ' ') { 123 setToken(whoseTurn); // ផ្លាស់​ប្ដូរ​សញ្ញា​អោយ​ក្រឡា 124 // ពិនិត្យ​មើល​សណ្ឋាភាព​របស់​ល្បែង​កំសាន្ត​ 125 if (isWon(whoseTurn)) { 126 jlblStatus.setText(whoseTurn + " won! The game is over"); 127 whoseTurn = ' '; // ល្បែង​កំសាន្ត​ត្រូវ​បាន​បញ្ចាប់ 128 } 129 else if (isFull()) { 130 jlblStatus.setText("Draw! The game is over"); 131 whoseTurn = ' '; // ល្បែង​កំសាន្ត​ត្រូវ​បាន​បញ្ចាប់ 132 } 133 else { 134 // ផ្លាស់​ប្ដូរ​វេន​ដើរ 135 whoseTurn = (whoseTurn == 'X') ? 'O': 'X'; 136 // បង្ហាញ​ វេន​អ្នក​ដើរ 137 jlblStatus.setText(whoseTurn + "'s turn"); 138 } 139 } 140 } 141 } 142 } 143 144 /** 145 Method  main() អនុញ្ញាតិ​អោយ​ applet រត់​បាន​ដូច​ទៅ​នឹង​កម្ម​វិធី​ប្រើ​ប្រាស់​មួយ​អច្ចឹង​ 146 */ 147 public static void main(String[] args) { 148 // បង្កើត frame មួយ 149 JFrame frame = new JFrame("TicTacToe";); 150 151 // បង្កើត instance (តំណាង)មួយរបស់ applet 152 TicTacToe applet = new TicTacToe(); 153 154 // បន្ថែម​ instance របស់ applet ទៅ​ក្នុង​ frame 155 frame.add(applet, BorderLayout.CENTER); 156 157 // បង្ហាញ​ frame 158 frame.setSize(300, 300); 159 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 160 frame.setVisible(true); 161 } 162 } Post by : IT CAMBO

0 comments:

Post a Comment