দাবা ইঞ্জিন লেখার জন্য সেরা পন্থা? [বন্ধ]


15

আমি দাবা উত্সাহী এবং প্রোগ্রামার। আমি সম্প্রতি আমার দাবা এবং প্রোগ্রামিং জ্ঞান ব্যবহার করে দাবা ইঞ্জিন তৈরি শুরু করার সিদ্ধান্ত নিয়েছি। সুতরাং এখানে আমার প্রশ্ন:

দাবা ইঞ্জিনটি লেখার সময় কোন ভাষাটি (আমি জাভা, সি ++ এবং পাইথনের সাথে পরিচিত) এবং পদ্ধতিটি কি আমাকে মানিয়ে নেওয়া উচিত?

একটু গাইডেন্স অনেক প্রশংসা হবে।

সম্পাদনা:

তাই আমি এটি জাভাস্ক্রিপ্টে তৈরি করার সিদ্ধান্ত নিয়েছি। আমি এই দাবা UI গিথুব থেকে ডাউনলোড করেছি এবং এখন আমি সম্পূর্ণ প্রস্তুত! আমার প্রথম পদক্ষেপটি এটির জন্য আইনী পদক্ষেপগুলি লিখতে হবে। সুতরাং কেউ কি আমাকে সঠিক দিকে নির্দেশ করতে পারে? (আমি jQuery এ নতুন কিন্তু প্রোগ্রামিং অভিজ্ঞতা অনেক আছে)।

পিএস: আমি খুব দক্ষ ইঞ্জিন তৈরি করার চেষ্টা করছি না (আমি এর উপায়টিও খুব কঠিন জানি), আমি কেবল প্রক্রিয়াটির সাথে পরিচিত হতে চাই এবং কিছু নতুন কৌশল শিখতে চাই।


5
মূলধারার যে কোনও ভাষা এবং পদ্ধতিগুলি দাবা ইঞ্জিন (সে ক্ষেত্রে) সম্পর্কে বিশেষ কিছু করবে না।
ইন্নিস

3
আমি লক্ষ্য সম্পর্কে আরও নির্দিষ্ট হতে হবে। আপনি যদি একে একে রট বিধিগুলির একটি সিরিজটিতে সিদ্ধ করতে চান তবে এটি একটি বড় কাজ তবে যে কোনও প্রোগ্রামার সেই নৃশংস বাহিনীর মাধ্যমে বাছাই করতে পারে। আপনি যদি প্যাটার্ন স্বীকৃতি বা ঝুঁকি বনাম পুরষ্কারের ওজন মতো জিনিসগুলিতে প্রবেশ করতে চান তবে সেই জায়গায় উত্তরগুলি রসালো হতে পারে।
এরিক রেপেন

আপনি দাবা ইঞ্জিন উইকের অধীনে পেডাগোগিকাল বিভাগটি পরীক্ষা করে দেখেছেন। এগুলি বিশেষত দাবা প্রোগ্রামিং শেখানোর জন্য বোঝানো হয়েছে এবং এটি সমস্ত ওপেন সোর্স। : আপনি আসল সোর্স কোড ডকুমেন্টেশন সাধারণত কি উন্নয়ন পেছনে ব্যাখ্যা করবে ব্যবহার করবেন না, এমনকি যদি en.wikipedia.org/wiki/Chess_engine#Categorizations
user60812

1
সত্যিকারের শক্ত অংশটি হল কোনও প্রদত্ত অবস্থানকে কীভাবে মূল্যায়ন করা যায় কারণ আপনার পজিশন A পছন্দ করার জন্য অবস্থান বি এর চেয়ে ভাল কিনা তা দেখতে হবে।

1
আপনি কী জানতে চান তা মোটেই পরিষ্কার নয়। আপনি কি কোনও পদের প্রতিনিধিত্ব করার সিদ্ধান্ত নিয়েছেন? যদি তা হয় তবে পরবর্তী পদক্ষেপটি মুভ জেনারেটরটি লিখে পরীক্ষা করা। আপনি কি মনে করেন যে jQuery এর সাথে কী করতে হবে Not
কেভিন cline 4

উত্তর:


19

2072 রেটযুক্ত দাবা খেলোয়াড় এখানে। আমি এই ওয়েবসাইট তৈরি করেছি সপ্তাহান্তে খাঁটি জাভাস্ক্রিপ্টে । এটি কোনও দাবা ইঞ্জিন নয় (আমি এটি একটি বিকৃত Chess960 ইঞ্জিনের ধরণের হিসাবে বিনোদনমূলক উদ্বোধনের অবস্থান তৈরির জন্য ডিজাইন করেছি), তবে এটি একটি সূচনা পয়েন্ট। উত্স কোড এখানে

