Assignment3.pdf

‫تمرین سری سوم‬
‫درس برنامه نویسی شیءگرا‬
‫موعد ارسال‪ :‬چهارشنبه ‪ 1‬دی ‪1831‬‬
‫اهیر ضیخْا‬
‫تمرین سری سوم برنامه سازی شیءگرا‬
‫مهلت تحویل‪ :‬چهارشنبه ‪ 1‬دی ‪1831‬‬
‫نکات کلی‬
‫‪ ‬در ایي توریي ضوا ترًاهِی قاتل اخرایی ًویًَیسیذ ٍ فقظ چٌذ کالس را پیادُسازی هیکٌیذ‪.‬‬
‫‪ّ ‬ذف از ایي توریي‪ ،‬آضٌایی تیطتر تا هفاّین ‪ ٍ interface ،exception ،package‬کار تیطتر تا هحیظ‬
‫گرافیکی است‪.‬‬
‫‪ ‬ترای ارسال‪ّ ،‬وِی فایلّای خَد را در یک فایل تِ ًام ‪ STDID.zip‬قرار دّیذ‪$ .‬کِ ‪ STDID‬ضوارُ‬
‫داًطدَییتاى هیتاضذ‪ #.‬دقت کٌیذ کِ فایلّای خَد را تذٍى قرار دادى در ّیچ پَضِای در فایل ‪ zip‬قرار‬
‫دّیذ‪ .‬در ٍاقغ تایذ داخل فایل ‪ zip‬ضوا فقظ پَضِی ‪ ٍ ir‬هحتَیات آى قرار داضتِ تاضذ‪.‬‬
‫‪ ‬ترای ارسال توریي تِ آدرس زیر هراخؼِ کٌیذ‪:‬‬
‫‪http://ce.sharif.edu/~shaikhha/java901‬‬
‫‪ ‬هَػذ ارسال‪ ،‬ساػت ‪$ 11:5:‬ظْر‪ #‬رٍز چْارضٌثِ ‪ 1‬دی ‪ 131:‬تَدُ ٍ تِ ّیچ ػٌَاى توذیذ ًخَاّذ ضذ‪.‬‬
‫‪ ‬تأخیر تا ‪ 1‬ساػت‪ ،‬تِ ازای ّر ‪ 3‬دقیقِ هَخة کسر ضذى ‪ً "1‬ورُ‪ ،‬از ‪ 1‬ساػت تا ‪ 42‬ساػت هَخة کسر ضذى‬
‫‪ً "42‬ورُ‪ ،‬از ‪ 42‬ساػت تا ‪ 45‬ساػت‪ ،‬تِ ازای ّر ‪ 4‬دقیقِ هَخة کسر ضذى ‪ً "1‬ورُی دیگر ٍ تیي ‪ 45‬ساػت‬
‫تا ‪ 21‬ساػت تاػث کسر ضذى ‪ً "52‬ورُ هیضَد‪ .‬تأخیر تیطتر از ‪ 21‬ساػت قاتل قثَل ًیست‪.‬‬
‫‪ ‬قغغ تَدى ایٌترًت خَاتگاُ‪ ،‬کٌذی پایگاُ ایٌترًتی داًطکذُ‪ ،‬توام ضذى کارت ایٌترًت ٍ … ّیچکذام دلیل‬
‫هَخْی ترای تأخیر ًیستٌذ‪ .‬تٌاترایي پیطٌْاد هیضَد خَابّای خَد را در دانشکده ارسال کٌیذ‪.‬‬
‫‪ّ ‬رگًَِ رًٍَضت‪ ،1‬ترای هٌثغ رًٍَضت ٍ ّوچٌیي ًسخِّای رًٍَیسی ضذُ ‪ً -4‬ورُ در پی خَاّذ داضت‪ .‬دقت‬
‫داضتِ تاضیي کِ ها حَاسوَى تِ ّوِ چی ّست!‬
‫صفر در ایي توریي هیضَد‪.‬‬
‫‪ ‬کالسّا ٍ هتذّای گفتِ ضذُ در آىّا حذاقلّای الزم ّستٌذ‪ .‬یؼٌی ضوا هیتَاًیذ ترای راحتتر ضذى پیادُ‪-‬‬
‫سازیتاى یا ضیگراتر ضذى کذتاى تِ ایي کالسّا هتذّای دیگری اضافِ کٌیذ یا تِ کل توریي کالسّای‬
‫دیگری اضافِ کٌیذ‪ٍ .‬لی دقت داضتِ تاضیذ کِ کالسّای گفتِ ضذُ ٍ هتذّای آًْا تایذ تِ ّویي ضکل‪ ،‬هَخَد‬
‫تاضٌذ‪.‬‬
‫‪1‬‬
‫کپی یا ّواى کُپ‬
‫توریي سری سَم ترًاهِ سازی ضیءگرا‬
‫‪ ‬تالش ترای استفادُ از هٌاتغ سیستن هاًٌذ کارت صذا ٍ پریٌتر ٍ ًَضتي تِ فایل ٍ ‪ ...‬هٌدر تِ دریافت ًورُی‬
‫‪1‬‬
‫‪ ‬قسوتی از ًورُ تِ ضیگرا تَدى ترًاهِ ًَضتِ ضذُ تستگی دارد‪ .‬تٌاترایي تِ ضیگرا ًَضتي ترًاهِتاى دقت کٌیذ‪.‬‬
‫‪ ‬از آًدایی کِ تخطی از ًورُ هرتَط تِ تصحیح خَدکار است‪ ،‬ػذم رػایت ًکات ظریف هاًٌذ ًام هتذّا‪ً ،‬ام‬
‫کالسْا‪ ،‬صَرت صحیح رضتِّا‪$‬اػن از تسرگی ٍ کَچکی کاراکترّا‪ ... ٍ #‬هَخة اختالل در رًٍذ تصحیح ‪ً ٍ$‬ورُ‪#‬‬
‫خَاّذ ضذ‪$ .‬دقت کٌیذ کِ ایي توریي تصحیح ترخظ ًذارد ٍلی تؼذ از پایاى هْلت ارسال تِ صَرت خَدکار‬
‫تصحیح هیضَد‪#.‬‬
‫‪ً ‬حَُی ًورُدّی تِ صَرت زیر هیتاضذ‪:‬‬
‫‪ o‬تصحیح خَدکار ‪ً "52 ‬ورُ‬
‫‪ o‬رػایت اصَل ضیگرایی ٍ آداب ترًاهًَِیسی خاٍا ‪ً "45 ‬ورُ‬
‫‪ o‬دادى پیغام هٌاسة تِ ٌّگام ترٍز خغا ‪ً "12 ‬ورُ‬
‫‪ٍ o‬اسظ کارتری‪ً "15  4‬ورُ‬
‫‪ ‬سَاالت خَد را تا فرستادى ایویل تِ آدرس ‪ [email protected]‬هغرح کٌیذ‪.‬‬
‫‪ ‬هدذداً دقت داضتِ تاضیذ کِ ها حَاسوَى تِ ّوِ چی ّست! پس فکرای تذتذ ًکٌیي!‬
‫توریي سری سَم ترًاهِ سازی ضیءگرا‬
‫‪4‬‬
‫‪4‬‬
‫زیثایی ٍاسظ کارتری ًورُ ًذارد‪ ٍ ،‬فقظ کارآیی ٍاسظ کارتری ّواىعَر کِ در اداهِ گفتِ خَاّذ ضذ‪ ،‬هذًظر است‪.‬‬
‫مقدمه‬
‫در ایي توریي‪ ،‬ضوا تایذ تازی ضغرًح را پیادُ سازی کٌیذ‪ .‬ترای اعالػات تیطتر در زهیٌِی ایي تازی هیتَاًیذ تِ آدرس‬
‫‪ 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‬خَد داضتِ تاضذ کِ ‪ 4‬هتذ ‪ abstract‬دارد‪ .‬ایي هتذّا ػثارتٌذ از‪$ :‬پاراهترّای‬
‫ایي هتذّا تر ػْذُی خَدتاى است‪#.‬‬
‫‪ :draw ‬ایي تاتغ ٍظیفِی رسن هْرُ را تر ػْذُ دارد‪.‬‬
‫‪ :canMoveTo ‬ایي تاتغ آدرس یک خاًِ را هیگیرد ٍ چک هیکٌذ کِ آیا ایي هْرُ هیتَاًذ تِ آى خاًِ ترٍد‬
‫یا ًِ‪ً$ .‬یاز تِ پیادُ سازی حرکت ضاُ‪-‬قلؼِ‪ ٍ 3‬ارتقاء سرتاز‪ً 2‬یست‪#‬‬
‫سپس تِ ازای ّر ًَع هْرُ از ضغرًح‪ ،‬تایذ یک کالس تگیریذ کِ تچِ ایي کالس ‪ Piece‬تاضذ‪ .‬ترای ّر ًَع هْرُ‪ ،‬تایذ‬
‫هتذ ‪ toString‬را ‪ override‬کٌیذ کِ خرٍخی آى تصَرت ”‪ “XY‬هیتاضذ‪ً Y .‬طاىدٌّذُی رًگ هْرُ هیتاضذ ‪$‬در‬
‫صَرتیکِ سفیذ تَد‪ ٍ W ،‬در صَرتیکِ سیاُ تَد‪ B ،‬خَاّذ تَد‪ًَ ،X ٍ #‬ع هْرُ هیتاضذ کِ هغاتق تا خذٍل زیر هطخص‬
‫هیگردد‪$ :‬ترای هثال سرتاز سیاُ تصَرت ”‪ ٍ “PB‬اسة سفیذ تصَرت ”‪ “NW‬هطخص هیضًَذ‪#.‬‬
‫توریي سری سَم ترًاهِ سازی ضیءگرا‬
‫‪2‬‬
‫اسب‬
‫فیل‬
‫وزیر‬
‫شاه‬
‫سرباز‬
‫قلعه (رخ)‬
‫‪N‬‬
‫‪B‬‬
‫‪Q‬‬
‫‪K‬‬
‫‪P‬‬
‫‪R‬‬
‫خطا ها‬
‫کلیِی کالسْای هرتَط تِ خغاّا تایذ داخل پکیح ‪ ir.sharif.ce.javaclass.chess.exceptions‬تاضٌذ‪.‬‬
‫اٍلیي کالسی کِ تایذ در ایي پکیح در ًظر تگیریذ‪ ،‬کالس ‪ ChessException‬است کِ تچِی ‪ Exception‬هیتاضذ‪.‬‬
‫‪3‬‬
‫‪Castling‬‬
‫‪2‬‬
‫‪ٍ :Promotion‬قتی کِ سرتاز یک تازیکي تِ خاًِی آخر رسیذ‪ ،‬حق دارد تدای آى یک هْرُی هغلَب تیاٍرد‪.‬‬
‫‪5‬‬
‫‪Exception‬‬
‫ترًاهِی ضوا تایذ خغاّای الزم را تِ کارتر تذّذ‪$ .‬دقت کٌیذ کِ ایي خغاّا در حالتی کِ ‪ 4‬اًساى تا ّن تازی هی کٌٌذ‪،‬‬
‫تایذ تِ صَرت گرافیکی تِ کارتر ًطاى دادُ ضًَذ ٍ در حالتی کِ ‪َّ 4‬ش هصٌَػی تا ّن تازی هیکٌٌذ ًثایذ تِ صَرت‬
‫گرافیکی ًطاى دادُ ضًَذ‪ #‬خغاّایی کِ پیادُ سازی آًْا ضرٍری است ػثارتٌذ از‪:‬‬
‫‪ ‬حرکت اضتثاُ هْرُّا‬
‫‪ ‬کیص تَ دى‪$‬هَقؼی کِ در حالت کیص تَدى‪ ،‬حرکتی اًدام دّذ کِ ٌَّز کیص تواًذ یا در ٍضؼیت ػادی‪،‬‬
‫حرکتی کٌذ کِ تِ حالت کیص ترٍد‪#.‬‬
‫‪ ‬پرش از رٍی هْرُّا ‪$‬ترای هْرُّای غیر اسة!‪#‬‬
‫‪ ‬ػذم رػایت ًَتت‬
‫‪ ‬خالی تَدى خاًِ‬
‫‪ ‬زدى هْرُی خَدی‪#!$‬‬
‫دقت کٌیذ کِ ترای ّر خغا تایذ یک کالس خذاگاًِ تگیریذ کِ تچِی ‪ 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‬دٍم‪ ،‬ترای حالتی است کِ َّش هصٌَػی تا َّش هصٌَػی تازی هیکٌذ ٍ تَسیلِی دٍ پاراهتر ‪ٍ ai1‬‬
‫‪ ai2‬آى دٍ َّش هصٌَػی را تِ تازی پاس هیدّین‪.‬‬
‫ترای راحتی هیتَاًیذ از تَاتغ ایستای کالس ‪ JOptionPane‬استفادُ کٌیذ‪.‬‬
‫توریي سری سَم ترًاهِ سازی ضیءگرا‬
‫‪ Constructor‬اٍل‪ ،‬ترای حالتی است کِ اًساى تا اًساى تازی هیکٌذ‪ .‬تا صذا زدُ ضذى ایي ‪ٍ ،constructor‬اسظ‬
‫‪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‬استفادُ کٌیذ‪.‬‬
‫جمع بندی‬
‫در ًْایت داضتي کالسْای زیر ترای ایي توریي اخثاری است‪:‬‬
‫‪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‬‬
‫دقت کٌیذ کِ در ًْایت در صَرتی کِ تازی در حالت ‪َّ 4‬ش هصٌَػی اخرا ضَد‪ً ،‬ثایذ هیچ گونه ػولیات گرافیکی‬
‫اًدام دّذ‪ّ .‬وچٌیي ًیاز تِ پیادُسازی هات نیست‪.‬‬
‫هَفق تاضیذ‬
‫توریي سری سَم ترًاهِ سازی ضیءگرا‬
‫‪7‬‬