https://en.wikipedia.org/wiki/Connect_Four
2 প্লেয়ার গেম কানেক্ট 4 এর কথা কি কেউ মনে করতে পারে? যারা এটি করেন না তাদের জন্য এটি একটি 6x7 বোর্ড ছিল যা কোনও পৃষ্ঠের উপরে উল্লম্বভাবে দাঁড়িয়ে থাকে। সংযোগ 4 এর লক্ষ্য, ভাল সংযোগ 4! সংযোগটি অনুভূমিক, তির্যক বা উল্লম্ব হলে গণনা করা হয়। আপনি কলামের শীর্ষে একটি টুকরোটি thatোকাতে বোর্ডে নিজের টুকরো বোর্ডে রাখুন যেখানে এটি column কলামের নীচে পড়ে। আমাদের নিয়মগুলি সংযোগ 4 এ 3 টি জিনিস পরিবর্তন করে।
- পরিবর্তন # 1 জয়কে সবচেয়ে পয়েন্ট সহ খেলোয়াড় হিসাবে সংজ্ঞায়িত করা হয়। আপনি নিয়মে 4 টি সংযুক্ত করে পয়েন্ট পাবেন - এর পরে আরও more
- পরিবর্তন # 2 আপনার প্রতি রাউন্ডে 3 জন খেলোয়াড় রয়েছে।
- পরিবর্তন # 3 বোর্ডের আকার 9x9।
স্কোরিং:
স্কোরটি আপনি কত সারি পেয়েছেন তার উপর ভিত্তি করে। আপনার যদি সারিতে একটি গ্রুপ 4 থাকে তবে আপনি 1 পয়েন্ট পাবেন। আপনার যদি সারিতে একটি গ্রুপে 5 থাকে তবে আপনি 2 পয়েন্ট পাবেন, একটি সারিতে 3 এবং আরও।
উদাহরণ:
নোট করুন o
এবং x
আরও ভাল বিপরীতে জন্য যথাক্রমে #
এবং প্রতিস্থাপন করা হয়~
খালি বোর্ডের উদাহরণ: (সমস্ত উদাহরণ 2 প্লেয়ার স্ট্যান্ডার্ড আকারের বোর্ড)
a b c d e f g
6 | | | | | | | |
5 | | | | | | | |
4 | | | | | | | |
3 | | | | | | | |
2 | | | | | | | |
1 |_|_|_|_|_|_|_|
আমরা যদি টুকরো টুকরো টুকরো টুকরো টুকরো করে ফেলে রাখি তবে d
এটি স্থানে নেমে আসবে 1d
।
a b c d e f g
6 | | | | | | | |
5 | | | | | | | |
4 | | | | | | | |
3 | | | | | | | |
2 | | | | | | | |
1 |_|_|_|#|_|_|_|
যদি এখন আমরা d
আবার টুকরো টুকরো টুকরো টুকরো টুকরো করে ফেলে রাখি তবে এটি স্থানে নেমে যাবে 2d
। এখানে একটি সারিতে অবস্থানের 4 টির উদাহরণ রয়েছে:
a b c d e f g
6 | | | | | | | |
5 | | | | | | | |
4 | | | |~| | | |
3 | | |~|#| | | |
2 | |~|#|~| |#| |
1 |~|#|~|#|_|#|_|
এই ক্ষেত্রে x
তির্যকভাবে 1 পয়েন্ট পায় ( 1a 2b 3c 4d
)।
a b c d e f g
6 | | | | | | | |
5 | | | | | | | |
4 | | | |#| | | |
3 | | | |#| | | |
2 | | | |#| | | |
1 |_|~|_|#|~|_|~|
এই ক্ষেত্রে, o
1 পয়েন্ট উল্লম্বভাবে ( 1d 2d 3d 4d
) পাওয়া যায়।
a b c d e f g
6 | | | | | | | |
5 | | | | | | | |
4 | | | | | | | |
3 | | | | | | | |
2 | | |#|#|#|#| |
1 |_|_|~|~|~|~|~|
এই ক্ষেত্রে o
2 পয়েন্ট অনুভূমিকভাবে ( 1c 1d 1e 1f 1g
) এবং x
1 পয়েন্ট আনুভূমিকভাবে ( 2c 2d 2e 2f
) পায় )
a b c d e f g
6 | | |#| | | | |
5 | | |#| | | | |
4 | | |#| | | | |
3 | | |#| | |~| |
2 |~| |#| | |#|~|
1 |~|_|#|~| |~|~|
এই সময়টি x
একটি পরপর 6 টির জন্য 3 পয়েন্ট পায় ( 1c 2c 3c 4c 5c 6c
)।
ইনপুট আউটপুট
আপনার 2 ডি অ্যারের মাধ্যমে বোর্ডে অ্যাক্সেস থাকবে। প্রতিটি অবস্থান int
একজন প্লেয়ার আইডির প্রতিনিধিত্ব করে। আপনার ফাংশনটিতে আপনার প্লেয়ার আইডিও পাস করা হবে। আপনি যে ধাক্কায় আপনার টুকরোটি ফেলে দিতে চান তা ফিরিয়ে আপনি নিজের পদক্ষেপ নিয়ে চলেছেন। প্রতি রাউন্ড 3 খেলোয়াড় খেলতে বেছে নেওয়া হবে। গেমের শেষে, সমস্ত খেলোয়াড় একটি সমান পরিমাণ গেম খেলবে।
এই মুহুর্তের জন্য 100k রাউন্ডগুলি চলবে (দ্রষ্টব্য এটি দীর্ঘ সময় নেয় , আপনি দ্রুত টার্নআরাউন্ড পরীক্ষার জন্য এটি হ্রাস করতে চাইতে পারেন)। সামগ্রিকভাবে বিজয়ী সবচেয়ে বেশি জয়যুক্ত খেলোয়াড়।
নিয়ামকটি এখানে পাওয়া যাবে: https://github.com/JJ-Atkinson/Connect-n/tree/master ।
বট রচনা:
বট লিখতে আপনাকে অবশ্যই Player
ক্লাসটি প্রসারিত করতে হবে । Player
বিমূর্ত এবং বাস্তবায়নের জন্য একটি পদ্ধতি রয়েছে int makeMove(void)
,। ইন makeMove
আপনি সিদ্ধান্ত নিতে হবে Coll যা আপনি আপনার টুকরা ড্রপ করতে চাই। যদি আপনি একটি অবৈধ সংঘর্ষ বেছে নেন (যেমন সংঘর্ষের অস্তিত্ব নেই, ইতিমধ্যে সংঘর্ষটি পূর্ণ হয়ে গেছে), আপনার পালা এড়ানো হবে । ইন Player
বর্গ আপনি অনেক দরকারী সাহায্যকারী পদ্ধতি আছে। সর্বাধিক গুরুত্বপূর্ণগুলির একটি তালিকা নিম্নলিখিত:
boolean ensureValidMove(int coll)
: সংঘর্ষ বোর্ডে থাকলে এবং সংঘর্ষটি এখনও ভরাট না হলে সত্যটি প্রত্যাবর্তন করুন ।int[] getBoardSize()
:[0]
কলামগুলির[1]
সংখ্যা এবং সারি সংখ্যা হ'ল একটি int অ্যারে ফিরিয়ে দিন।int[][] getBoard()
: বোর্ডের একটি অনুলিপি ফেরত দিন। আপনার এটির মতো এটি অ্যাক্সেস করা উচিত :[coll number][row number from bottom]
.- বিশ্রামটি খুঁজতে,
Player
ক্লাসটি দেখুন। EMPTY_CELL
: একটি খালি কক্ষের মান
যেহেতু এটি বহু-থ্রেড হবে, random
আপনার প্রয়োজন হলে আমি একটি ফাংশনও অন্তর্ভুক্ত করেছি।
আপনার বটটি ডিবাগ করছে:
বটকে ডিবাগ করা সহজ করার জন্য আমি কিছু জিনিস নিয়ামককে অন্তর্ভুক্ত করেছি। প্রথমটি হ'ল Runner#SHOW_STATISTICS
। এটি সক্ষম করা থাকলে, আপনি পট খেলোয়াড় গ্রুপগুলির একটি মুদ্রণ দেখতে পাবেন, তাতে বট জয়ের গণনা সহ। উদাহরণ:
OnePlayBot, PackingBot, BuggyBot,
OnePlayBot -> 6
PackingBot -> 5
BuggyBot -> 3
Draw -> 1
আপনি connectn.game.CustomGame
ক্লাসের সাথে একটি কাস্টম গেমও তৈরি করতে পারেন, আপনি প্রতিটি রাউন্ডের স্কোর এবং বিজয়ী দেখতে পাবেন। এমনকি আপনি মিশ্রণটিতে নিজেকে যুক্ত করতে পারেন UserBot
।
আপনার বট যোগ করা হচ্ছে:
আপনার বটটি লাইনআপে যুক্ত করতে PlayerFactory
স্ট্যাটিক ব্লকে যান এবং নীচের লাইনটি যুক্ত করুন:
playerCreator.put(MyBot.class, MyBot::new);
অন্যান্য বিষয় লক্ষণীয়:
- সিমুলেশনগুলি বহু-থ্রেডযুক্ত। আপনি যদি এটিটি বন্ধ করতে চান তবে যান
Runner#runGames()
এবং এই লাইনে মন্তব্য করুন (.parallel()
)। - গেমের সংখ্যা পরিবর্তন করতে,
Runner#MINIMUM_NUMBER_OF_GAMES
আপনার পছন্দ অনুসারে সেট করুন।
পরে যুক্ত হয়েছে:
- বট মধ্যে যোগাযোগ নিষিদ্ধ করা হয়।
সম্পর্কিত: কানেক্ট 4 খেলুন!
================================
স্কোরবোর্ড: (100 000 গেম)
MaxGayne -> 22662
RowBot -> 17884
OnePlayBot -> 10354
JealousBot -> 10140
Progressive -> 7965
Draw -> 7553
StraightForwardBot -> 7542
RandomBot -> 6700
PackingBot -> 5317
BasicBlockBot -> 1282
BuggyBot -> 1114
FairDiceRoll -> 853
Steve -> 634
================================
Player
সমস্ত পদ্ধতি উপলভ্য দেখতে ক্লাসটি পরীক্ষা করে দেখুন।
ensureValidMove
(যদি না আপনার কৌশলটি এই সময়টিকে পাস না করে)।