কোথ: হিট অ্যান্ড ডুবড


12

ভূমিকা

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

নীতি

গেমটি টার্ন ভিত্তিক। গেমের শুরুতে, আপনাকে আপনার জাহাজের শ্রেণি নির্বাচন করতে হবে। তারপরে প্রতিটি পালা, প্লেয়াররা তাদের জাহাজের উপর নির্ভর করে বেশ কয়েকটি ক্রিয়া সম্পাদন করতে সক্ষম হবে।

গেমটি একটি 2 ডি গ্রিডে হয় (এক্স, ওয়াই) যার পাশটি এইভাবে সংজ্ঞায়িত করা হয়:
X = 30 + numberOfPlayer
Y = 30 + numberOfPlayer
প্রতিটি জাহাজের শুরুর অবস্থানটি এলোমেলো।

প্লে অর্ডার প্রতিটি পালা এলোমেলোভাবে করা হয় এবং আপনি "সারি" এবং আপনার প্লেয়ারের সংখ্যাতে নিজের অবস্থান জানতে পারবেন না। গেমটি 100 টার্নের জন্য বা একমাত্র জাহাজের জীবন্ত না হওয়া পর্যন্ত স্থায়ী হয় ।

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

কন্ট্রোলার আপনাকে কমান্ড আর্গুমেন্টগুলির মাধ্যমে ইনপুট সরবরাহ করে এবং আপনার প্রোগ্রামটি স্টাডআউটের মাধ্যমে আউটপুট দিতে হয়।

বাক্য গঠন

প্রথম টার্ন

আপনার প্রোগ্রামটি কোনও যুক্তি ছাড়াই একবার কল করা হবে । আপনার জাহাজটি নির্বাচন করতে আপনাকে 1 থেকে 5 এর মধ্যে একটি পূর্ণসংখ্যার আউটপুট করতে হবে (অন্তর্ভুক্ত):

1: ধ্বংসকারী [দৈর্ঘ্য: 2, চাল / টার্ন: 3, শট / টার্ন: 1, ব্যাপ্তি: 9, খনি: 4]
দক্ষতা : বিনামূল্যে জাহাজের আবর্তন (কোনও কোলডাউন নেই)

2: সাবমেরিন [দৈর্ঘ্য: 3, চাল / টার্ন: 2, শটস / টার্ন: 1, রেঞ্জ: 5, মাইনস: 4]
দক্ষতা : ডুবে যেতে / সারফেস করতে পারেন (ফলাফলগুলি দেখুন) পানির নীচে থাকাকালীন আপনি কেবল "মুভমেন্ট" ক্রিয়া ব্যবহার করতে পারেন এবং কেবল একটি স্ক্যান দিয়েই দেখা যায়। আপনি শট দ্বারা আঘাত করা যাবে না, তবে খনি থেকে ক্ষতি নিতে পারেন।

3: ক্রুজার [দৈর্ঘ্য: 3, চাল / টার্ন: 1, শট / টার্ন: 2, ব্যাপ্তি: 9, খনি: 2]
দক্ষতা : মেরামত করতে পারেন (আউটপুট দেখুন)

4: যুদ্ধ [দৈর্ঘ্য: 4, চাল / টার্ন: 1, শট / টার্ন: 3, ব্যাপ্তি: 7, খনি: 1]
দক্ষতা : শেল্ড করতে পারেন (ফলাফলগুলি দেখুন)

5: বাহক [দৈর্ঘ্য: 5, চাল / টার্ন: 1, শটস / টার্ন: 1, ব্যাপ্তি: 7, খনি: 3]
দক্ষতা : শটগুলি এওই (প্রভাবের ক্ষেত্র) লক্ষ্যমাত্রার ক্ষতি (1 ব্যাপ্তি স্প্ল্যাশ ক্ষতি) ডিল করে। যদি শটটি দিয়ে লক্ষ্য আঘাত করা হয় তবে এই জাহাজের 2 টি পর্যন্ত সেলও ক্ষতিগ্রস্থ হবে।

পালা

ইনপুট

আপনার প্রোগ্রামটি যতবার ডাকা হবে, ততক্ষণ এই ফর্ম্যাটে আর্গুমেন্টগুলি পাবেন:

Round;YourPlayerId;X,Y,Direction;Hull;Moves,Shots,Mines,Cooldown;Hits,Sunken,Damage;Underwater,Shield,Scan;Map

