تیم برنامهنویسی پیاستور
هزینه سفارش:
۱۹۹,۰۰۰ تومان
تخصصی و منحصر به فرد بودن این اثر، تضمین کننده بهای محصول نسبت به آثار مشابه است.
بازی دوز یا Tic-Tac-Toe یکی از شناختهشدهترین و قدیمیترین بازیهای دو نفره نوبتی در دنیاست. ساختار گرافیکی ساده، قوانین شفاف و فضای حالت محدود این بازی، آن را به یکی از بهترین گزینهها برای یادگیری و پیادهسازی مفاهیم هوش مصنوعی (AI)، درختهای تصمیم (Decision Trees) و الگوریتمهای نظریه بازیها (Game Theory) تبدیل کرده است. در پیادهسازیهای ساده، کامپیوتر تنها از حرکات تصادفی استفاده میکند که این موضوع منجر به شکستپذیری اساسی هوش مصنوعی میشود؛ اما با بهکارگیری الگوریتمهای بهینهسازی و جستوجوی هوشمند، کامپیوتر میتواند تمامی حرکات ممکن در آینده را پیشبینی کرده و به نقطهای شکستناپذیر دست یابد.
الگوریتم مین ماکس (Minimax یا Max-Min) یک الگوریتم تصمیمگیری تعمیمیافته برای بازیهای دو نفره با اطلاعات کامل (Zero-Sum Games) است. منظور از بازیهای با حاصلجمع صفر این است که سود یا امتیاز یک بازیکن، کاملاً برابر با زیان یا افت امتیاز بازیکن مقابل است. در چنین بازیهایی، هیچ حالتی وجود ندارد که هر دو بازیکن به طور همزمان سود ببرند.
در الگوریتم مین ماکس، دو نقش اساسی وجود دارد:
الگوریتم مین ماکس فرض را بر این میگذارد که حریف (بازیکن MIN) همیشه بهینهترین و هوشمندانهترین حرکت ممکن را انجام میدهد. بنابراین، سیستم هوشمند (MAX) در هر مرحله حرکتی را انتخاب میکند که حتی با فرض بهترین پاسخ ممکن از سمت حریف، بیشترین امتیاز ممکن یا حداقل خسارت برای او رقم بخورد.
برای درک نحوه کارکرد الگوریتم مین ماکس، بررسی مفهوم درخت فضای حالت ضروری است. در بازی دوز، هر حالت از صفحه ۹ خانهای، یک گره (Node) در درخت تشکیل میدهد:
در الگوریتم مین ماکس، به هر وضعیت پایانی یک مقدار عددی (امتیاز) اختصاص داده میشود:
الگوریتم با استفاده از روش پیمایش عمقی (Depth-First Search – DFS) درخت را تا برگها پیش میبرد. سپس امتیاز برگها را محاسبه کرده و در بازگشت از درخت (Backtracking)، مقادیر را به گرههای بالایی انتشار میدهد. در لایههایی که نوبت کامپیوتر است، بیشترین مقدار (Max) و در لایههایی که نوبت کاربر است، کمترین مقدار (Min) انتخاب میشود.
کل فضای حالتهای بازی دوز (از صفحه خالی تا تمام حالتهای برد و مساوی) حدود ۳۶۲,۸۸۰ حالت کلی است که با فیلتر کردن حالتهای نامعتبر، تنها به ۲۵۵,۱۶۸ حالت میرسد. این تعداد حالت برای پردازندههای امروزی بسیار کوچک محسوب میشود.
به دلیل محدود بودن این فضای حالت، الگوریتم مین ماکس در بازی دوز میتواند تمامی مسیرهای ممکن تا انتهای بازی را به طور کامل ارزیابی کند. نتیجه این ارزیابی همهجانبه این است که:
در این پروژه، صفحه بازی به صورت یک آرایه ۹ تایی یکبعدی مدلسازی شده است که خانههای ۱ تا ۹ را به کاربر نشان میدهد:
----++---++----
| 1 || 2 || 3 |
----++---++----
| 4 || 5 || 6 |
----++---++----
| 7 || 8 || 9 |
----++---++----
ارزش خانهها در آرایه داخلی به شکل زیر مدیریت میشوند:
-1: نشاندهنده حرکت بازیکن انسانی (Player 1)1: نشاندهنده حرکت سیستم هوشمند (Computer)0: نشاندهنده خالی بودن خانه و امکان انجام حرکت قانونیبا هر حرکت کاربر، ابتدا قانونی بودن حرکت بررسی میشود. سپس خانه مربوطه به -1 تغییر یافته و صفحه بازی بهروزرسانی میشود. در صورت ادامه داشتن بازی، تابع ارزیابی مین ماکس فراخوانی میشود تا بهترین خانه برای قرار دادن علامت کامپیوتر (1) انتخاب گردد.
بخش اصلی برنامه و حلقه اجرایی آن به صورت زیر پیادهسازی شده است:
int main(){
cout << "\n~~~~~~~~~~~~~Tic Tac Toe~~~~~~~~~~~~~\n";
cout << "\n\n BOARD:\n";
cout << "----++---++----" << endl;
cout << "| 1 || 2 || 3 |" << endl;
cout << "----++---++----" << endl;
cout << "| 4 || 5 || 6 |" << endl;
cout << "----++---++----" << endl;
cout << "| 7 || 8 || 9 |" << endl;
cout << "----++---++----" << endl << endl << endl;
cout << "Only legal moves are the numbers you see on the board\n\n";
int board[9] = { 0 };
int moves = 0, k;
//Player = -1 ; Computer = 1
while (moves < 9){
int mv;
cout << "Enter Player 1's Move\n";
cin >> mv;
if (board[mv - 1] == 0){
board[mv - 1] = -1;
moves++;
cout << "\n\nBoard after your move:\n";
draw_board(board);
if (win(board) == 0){
k = computerMove(board);
board[k] = 1;
cout << "\n\nBoard after computer's move:\n";
draw_board(board);
moves++;
if (win(board) != 0){
break;
}
}
else
break;
}
else{
cout << "Illegal Move, Try again !! \n\n";
}
}
switch (win(board)) {
case 0:
cout << "Its a draw. Better Smart next time.\n";
break;
case 1:
cout << "You lose.\n";
break;
case -1:
cout << "This will never Happen. But if it does(It never will), Congratulations, You have beaten the unbeatable\n";
break;
}
_getch();
return 0;
}
برنامه از چند تابع متناظر برای ارزیابی، رسم صفحه و محاسبه حرکت هوشمند تشکیل شده است:
draw_board)این تابع در هر مرحله با دریافت وضعیت آرایه ۹ تایی board، خروجی گرافیکی متنی جدیدی شامل علامتهای کاربر و کامپیوتر چاپ میکند تا کاربر موقعیت جدید بازی را مشاهده کند.
win)این تابع تمامی سطرها، ستونها و قطرهای صفحه بازی را بررسی میکند:
1) باشد، عدد 1 به معنی برد کامپیوتر بازگردانده میشود.-1) باشد، عدد -1 بازگردانده میشود.0 برمیگردد که به معنی تساوی یا ادامه بازی است.computerMove و الگوریتم Minimax)این تابع تمام خانههای خالی موجود در صفحه را به صورت آزمایشی پر کرده و تابع متناظر الگوریتم مین ماکس را فراخوانی میکند. الگوریتم تمامی حالتهای بعدی را تا انتهای بازی شبیهسازی کرده و خانه ای را انتخاب میکند که بیشترین امتیاز ممکن را کسب کند.
این سورس کد علاوه بر ابزاری برای سرگرمی، یک منبع آموزشی ارزشمند است که میتواند برای موارد زیر مورد استفاده قرار گیرد:
پیادهسازی صحیح الگوریتمهای هوش مصنوعی نیازمند درک دقیق از توابع بازگشتی و مدیریت فضای حالت است. این محصول با تست کامل فنی توسط کارشناسان سایت «پیاستور» آماده شده است تا شما بدون درگیری با خطاهای کامپایلر یا رفتارهای نادرست هوش مصنوعی، به یک برنامه کامل و تضمینشده دسترسی داشته باشید.
پس از تهیه محصول، سورس کد با فرمت اصلی .cpp به همراه فایل پروژه قابل دانلود خواهد بود و میتوانید آن را بلافاصله اجرا یا ویرایش نمایید.
برای مشاهده ویدیوی هر بخش، روی عنوان آن کلیک کنید.
تیم برنامه نویسی پی استور یکی از اولین گروههای تشکیل شده در مجموعه آموزشی پی استور میباشد. این تیم از اساتید مجرب و فارغ التحصیلان رشتههای فنی و مهندسی تشکیل شده که در زمینههای مختلف برنامهنویسی و تهیه سورس کد فعال هستند.
اطلاعات و جزئیات کامل این محصول
جهت تسلط عمیقتر و تکمیل مهارتهای خود، یادگیری این سرفصلها پیشنهاد میشود.
هزینه سفارش:
۱۹۹,۰۰۰ تومان
دیدگاهها و نظرات
مدیریت و پشتیبانی
نظرات و دیدگاه های خود را با ما درمیان بگذارید.