একটি কার্যকরী বোর্ড তৈরিতে অনেক জটিলতা জড়িত। এর মধ্যে রয়েছে:

  • প্রথমত, কীভাবে মৌলিক আইনী পদক্ষেপের প্রতিনিধিত্ব করা যায় তা নির্ধারণ করা। শুরু এবং শেষ স্থানাঙ্কগুলির সাথে আপনাকে গণিত করতে হবে। উদাহরণস্বরূপ, রুক মুভগুলির সাথে, স্থানাঙ্কগুলির মধ্যে একটির আগে এবং পরে একই হওয়া উচিত। নাইট চালচলন সহ স্থানাঙ্ক পরিবর্তনের পরম মানের যোগফল 3 হতে হবে এবং উভয় স্থানাঙ্ক অবশ্যই পরিবর্তন করতে হবে। বিশপ পদক্ষেপের সাথে, হয় স্থানাঙ্কগুলির যোগফল একই থাকে বা তারা উভয়ই একই পরিমাণে বৃদ্ধি পায়। বন্ধনগুলি সবচেয়ে জটিল কারণ তারা কেবল দুটি স্কোয়ার বা একটি সরাতে পারে (তারা কতগুলি চালচলন সঞ্চারের পরিবর্তে সারি এবং বর্ণটি পরীক্ষা করবে) তা কেবল বের করতে হবে না তবে পুরো ক্যাপচারটি তির্যকভাবে মোকাবেলা করতে হবে, সরানো হবে -ফরওয়ার্ড জিনিস।
  • বন্ধকী এবং চেকের কারণে ক্যাপচারিং একটি চ্যালেঞ্জ। আপনি কেবল এটি বলতে পারবেন না যে যদি কোনও টুকরা অন্য টুকরো স্কোয়ারে চলে যায় তবে এটি ক্যাপচার। সর্বোপরি, प्याদীরা ক্যাপচার জন্য অন্য টুকরো স্কোয়ারে যেতে পারে না - তাদের ক্যাপচারের নিজস্ব বিশেষ পদ্ধতি রয়েছে way
  • শত্রু টুকরোটি কোনও টুকরোটি যে আইনানুগ আছে কিনা তা স্থির করার পথে এটি কার্যকর করার উপায়টি আপনাকে খুঁজে বের করতে হবে।
  • চেক মোকাবেলা চ্যালেঞ্জিং। প্রতিটি পদক্ষেপের পরে, আপনাকে সমস্ত স্কোয়ার পরীক্ষা করে দেখতে হবে যে শত্রুপক্ষের টুকরাগুলি সেগুলিতে যেতে পারে এবং সেগুলির মধ্যে একটিতে আপনার রাজা জড়িত কিনা এবং যদি তা হয় তবে এটি একটি অবৈধ পদক্ষেপ।
  • ক্যাসলিং, এন পাসেন্ট, পদোন্নতি, অচলাবস্থা, জোর করে আঁকানো, পুনরাবৃত্তি - এগুলির কোনওটিই সমস্যাটির স্কেলকে সামলানোর জন্য তুচ্ছ নয়।

সমস্ত দাবা ইঞ্জিনগুলি কোনও অবস্থানে আইনী পদক্ষেপের সমস্ত (সম্ভবত একটি তাত্পর্যপূর্ণভাবে নির্ধারিত উপসেট) দেখে এবং সেই সমস্ত পদক্ষেপগুলি তৈরি করে এবং তাদের অবস্থানের জন্য পুনরাবৃত্তভাবে একই জিনিসটি সম্পাদন করে তাদের আপেক্ষিক মানগুলির প্রতিনিধিত্ব করার জন্য সংখ্যার মূল্যায়ন করে কাজ করে। আপনার দুটি সমস্যা এখানে

  • কীভাবে এই ডেটা দক্ষতার সাথে সংরক্ষণ করা যায়
  • এই পুনরাবৃত্ত অনুসন্ধানে কীভাবে এগিয়ে যাওয়া যায় - সর্বোপরি, আপনি এটিকে চিরতরে যেতে দিতে পারবেন না, সুতরাং আপনাকে একটি সীমাবদ্ধতা রাখতে হবে এবং তারপরে সীমাটির মধ্যে সর্বাধিক অনুকূল এবং পুঙ্খানুপুঙ্খ অনুসন্ধান করার জন্য কীভাবে আপনার অ্যালগরিদমটি ডিজাইন করবেন তা নির্ধারণ করতে হবে। উদাহরণস্বরূপ, আপনি নিশ্চিত করতে চান যে এটি প্রতিটি সম্ভাব্য প্রারম্ভিক পদক্ষেপের জন্য অন্তত কিছু মূল্যায়নের সাথে আসে, তবে আপনি প্রতিটি পদক্ষেপে সমান পরিমাণ সময় দেওয়ার পরিবর্তে আরও প্রতিশ্রুতিবদ্ধ চালগুলি মূল্যায়নে আরও সময় ব্যয় করতে চান।

