ﺗﻤﺮﻳﻦ ﺳﺮي ﺳﻮم درس ﺑﺮﻧﺎﻣﻪ ﻧﻮﻳﺴﻲ ﺷﻲءﮔﺮا ﻣﻮﻋﺪ ارﺳﺎل :ﺷﻨﺒﻪ 19اردﻳﺒﻬﺸﺖ 1388 ﻣﺤﻤﺪ دﺷﺘﻲ -اﻣﻴﺮ ﺷﻴﺨﻬﺎ ﺗﻤﺮﻳﻦ ﺳﺮي ﺳﻮم ﺑﺮﻧﺎﻣﻪ ﺳﺎزي ﺷﻲءﮔﺮا ﻣﻬﻠﺖ ﺗﺤﻮﻳﻞ :ﺷﻨﺒﻪ 19اردﻳﺒﻬﺸﺖ 1388 ﻧﻜﺎت ﻛﻠﻲ در اﻳﻦ ﺗﻤﺮﻳﻦ ﺷﻤﺎ ﺑﺮﻧﺎﻣﻪي ﻗﺎﺑﻞ اﺟﺮاﻳﻲ ﻧﻤﻲﻧﻮﻳﺴﻴﺪ و ﻓﻘﻂ ﭼﻨﺪ ﻛﻼس را ﭘﻴﺎدهﺳﺎزي ﻣﻲﻛﻨﻴﺪ . ﻫﺪف از اﻳﻦ ﺗﻤﺮﻳﻦ ،آﺷﻨﺎﻳﻲ ﺑﻴﺸﺘﺮ ﺑﺎ ﻣﻔﺎﻫﻴﻢ interface ،exception ،packageو ﻛﺎر ﺑﻴﺸﺘﺮ ﺑﺎ ﻣﺤﻴﻂ ﮔﺮاﻓﻴﻜﻲ اﺳﺖ . ﺑﺮاي ارﺳﺎل ،ﻫﻤﻪي ﻓﺎﻳﻞﻫﺎي ﺧﻮد را در ﻳﻚ ﻓﺎﻳﻞ ﺑﻪ ﻧﺎم STDID.zipﻗﺮار دﻫﻴﺪ) .ﻛﻪ STDIDﺷﻤﺎره داﻧﺸﺠﻮﻳﻴﺘﺎن ﻣﻲﺑﺎﺷﺪ (.دﻗﺖ ﻛﻨﻴﺪ ﻛﻪ ﻓﺎﻳﻞﻫﺎي ﺧﻮد را ﺑﺪون ﻗﺮار دادن در ﻫﻴﭻ ﭘﻮﺷﻪاي در ﻓﺎﻳﻞ zipﻗﺮار دﻫﻴﺪ .در واﻗﻊ ﺑﺎﻳﺪ داﺧﻞ ﻓﺎﻳﻞ zipﺷﻤﺎ ﻓﻘﻂ ﭘﻮﺷﻪي irو ﻣﺤﺘﻮﻳﺎت آن ﻗﺮار داﺷﺘﻪ ﺑﺎﺷﺪ . ﺑﺮاي ارﺳﺎل ﺗﻤﺮﻳﻦ ﺑﻪ آدرس زﻳﺮ ﻣﺮاﺟﻌﻪ ﻛﻨﻴﺪ : http://ce.sharif.edu/~m_jahangir/java882 ﻣﻮﻋﺪ ارﺳﺎل ،ﺳﺎﻋﺖ ) 11:59ﻇﻬﺮ( روز ﺷﻨﺒﻪ 19اردﻳﺒﻬﺸﺖ 1388ﺑﻮده و ﺑﻪ ﻫﻴﭻ ﻋﻨﻮان ﺗﻤﺪﻳﺪ ﻧﺨﻮاﻫﺪ ﺷﺪ. ﺗﺄﺧﻴﺮ ﺗﺎ 1ﺳﺎﻋﺖ ،ﺑﻪ ازاي ﻫﺮ 3دﻗﻴﻘﻪ ﻣﻮﺟﺐ ﻛﺴﺮ ﺷﺪن %1ﻧﻤﺮه ،از 1ﺳﺎﻋﺖ ﺗﺎ 24ﺳﺎﻋﺖ ﻣﻮﺟﺐ ﻛﺴﺮ ﺷﺪن %20ﻧﻤﺮه ،از 24ﺳﺎﻋﺖ ﺗﺎ 25ﺳﺎﻋﺖ ،ﺑﻪ ازاي ﻫﺮ 2دﻗﻴﻘﻪ ﻣﻮﺟﺐ ﻛﺴﺮ ﺷﺪن %1ﻧﻤﺮهي دﻳﮕﺮ و ﺑﻴﻦ 25ﺳﺎﻋﺖ ﺗﺎ 48ﺳﺎﻋﺖ ﺑﺎﻋﺚ ﻛﺴﺮ ﺷﺪن %50ﻧﻤﺮه ﻣﻲﺷﻮد .ﺗﺄﺧﻴﺮ ﺑﻴﺸﺘﺮ از 48ﺳﺎﻋﺖ ﻗﺎﺑﻞ ﻗﺒﻮل ﻧﻴﺴﺖ . ﻗﻄﻊ ﺑﻮدن اﻳﻨﺘﺮﻧﺖ ﺧﻮاﺑﮕﺎه ،ﻛﻨﺪي ﭘﺎﻳﮕﺎه اﻳﻨﺘﺮﻧﺘﻲ داﻧﺸﻜﺪه ،ﺗﻤﺎم ﺷﺪن ﻛﺎرت اﻳﻨﺘﺮﻧﺖ و … ﻫﻴﭻﻛﺪام دﻟﻴﻞ ﻣﻮﺟﻬﻲ ﺑﺮاي ﺗﺄﺧﻴﺮ ﻧﻴﺴﺘﻨﺪ .ﺑﻨﺎﺑﺮاﻳﻦ ﭘﻴﺸﻨﻬﺎد ﻣﻲﺷﻮد ﺟﻮابﻫﺎي ﺧﻮد را در داﻧﺸﻜﺪه ارﺳﺎل ﻛﻨﻴﺪ . ﻫﺮﮔﻮﻧﻪ روﻧﻮﺷﺖ ،1ﺑﺮاي ﻣﻨﺒﻊ روﻧﻮﺷﺖ و ﻫﻤﭽﻨﻴﻦ ﻧﺴﺨﻪﻫﺎي روﻧﻮﻳﺴﻲ ﺷﺪه -2ﻧﻤﺮه در ﭘﻲ ﺧﻮاﻫﺪ داﺷﺖ . ﺗﻼش ﺑﺮاي اﺳﺘﻔﺎده از ﻣﻨﺎﺑﻊ ﺳﻴﺴﺘﻢ ﻣﺎﻧﻨﺪ ﻛﺎرت ﺻﺪا و ﭘﺮﻳﻨﺘﺮ و ﻧﻮﺷﺘﻦ ﺑﻪ ﻓﺎﻳﻞ و ...ﻣﻨﺠﺮ ﺑﻪ درﻳﺎﻓﺖ ﻧﻤﺮهي ﻛﻼسﻫﺎ و ﻣﺘﺪﻫﺎي ﮔﻔﺘﻪ ﺷﺪه در آنﻫﺎ ﺣﺪاﻗﻞﻫﺎي ﻻزم ﻫﺴﺘﻨﺪ .ﻳﻌﻨﻲ ﺷﻤﺎ ﻣﻲﺗﻮاﻧﻴﺪ ﺑﺮاي راﺣﺖﺗﺮ ﺷﺪن ﭘﻴﺎده- ﺳﺎزﻳﺘﺎن ﻳﺎ ﺷﻲﮔﺮاﺗﺮ ﺷﺪن ﻛﺪﺗﺎن ﺑﻪ اﻳﻦ ﻛﻼسﻫﺎ ﻣﺘﺪﻫﺎي دﻳﮕﺮي اﺿﺎﻓﻪ ﻛﻨﻴﺪ ﻳﺎ ﺑﻪ ﻛﻞ ﺗﻤﺮﻳﻦ ﻛﻼسﻫﺎي دﻳﮕﺮي اﺿﺎﻓﻪ ﻛﻨﻴﺪ .وﻟﻲ دﻗﺖ داﺷﺘﻪ ﺑﺎﺷﻴﺪ ﻛﻪ ﻛﻼسﻫﺎي ﮔﻔﺘﻪ ﺷﺪه و ﻣﺘﺪﻫﺎي آﻧﻬﺎ ﺑﺎﻳﺪ ﺑﻪ ﻫﻤﻴﻦ ﺷﻜﻞ ،ﻣﻮﺟﻮد ﺑﺎﺷﻨﺪ . ﻗﺴﻤﺘﻲ از ﻧﻤﺮه ﺑﻪ ﺷﻲﮔﺮا ﺑﻮدن ﺑﺮﻧﺎﻣﻪ ﻧﻮﺷﺘﻪ ﺷﺪه ﺑﺴﺘﮕﻲ دارد .ﺑﻨﺎﺑﺮاﻳﻦ ﺑﻪ ﺷﻲﮔﺮا ﻧﻮﺷﺘﻦ ﺑﺮﻧﺎﻣﻪﺗﺎن دﻗﺖ ﻛﻨﻴﺪ . 1ﻛﭙﻲ ﻳﺎ ﻫﻤﺎن ﻛُﭗ ﺗﻤﺮﻳﻦ ﺳﺮي ﺳﻮم ﺑﺮﻧﺎﻣﻪ ﺳﺎزي ﺷﻲءﮔﺮا ﺻﻔﺮ در اﻳﻦ ﺗﻤﺮﻳﻦ ﻣﻲﺷﻮد . 1 از آﻧﺠﺎﻳﻲ ﻛﻪ ﺑﺨﺸﻲ از ﻧﻤﺮه ﻣﺮﺑﻮط ﺑﻪ ﺗﺼﺤﻴﺢ ﺧﻮدﻛﺎر اﺳﺖ ،ﻋﺪم رﻋﺎﻳﺖ ﻧﻜﺎت ﻇﺮﻳﻒ ﻣﺎﻧﻨﺪ ﻧﺎم ﻣﺘﺪﻫﺎ ،ﻧﺎم ﻛﻼﺳﻬﺎ ،ﺻﻮرت ﺻﺤﻴﺢ رﺷﺘﻪﻫﺎ)اﻋﻢ از ﺑﺰرﮔﻲ و ﻛﻮﭼﻜﻲ ﻛﺎراﻛﺘﺮﻫﺎ( و ...ﻣﻮﺟﺐ اﺧﺘﻼل در روﻧﺪ ﺗﺼﺤﻴﺢ )و ﻧﻤﺮه( ﺧﻮاﻫﺪ ﺷﺪ) .دﻗﺖ ﻛﻨﻴﺪ ﻛﻪ اﻳﻦ ﺗﻤﺮﻳﻦ ﺗﺼﺤﻴﺢ ﺑﺮﺧﻂ ﻧﺪارد وﻟﻲ ﺑﻌﺪ از ﭘﺎﻳﺎن ﻣﻬﻠﺖ ارﺳﺎل ﺑﻪ ﺻﻮرت ﺧﻮدﻛﺎر ﺗﺼﺤﻴﺢ ﻣﻲﺷﻮد (. ﻧﺤﻮهي ﻧﻤﺮهدﻫﻲ ﺑﻪ ﺻﻮرت زﻳﺮ ﻣﻲﺑﺎﺷﺪ : oﺗﺼﺤﻴﺢ ﺧﻮدﻛﺎر %50 ﻧﻤﺮه oرﻋﺎﻳﺖ اﺻﻮل ﺷﻲﮔﺮاﻳﻲ و آداب ﺑﺮﻧﺎﻣﻪﻧﻮﻳﺴﻲ ﺟﺎوا %25 ﻧﻤﺮه oدادن ﭘﻴﻐﺎم ﻣﻨﺎﺳﺐ ﺑﻪ ﻫﻨﮕﺎم ﺑﺮوز ﺧﻄﺎ %10 ﻧﻤﺮه oواﺳﻂ ﻛﺎرﺑﺮي %15 2ﻧﻤﺮه ﺳﻮاﻻت ﺧﻮد را ﺑﺎ ﻓﺮﺳﺘﺎدن اﻳﻤﻴﻞ ﺑﻪ آدرس [email protected]ﻣﻄﺮح ﻛﻨﻴﺪ . ﺗﻤﺮﻳﻦ ﺳﺮي ﺳﻮم ﺑﺮﻧﺎﻣﻪ ﺳﺎزي ﺷﻲءﮔﺮا 2 2زﻳﺒﺎﻳﻲ واﺳﻂ ﻛﺎرﺑﺮي ﻧﻤﺮه ﻧﺪارد ،و ﻓﻘﻂ ﻛﺎرآﻳﻲ واﺳﻂ ﻛﺎرﺑﺮي ﻫﻤﺎنﻃﻮر ﻛﻪ در اداﻣﻪ ﮔﻔﺘﻪ ﺧﻮاﻫﺪ ﺷﺪ ،ﻣﺪﻧﻈﺮ اﺳﺖ . ﻣﻘﺪﻣﻪ در اﻳﻦ ﺗﻤﺮﻳﻦ ،ﺷﻤﺎ ﺑﺎﻳﺪ ﺑﺎزي ﺷﻄﺮﻧﺞ را ﭘﻴﺎده ﺳﺎزي ﻛﻨﻴﺪ .ﺑﺮاي اﻃﻼﻋﺎت ﺑﻴﺸﺘﺮ در زﻣﻴﻨﻪي اﻳﻦ ﺑﺎزي ﻣﻲﺗﻮاﻧﻴﺪ ﺑﻪ آدرس http://en.wikipedia.org/wiki/Chessﻣﺮاﺟﻌﻪ ﻓﺮﻣﺎﺋﻴﺪ .ﻛﻠﻴﻪي ﻛﻼﺳﻬﺎ و ﭘﻜﻴﺠﻬﺎي اﻳﻦ ﺑﺮﻧﺎﻣﻪ ﺑﺎﻳﺪ داﺧﻞ ﭘﻜﻴﺞ ir.sharif.ce.javaclass.chessﺑﺎﺷﻨﺪ . ﺑﺮﻧﺎﻣﻪاي ﻛﻪ ﻣﻲﻧﻮﻳﺴﻴﺪ ﺑﺎﻳﺪ ﻗﺎﺑﻠﻴﺖ اﻧﺠﺎم دادن ﺑﺎزي ﺑﺼﻮرت اﻧﺴﺎن ﺑﺎ اﻧﺴﺎن و ﻫﻮش ﻣﺼﻨﻮﻋﻲ ﺑﺎ ﻫﻮش ﻣﺼﻨﻮﻋﻲ را داﺷﺘﻪ ﺑﺎﺷﺪ. واﺳﻂ ﻛﺎرﺑﺮي ﻛﻠﻴﻪي ﻛﻼسﻫﺎﻳﻲ ﻛﻪ ﻣﺮﺑﻮط ﺑﻪ واﺳﻂ ﻛﺎرﺑﺮي ﻣﻲﺑﺎﺷﻨﺪ ﺑﺎﻳﺪ داﺧﻞ ﭘﻜﻴﺞ ir.sharif.ce.javaclass.chess.ui ﺑﺎﺷﻨﺪ) .و ﻫﻤﭽﻨﻴﻦ ﻛﻼسﻫﺎﻳﻲ ﻛﻪ ﻣﺮﺑﻮط ﺑﻪ واﺳﻂ ﻛﺎرﺑﺮي ﻧﻴﺴﺘﻨﺪ ﻧﺒﺎﻳﺪ در اﻳﻦ ﭘﻜﻴﺞ ﺑﺎﺷﻨﺪ!( دﻗﺖ ﻛﻨﻴﺪ ﻛﻪ واﺳﻂ ﻛﺎرﺑﺮي ﺗﻨﻬﺎ ﺑﺮاي ﺣﺎﻟﺖ ﺑﺎزي اﻧﺴﺎن ﺑﺎ اﻧﺴﺎن اﺳﺖ و ﺑﺮاي ﺣﺎﻟﺖ ﺑﺎزي ﻫﻮش ﻣﺼﻨﻮﻋﻲ ﺑﺎ ﻫﻮش ﻣﺼﻨﻮﻋﻲ ﻧﻴﺎز ﺑﻪ واﺳﻂ ﻛﺎرﺑﺮي ﻧﻴﺴﺖ. ﺷﻤﺎ ﺑﺎﻳﺪ ﻳﻚ راﺑﻂ ﻛﺎرﺑﺮ در ﻧﻈﺮ ﺑﮕﻴﺮﻳﺪ ﻛﻪ ﻛﺎﺑﺮ ﺑﺘﻮاﻧﺪ ﺑﺎ آن ﻛﺎر ﻛﻨﺪ .ﺑﺮاي اﻳﻦ ﻛﺎر ﭘﻴﺸﻨﻬﺎد ﻣﻲﺷﻮد از JFrameاﺳﺘﻔﺎده ﻛﻨﻴﺪ).در ﺻﻮرﺗﻴﻜﻪ ﺧﻮاﺳﺘﻴﺪ ،ﻣﺎﻧﻌﻲ ﻧﺪارد ﻛﻪ از Appletﻧﻴﺰ اﺳﺘﻔﺎده ﻧﻤﺎﺋﻴﺪ (.ﺑﺮاي ﺣﺮﻛﺖ دادن ﻳﻚ ﻣﻬﺮه ،ﻛﺎرﺑﺮ ﺑﺎﻳﺪ روي ﺧﺎﻧﻪي آن ﻣﻬﺮه ﻛﻠﻴﻚ ﻛﻨﺪ و ﺳﭙﺲ روي ﻣﻘﺼﺪ ﻛﻠﻴﻚ ﻛﻨﺪ .در ﺻﻮرﺗﻴﻜﻪ ﻣﺠﺪدا روي ﻫﻤﺎن ﺧﺎﻧﻪ ﻛﻠﻴﻚ ﻛﺮد ﺑﺎﻳﺪ آن ﻣﻬﺮه از ﺣﺎﻟﺖ اﻧﺘﺨﺎب ﺑﻴﺮون ﺑﻴﺎﻳﺪ .ﻫﻤﭽﻨﻴﻦ در ﺻﻮرﺗﻴﻜﻪ ﺧﺎرج از ﺻﻔﺤﻪي ﺷﻄﺮﻧﺞ ﻛﻠﻴﻚ ﻛﺮد ،ﺑﺎﻳﺪ آن ﻣﻬﺮه از ﺣﺎﻟﺖ اﻧﺘﺨﺎب ﺑﻴﺮون ﺑﻴﺎﻳﺪ. دﻗﺖ ﻛﻨﻴﺪ ﻛﻪ وﺿﻌﻴﺖ ﻓﻌﻠﻲ ﺑﺎزي )اﻋﻢ از ﻧﻮﺑﺖ و اﻳﻨﻜﻪ ﺑﺎزﻳﻜﻦ در ﺣﺎﻟﺖ ﻛﻴﺶ ﻫﺴﺖ ﻳﺎ ﻧﻪ( ﺑﺎﻳﺪ ﺑﻪ ﻛﺎرﺑﺮ ﻧﺸﺎن داده ﺷﻮد. اﻳﻦ ﻗﺴﻤﺖ در ﺗﺤﻮﻳﻞ ﺣﻀﻮري ﺑﺮرﺳﻲ ﻣﻲﺷﻮد. ﻫﻮش ﻣﺼﻨﻮﻋﻲ ﻛﻪ ﺑﻪ ﺑﺎزي ﺷﻤﺎ داده ﻣﻲﺷﻮد )ﻧﺤﻮهي داده ﺷﺪن ﻫﻮش ﻣﺼﻨﻮﻋﻲ ﺑﻪ ﺑﺎزي ﺑﻌﺪا ﺗﻮﺿﻴﺢ داده ﻣﻲﺷﻮد( ،ﺷﻲ- اي اﺳﺖ ﻛﻪ interfaceزﻳﺮ را ﭘﻴﺎدهﺳﺎزي ) (implementﻣﻲﻛﻨﺪ. { public interface IPlayer ;)public String move(Chess chess } ﺗﻤﺮﻳﻦ ﺳﺮي ﺳﻮم ﺑﺮﻧﺎﻣﻪ ﺳﺎزي ﺷﻲءﮔﺮا ﻫﻮش ﻣﺼﻨﻮﻋﻲ 3 در ﻫﻨﮕﺎﻣﻲ ﻛﻪ ﻧﻮﺑﺖ ﺑﻪ ﻫﻮش ﻣﺼﻨﻮﻋﻲ ﺑﺮﺳﺪ ،ﺷﻤﺎ ﺑﺎ ﻓﺮاﺧﻮاﻧﻲ ﻣﺘﺪ moveﻫﻮش ﻣﺼﻨﻮﻋﻲ ،ﺣﺮﻛﺖ ﻣﻮرد ﻧﻈﺮش را درﻳﺎﻓﺖ ﻣﻲﻛﻨﻴﺪ .ﺧﺮوﺟﻲ اﻳﻦ ﻣﺘﺪ ﻳﻚ رﺷﺘﻪ اﺳﺖ ﻛﻪ ﻣﺸﺨﺺ ﻣﻲﻛﻨﺪ ﻣﻬﺮهي درون ﭼﻪ ﺧﺎﻧﻪاي ،ﺑﻪ ﭼﻪ ﺧﺎﻧﻪاي ﺑﺮود. ﺑﺮاي ﻣﺜﺎل اﮔﺮ ﺧﺮوﺟﻲ اﻳﻦ ﻣﺘﺪ ،رﺷﺘﻪي ” “A2‐>A4ﺑﺎﺷﺪ ،ﺑﺎﻳﺪ ﻣﻬﺮهي درون ﺧﺎﻧﻪي A2ﺑﻪ ﺧﺎﻧﻪي A4ﺑﺮود .ورودي اﻳﻦ ﺗﺎﺑﻊ ﻳﻚ ﺷﻲ از ﺟﻨﺲ Chessاﺳﺖ ﻛﻪ ﻫﻤﺎن ﺑﺎزي در ﺣﺎل اﺟﺮاﺳﺖ ﻛﻪ ﺑﻌﺪا ﺗﻮﺿﻴﺢ داده ﺧﻮاﻫﺪ ﺷﺪ) .دﻟﻴﻞ اﻳﻨﻜﻪ اﻳﻦ ﮔﻮﻧﻪ ورودي ﺑﺎﻳﺪ ﺑﻪ ﻣﺘﺪ moveداد اﻳﻦ اﺳﺖ ﻛﻪ ﻣﺘﺪ ،moveدر ﻫﻨﮕﺎم اﺟﺮاي ﻳﻚ ﺣﺮﻛﺖ ،ﺑﺎﻳﺪ ﻣﻮﻗﻌﻴﺖ ﺗﻤﺎﻣﻲ ﻣﻬﺮهﻫﺎ را ﺑﺪاﻧﺪ(. ﻣﻬﺮهﻫﺎ ﺑﺮاي ﻣﻬﺮهﻫﺎ ﺑﺎﻳﺪ ﻳﻚ ﭘﻜﻴﺞ ﺗﺤﺖ ﻧﺎم ir.sharif.ce.javaclass.chess.piecesدر ﻧﻈﺮ ﺑﮕﻴﺮﻳﺪ ﻛﻪ ﺑﺎﻳﺪ در آن ﻳﻚ ﻛﻼس abstractﺗﺤﺖ ﻧﺎم Pieceوﺟﻮد داﺷﺘﻪ ﺑﺎﺷﺪ ﻛﻪ 2ﻣﺘﺪ abstractدارد .اﻳﻦ ﻣﺘﺪﻫﺎ ﻋﺒﺎرﺗﻨﺪ از) :ﭘﺎراﻣﺘﺮﻫﺎي اﻳﻦ ﻣﺘﺪﻫﺎ ﺑﺮ ﻋﻬﺪهي ﺧﻮدﺗﺎن اﺳﺖ(. :draw اﻳﻦ ﺗﺎﺑﻊ وﻇﻴﻔﻪي رﺳﻢ ﻣﻬﺮه را ﺑﺮ ﻋﻬﺪه دارد . :canMoveTo اﻳﻦ ﺗﺎﺑﻊ آدرس ﻳﻚ ﺧﺎﻧﻪ را ﻣﻲﮔﻴﺮد و ﭼﻚ ﻣﻲﻛﻨﺪ ﻛﻪ آﻳﺎ اﻳﻦ ﻣﻬﺮه ﻣﻲﺗﻮاﻧﺪ ﺑﻪ آن ﺧﺎﻧﻪ ﺑﺮود ﻳﺎ ﻧﻪ) .ﻧﻴﺎز ﺑﻪ ﭘﻴﺎده ﺳﺎزي ﺣﺮﻛﺖ ﺷﺎه-ﻗﻠﻌﻪ 3و ارﺗﻘﺎء ﺳﺮﺑﺎز 4ﻧﻴﺴﺖ( ﺳﭙﺲ ﺑﻪ ازاي ﻫﺮ ﻧﻮع ﻣﻬﺮه از ﺷﻄﺮﻧﺞ ،ﺑﺎﻳﺪ ﻳﻚ ﻛﻼس ﺑﮕﻴﺮﻳﺪ ﻛﻪ ﺑﭽﻪ اﻳﻦ ﻛﻼس Pieceﺑﺎﺷﺪ .ﺑﺮاي ﻫﺮ ﻧﻮع ﻣﻬﺮه ،ﺑﺎﻳﺪ ﻣﺘﺪ toStringرا overrideﻛﻨﻴﺪ ﻛﻪ ﺧﺮوﺟﻲ آن ﺑﺼﻮرت ” “XYﻣﻲﺑﺎﺷﺪ Y .ﻧﺸﺎندﻫﻨﺪهي رﻧﮓ ﻣﻬﺮه ﻣﻲﺑﺎﺷﺪ )در ﺻﻮرﺗﻴﻜﻪ ﺳﻔﻴﺪ ﺑﻮد W ،و در ﺻﻮرﺗﻴﻜﻪ ﺳﻴﺎه ﺑﻮد B ،ﺧﻮاﻫﺪ ﺑﻮد( و ،Xﻧﻮع ﻣﻬﺮه ﻣﻲﺑﺎﺷﺪ ﻛﻪ ﻣﻄﺎﺑﻖ ﺑﺎ ﺟﺪول زﻳﺮ ﻣﺸﺨﺺ ﻣﻲﮔﺮدد) :ﺑﺮاي ﻣﺜﺎل ﺳﺮﺑﺎز ﺳﻴﺎه ﺑﺼﻮرت ” “PBو اﺳﺐ ﺳﻔﻴﺪ ﺑﺼﻮرت ” “NWﻣﺸﺨﺺ ﻣﻲﺷﻮﻧﺪ(. ﺗﻤﺮﻳﻦ ﺳﺮي ﺳﻮم ﺑﺮﻧﺎﻣﻪ ﺳﺎزي ﺷﻲءﮔﺮا 4 اﺳﺐ ﻓﻴﻞ وزﻳﺮ ﺷﺎه ﺳﺮﺑﺎز ﻗﻠﻌﻪ )رخ( N B Q K P R ﺧﻄﺎ5ﻫﺎ ﻛﻠﻴﻪي ﻛﻼﺳﻬﺎي ﻣﺮﺑﻮط ﺑﻪ ﺧﻄﺎﻫﺎ ﺑﺎﻳﺪ داﺧﻞ ﭘﻜﻴﺞ ir.sharif.ce.javaclass.chess.exceptionsﺑﺎﺷﻨﺪ. اوﻟﻴﻦ ﻛﻼﺳﻲ ﻛﻪ ﺑﺎﻳﺪ در اﻳﻦ ﭘﻜﻴﺞ در ﻧﻈﺮ ﺑﮕﻴﺮﻳﺪ ،ﻛﻼس ChessExceptionاﺳﺖ ﻛﻪ ﺑﭽﻪي Exceptionﻣﻲﺑﺎﺷﺪ. Castling 3 :Promotion 4وﻗﺘﻲ ﻛﻪ ﺳﺮﺑﺎز ﻳﻚ ﺑﺎزﻳﻜﻦ ﺑﻪ ﺧﺎﻧﻪي آﺧﺮ رﺳﻴﺪ ،ﺣﻖ دارد ﺑﺠﺎي آن ﻳﻚ ﻣﻬﺮهي ﻣﻄﻠﻮب ﺑﻴﺎورد . Exception 5 ﺑﺮﻧﺎﻣﻪي ﺷﻤﺎ ﺑﺎﻳﺪ ﺧﻄﺎﻫﺎي ﻻزم را ﺑﻪ ﻛﺎرﺑﺮ ﺑﺪﻫﺪ) .دﻗﺖ ﻛﻨﻴﺪ ﻛﻪ اﻳﻦ ﺧﻄﺎﻫﺎ در ﺣﺎﻟﺘﻲ ﻛﻪ 2اﻧﺴﺎن ﺑﺎ ﻫﻢ ﺑﺎزي ﻣﻲ ﻛﻨﻨﺪ، ﺑﺎﻳﺪ ﺑﻪ ﺻﻮرت ﮔﺮاﻓﻴﻜﻲ ﺑﻪ ﻛﺎرﺑﺮ ﻧﺸﺎن داده ﺷﻮﻧﺪ 6و در ﺣﺎﻟﺘﻲ ﻛﻪ 2ﻫﻮش ﻣﺼﻨﻮﻋﻲ ﺑﺎ ﻫﻢ ﺑﺎزي ﻣﻲﻛﻨﻨﺪ ﻧﺒﺎﻳﺪ ﺑﻪ ﺻﻮرت ﮔﺮاﻓﻴﻜﻲ ﻧﺸﺎن داده ﺷﻮﻧﺪ( ﺧﻄﺎﻫﺎﻳﻲ ﻛﻪ ﭘﻴﺎده ﺳﺎزي آﻧﻬﺎ ﺿﺮوري اﺳﺖ ﻋﺒﺎرﺗﻨﺪ از: ﺣﺮﻛﺖ اﺷﺘﺒﺎه ﻣﻬﺮهﻫﺎ ﻛﻴﺶ ﺑﻮدن)ﻣﻮﻗﻌﻲ ﻛﻪ در ﺣﺎﻟﺖ ﻛﻴﺶ ﺑﻮدن ،ﺣﺮﻛﺘﻲ اﻧﺠﺎم دﻫﺪ ﻛﻪ ﻫﻨﻮز ﻛﻴﺶ ﺑﻤﺎﻧﺪ ﻳﺎ در وﺿﻌﻴﺖ ﻋﺎدي، ﺣﺮﻛﺘﻲ ﻛﻨﺪ ﻛﻪ ﺑﻪ ﺣﺎﻟﺖ ﻛﻴﺶ ﺑﺮود (. ﭘﺮش از روي ﻣﻬﺮهﻫﺎ )ﺑﺮاي ﻣﻬﺮهﻫﺎي ﻏﻴﺮ اﺳﺐ!( ﻋﺪم رﻋﺎﻳﺖ ﻧﻮﺑﺖ ﺧﺎﻟﻲ ﺑﻮدن ﺧﺎﻧﻪ زدن ﻣﻬﺮهي ﺧﻮدي)!( دﻗﺖ ﻛﻨﻴﺪ ﻛﻪ ﺑﺮاي ﻫﺮ ﺧﻄﺎ ﺑﺎﻳﺪ ﻳﻚ ﻛﻼس ﺟﺪاﮔﺎﻧﻪ ﺑﮕﻴﺮﻳﺪ ﻛﻪ ﺑﭽﻪي ChessExceptionﺑﺎﺷﺪ. ﻛﻼس Chess در واﻗﻊ وﻇﻴﻔﻪي ﺷﻤﺎ ،ﭘﻴﺎدهﺳﺎزي ﻛﻼﺳﻲ ﻫﻤﺎﻧﻨﺪ ﻛﻼس زﻳﺮ اﺳﺖ: {Public class Chess public Chess(); // human vs. human game public Chess(IPlayer ai1, IPlayer ai2); // AI vs. AI game ;public void nextMove() throws ChessException ;)(public char getTurn ;)public String getPieceIn(String place Constructorاول ،ﺑﺮاي ﺣﺎﻟﺘﻲ اﺳﺖ ﻛﻪ اﻧﺴﺎن ﺑﺎ اﻧﺴﺎن ﺑﺎزي ﻣﻲﻛﻨﺪ ،ﺑﺎ ﺻﺪا زده ﺷﺪن اﻳﻦ ،constructorواﺳﻂ ﻛﺎرﺑﺮي ﻧﻤﺎﻳﺶ داده ﻣﻲﺷﻮد و آﻣﺎدهي ﮔﺮﻓﺘﻦ ﺣﺮﻛﺖ ﻛﺎرﺑﺮ ﻣﻲﺷﻮد. Constructorدوم ،ﺑﺮاي ﺣﺎﻟﺘﻲ اﺳﺖ ﻛﻪ ﻫﻮش ﻣﺼﻨﻮﻋﻲ ﺑﺎ ﻫﻮش ﻣﺼﻨﻮﻋﻲ ﺑﺎزي ﻣﻲﻛﻨﺪ و ﺑﻮﺳﻴﻠﻪي دو ﭘﺎراﻣﺘﺮ ai1و ai2آن دو ﻫﻮش ﻣﺼﻨﻮﻋﻲ را ﺑﻪ ﺑﺎزي ﻣﻲدﻫﻴﻢ. 6ﺑﺮاي راﺣﺘﻲ ﻣﻲﺗﻮاﻧﻴﺪ از ﺗﻮاﺑﻊ اﻳﺴﺘﺎي ﻛﻼس JOptionPaneاﺳﺘﻔﺎده ﻛﻨﻴﺪ. ﺗﻤﺮﻳﻦ ﺳﺮي ﺳﻮم ﺑﺮﻧﺎﻣﻪ ﺳﺎزي ﺷﻲءﮔﺮا } 5 ﻣﺘﺪﻫﺎي ﺑﻌﺪي ﺑﺮاي ﺗﺴﺖ ﺧﻮدﻛﺎر ﺑﺮﻧﺎﻣﻪ در ﺣﺎﻟﺖ ﺑﺎزي ﻫﻮش ﻣﺼﻨﻮﻋﻲ ﺑﺎ ﻫﻮش ﻣﺼﻨﻮﻋﻲ ﻣﻲﺑﺎﺷﻨﺪ ،و ﺑﺮاي ﺣﺎﻟﺘﻲ ﻛﻪ اﻧﺴﺎن ﺑﺎ اﻧﺴﺎن در ﺣﺎل ﺑﺎزي ﻛﺮدن اﺳﺖ ،ﻛﺎﺑﺮدي ﻧﺪارﻧﺪ. ﻣﺘﺪ ،nextMoveﻣﺘﺪ moveرا ﺑﺮاي ﺑﺎزﻳﻜﻨﻲ ﻛﻪ اﻛﻨﻮن ﻧﻮﺑﺖ اوﺳﺖ ،ﻓﺮاﺧﻮاﻧﻲ ﻣﻲﻛﻨﺪ .در ﺻﻮرﺗﻴﻜﻪ ﻫﺮ ﻛﺪام از ﺣﺎﻟﺖﻫﺎي اﺳﺘﺜﻨﺎ رخ دﻫﺪ ،ﻣﺴﺘﻘﻞ از ﻧﻮع ﺧﻄﺎ ،ﺑﺎﻳﺪ ﻳﻚ ChessExceptionﺣﺎوي ﭘﻴﻐﺎم ”“Exception for X ﺑﻴﻨﺪازد ﻛﻪ در آن Xﻣﺸﺨﺺ ﻛﻨﻨﺪهي رﻧﮓ ﻣﻬﺮهي ﺑﺎزﻳﻜﻨﻲ اﺳﺖ ﻛﻪ ﺧﻄﺎ ﺑﺮاي آن رخ داده اﺳﺖ .ﺑﺮاي ﻣﺜﺎل اﮔﺮ اﻳﻦ ﺧﻄﺎ ﺑﺮاي ﺑﺎزﻳﻜﻦ ﺑﺎ رﻧﮓ ﺳﻔﻴﺪ رخ دﻫﺪ ،ﺑﺎﻳﺪ ﺣﺎوي ﭘﻴﻐﺎم ” “Exception for Wﺑﺎﺷﺪ و اﮔﺮ ﺑﺮاي ﺑﺎزﻳﻜﻦ ﺑﺎ رﻧﮓ ﺳﻴﺎه رخ دﻫﺪ ،ﺑﺎﻳﺪ ﺣﺎوي ﭘﻴﻐﺎم ” “Exception for Bﺑﺎﺷﺪ. ﻣﺘﺪ ،getTurnﻣﺸﺨﺺ ﻣﻲﻛﻨﺪ ﻛﻪ ﻧﻮﺑﺖ ﻛﺪام ﺑﺎزﻳﻜﻦ اﺳﺖ .در ﺻﻮرﺗﻴﻜﻪ ﻧﻮﺑﺖ ﺑﺎزﻳﻜﻦ ﺳﻴﺎه ﺑﺎﺷﺪ ،ﻛﺎراﻛﺘﺮ ’ ‘Bو در ﺻﻮرﺗﻴﻜﻪ ﻧﻮﺑﺖ ﺑﺎزﻳﻜﻦ ﺳﻔﻴﺪ ﺑﺎﺷﺪ ،ﻛﺎراﻛﺘﺮ ’ ‘Wرا ﺑﺮﻣﻲﮔﺮداﻧﺪ. ﻣﺘﺪ ،getPieceInاﻳﻦ ﻣﺘﺪ ﻣﺸﺨﺺ ﻣﻲﻛﻨﺪ ﻛﻪ در ﺧﺎﻧﻪي placeﭼﻪ ﻣﻬﺮهاي ﻗﺮار دارد .در ﺻﻮرﺗﻴﻜﻪ ﻣﻬﺮهاي در اﻳﻦ ﺧﺎﻧﻪ ﻗﺮار داﺷﺖ ،ﻣﻘﺪار ﺧﺮوﺟﻲ اﻳﻦ ﻣﺘﺪ ،ﻫﻤﺎن ﻣﻘﺪار ﺧﺮوﺟﻲ ﻣﺘﺪ toStringﺑﺮاي آن ﻣﻬﺮه ﺧﻮاﻫﺪ ﺑﻮد و در ﺻﻮرﺗﻴﻜﻪ ﻣﻬﺮهاي در اﻳﻦ ﺧﺎﻧﻪ ﻗﺮار ﻧﺪاﺷﺖ ،ﻣﻘﺪار ﺧﺮوﺟﻲ ﺑﺮاي اﻳﻦ ﻣﺘﺪ “E” ،ﺧﻮاﻫﺪ ﺑﻮد .دﻗﺖ ﻛﻨﻴﺪ ﻛﻪ رﺷﺘﻪي ،placeرﺷﺘﻪاي اﺳﺖ ﻛﻪ ﻛﺎراﻛﺘﺮ اول آن ﺳﺘﻮن را ﻣﺸﺨﺺ ﻣﻲﻛﻨﺪ و ﻛﺎراﻛﺘﺮ دوم آن ،ﺳﻄﺮ را ﻣﺸﺨﺺ ﻣﻲﻛﻨﺪ .ﺑﺮاي ﻣﺜﺎل اﮔﺮ رﺷﺘﻪي ،palceﺑﺼﻮرت ” “F5ﺑﻮد ،ﻳﻌﻨﻲ ﺧﺎﻧﻪي ﺑﺎ ردﻳﻒ 5و ﺳﺘﻮن .Fدﻗﺖ ﻛﻨﻴﺪ در اﻳﻦ ﻣﺘﺪ در ﺻﻮرﺗﻴﻜﻪ رﺷﺘﻪي ﻣﺮﺑﻮط ﺑﻪ ﺧﺎﻧﻪي ورودي ،ﻣﺠﺎز ﻧﺒﻮد ،ﻣﻲﺗﻮاﻧﻴﺪ از IllegalArgumentExceptionاﺳﺘﻔﺎده ﻛﻨﻴﺪ. ﺟﻤﻊ ﺑﻨﺪي در ﻧﻬﺎﻳﺖ داﺷﺘﻦ ﻛﻼﺳﻬﺎي زﻳﺮ ﺑﺮاي اﻳﻦ ﺗﻤﺮﻳﻦ اﺟﺒﺎري اﺳﺖ: ﺗﻤﺮﻳﻦ ﺳﺮي ﺳﻮم ﺑﺮﻧﺎﻣﻪ ﺳﺎزي ﺷﻲءﮔﺮا 6 Class / Interface Package Chess ir.sharif.ce.javaclass.chess IPlayer … … ir.sharif.ce.javaclass.chess.ui Piece ir.sharif.ce.javaclass.chess.pieces … 6 more ChessException … 6 more ir.sharif.ce.javaclass.chess.exceptions دﻗﺖ ﻛﻨﻴﺪ ﻛﻪ در ﻧﻬﺎﻳﺖ در ﺻﻮرﺗﻲ ﻛﻪ ﺑﺎزي در ﺣﺎﻟﺖ 2ﻫﻮش ﻣﺼﻨﻮﻋﻲ اﺟﺮا ﺷﻮد ،ﻧﺒﺎﻳﺪ ﻫﻴﭻ ﮔﻮﻧﻪ ﻋﻤﻠﻴﺎت ﮔﺮاﻓﻴﻜﻲ اﻧﺠﺎم دﻫﺪ .ﻫﻤﭽﻨﻴﻦ ﻧﻴﺎز ﺑﻪ ﭘﻴﺎدهﺳﺎزي ﻣﺎت ﻧﻴﺴﺖ. ﺗﻤﺮﻳﻦ ﺳﺮي ﺳﻮم ﺑﺮﻧﺎﻣﻪ ﺳﺎزي ﺷﻲءﮔﺮا 7
© Copyright 2025 Paperzz