ﻣﺒﺎﻧ ﺑﺮﻧﺎﻣﻪﺳﺎزی ﻧﯿﻢﺳﺎل دوم ٩٢-٩١ ﻣﺪرس :ﺣﻤﯿﺪ ﺿﺮاﺑ زاده داﻧﺸ ﺪهی ﻣﻬﻨﺪﺳ ﮐﺎﻣﭙﯿﻮﺗﺮ ﭘﺮوژهی درس -ﺑﺨﺶ اول ﻣﯿﻦروب ﻣﻬﻠﺖ ارﺳﺎل ١۵ :اردیﺑﻬﺸﺖ ﻣﻘﺪﻣﻪ در اﯾﻦ ﭘﺮوژه ﻗﺼﺪ دارﯾﻢ در ﻗﺎﻟﺐ ﭘﯿﺎدهﺳﺎزی ﯾ ﺑﺎزی ﺑﻪ ﻧﺎم ﻣﯿﻦروب ،ﻣﻔﺎﻫﯿﻤ ﮐﻪ در درس ﯾﺎد ﮔﺮﻓﺘﻪاﯾﺪ را ﻣﺮور ﮐﻨﯿﻢ .اﯾﻦ ﭘﺮوژه ﺷﺎﻣﻞ دو ﺑﺨﺶ اﺳﺖ ﮐﻪ ﺑﺨﺶ اول آن را در زﯾﺮ ﻣ ﺑﯿﻨﯿﺪ. ﺑﺎزی ﻣﯿﻦروب ) (MineSweeperﯾ ﺑﺎزی ﻓ ﺮی ﺗ ﻧﻔﺮه اﺳﺖ .اﯾﻦ ﺑﺎزی ﺷﺎﻣﻞ ﯾ ﺻﻔﺤﻪی ﻣﺮﺑﻊ )ﯾﺎ ﻣﺴﺘﻄﯿﻞ( ﺷ ﻞ اﺳﺖ ﮐﻪ در ﺗﻌﺪادی از ﺧﺎﻧﻪﻫﺎی آن ﻣﯿﻦ ﻗﺮار داده ﺷﺪه اﺳﺖ .اﺑﺘﺪا ﻫﻤﻪی ﺧﺎﻧﻪﻫﺎ ﭘﻨﻬﺎن ﻫﺴﺘﻨﺪ و ﺑﺎزیﮐﻦ ﺑﺎﯾﺪ ﺗﻤﺎم ﻣﯿﻦﻫﺎ را ﭘﯿﺪا ﮐﻨﺪ .در ﻫﺮ ﺣﺮﮐﺖ ﻣﺎ ﻣ ﺗﻮاﻧﯿﻢ ﯾ ﺧﺎﻧﻪ را ﮐﻪ ﺣﺪس ﻣ زﻧﯿﻢ ﺷﺎﻣﻞ ﻣﯿﻦ ﻧﯿﺴﺖ آﺷ ﺎر ﮐﻨﯿﻢ .اﮔﺮ ﺣﺪس ﻣﺎ درﺳﺖ ﺑﺎﺷﺪ ،ﻣﺠﻤﻮع ﺗﻌﺪاد ﻣﯿﻦﻫﺎی ﻣﻮﺟﻮد در ﺧﺎﻧﻪﻫﺎی ﻫﻤﺴﺎﯾﻪی آن ﺧﺎﻧﻪ ﻧﻤﺎﯾﺶ داده ﻣ ﺷﻮد .اﮔﺮ ﺑﻪ اﺷﺘﺒﺎه ﺧﺎﻧﻪای ﮐﻪ ﺷﺎﻣﻞ ﻣﯿﻦ اﺳﺖ را آﺷ ﺎر ﮐﻨﯿﻢ ،ﺑﺎزی را ﺧﻮاﻫﯿﻢ ﺑﺎﺧﺖ .در ﺣﯿﻦ ﺑﺎزی ،ﺧﺎﻧﻪﻫﺎﯾ را ﮐﻪ ﺣﺪس ﻣ زﻧﯿﻢ ﺷﺎﻣﻞ ﻣﯿﻦ ﻫﺴﺘﻨﺪ ﺑﺎ ﭘﺮﭼﻢ ﻣﺸﺨﺺ ﻣ ﮐﻨﯿﻢ .اﮔﺮ ﺑﺘﻮاﻧﯿﻢ ﺗﻤﺎم ﻣﯿﻦﻫﺎی ﻣﻮﺟﻮد در ﺻﻔﺤﻪ را ﺑﻪ درﺳﺘ ﺑﯿﺎﺑﯿﻢ ،ﺑﺮﻧﺪهی ﺑﺎزی ﺧﻮاﻫﯿﻢ ﺑﻮد .ﺑﺮای آﺷﻨﺎﯾ ﺑﯿﺶﺗﺮ ﺑﺎ اﯾﻦ ﺑﺎزی ،ﻣ ﺗﻮاﻧﯿﺪ ﺑﻪ ﻧﺴﺨﻪی آﻧﻼﯾﻦ آن در MineSweeperOnline.comﻣﺮاﺟﻌﻪ ﮐﻨﯿﺪ. ﺷ ﻞ :١ﻧﻤﺎی ﮐﻠ ﺑﺎزی در اداﻣﻪی ﻣﻄﻠﺐ ،ﺗﻼش ﮐﺮدﯾﻢ ﺗﺎ ﮔﺎم ﺑﻪ ﮔﺎم ﺷﻤﺎ را وارد ﻓﻀﺎی ﭘﺮوژه ﮐﻨﯿﻢ .ﺷﻤﺎ ﻫﻢ ﺗﻼش ﮐﻨﯿﺪ ﺑﺎ دﻗﺖ ﺻﻮرت ﭘﺮوژه را ﻣﻄﺎﻟﻌﻪ ﮐﺮده و ﺑﺎ ﻫﺮ ﮔﺎم ،ﺗﺼﻮﯾﺮ ذﻫﻨ ﺧﻮد را از ﭘﺮوژه واﺿﺢﺗﺮ ﮐﻨﯿﺪ. ﻣﻮﻓﻖ ﺑﺎﺷﯿﺪ! ١ ١ ﺟﺪول ﺑﺎزی ﺑﺮای ﭘﯿﺎدهﺳﺎزی ﺑﺎزی ،ﻧﯿﺎز دارﯾﻢ ﮐﻪ اﻃﻼﻋﺎت ﺧﺎﻧﻪﻫﺎی ﺟﺪول را ﺑﻪ ﮔﻮﻧﻪای ذﺧﯿﺮه ﮐﻨﯿﻢ .ﺑﺮای ﻣﺜﺎل ،وﺟﻮد ﻣﯿﻦ، وﺟﻮد ﭘﺮﭼﻢ ،آﺷ ﺎر ﺑﻮدن و ﯾﺎ ﭘﻨﻬﺎن ﺑﻮدن ،ﻫﻤ وﯾﮋﮔ ﻫﺎی ﻣﺨﺘﻠﻔ در ﻣﻮرد ﺧﺎﻧﻪﻫﺎ ﻫﺴﺘﻨﺪ ﮐﻪ ﺑﺎﯾﺪ ﺑﻪ ﮔﻮﻧﻪای ﺗﻤﺎم آنﻫﺎ را ذﺧﯿﺮه ﮐﻨﯿﺪ .ﻫﺮﮐﺪام از اﯾﻦ وﯾﮋﮔ ﻫﺎ را ﻣ ﺗﻮان در ﻣﺘﻐﯿﺮﻫﺎﯾ از ﻧﻮع ﻟﯿﺴﺖ دوﺑﻌﺪی )ﻟﯿﺴﺘ از ﻟﯿﺴﺖﻫﺎ( ذﺧﯿﺮه ﮐﻨﯿﺪ .از آن ﺟﺎﯾ ﮐﻪ ﺗﻤﺎم ﺗﻮاﺑﻌ ﮐﻪ ﺑﻌﺪاً ﻣﻌﺮﻓ ﻣ ﺷﻮﻧﺪ ،ﺑﻪ اﯾﻦ اﻃﻼﻋﺎت ﻧﯿﺎز ﺧﻮاﻫﻨﺪ داﺷﺖ ،ﺑﺎﯾﺪ ﻣﺘﻐﯿﺮﻫﺎی ﻣﺮﺑﻮط ﺑﻪ ﺟﺪول ﺑﺎزی ﻫﻤ ﺑﻪ ﺻﻮرت globalﺗﻌﺮﯾﻒ ﺷﻮﻧﺪ. ﻧﻤﻮﻧﻪای از ﻣﺘﻐﯿﺮﻫﺎی ﻻزم ﺑﺮای ﺑﺎزی در زﯾﺮ ﺗﻌﺮﯾﻒ ﺷﺪهاﻧﺪ .اﻟﺒﺘﻪ ﺷﻤﺎ ﻣ ﺗﻮاﻧﯿﺪ در ﻃﻮل ﭘﺮوژه ﻫﺮ ﺗﻌﺪاد دﯾ ﺮی از ﻣﺘﻐﯿﺮﻫﺎ ﮐﻪ ﻧﯿﺎز دارﯾﺪ ﺑﻪ اﯾﻦ ﺑﺨﺶ اﺿﺎﻓﻪ ﮐﻨﯿﺪ ،و ﯾﺎ دادهﻫﺎ را ﺑﻪ ﻫﺮ ﺷ ﻞ ﻣﻨﻄﻘ دﯾ ﺮی ﻧ ﻪداری ﮐﻨﯿﺪ. # global variables global size , board , mines در ﻧﻤﻮﻧﻪ ﮐﺪ ﺑﺎﻻ ،ﻣﺘﻐﯿﺮ اول اﻧﺪازهی ﺟﺪول ،ﯾﻌﻨ ﺗﻌﺪاد ﺳﻄﺮﻫﺎ و ﺳﺘﻮنﻫﺎ را ﻧ ﻪداری ﻣ ﮐﻨﺪ .در اﯾﻦ ﭘﺮوژه ﻣﺎ ﻓﺮض ﻣ ﮐﻨﯿﻢ ﮐﻪ ﺟﺪول ﺑﺎزی ﻣﺮﺑﻌ ﺷ ﻞ اﺳﺖ و ﺑﻨﺎﺑﺮاﯾﻦ ﺗﻌﺪاد ﺳﻄﺮﻫﺎ و ﺳﺘﻮنﻫﺎی آن ﺑﺮاﺑﺮ اﺳﺖ .ﻣﺘﻐﯿﺮ board ﺑﺮای ﻧ ﻪداری وﺿﻌﯿﺖ ﺧﺎﻧﻪﻫﺎ از ﻟﺤﺎظ آﺷ ﺎرﺳﺎزی و ﻗﺮارﮔﺮﻓﺘﻦ ﭘﺮﭼﻢ اﺳﺘﻔﺎده ﻣ ﺷﻮد .ﺑﻪ ﻃﻮر ﻣﺜﺎل ،ﻫﺮ ﺧﺎﻧﻪ از اﯾﻦ ﺟﺪول ﻣ ﺗﻮاﻧﺪ ﺷﺎﻣﻞ ﻋﺪد ٠ﺑﻪ ﻣﻌﻨ ﭘﻨﻬﺎن ﺑﻮدن ١ ،ﺑﻪ ﻣﻌﻨ آﺷ ﺎر ﮔﺮدﯾﺪن ،و ٢ﺑﻪ ﻣﻌﻨ ﻗﺮار ﮔﺮﻓﺘﻦ ﭘﺮﭼﻢ ﺑﺎﺷﺪ .ﻣﺘﻐﯿﺮ minesﻧﯿﺰ ﺑﺮای ﻧ ﻪداری ﻣ ﺎنﻫﺎی ﻣﯿﻦ ﻣﻮرد اﺳﺘﻔﺎده ﻗﺮار ﻣ ﮔﯿﺮد. ٢ ﺗﻮﻟﯿﺪ ﺟﺪول ﺗﺼﺎدﻓ ﭘﯿﺶ از ﺷﺮوع ﺑﺎزی ،ﺑﺎﯾﺪ ﺟﺪول ﺑﺎزی را اﯾﺠﺎد ﮐﺮده و ﻣﯿﻦﻫﺎ را ﺑﻪ ﺻﻮرت ﺗﺼﺎدﻓ در ﺧﺎﻧﻪﻫﺎی آن ﻗﺮار دﻫﯿﺪ .ﺑﺮای اﯾﻦ ﮐﺎر ﺗﺎﺑﻌ ﺑﻪ ﺷ ﻞ زﯾﺮ ﺑﻨﻮﯾﺴﯿﺪ ﮐﻪ اﻧﺪازهی ﺟﺪول و ﺗﻌﺪاد ﻣﯿﻦﻫﺎ را ﺑﻪ ﻋﻨﻮان ورودی ﮔﺮﻓﺘﻪ و ﺟﺪول ﺑﺎزی را ﺑﺴﺎزد .ﺷﻤﺎ ﺑﺎﯾﺪ ﻫﻤﻪی ﻣﺘﻐﯿﺮﻫﺎی ﻣﺮﺑﻮط ﺑﻪ ﺟﺪول ﺑﺎزی را در اﯾﻦ ﺗﺎﺑﻊ ﻣﻘﺪاردﻫ ﮐﻨﯿﺪ. def create_board ( board_size , num_mines ): ''' '''Create a random board of given size with given number of mines ٣ ﻧﻤﺎﯾﺶ ﺟﺪول ﺑﺮای ﻧﻤﺎﯾﺶ ﺟﺪول ﺑﺎزی در ﺧﺮوﺟ ﺗﺎﺑﻊ زﯾﺮ را ﺗﻌﺮﯾﻒ ﻣ ﮐﻨﯿﻢ. def print_board ( show_mines = False ): ''' '''Print game board ; also show mines if show_mines is True اﯾﻦ ﺗﺎﺑﻊ ،ﺑﻪ ازای ﻫﺮ ﺧﺎﻧﻪی ﺑﺪون ﭘﺮﭼﻢ ﯾ ﮐﺎراﮐﺘﺮ ' '#و ﺑﻪ ازای ﻫﺮ ﺧﺎﻧﻪی ﭘﺮﭼﻢدار ﯾ ﻣ ﮐﻨﺪ .ﺑﻪ ﻃﻮر ﻣﺜﺎل در ﺟﺪول ۴ × ۴زﯾﺮ ﺧﺎﻧﻪﻫﺎی ) (٢, ٠و ) (٢, ٢ﺣﺎوی ﭘﺮﭼﻢ ﻫﺴﺘﻨﺪ. ﮐﺎراﮐﺘﺮ ' 'pﭼﺎپ # # # # ٢ # # p # # # # # # # p # ﭘﺎراﻣﺘﺮ ورودی اﯾﻦ ﺗﺎﺑﻊ ﻣﺸﺨﺺ ﻣ ﮐﻨﺪ ﮐﻪ آﯾﺎ ﻣﯿﻦﻫﺎ ﻧﯿﺰ ﺑﺎﯾﺪ در ﺟﺪول ﻧﺸﺎن داده ﺷﻮﻧﺪ ﯾﺎ ﺧﯿﺮ .در ﺻﻮرﺗ ﮐﻪ ﻣﻘﺪار اﯾﻦ ﭘﺎراﻣﺘﺮ Falseﺑﺎﺷﺪ ،ﻣﯿﻦﻫﺎ ﻫﻢ ﻣﺜﻞ ﺧﺎﻧﻪﻫﺎی ﺧﺎﻟ ﺑﺎ ﻫﻤﺎن ﮐﺎراﮐﺘﺮ ' ،'#و در ﺻﻮرﺗ ﮐﻪ ﻣﻘﺪار اﯾﻦ ﭘﺎراﻣﺘﺮ Trueﺑﺎﺷﺪ ﺑﺎ ﮐﺎراﮐﺘﺮ '@' ﻧﺸﺎن داده ﻣ ﺷﻮﻧﺪ) .ﺧﺎﻧﻪﻫﺎی ﻣﯿﻨ ﮐﻪ ﺑﺮ روی آنﻫﺎ ﭘﺮﭼﻢ ﮔﺬاﺷﺘﻪ ﺷﺪه اﺳﺖ ﺑﺎ ﻫﻤﺎن ' 'pﻧﺸﺎن داده ﺷﻮﻧﺪ (.ﻣﺜﺎل زﯾﺮ را ﺑﺒﯿﻨﯿﺪ. # # @ # # # p # @ # # @ # # p # ۴ﭘﺮﭼﻢ ﮔﺬاری ﻫﻤﺎنﻃﻮر ﮐﻪ دﯾﺪﯾﻢ ،ﺑﺎزیﮐﻦ ﻣ ﺗﻮاﻧﺪ در ﻃﻮل ﺑﺎزی ﺑﺮ روی ﺧﺎﻧﻪﻫﺎﯾ ﮐﻪ ﺣﺪس ﻣ زﻧﺪ ﺷﺎﻣﻞ ﻣﯿﻦ ﻫﺴﺘﻨﺪ ،ﭘﺮﭼﻢ ﻗﺮار دﻫﺪ .در اﯾﻦ ﺑﺨﺶ ﺗﻮاﺑﻊ ﻣﻮردﻧﯿﺎز ﺑﺮای ﮔﺬاﺷﺘﻦ و ﺑﺮداﺷﺘﻦ ﭘﺮﭼﻢﻫﺎ را ﭘﯿﺎدهﺳﺎزی ﻣ ﮐﻨﯿﻢ. ﺗﺎﺑﻊ زﯾﺮ در ﺳﻄﺮ و ﺳﺘﻮن دادهﺷﺪه ﯾ ﭘﺮﭼﻢ ﻗﺮار ﻣ دﻫﺪ. def put_flag (row , col): ''' '''Put a flag in the given cell ﺗﺎﺑﻊ زﯾﺮ ﭘﺮﭼﻢ ﻣﻮﺟﻮد در ﺧﺎﻧﻪی دادهﺷﺪه را ﺣﺬف ﻣ ﮐﻨﺪ. def remove_flag (row , col): ''' '''Remove flag from the given cell if any exists ۵ آﺷ ﺎرﺳﺎزی در اﯾﻦ ﺑﺨﺶ ،ﺗﻮاﺑﻊ ﻣﺮﺑﻮط ﺑﻪ اﺟﺮای ﺑﺎزی را ﭘﯿﺎدهﺳﺎزی ﻣ ﮐﻨﯿﻢ .اﺑﺘﺪا ﻻزم اﺳﺖ ﮐﻪ ﺑﺘﻮاﻧﯿﻢ ﺗﻌﺪاد ﻣﯿﻦﻫﺎی اﻃﺮاف ﯾ ﺧﺎﻧﻪ از ﺟﺪول را ﻣﺤﺎﺳﺒﻪ ﮐﻨﯿﻢ .ﺗﺎﺑﻊ count_minesاﯾﻦ ﮐﺎر را ﺑﺮای ﻣﺎ اﻧﺠﺎم دﻫﺪ .ﺑﻪ اﯾﻦ ﺻﻮرت ﮐﻪ ﻣﺨﺘﺼﺎت ﯾ ﺧﺎﻧﻪ را ﮔﺮﻓﺘﻪ و ﺗﻌﺪاد ﻣﯿﻦﻫﺎی ﻣﻮﺟﻮد در )ﺣﺪاﮐﺜﺮ( ﻫﺸﺖ ﺧﺎﻧﻪی اﻃﺮاف آن را ﺑﺮﻣ ﮔﺮداﻧﺪ. def count_mines (row , col): ''' '''Count the number of mines in cells adjacent to a given cell ﺗﺎﺑﻊ زﯾﺮ ﺧﺎﻧﻪی دادهﺷﺪه از ﺟﺪول را آﺷ ﺎر ﻣ ﮐﻨﺪ )ﻣﺸﺎﺑﻪ ﮐﻠﯿ ﮐﺮدن ﺑﺮ روی ﯾ ﺧﺎﻧﻪ در ﺑﺎزی ﮔﺮاﻓﯿ ( .اﮔﺮ ﺧﺎﻧﻪی اﻧﺘﺨﺎبﺷﺪه ﺧﺎﻟ ﺑﻮد ،ﺧﺮوﺟ ﺗﺎﺑﻊ ﺗﻌﺪاد ﻣﯿﻦﻫﺎی ﻣﻮﺟﻮد در ﺧﺎﻧﻪﻫﺎی اﻃﺮاف آن ﺧﺎﻧﻪ ﺧﻮاﻫﺪ ﺑﻮد .در ﺻﻮرﺗ ﮐﻪ ﺧﺎﻧﻪی اﻧﺘﺨﺎبﺷﺪه ﺣﺎوی ﯾ ﻣﯿﻦ ﺑﻮد ،ﺧﺮوﺟ ﺗﺎﺑﻊ −١اﺳﺖ. def reveal_cell (row , col): '''Reveal a cell. If it is bomb , return -1, else retuen number of ''' mines around the cell ٣ ﻫﻨ ﺎم ﻓﺮاﺧﻮاﻧ ﺗﺎﺑﻊ print_boardﺑﻪ ازای ﺧﺎﻧﻪﻫﺎﯾ ﮐﻪ آﺷ ﺎر ﺷﺪهاﻧﺪ ،ﺑﻪ ﺟﺎی ' '#ﺑﺎﯾﺪ ﺗﻌﺪاد ﻣﯿﻦﻫﺎﯾ ﮐﻪ در اﻃﺮاف آن ﺧﺎﻧﻪ وﺟﻮد دارد ﮔﺬاﺷﺘﻪ ﺷﻮد .ﺑﺮای ﻣﺜﺎل اﮔﺮ در ﺟﺪول ﻗﺒﻠ ،ﺗﺎﺑﻊ reveal_cellرا ﺑﺮای ﺧﺎﻧﻪ )(١, ١ و ﺳﭙﺲ ) (٠, ٣ﻓﺮاﺧﻮاﻧ ﮐﻨﯿﻢ ،ﺑﺎ ﺻﺪا زدن ﺗﺎﺑﻊ ) print_board(Trueﺧﺮوﺟ زﯾﺮ را ﺧﻮاﻫﯿﻢ داﺷﺖ. 0 # @ # # # p # @ 1 # @ # # p # ﻧ ﺘﻪ :ﻫﻤﺎنﻃﻮر ﮐﻪ ﻣﺸﺎﻫﺪه ﻣ ﮐﻨﯿﺪ ،ﺧﺎﻧﻪی ) (٠, ٣دارای ﻣﻘﺪار ﺻﻔﺮ اﺳﺖ .در ﺑﺎزی اﺻﻠ ﻣﯿﻦروب ،ﻫﺮﮔﺎه ﺷﻤﺎ ﺑﺮ روی ﺧﺎﻧﻪای ﮐﻪ ﻋﺪد آن ﺻﻔﺮ اﺳﺖ )ﯾﻌﻨ ﻧﻪ ﺧﻮدش و ﻧﻪ ﻫﯿﭻﮐﺪام از ﻫﻤﺴﺎﯾ ﺎﻧﺶ ﻣﯿﻦ ﻧﺪارﻧﺪ( ﮐﻠﯿ ﮐﻨﯿﺪ، ﺧﺎﻧﻪﻫﺎی ﺟﺪول ﺗﺎ رﺳﯿﺪن ﺑﻪ ﻣﺮز ﺟﺪول ﯾﺎ ﺧﺎﻧﻪﻫﺎی ﻏﯿﺮﺻﻔﺮ ﻫﻤ آﺷ ﺎر ﻣ ﺷﻮﻧﺪ .در اﯾﻦ ﻗﺴﻤﺖ از ﭘﺮوژه ،ﺑﺮای ﺳﺎدﮔ ﮐﺎر ﺷﻤﺎ ،اﯾﻦ ﻗﺴﻤﺖ اﻣﺘﯿﺎزی ﺧﻮاﻫﺪ ﺑﻮد! اﮔﺮ ﻋﺪد ﺧﺎﻧﻪای ﮐﻪ آﺷ ﺎر ﻣ ﮐﻨﯿﺪ ﺻﻔﺮ ﺑﻮد ،ﺑﻪ ﺻﻮرت ﺑﺎزﮔﺸﺘ ﺗﻤﺎم ﺧﺎﻧﻪﻫﺎی ﻫﻤﺴﺎﯾﻪی آن را ﮐﻪ ﺻﻔﺮ ﻫﺴﺘﻨﺪ آﺷ ﺎر ﮐﻨﯿﺪ. ۶ وﺿﻌﯿﺖ ﺑﺮد در اﯾﻦ ﻗﺴﻤﺖ ﻣ ﺧﻮاﻫﯿﻢ وﺿﻌﯿﺖ ﺑﺮدن ﺑﺎزی را ﭼ ﮐﻨﯿﻢ .ﺑﺎزیﮐﻦ ﻣﻮﻗﻌ ﺑﺎزی را ﻣ ﺑﺮد ﮐﻪ ﻫﻤﻪی ﺧﺎﻧﻪﻫﺎی ﺧﺎﻟ ﺟﺪول آﺷ ﺎر ﺷﺪه ﺑﺎﺷﻨﺪ و روی ﻫﻤﻪی ﺧﺎﻧﻪﻫﺎی ﺣﺎوی ﻣﯿﻦ در ﻧﻘﺸﻪ ﭘﺮﭼﻢ ﮔﺬاﺷﺘﻪ ﺷﺪه ﺑﺎﺷﺪ .ﺗﺎﺑﻊ زﯾﺮ ﺑﺎﯾﺪ ﺑﺮرﺳ ﮐﻨﺪ ﮐﻪ آﯾﺎ ﭼﻨﯿﻦ ﺣﺎﻟﺘ ﭘﯿﺶ آﻣﺪه اﺳﺖ ﯾﺎ ﺧﯿﺮ .اﮔﺮ ﭘﯿﺶ آﻣﺪه ﺑﺎﺷﺪ ﺗﺎﺑﻊ ﻣﻘﺪار Trueو در ﻏﯿﺮ اﯾﻦ ﺻﻮرت ﻣﻘﺪار Falseﺑﺮﻣ ﮔﺮداﻧﺪ. def won (): ''' '''Check if the player has won or not ٧ ﺑﺎزی ﻧﻬﺎﯾ ﺣﺎﻻ ﻣ ﺧﻮاﻫﯿﻢ ﺑﺎ اﺳﺘﻔﺎده از ﺗﺎﺑﻊﻫﺎﯾ ﮐﻪ ﻧﻮﺷﺘﯿﻢ ،ﯾ ﻧﻮﺷﺘﻪ ﻣ ﺷﻮد. ﺑﺎزی ﮐﺎﻣﻞ و ﻗﺎﺑﻞ اﺟﺮا ﺑﺴﺎزﯾﻢ .ﮐﺪ اﯾﻦ ﻗﺴﻤﺖ در ﺗﺎﺑﻊ زﯾﺮ def main (): ''' '''The main loop of the game اﺑﺘﺪا از ورودی دو ﻋﺪد ﺑﺨﻮاﻧﯿﺪ ﮐﻪ ﺑﻪ ﺗﺮﺗﯿﺐ ﻣﺸﺨﺺﮐﻨﻨﺪهی اﻧﺪازهی ﺟﺪول )ﺗﻌﺪاد ﺳﻄﺮﻫﺎ و ﺳﺘﻮنﻫﺎی آن( و ﺗﻌﺪاد ﻣﯿﻦﻫﺎی ﻣﻮﺟﻮد در ﺟﺪول اﺳﺖ .ﺑﺎ اﺳﺘﻔﺎده از ﺗﺎﺑﻊ ﻧﻮﺷﺘﻪﺷﺪه در ﺑﺨﺶﻫﺎی ﻗﺒﻞ ،ﯾ ﺟﺪول ﺗﺼﺎدﻓ ﺑﺎ ﻣﺸﺨﺼﺎت دادهﺷﺪه ﺗﻮﻟﯿﺪ ﮐﻨﯿﺪ .ﺳﭙﺲ ﺗﺎ ﺗﻤﺎم ﺷﺪن ﺑﺎزی ،دﺳﺘﻮرﻫﺎی ﮐﺎرﺑﺮ را از ورودی ﺑ ﯿﺮﯾﺪ و آن را اﺟﺮا ﮐﻨﯿﺪ. دﺳﺘﻮرﻫﺎﯾ ﮐﻪ ﮐﺎرﺑﺮ وارد ﻣ ﮐﻨﺪ در ﻗﺎﻟﺐ زﯾﺮ ﻫﺴﺘﻨﺪ: > [r|f|u|x] <row > <col ﻫﺮ دﺳﺘﻮر ﺑﺎ ﯾ از ﮐﺎراﮐﺘﺮﻫﺎی u, f, rو xﺷﺮوع ﺷﺪه و ﺳﭙﺲ ﻣﺨﺘﺼﺎت ﯾ ﺧﺎﻧﻪ از ﻧﻘﺸﻪ داده ﻣ ﺷﻮد .ﺷﻤﺎ ﺑﺎﯾﺪ دﺳﺘﻮری ﮐﻪ ﮐﺎراﮐﺘﺮ دادهﺷﺪه ﻣﺸﺨﺺ ﻣ ﮐﻨﺪ را ﺑﺮ روی آن ﺧﺎﻧﻪ اﺟﺮا ﮐﻨﯿﺪ .دﺳﺘﻮرﻫﺎ ﺑﻪ ﺻﻮرت زﯾﺮ ﻫﺴﺘﻨﺪ: • :rدﺳﺘﻮر آﺷ ﺎرﺳﺎزی اﺳﺖ .ﯾﻌﻨ ﺑﺎﯾﺪ روی ﺧﺎﻧﻪی دادهﺷﺪه ﺗﺎﺑﻊ reveal_cellرا ﺻﺪا ﺑﺰﻧﯿﺪ. ۴ • :fدﺳﺘﻮر ﮔﺬاﺷﺘﻦ ﭘﺮﭼﻢ اﺳﺖ .ﯾﻌﻨ ﺑﺎﯾﺪ روی ﺧﺎﻧﻪی دادهﺷﺪه ﺗﺎﺑﻊ put_flagرا ﺻﺪا ﺑﺰﻧﯿﺪ. • :uدﺳﺘﻮر ﺑﺮداﺷﺘﻦ ﭘﺮﭼﻢ اﺳﺖ .ﯾﻌﻨ ﺑﺎﯾﺪ روی ﺧﺎﻧﻪی دادهﺷﺪه ﺗﺎﺑﻊ remove_flagرا ﺻﺪا ﺑﺰﻧﯿﺪ. • :xدﺳﺘﻮر ﺧﺮوج از ﺑﺮﻧﺎﻣﻪ اﺳﺖ .در ﺻﻮرت ورود اﯾﻦ دﺳﺘﻮر ،ﻧﯿﺎزی ﺑﻪ ذﮐﺮ ﻣﺨﺘﺼﺎت ﺧﺎﻧﻪای از ﺟﺪول ﻧﯿﺴﺖ. ﺑﻪ ﻋﻨﻮان ﻣﺜﺎل ،دﺳﺘﻮر زﯾﺮ ﺑﻪ اﯾﻦ ﻣﻌﻨ اﺳﺖ ﮐﻪ ﺧﺎﻧﻪی ﻣﻮﺟﻮد در ﺳﻄﺮ ٣و ﺳﺘﻮن ٢را آﺷ ﺎر ﮐﻨﯿﺪ. r 3 2 ﺑﻌﺪ از ورود ﻫﺮ ﯾ از دﺳﺘﻮرﻫﺎی ﺑﺎﻻ و اﺟﺮای آن ﺗﻮﺳﻂ ﺑﺮﻧﺎﻣﻪ ،ﺑﺎﯾﺪ ﻧﻘﺸﻪی ﺑﺎزی را )ﺑﺪون ﻧﺸﺎن دادن ﻣﺤﻞ ﻣﯿﻦﻫﺎ( ﭼﺎپ ﮐﻨﯿﺪ .در ﺻﻮرﺗ ﮐﻪ دﺳﺘﻮر دادهﺷﺪه ﺗﻮﺳﻂ ﮐﺎرﺑﺮ ﻣﻌﺘﺒﺮ ﻧﺒﻮد ،ﻣﺜﻼ ﮐﺎراﮐﺘﺮﻫﺎی واردﻧﺸﺪه ﻫﯿﭻ ﯾ از ﭼﻬﺎر ﮐﺎرﮐﺘﺮ ﻣﻮردﻧﻈﺮ ﻧﺒﻮده ،ﯾﺎ ﻣﺨﺘﺼﺎت دادهﺷﺪه ﺻﺤﯿﺢ ﻧﺒﻮد ،ﻋﺒﺎرت زﯾﺮ را ﭼﺎپ ﮐﺮده و ﺑﻪ ﺳﺮاغ دﺳﺘﻮر ﺑﻌﺪی ﺑﺮوﯾﺪ. ! Invalid Command ﺑﻌﺪ از اﺟﺮای ﻫﺮ دﺳﺘﻮر ﺑﺎﯾﺪ ﺑﺮرﺳ ﮐﻨﯿﺪ ﮐﻪ آﯾﺎ ﺑﺎزی ﺗﻤﺎم ﺷﺪه اﺳﺖ ﯾﺎ ﺧﯿﺮ .در ﺻﻮرﺗ ﮐﻪ ﺑﺎزیﮐﻦ ﺑﺎﺧﺘﻪ ﺑﺎﺷﺪ )ﯾﻌﻨ دﺳﺘﻮر آﺷ ﺎرﺳﺎزی ﺧﺎﻧﻪی ﮐﻪ در آن ﻣﯿﻦ اﺳﺖ را وارد ﮐﺮده ﺑﺎﺷﺪ( ﻋﺒﺎرت زﯾﺮ را ﭼﺎپ ﮐﻨﯿﺪ: !You Lost در ﺻﻮرﺗ ﮐﻪ ﺑﺎزیﮐﻦ ﺑﺎزی را ﺑﺮده ﺑﺎﺷﺪ ،ﻋﺒﺎرت زﯾﺮ را ﭼﺎپ ﮐﻨﯿﺪ: !You Won ﺑﻌﺪ از ﭼﺎپ ﻫﺮ ﮐﺪام از ﻋﺒﺎرتﻫﺎی ﺑﺎﻻ ،اﺟﺮای ﺑﺮﻧﺎﻣﻪ را ﺗﻤﺎم ﮐﻨﯿﺪ. ۵
© Copyright 2025 Paperzz