مهارتهای لازم:
ReactJS
Redux
پروژه اولیه را از اینجا دانلود کنید.
ساختار فایلهای این پروژه به صورت زیر است.
برای اجرای پروژه، باید NodeJS
و npm
را از قبل نصب کرده باشید.
Conway-game-of-life
، دستور npm install
را برای نصب نیازمندیها اجرا کنید.npm start
را برای راهاندازی پروژه اجرا کنید.http://localhost:3000/
میتوانید نتیجه را ببینید.طراحی state برنامه بدین صورت است:
grid
به صورت زیر میباشد.value
میتواند true
یا false
باشد.counter
: نشاندهنده تعداد نسلها میباشد.grid
: یک آرایه دو بعدی (ماتریس) که به فواصل زمانی معین میبایست رندر شود. همچنین الگوریتم شما روی این آرایه دو بعدی میبایست اجرا شود.status.timerId
: نشاندهنده id
تایمری است که شما میبایست آن را بوجود بیاورید و id
آنرا ذخیره کنید.status.isRunning
: وضعیت بازی را مشخص میکند که آیا در حال اجرا میباشد یا خیر.داخل فایل actions/index.js
اطلاعات مربوط به action(عملیات)های شما قرار دارد.
در این پروژه هشت نوع action وجود دارد:
START_GAME
: با گرفتن id
تایمر بازی را آغاز میکند. همچنین میبایست وضعیت بازی از false
به true
تغییر کرده و همچنین status.timerId
مقدار دهی شود. همچنین الگوریتم شما باید هر ۵۰ میلیثانیه یکبار بر روی ماتریس اجرا شود.STOP_GAME
: وضعیت بازی را تغییر میدهد. دقیقا برعکس عملیات START_GAME
میباشد. همچنین status.timerId
میبایست null
شود.TICK
: با فراخوانی این action یکبار الگوریتم شما میبایست روی ماتریس اجرا شود. همچنین یک واحد میبایست به counter
اضافه شود.TOGGLE_ALIVE
: این action (x,y)
به عنوان ورودی میگیرد. این مختصات یک سلول در ماتریس میباشد که باید وضعیت آن با کلیک بر روی آن عوض شود.RESET_GAME
: این action ماتریس را خالی میکند و تمام سلولهای ماتریس به وضعیت مرده تبدیل میشوند.RANDOM_MAP
: این action وضعیت سلولهای ماتریس را به صورت رندم تغییر میدهد.SET_GRID_HEIGHT
: این action ارتفاع ماتریس را تغییر میدهد.SET_GRID_WIDTH
: این action طول ماتریس را تغییر میدهد.همچنین در مورد فایل helpers/grid.js
باید موارد زیر را در کلاس Grid
تکمیل نمایید.
makeGrid
: این تابع وظیفه ساختن ماتریس را دارد.countNeighbors
: این تابع با دریافت کردن مختصات یک سلول تعداد همسایههای زنده آنرا برمیگرداند.nextGeneration
: وظیفه این تابع تولید کردن ماتریس نسل بعدی از روی ماتریس فعلی میباشد.setGridWidth
: این تابع طول ماتریس را تنظیم میکند.setGridHeight
: این تابع ارتفاع ماتریس را تنظیم میکند.components/Cell.js
و containers/*
، help/grid.js
، reducers/status.js
، reducers/counter.js
،reducers/grid.js
هستید.دقت کنید که پوشهی node_modules
در فایل ارسالی نباشد.