রাউন্ডগুলি 1-ইনডেক্সড।

উদাহরণ ইনপুট

1;8;1,12,0;111;1,2,2,0;0,0,0;0,0,0;UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUXXXX.......UUUUUUUUXXXX.......UUUUUUUUXXXX.......UUUUUUUUXXXX.......UUUUUUUUXXXX.......UUUUUUUUXXXX.O.....UUUUUUUUXXXX.O.....UUUUUUUUXXXX.O.....UUUUUUUUXXXX.......UUUUUUUUXXXX.......UUUUUUUUXXXX.......UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU

এখানে, এটা 1 ম রাউন্ড, তুমি খেলোয়াড় 8. এর
আপনার জাহাজ উপর (এক্স = 1, y = 12) স্থান আছে এবং আপনার দিক উপরের দিকে আছে (0 = শীর্ষ, 1 = রাইট, 2 = বটম, 3 = বাম )।
আপনার হালাল ক্ষতিগ্রস্থ হয়নি (আপনার জাহাজটির দৈর্ঘ্য 3 টি এবং প্রতিটি বিট সত্য [1 = ঠিক আছে, 0 = ক্ষতিগ্রস্থ হয়েছে])। আপনি 1 বার স্থানান্তর করতে পারেন, 2 বার অঙ্কুর করতে পারেন, 2 টি খনিতে রেখেছেন এবং আপনার "দক্ষতা" উপলব্ধ রয়েছে (কোলডাউন = 0)
আপনি কিছুই আঘাত করেনি, বা কোনও জাহাজ ডুবিয়েছিলেন এবং আপনিও আঘাত পাননি।
আপনি পানির নিচে নন, আপনার ঝালগুলি (যদি থাকে) সক্রিয় হয় না এবং আপনার স্ক্যানও হয় না।
পরে মানচিত্রে আরও ...

আউটপুট

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

M: আপনি যে দিকটির মুখোমুখি হচ্ছেন সেদিকে 1 ঘরটি সরান (1 পদক্ষেপ গ্রাস করুন)
B: আপনি যে দিকে মুখোমুখি হচ্ছেন সেখান থেকে 1 ঘর ফিরে যান (1 পদক্ষেপ গ্রহন করুন)
C: আপনার জাহাজটিকে ঘড়ির কাঁটার দিকে ঘোরান (1 টি চালনা / বিনষ্টকারীদের জন্য ফ্রি ব্যবহার করুন)
K: আপনার জাহাজটি ঘোরান ঘড়ির কাঁটার বিপরীতে (ধ্বংসকারীদের জন্য 1 পদক্ষেপ / বিনামূল্যে ব্যবহার করুন)
A: আপনার জাহাজটি যে দিকে আপনি মুখোমুখি হচ্ছেন সেই দিকে চালিত করুন (কেবল তখনই কাজ করে যদি আপনি যে জাহাজটি ঘরের দিকে ঝুঁকেছেন / আপনার জাহাজটি সরিয়ে না দেয় / সমস্ত পদক্ষেপ গ্রাস করে)
F: 1 কক্ষের পরিসরে 1 শট ফায়ার করুন (1 শট গ্রহণ করুন)। এই বিন্যাসে লক্ষ্যযুক্ত কক্ষটি অনুসরণ করা আবশ্যক ([+ -] এক্স [+ -]) ওয়াই / উদাহরণ F+2-3:)
N: আপনার জাহাজ সংলগ্ন একটি কক্ষে 1 মাইন রাখুন (সমস্ত শট এবং 1 খনি গ্রহণ করুন)। এই বিন্যাসে লক্ষ্যযুক্ত কক্ষটি অনুসরণ করা আবশ্যক ([+ -] এক্স [+ -]) ওয়াই / উদাহরণ N+0+1:)
S: পরের বারের জন্য আপনার স্ক্যানটি সক্রিয় করুন (সমস্ত শট গ্রাস করুন)
R: আপনার জাহাজের "মাথার" নিকটতম ক্ষতিগ্রস্থ শাঁখটি মেরামত করুন (সমস্ত শট গ্রাস করুন, কেবলডাউন = 3 টার্ন / ক্রুজার কেবল)
P: নিমজ্জন / পৃষ্ঠ (সমস্ত শট গ্রাস করুন, Cooldown = 3
Dটার্ন , সর্বাধিক সময়কাল = 5 টার্ন / সাবমেরিন কেবল) : আপনার পরবর্তী পালা চলাকালীন পরবর্তী ক্ষতি প্রতিরোধ করে আপনার ঝালটি সক্রিয় করুন (সমস্ত শট গ্রাস করুন, কেবল 3) / যুদ্ধক্ষেত্র কেবলমাত্র)
W: অপেক্ষা করুন (কিছুই করেন না)