এটি প্রথমত অ্যালগরিদম ডিজাইনের শীর্ষে, যেখানে প্রচুর পরিমাণে তথ্য উপলব্ধ।

কোন ভাষাটি নিয়ে যেতে হবে (যদিও আমি মনে করি আপনি ইতিমধ্যে জাভাস্ক্রিপ্টের বিষয়ে সিদ্ধান্ত নিয়েছেন), আমি মনে করি এটি অন্য কোনও কিছুর চেয়ে আপনার লক্ষ্যের উপর বেশি নির্ভর করে। আমি আমার অনলাইন করতে চাই (এবং জাভাস্ক্রিপ্টে আরও ভাল হয়ে উঠতে), তাই জাভাস্ক্রিপ্টটি আমার পছন্দ ছিল। যে কোনও অবজেক্ট-ভিত্তিক প্রোগ্রামিং ভাষা যদিও করবে।

একবার আপনি যা করছেন তার সাথে স্বাচ্ছন্দ্য বোধ করলে নীচের সংস্থানগুলি সম্ভবত সত্যই সহায়ক হিসাবে প্রমাণিত হবে:

শুভকামনা!


অনেক ধন্যবাদ, এটি অবশ্যই আমাকে শুরু করতে খুব সাহায্য করেছিল। যদিও শিখতে এবং বাস্তবায়নের জন্য এখনও অনেক কিছু আছে, দাবা ইঞ্জিনগুলি কখনই লেখা সহজ হয় না। তবে আমি আপনার পছন্দসই কিছু নিয়ে কাজ করা ভাল বলে মনে করি!
আদনান জাহিদ

আমি রাজী. আমি প্রকল্পগুলির একটি সত্যই বিচিত্র পুনরায় শুরু করতে চেয়েছিলাম, তবে সত্যি বলতে আমি দাবার জিনিসগুলি আরও বেশি বিকাশ করতে উপভোগ করি।
অ্যান্ড্রু ল্যাথাম

ডোমেন ল্যাথামসিটি.কম বর্তমানে বিক্রয়ের জন্য রয়েছে। কোডটি কি এখন অন্য কোনও ওয়েবসাইটে পাওয়া যায়?
#WeetHetOokNiet 14'20

14

একটি ধারণা হিসাবে "দাবা প্রোগ্রাম" এর সমস্যাটি হ'ল এমন অনেকগুলি টুকরো রয়েছে যা অনেক সময় শোষণ করতে পারে এবং অগত্যা এই মুহূর্তে আপনাকে আগ্রহী করে তোলে না। আপনি কেবল গ্রাফিক্স, বা একটি আলফা-বিটা অনুসন্ধান, বা অনুসন্ধান ইঞ্জিনটির বিকাশে সহায়তা করার জন্য একটি দৃশ্যায়নের উপর কাজ করে বছর কাটাতে পারেন, বা ... ভাল, এখানে প্রচুর টুকরো রয়েছে।

আমি একটি ওপেন সোর্স দাবা প্রোগ্রাম সন্ধান করার পরামর্শ দিচ্ছি (অনেকগুলি অবশ্যই থাকতে হবে) এবং এর অংশগুলি উন্নত করার বিষয়ে সেট করুন যা আপনাকে সবচেয়ে বেশি আগ্রহী। আপনি শেষ পর্যন্ত পুরো প্রোগ্রামটি একবারে একটি ফাংশন প্রতিস্থাপন করতে পারেন, বা আপনি যথেষ্ট শিখতে পারেন এবং এটিকে ফেলে দিতে এবং আপনার নিজের প্রোগ্রামটিকে স্ক্র্যাচ থেকে ডিজাইনে উত্সাহিত করতে পারেন। যাই হোক না কেন, একটি মূল প্রোগ্রামটি আর্কিটেকচার করার চেষ্টা করার আগে কী "হালকা" শুরু করা এবং দড়িগুলি শিখতে হবে তা কী।


প্রতিষ্ঠিত ইন্টারফেস প্রোটোকলের একটি অনুসারে আপনি আপনার ইঞ্জিনের সাথে বিদ্যমান যে কোনও ফ্রন্টএন্ড ব্যবহার করতে পারেন।

আমি আশা করি আলফা বিটা লিখতে কয়েক বছর লাগবে না
কেভিন

1
লেখার জন্য বছর নয়,
বছরগুলি কুঁকড়ে দেওয়ার জন্য

9