স্পষ্টকরণ : "সমস্ত পদক্ষেপ / শট গ্রহণ করুন" এর অর্থ আপনি যদি এই টার্নের আগে আপনার কোনও চাল / শট ব্যবহার না করেন তবে আপনি কেবলমাত্র এই ক্রিয়াটি ব্যবহার করতে পারবেন।

উদাহরণ আউটপুট

MF+9-8CM : 1 কক্ষ সরানো হয়, তারপরে সেই কক্ষে আগুন লাগে যার প্রেরণ আপনার জাহাজের "মাথা" এর সাথে সম্পর্কিত (টার্গেটএক্স = এক্স + 9, টার্গেটওয়াই = ওয়াই - 8), ঘড়ির কাঁটার দিকে ঘুরে এবং শেষ পর্যন্ত আবার 1 কক্ষে সরানো হয় moves

গেমপ্লের

গ্রিড

এখানে গ্রিডের একটি উদাহরণ (33 x 13) যেখানে 3 জন খেলোয়াড় স্থাপন করা হয়েছে:

███████████████████████████████████
█                                 █
█       00                        █
█   2                             █
█   2                             █
█   2                             █
█                                 █
█       11111                     █
█        M                        █
█                                 █
█                                 █
█                                 █
█                                 █
█                                 █
███████████████████████████████████

আমরা দেখতে পাচ্ছি, Mপ্লেয়ার 1 এর ঠিক পাশেই একটি খনিও রয়েছে ।

পজিশনিং এবং দিকনির্দেশ বোঝার জন্য খেলোয়াড়কে 2 নেওয়া যাক:

প্লেয়ার 2 এর অবস্থানটি এক্স = 3, ওয়াই = 4, দিকনির্দেশ = 3. যেহেতু এটির দিকটি "নীচ", তাই তার বাকি "শিপ সেল" তার "মাথার" উপরে অবস্থিত (এক্স = 3, ওয়াই = 3) & (এক্স = 3, ওয়াই = 2)

প্লেয়ারের মানচিত্র

প্রতিটি খেলোয়াড় প্রাপ্ত সর্বশেষ যুক্তি হ'ল তাদের "নিজস্ব" মানচিত্র। ডিফল্টরূপে একটি জাহাজ 5 কোষের ব্যাপ্তিতে সমস্ত কিছু সনাক্ত করে , তবে এই ব্যাপ্তিটি 9 এ বাড়ানোর জন্য এটি একটি স্ক্যানকে সক্রিয় করতে পারে ।

যুক্তিটি সর্বদা 361 (19 x 19) অক্ষর দীর্ঘ। এটি আপনার জাহাজের "মাথার" চারপাশে কেন্দ্রিক বর্গক্ষেত্রকে উপস্থাপন করে যেখানে প্রতিটি অক্ষর এইভাবে সংজ্ঞায়িত একটি উপাদানের সাথে মিল রাখে:

.: খালি সেল
O: আপনার জাহাজ
M: খনিগুলি
X: প্রাচীর (মানচিত্রের বাইরে থাকা কোষ)
U: অজানা (একটি স্ক্যান দ্বারা প্রকাশিত হবে)
A: শিক জাহাজের ক্ষতিপূরণকারী সেল
B: শিক জাহাজ ক্ষতিগ্রস্থ কোষ
C: শত্রু জাহাজের তলদেশে অবিন্যস্ত সেল (কেবল একটি স্ক্যানের সাথে দেখা হবে)
D: শত্রু জাহাজের তলদেশের ক্ষতিগ্রস্থ কক্ষ (কেবলমাত্র একটি স্ক্যানের সাহায্যে দেখা যায়)
W: ধ্বংসস্তূপ (মৃত জাহাজ)

স্ট্রিংটি প্রথম লাইনের 19 টি অক্ষরের সমন্বয়ে গঠিত, তারপরে দ্বিতীয় লাইনের 19 টি চার্টার ... 19 তম লাইন পর্যন্ত।

স্ক্যানটি কীভাবে 2 প্লেয়ার গ্রহণ করে এবং তা না দেখে একবার দেখে নেওয়া যাক (আরও ভাল বোঝার জন্য লাইন ব্রেক হয়েছে, তবে খেলোয়াড়দের কাছে প্রেরণ করবেন না):

XXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXX
XXXXXX.............
XXXXXX.......AA....
XXXXXX...O.........
XXXXXX...O.........
XXXXXX...O.........
XXXXXX.............
XXXXXX.......AAAAA.
XXXXXX........M....
XXXXXX.............
XXXXXX.............
XXXXXX.............
XXXXXX.............
XXXXXX.............
XXXXXXXXXXXXXXXXXXX

UUUUUUUUUUUUUUUUUUU
UUUUUUUUUUUUUUUUUUU
UUUUUUUUUUUUUUUUUUU
UUUUUUUUUUUUUUUUUUU
UUUUXXXXXXXXXXXUUUU
UUUUXX.........UUUU
UUUUXX.......AAUUUU
UUUUXX...O.....UUUU
UUUUXX...O.....UUUU
UUUUXX...O.....UUUU
UUUUXX.........UUUU
UUUUXX.......AAUUUU
UUUUXX........MUUUU
UUUUXX.........UUUU
UUUUXX.........UUUU
UUUUUUUUUUUUUUUUUUU
UUUUUUUUUUUUUUUUUUU
UUUUUUUUUUUUUUUUUUU

খনি

খনিটি যখন কোনও জাহাজটি খনি দ্বারা অধিগ্রহণ করা একটি কক্ষে চলে যায় বা যখন খনিতে গুলি চালানো হয় তখন খনিগুলি ট্রিগার করা হয়। "রাম" ক্রিয়া দিয়ে খনিগুলি ট্রিগার করা যায় না।

খনিগুলি এওই ক্ষতি (1 ব্যাপ্তি স্প্ল্যাশ ক্ষতি), এমনকি খনিটি স্থাপনকারী ব্যক্তির সাথেও ডিল করে। অন্য কোনও খনি বিস্ফোরণের ব্যাসার্ধে থাকলে খনিগুলি "চেইন" বিস্ফোরণগুলিকে ট্রিগার করতে পারে।

ঘুর্ণন

ঘূর্ণনগুলি জাহাজের "মাথা" কেন্দ্রিক কেন্দ্রীয় প্রতিসাম্য। আবর্তনগুলি কেবলমাত্র একটি খনিকে ট্রিগার করবে যদি এটি "গন্তব্য অবস্থানে" স্থাপন করা হয় (আপনি কোনও চাপকে মাইনগুলি ট্রিগার করবেন না)।

প্রভাবের ক্ষেত্র

1 রেঞ্জ স্প্ল্যাশ ক্ষতি (খনি এবং ক্যারিয়ারের শটগুলির জন্য) প্রাথমিক শট / বিস্ফোরণকে কেন্দ্র করে একটি 3x3 (9 কোষ) বর্গ দ্বারা নির্ধারিত হয় (x, y)। এটি সেই সমন্বয়গুলিকে আঘাত করে:[x - 1; y - 1],[x - 1; y],[x - 1; y + 1],[x; y - 1],[x; y],[x; y + 1],[x + 1; y - 1],[x + 1; y],[x + 1; y + 1]

স্কোরিং

স্কোরিংটি এই সূত্র দ্বারা সংজ্ঞায়িত করা হয়েছে:
Score = Hits + (Sunken x 5) - Damage taken - (Alive ? 0 : 10)

যেখানে:
hitsরাম, শট বা মাইন বিস্ফোরণে শত্রু জাহাজে আঘাত হানার
sunkenসংখ্যা ( চেইন বিস্ফোরণ সহ শত্রু জাহাজের কক্ষ ক্ষতিগ্রস্থ হয়েছিল ১ টি) : শত্রু জাহাজটিতে ডুবে যাওয়ার কারণে "শেষ আঘাত"
damageসংখ্যার সংখ্যা: প্রাপ্ত হিটগুলি (মেরামত দ্বারা হ্রাস হয়নি, তবে শিল্ড দ্বারা আটকানো হয়েছে)
alive: আপনার জাহাজটি শেষে জীবিত রয়েছে কিনা তা পরীক্ষা করে নিন (কমপক্ষে 1 টি হোল সেলকে বিনা চাপে)

নিয়ামক

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

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

বিধি

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

সমর্থিত ভাষা