আপনি যদি দাবা সংক্রান্ত নিয়মগুলির সাথে পরিচিত হন তবে বুনিয়াদি কৌশল সম্পর্কে একটি ভাল সূচনার পয়েন্ট হ'ল http://www.frayn.net/beowulf/theory.html উপাদানগুলি এবং লিঙ্কগুলির একটি বিস্তৃত সংগ্রহ আপনি এখানে পেতে পারেন: http: // দাবাগ্রোগ্র্যামিং .wikispaces.com / এবং তৃতীয়: অন্যের কোড থেকে শিখুন। ক্র্যাফটির উত্সগুলি একবার দেখুন । এটি শীর্ষস্থানীয় ওপেন সোর্স ইঞ্জিন। টেস্টের কেসগুলির বিষয়ে চিন্তা করা এবং আপনি উন্নতি করেন কিনা তা দেখার জন্য অত্যন্ত গুরুত্বপূর্ণ: উদাহরণস্বরূপ 3 বা 4 চিত্র সহ কিছু সহজ সাধারণ শেষ-গেমের অবস্থানগুলি দিয়ে শুরু করুন।


3

যেমনটি উল্লেখ করা হয়েছে, দাবা ইঞ্জিন তৈরির বিষয়ে ভয়ঙ্কর কিছু নেই। সম্ভবত, আপনি কীভাবে ব্যবহার করতে চান এবং (সম্ভাব্য) এই অ্যাপ্লিকেশনটি মোতায়েন করার বিষয়ে আপনার মনোনিবেশ করা উচিত কারণ এটি সম্ভবত আপনার ভাষা পছন্দ নির্ধারণ করবে।

যদি এটি কেবল একটি মজাদার অনুশীলন হয় তবে আপনি এটি জাভাস্ক্রিপ্টে কোড করতে এবং এটি একটি ওয়েব পৃষ্ঠা হিসাবে স্থাপন করতে চাইতে পারেন। আপনি যদি এটি কোনও বিশেষজ্ঞ দাবা গেম হিসাবে তৈরি করতে না চান তবে কমপক্ষে অন্যরা এটির এবং এর উত্স কোডটি নিয়ে খেলতে সক্ষম হবেন।

আপনি যদি একই সময়ে কোনও নির্দিষ্ট প্রযুক্তি শিখতে চান, ডব্লিউপিএফ বলুন, তবে এটি একটি পাথর দিয়ে দুটি পাখি মেরে ফেলার ভাল উপায় হতে পারে। এই অ্যাপ্লিকেশনটির জন্য এমভিভিএম ওভারকিল হতে পারে, তবে আপনি এটি কমপক্ষে শিখতে চাইছেন।

আপনি যদি অ্যান্ড্রয়েড ডিভাইসগুলি লক্ষ্য করতে চান, তবে জাভাটি একটি ভাল পছন্দ হবে। একইভাবে, আইওএস ডিভাইসগুলির জন্য উদ্দেশ্য-সি।

দীর্ঘ এবং সংক্ষিপ্ত, ভাষার পছন্দ শূন্যে বিদ্যমান নেই।


3

আমি ধরে নিলাম আপনি মিন-ম্যাক্স, গাছ এবং ছাঁটাই, হিউরিস্টিক এবং অন্যান্য বেসিক সম্পর্কে ইতিমধ্যে জানেন এবং আমি এখানে যা লিখছি তা কেবলমাত্র কিছু বিবরণ যা অবমূল্যায়ন করা হতে পারে।

আমি কোম্পানির সাথে একটি বন্ধু কখনও কখনও আগে আমাদের নিজস্ব দাবা ইঞ্জিন লিখেছিলেন। আমি আমাদের কিছু সমস্যা এবং ধারণা ভাগ করে নিয়েছি এবং আমি আশা করি আপনি এগুলি দরকারী বলে মনে করেন।

যেহেতু আমরা উভয়ই জাভা প্রোগ্রামার ছিলাম আমাদের ভাষাটি আমাদের জাভা হতে পরিণত করেছিল এবং আমরা একটি অবজেক্ট ওরিয়েন্টেড পদ্ধতির সাথে শুরু করি। টুকরাগুলি বস্তু ছিল, বোর্ড ছিল বস্তু, ফাইল এবং র‌্যাঙ্ক (দাবা সাহিত্যে সারি এবং কলাম) বস্তু ছিল। এবং এটি ভুল ছিল। ওভারহেডটি বিশাল ছিল এবং প্রোগ্রামটি অনুসন্ধান ট্রিতে আরও 2 টি চাল (4 টি প্লাই) আরও যেতে লড়াই করছিল।