আমি প্রতিটি ভাষা চেষ্টা করব এবং সমর্থন করব, তবে এটি অনলাইনে বিনামূল্যে পাওয়া দরকার। আপনি যদি "মূলধারার" ভাষা ব্যবহার না করেন তবে দয়া করে ইনস্টলেশনের জন্য নির্দেশাবলী সরবরাহ করুন।

এখনই, আমি চালাতে পারি: জাভা 6-7-8, পিএইচপি, রুবি, পার্ল, পাইথন 2-3, লুয়া, আর, নোড.জেএস, হাস্কেল, কোটলিন, সি ++ 11 11


আকর্ষণীয় কোটএইচ, আমার কেবল কয়েকটি প্রশ্ন রয়েছে: আমরা কি একাধিক সাবমিশন লিখতে পারি (উদাহরণস্বরূপ প্রতিটি ধরণের জাহাজের জন্য একটি)? আপনি যখন এওই-এর কথা বলছেন, অবস্থানের ঠিক চারদিকে এটি একটি বর্গক্ষেত্র (এটি হিট [x + 1; y + 1])?
কাটেনকিও

@ কেটেনকিও হ্যাঁ, আপনি একাধিক জমা লিখতে পারেন। হ্যাঁ, এটি 9 টি কোষকে হিট করেছে:[x - 1; y - 1],[x - 1; y],[x - 1; y + 1],[x; y - 1],[x; y],[x; y + 1],[x + 1; y - 1],[x + 1; y],[x + 1; y + 1]
থ্রাক্স

সুতরাং, সাবমেরিনটি কি স্বয়ংক্রিয়ভাবে পৃষ্ঠভূমি হয়? কোন দিকে?
ধ্বংসাত্মক লেবু

একই সাথে পালাও নেওয়া হয়?
ধ্বংসাত্মক লেবু

এছাড়াও মেষ ক্ষমতা সম্পর্কে দরকারী কি? (কেন শুধু গুলি করবেন না?)
ধ্বংসাত্মক লেবু

উত্তর:


3

RandomBot

এটি একটি উদাহরণ বট। এটি এলোমেলোভাবে একটি জাহাজ, একটি ক্রিয়া এবং একটি লক্ষ্য ঘর (যদি প্রয়োজন হয়) বেছে নেয়।

import java.util.Random;

public class RandomBot {

    int round;
    int playerID;

    public static void main(String[] args) {

        if (args.length == 0) {
            Random random = new Random();
            int ship = random.nextInt(5);
            String[] ships = { "1", "2", "3", "4", "5" };
            System.out.println(ships[ship]);
        } else {
            new RandomBot().play(args[0].split(";"));
        }
    }

    private void play(String[] args) {

        round = Integer.parseInt(args[0]);
        playerID = Integer.parseInt(args[1]);

        String[] actions = { "M", "B", "C", "K", "F", "S", "N", "A" };
        Random random = new Random();
        int action = random.nextInt(8);

        int rangeX = random.nextInt(5);
        int rangeY = random.nextInt(5);
        int mineX = random.nextInt(1);
        int mineY = random.nextInt(1);

        String signX = random.nextInt(1) == 1 ? "+" : "-";
        String signY = random.nextInt(1) == 1 ? "+" : "-";

        System.out.println(actions[action] + (action == 4 ? signX + rangeX + signY + rangeY : "") + (action == 6 ? signX + mineX + signY + mineY : ""));
    }

}

PassiveBot

এটি একটি উদাহরণ বট। এটা কিছুই করে না।

public class PassiveBot {

    int round;
    int playerID;

    public static void main(String[] args) {

        if (args.length == 0) {
            System.out.println("5");
        } else {
            new PassiveBot().play(args[0].split(";"));
        }
    }

    private void play(String[] args) {

        round = Integer.parseInt(args[0]);
        playerID = Integer.parseInt(args[1]);

        System.out.println("W");
    }

}

3

পিসমেকার, পাইথন 2 (যুদ্ধ)

পিসমেকার সবচেয়ে কাছের শত্রুগুলিতে (সর্পিল দূরত্ব) 3 বার অঙ্কুর করে এবং খনিগুলি থেকে কমপক্ষে 2 কোষ দূরে থাকাকালীন একটি লাইনে পিছনে পিছনে যায়।

from os import sys

def reversedSpiralOrder(length):

    #Initialize our four indexes
    top = 0
    down = length - 1
    left = 0
    right = length - 1
    result = ""

    while 1:

        # Print top row
        for j in range(left, right + 1):
            result += str(top * length + j) + ";"
        top += 1
        if top > down or left > right:
            break

        # Print the rightmost column
        for i in range(top, down + 1):
            result += str(i * length + right) + ";"
        right -= 1
        if top > down or left > right:
            break

        # Print the bottom row
        for j in range(right, left + 1, -1):
            result += str(down * length + j) + ";"
        down -= 1
        if top > down or left > right:
            break

        # Print the leftmost column
        for i in range(down, top + 1, -1):
            result += str(i * length + left) + ";"
        left += 1
        if top > down or left > right:
            break

    result = result.split(";")
    del result[-1]
    return result[::-1]

def canMove(x, y, direction, hull, map):

    # M = 1, B = 2
    moves = 0

    if direction == 0:
        y1 = -1
        y2 = -2
        hx1 = hx2 = x1 = x2 = 0
        hy1 = -y1 + hull
        hy2 = -y2 + hull
    elif direction == 1:
        x1 = 1
        x2 = 2
        hy1 = hy2 = y1 = y2 = 0
        hx1 = -x1 - hull
        hx2 = -x2 - hull
    elif direction == 2:
        y1 = 1
        y2 = 2
        hx1 = hx2 = x1 = x2 = 0
        hy1 = -y1 - hull
        hy2 = -y2 - hull
    elif direction == 3:
        x1 = -1
        x2 = -2
        hy1 = hy2 = y1 = y2 = 0
        hx1 = -x1 + hull
        hx2 = -x2 + hull

    if map[y + y1][x + x1] == "." and map[y + y2][x + x2] != "M":
        moves += 1

    if map[y + hy1][x + hx1] == "." and map[y + hy2][x + hx2] != "M":
        moves += 2

    return moves

if len(sys.argv) <= 1:
    f = open("PeaceMaker.txt","w")
    f.write("")
    print "4"
else:
    arguments = sys.argv[1].split(";")
    sight = 19

    round = int(arguments[0])
    playerID = int(arguments[1])
    x = int(arguments[2].split(",")[0])
    y = int(arguments[2].split(",")[1])
    direction = int(arguments[2].split(",")[2])
    hull = arguments[3]
    moves = int(arguments[4].split(",")[0])
    shots = int(arguments[4].split(",")[1])
    mines = int(arguments[4].split(",")[2])
    cooldown = int(arguments[4].split(",")[3])
    hits = int(arguments[5].split(",")[0])
    kills = int(arguments[5].split(",")[0])
    taken = int(arguments[5].split(",")[0])
    underwater = int(arguments[6].split(",")[0])
    shield = int(arguments[6].split(",")[1])
    scan = int(arguments[6].split(",")[2])
    map = [[list(arguments[7])[j * sight + i] for i in xrange(sight)] for j in xrange(sight)]

    initialShots = shots


    priorities = reversedSpiralOrder(sight)

    actions = ""
    sighted = 0
    for priority in priorities:
        pX = int(priority) % sight
        pY = int(priority) / sight

        if map[pY][pX] == "A":
            sighted += 1
            if shots > 0:
                shots -= 1
                actions += "F" + ("+" if pX - 9 >= 0 else "") + str(pX - 9)  + ("+" if pY - 9 >= 0 else "") + str(pY - 9)

    if shots == initialShots and sighted > 0:
        actions += "D"
    elif shots == initialShots and sighted <= 0:
        actions += "S"
    else:
        actions += ""

    f = open("PeaceMaker.txt","r")
    fC = f.read(1)
    lastDirection = int("1" if fC == "" else fC)

    y = 9
    x = 9

    if lastDirection == 1:
        if canMove(x, y, direction, len(hull), map) == 1 or canMove(x, y, direction, len(hull), map) == 3:
            actions += "M"
        elif canMove(x, y, direction, len(hull), map) == 2:
            actions += "B"
            lastDirection = 0
    elif lastDirection == 0:
        if canMove(x, y, direction, len(hull), map) == 2 or canMove(x, y, direction, len(hull), map) == 3:
            actions += "B"
        elif canMove(x, y, direction, len(hull), map) == 1:
            actions += "M"
            lastDirection = 1

    f = open("PeaceMaker.txt","w")
    f.write(str(lastDirection))

    print actions

1
'পিসমেকার কান্ড'। আপনি আমাকে সেখানে হারিয়েছেন।
Okx
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.