সুতরাং কিছু অনুসন্ধানের সাথে আমরা একটি উজ্জ্বল ধারণাটি শেষ করেছিলাম (যদিও আমাদের নয়!): টুকরো টুকরোকে প্রতিনিধিত্ব করে এবং দীর্ঘ সংখ্যার (bit৪ বিট) আকারে বোর্ড। এটি বোঝা যায় কারণ দাবা বোর্ডের 64 স্কোয়ার রয়েছে। বাকিগুলি কিছুটা ওয়াইজ অপারেশন ছিল (সিপিইউর খুব কাছে চলেছিল = অত্যন্ত দ্রুত)। উদাহরণস্বরূপ, একটি বাইনারি bit৪ বিট পূর্ণসংখ্যার বিবেচনা করুন যাতে এতে বোর্ডগুলি স্কোয়ারগুলি উপস্থাপন করছে যা আপনার টুকরা আক্রমণ করতে পারে। এখন আপনি যদি এই জাতীয় দুটি সংখ্যার মধ্যে একটি যৌক্তিক "এবং" সম্পাদন করেন তবে একটি শূন্য-ফলাফল বলে যে আপনার আক্রমণকারীদের সাথে একটি বর্গ রয়েছে। দাবা বোর্ড এবং টুকরো উপস্থাপন করার বিভিন্ন উপায় রয়েছে, সুতরাং:

1 - আপনার বোর্ড উপস্থাপনা সম্পর্কে সিদ্ধান্ত নিন

তারপরে আপনার দরকার এবং ডাটাবেস খোলার। দাবা খোলার কোনওভাবেই পিঁপড়ে সমাধান করা হয় এটির খাতা খোলার এবং খোলার পরামর্শ দেওয়া হয়। এক্ষেত্রে, ব্লিটজ গেমগুলিতে আপনার অতিরিক্ত সময় রয়েছে।

2 - নিজেকে একটি খোলার বইটি সন্ধান করুন।

আমরা এগুলি করেছিলাম, তবুও আমরা ভাল হতে অনেক দূরে ছিলাম:

3 - একটি ভাল দাবা ইঞ্জিন 6 টি চাল (12 প্লাই) এগিয়ে দেখতে সক্ষম হওয়া উচিত।

সুতরাং আমরা তখন যা করেছি, তা ছিল ডেড টাইম (যদি এটি হিউম্যান বনাম কম্পিউটার ইঞ্জিন) ব্যবহার করে।

4 - প্রতিপক্ষ যখন আপনার গাছের কিছু স্তর তৈরি করতে ভাবছে তখন সময়টি ব্যবহার করুন।

এবং এখনও আমরা 12 প্লিজ থেকে অনেক দূরে ছিলাম। আরও অধ্যয়ন দ্বারা, আমরা কিছু কৌশল আবিষ্কার করি! উদাহরণস্বরূপ গাছের একটি প্লাই এড়িয়ে পরবর্তী পরের প্লাই থেকে শুরু করার পরামর্শ দেওয়া হয়েছিল (যেমন কোনও প্রতিপক্ষ নেই)। ধারণাটি হ'ল যদি কোনও পদক্ষেপ চূড়ান্ত বোকা হয় তবে কেন সময় নষ্ট করা উচিত এবং সেই পদক্ষেপের বিরোধীদের কী প্রতিক্রিয়া রয়েছে তা দেখুন। তবে, একটি ভাল ইঞ্জিনকে ইডিয়োটিক মুভ এবং জিনিয়াস কুইন বলিদানের মধ্যে পার্থক্য করতে সক্ষম হওয়া উচিত।

5 - এই নির্দিষ্ট সমস্যা (দাবা) জন্য প্রোগ্রামিং কৌশল শিখুন

আমি এবং আমার বন্ধু, এই অবস্থায় এখনও খারাপ ছিলাম: / আমরা কী করতে পারতাম - এবং আমরা আংশিকভাবে করতাম- গণনা করা অবস্থানগুলি সংরক্ষণ করা। আপনি যদি কোনও অবস্থান গণনা করেন তবে ভবিষ্যতের জন্য এটি সংরক্ষণ করুন! অনুসন্ধান গাছের লুপগুলির জন্য একই। পয়েন্টটি ছিল দক্ষতার সাথে সংরক্ষণ / পুনরুদ্ধার:

6 - আপনার উত্পন্ন ডেটা সংরক্ষণ করুন ... দক্ষতার সাথে!

এবং পরিশেষে:

7 - সর্বাধিক অপ্টিমাইজেশন সহ কোড।

সিপিইউ সময় এবং মেমরি উভয় ক্ষেত্রেই এই সমস্যাটি অত্যন্ত ব্যয়বহুল। আপনার কোডটি খুব দক্ষতার সাথে লেখা খুব গুরুত্বপূর্ণ। মনে রাখবেন যে আমরা 35 এর শাখা ফ্যাক্টরের কথা বলছি This এর অর্থ একটি অর্থহীন "যদি" আপনার তাত্ত্বিকের 3.3792205e+18কোথাও কোথাও আপনার অনুসন্ধানের গাছের গভীরে থাকলে "অকেজো" রূপান্তরিত হতে পারে ।

দাবা প্রোগ্রামিং একটি খুব আকর্ষণীয় চ্যালেঞ্জ এবং আপনি আপনার প্রোগ্রামিং ক্ষমতা একটি গুরুতর পরীক্ষার মধ্যে রাখতে পারেন যে সময়। আরও কয়েকটি পয়েন্ট রয়েছে যা আমি প্রস্তাব করতে পারি তবে আমি নিশ্চিত যে আপনি সেগুলি নিজেই আবিষ্কার করবেন। আরও অনেক পয়েন্ট যা আমি জানি না তবে আপনি সেগুলি ইন্টারনেটে খুঁজে পেতে পারেন!

গুড লাক এবং মজা আছে!

PS আমি জাভাস্ক্রিপ্ট খুব ভাল জানি না তবে কিছু আমাকে সমস্যার অসুবিধার ভিত্তিতে বলছে, সম্ভবত, সি ++ যে সমস্ত অফার করতে পারে তা বিবেচনা করে জাভাস্ক্রিপ্টটি ফেলে দেওয়া এবং সি ++ এ করা ভাল।


2

আপনার সম্পাদনা অনুসারে, আপনি 'আইনী' পদক্ষেপগুলি সংজ্ঞায়নের পর্যায়ে এসেছেন।

দাবাতে চালগুলি বর্ণনা করার দুটি উপায় রয়েছে। বর্ণনামূলক স্বরলিপি এবং বীজগণিত স্বরলিপি। আপনি সম্ভবত যা চান তা হ'ল একটি ফাংশন যা টুকরোটি নেয়, অবস্থান শুরু করে এবং পরামিতি হিসাবে শেষের অবস্থান। যেমন। কিউএন 1 থেকে কিউবি 2 পর্যন্ত নাইটটি অবৈধ, তবে কিউএন 1 থেকে কিউ 2 পর্যন্ত নাইট বৈধ। এটি সম্পর্কে চিন্তাভাবনা করে, সহজেই 'আপেক্ষিক' অবস্থান নির্ধারণের দক্ষতার কারণে বীজগণিত স্বরলিপি সহজ হতে পারে।

আপনি প্রয়োজনীয় ন্যূনতম পরিমাণের কোডটি লিখেছেন তা নিশ্চিত করার জন্য, আমি প্রথমে সেই ফাংশনের জন্য পরীক্ষার লিখন দিয়ে শুরু করব । আপনি যদি বীজগণিত স্বরলিপি ব্যবহার করছেন তবে আপনার সম্ভবত প্রতি টুকরা / শুরু / শেষের জন্য কোনও পরীক্ষার দরকার নেই। প্রতিটি পরীক্ষা চালিয়ে যান, এবং পরের 'সরানো' এ যাওয়ার পূর্বে রিফ্যাক্টর সদৃশ out আপনার কোড ক্লিনার শেষ হবে।

একবার আপনি প্রতিটি টুকরো জন্য আইনী এবং অবৈধ পদক্ষেপের যথেষ্ট পরিমাণে কভার করেছেন, আমি অন্যান্য ভেরিয়েবলগুলির জন্য চেক যোগ করা শুরু করব (যেমন কোনও কিংকে 'চেক' এবং 'সাথী' শর্তে সরিয়ে নেওয়া)।

আমি ইউনিট টেস্টের জন্য কুনিট এবং জাভাস্ক্রিপ্টে আচরণগত পরীক্ষার জন্য জুঁই সুপারিশ করি ।


1

আমি আসলে দাবা ইঞ্জিন লিখেছি। ট্রিট এবং দুঃস্বপ্ন উভয়ের জন্য নিজেকে প্রস্তুত করুন। যখন আমার বন্ধুরা এবং আমি এটি করেছিলাম, এটি একটি সময়সীমাবদ্ধ প্রোগ্রামিং প্রতিযোগিতায় ছিল এবং আমরা যে ভাষাটি নিয়ে যাব তা সিদ্ধান্ত নিয়েছিল জাভা। আমি মনে করি জাভা বা সি আপনার সেরা পছন্দ, তবে আমি দেখতে পাচ্ছি যে আপনি জাভাস্ক্রিপ্টের সাথে যাওয়ার সিদ্ধান্ত নিয়েছেন। আমি এটির সাথে সত্যই পরিচিত করতে পারি না কারণ এটির সাথে আমি অপরিচিত।

এখানে মূল সমস্যাটি হ'ল যে প্রতিটি খণ্ডের জন্য আপনাকে অ্যাকাউন্টিং করতে হবে সেখানে কেবলমাত্র অনেকগুলি চলা / জয়ের পরিস্থিতি রয়েছে, তাই আমি আপনাকে সুপারিশ করব যে আপনি কোডিং শুরু করার আগে প্রতিটি টুকরোটির জন্য এই সমস্ত সম্ভাব্য পরিস্থিতিগুলি লিখুন। পরিকল্পনা না করে কেবল ঝাঁপিয়ে পড়লে এই মজাদার প্রকল্পটি পুনরাবৃত্তিজনক কাজে পরিণত হবে। তবে এটাই আসলে মূল বিষয়। প্রথমে কোডের বাইরে পরিকল্পনা করুন এবং একবারে এক টুকরো জন্য প্রতিটি দৃশ্য পেয়েছেন তা নিশ্চিত করুন।

শুভকামনা


1

গেমের কম্পিউটার-প্লেয়ার-তৈরি-সিদ্ধান্তের অংশের জন্য, আমি "কৃত্রিম বুদ্ধিমত্তা: একটি আধুনিক পদ্ধতির" বইয়ের বইয়ের সুপারিশ করতে পারি না (বইয়ের ওয়েবসাইট http://aima.cs.berkeley.edu/ )। গণিতে আপনার পটভূমির উপর নির্ভর করে (গ্রাফ থিওরি সাহায্য করে) এটি কিছুটা উচ্চ স্তরের হতে পারে তবে এই একাডেমিক স্টাফ যেমন হতে পারে ঠিক তেমনই এটি রচনা করা হয়েছে এবং এতে কৌশলগুলির একটি খুব আপ-টু-ডেট ওভারভিউ (এবং কিছু গভীরতা) রয়েছে প্রোগ্রাম জিনিস সিদ্ধান্ত নিতে।

এটি আপনার কাছে বিষয়গুলি নির্দেশ করবে যেমন একটি লক্ষ্য উল্লেখ করা (যেমন চেকমেট বা নাল), একটি নির্দিষ্ট রাষ্ট্র (বোর্ডের বিন্যাস) সেই লক্ষ্যের কতটা নিকটবর্তী, মূল্যায়ন করে যে বর্তমানের থেকে শুরু করে বিভিন্ন সম্ভাব্য নিম্নলিখিত রাষ্ট্রগুলি কীভাবে উত্পন্ন করা যায় এবং কীভাবে অবিচ্ছিন্ন সমস্যার স্থানটি অতিক্রম করতে হয়।

একটি বিষয় যা একটি এআই অ্যালগরিদম ডিজাইনে সহায়তা করতে পারে তা হ'ল জয়ের গেমের খুব কাছাকাছি পরিস্থিতি থেকে শুরু করে পৃথিবীর সমস্ত সময় যেমন চলেছে তখন কী কী সিদ্ধান্ত নেওয়া উচিত তা নির্ধারণ করা। আপনি এটিকে অপ্টিমাইজ করেছেন যাতে এটি উপযুক্ত সময়ে (ঘন্টা) একটি সমাধান খুঁজে পায়, তারপরে একটি বিজয়ী পথ বেছে নেওয়ার উপায়গুলি সন্ধান করুন যদিও আপনি এখনও সমস্ত ফলাফল অন্বেষণ করেন নি, যাতে আপনি "চিন্তাকে" আসলে বাধা দিতে পারেন সময়ের পালা

তারপরেই আমি পৃথক গণনাগুলি দ্রুততর করার জন্য যেমন দীর্ঘায়িত পূর্ণসংখ্যা যেমন প্রস্তাবিত হয়েছিল তেমন ব্যবহার করার উপস্থাপনাটিকে অনুকূল করে দেখব। আপনি একক তুলনা করতে যত তাড়াতাড়িই গুরুত্বপূর্ণ না কেন, সমস্যাটির স্থানটি যদি আপনার পথকে অতিক্রম করে তবে ভাল বোধগম্য হয় না, এটি করতে যুগে যুগে সময় লাগবে।


0

আপনি যেভাবে চান সত্যিই যেতে পারেন তবে এগুলি সম্পর্কে আমার এই ধারণা:

আমি জাভাটি ব্যবহার করব যা আপনাকে খুব উচ্চ স্তরের হতে দেয় এবং আপনার সরাসরি নিষ্পত্তির জন্য ইউজার ইন্টারফেস লাইব্রেরি (এডাব্লুটি, সুইং) থাকতে পারে। দাবা বোর্ড এবং টুকরাগুলির মডেলিংয়ের জন্য আপনি কোনও অবজেক্ট-ভিত্তিক পদ্ধতির ব্যবহার করতে পারেন। সরানো ইতিহাস এবং স্কোরিংয়ের জন্য অন্যান্য বস্তু দাঁড়াতে পারে। এমনকি প্লেয়ারগুলি বস্তু হতে পারে এবং তারপরে ভবিষ্যতে Playerআপনি কৃত্রিম বুদ্ধিমান কম্পিউটার প্লেয়ার সরবরাহ করতে আপনার ক্লাসটি বাড়িয়ে দিতে পারেন।

আপনি মডেল-ভিউ-কন্ট্রোলার (এমভিসি) এর দিকে নজর দিতে চাইতে পারেন কারণ এই ক্ষেত্রে আপনার মডেল অবজেক্টস (ডোমেন মডেল) কে ইউজার ইন্টারফেসের সাথে সংযুক্ত করতে (দেখতে) এবং ব্যবহারকারীকে ম্যানিপুলেট করার অনুমতি দেওয়ার জন্য এটি খুব সুন্দর পদ্ধতি মডেল (নিয়ামক মাধ্যমে)।

আপনি পরীক্ষা-চালিত বিকাশও প্রয়োগ করতে চাইতে পারেন , যা কেবলমাত্র নিশ্চিত করে না যে সমস্ত পদ্ধতিগুলি আপনার প্রত্যাশার সাথে আচরণ করে, কিন্তু আপনাকে পরীক্ষারযোগ্য, মডুলার কোড লিখতে বাধ্য করে।


4
দাবা ইঞ্জিনের ইউআইয়ের সাথে কোনও সম্পর্ক নেই, কেবল "মন", যা সেরা পদক্ষেপের গণনা করে।
সিএসই

@ সিএসই - এটি আপনার ইঞ্জিনের সংজ্ঞা উপর নির্ভর করে ।
ড্যানিয়েল এএ পেলসমেকার

@CSE - হিসাবে আদনান এর শো সম্পাদনা, তিনি ছিলেন আসলে একটি UI 'তে খুঁজছেন। সুতরাং আমার উত্তর প্রাসঙ্গিক।
ড্যানিয়েল এএ পেলসমেকার

-8

দাবা নিজেই নিয়ম মোটামুটি সহজ। আপনাকে কেবল বোর্ডের জন্য একটি ম্যাট্রিক্স (২-মাত্রিক অ্যারে) তৈরি করতে এবং টুকরোগুলির ধারণাগুলি এনকোড করার জন্য একটি উপায়, প্রতিটি টুকরোটির জন্য চলাচলের নিয়ম, কোনও পদক্ষেপ বৈধ যে বৈধতা এবং সংকেতগুলি চিহ্নিত করার শর্তগুলি সন্ধান করতে সক্ষম হতে হবে খেলা শেষ। যে কোনও সম্পর্কে বিশেষত শক্ত কিছুই। আপনি সবচেয়ে বেশি পরিচিত কোন ভাষা ব্যবহার করা উচিত।

এখন আপনি যদি একটি দাবা-প্লে এআই করতে চান যা কোনও খেলোয়াড়ের ভূমিকা নেবে, সেখানে জিনিসগুলি জটিল হয়ে উঠবে। তবে আবার, ভাষা পছন্দ এখানে সবচেয়ে বড় সমস্যা নয়; জড়িত এআই নীতি বুঝতে হয়। এটি আরও অনেক গুরুত্বপূর্ণ বিষয় হবে।

(এই কথাটি বলার পরে, এই ধরণের সিদ্ধান্ত গ্রহণ অত্যন্ত গণনামূলকভাবে নিবিড় হতে পারে এবং আপনি সম্ভবত এমন কিছু ব্যবহার করতে চান যা কোনও স্ক্রিপ্টিং ভাষার পরিবর্তে স্থানীয় কোডে সংকলিত হয় And এবং সি ++ খুব খারাপ পছন্দ, কারণ এটি ভাল না - এই সমস্যার সমাধান করা হয়েছে তবে কেবল এটি সাধারণভাবে খুব খারাপ ভাষা এবং এটিতে জটিল জিনিসগুলি প্রয়োগ করার চেষ্টা করা নিজের জন্য সমস্ত ধরণের মাথা ব্যথার কোড করার একটি ভাল উপায়))


15
আমি মনে করি পবিত্র ওয়ার্জ এড়ানোর জন্য আপনাকে কেন সি ++ এই নির্দিষ্ট কাজের পক্ষে উপযুক্ত নয় সে সম্পর্কে কিছুটা নির্দিষ্ট হতে হবে।
এরিক পুনরায়

9
পবিত্র যুদ্ধ শুরু করার প্রয়াসের জন্য।
ডক ব্রাউন

1
আপনি কেন ভাবেন যে সি ++ সাধারণভাবে খুব খারাপ ভাষা?
অ্যান্টনি

আমি মনে করি আপনি অবশ্যই তাকে ভুল করেছেন। আমি সবার পক্ষে তার মতামতটি ভাগ করে নিচ্ছি, সি ++ শুরু করার জন্য একটি ভাল ভাষা তবে আপনি জটিল জিনিসগুলি মোকাবেলা করার সময় এটি ব্যথা হয়ে যায়!
আদনান জাহিদ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.