এটি একটি রাউন্ড রবিনে হিল চ্যালেঞ্জের কিং। এটি পশ্চিমের সেরা বন্দুকধারীর সন্ধানের লড়াই!
এই প্রতিযোগিতায় অংশ নিতে সক্ষম হতে আপনার দুটি ফাংশন করা দরকার। প্রথমটি আপনার বন্দুকধারীর বৈশিষ্ট্য নির্ধারণ করে এবং দ্বিতীয়টি বন্দুকধারীর জন্য মূল যুক্তি ফাংশন।
বৈশিষ্ট্য ফাংশন
function () {
var bot = {
name: "testBot",
numbOfBullets: 7,
reloadSpeed: 1,
shotsPerTurn: 1,
moveSpeed: 2
}
return bot
}
বৈশিষ্ট্য ফাংশনটিতে 5 টি ভেরিয়েবল অন্তর্ভুক্ত রয়েছে যা আপনাকে কিছু নিয়ম অনুসারে সেট করতে হবে (এটি বাদ দিয়ে name
কোনও স্ট্রিং হতে পারে)। আপনার বন্দুকধারীর উপর আপনাকে অবশ্যই মোট 15 পয়েন্ট ব্যয় করতে হবে - বন্দুকধারীরা যা সমস্ত 15 পয়েন্ট ব্যয় করে না তারা যোগ্য নয়। বৈশিষ্ট্যগুলি কীভাবে কাজ করে তা এখানে:
numbOfBullets
- আপনার বন্দুকটি কয়টি বুলেট ধারণ করে তা নির্ধারণ করে।প্রাথমিক এবং সর্বনিম্ন মান
numbOfBullets
1। প্রতিটি অতিরিক্ত বুলেটটির জন্য 1 পয়েন্টের ব্যয় হয় 15 পয়েন্ট ব্যয় সহ সর্বাধিক 16 টি বুলেট।reloadSpeed
- আপনার বন্দুকধারীর গুলি শেষ হয়ে যাওয়ার পরে তার বন্দুকটি পুনরায় লোড করার জন্য কতটি পালা দরকার তা নির্ধারণ করে।বেস এবং সর্বাধিক মান 4 ন্যূনতম হওয়ার সাথে সাথে 4 this এই গুণটি 1 টি দ্বারা কমিয়ে 2 পয়েন্ট করে।
shotsPerTurn
- সংজ্ঞা দেয় যে আপনার বন্দুকধারী এক বারে কতবার গুলি করতে পারে।বেস এবং সর্বনিম্ন মান হল 1। প্রতিটি বৃদ্ধি 1 পয়েন্ট 3 পয়েন্ট তাই আপনি 15 পয়েন্ট ব্যয় সঙ্গে রাউন্ডে সর্বাধিক 6 শট থাকতে পারে। এই বৈশিষ্ট্যটির উপরে উত্থাপন
numbOfBullets
করা পাল্টা উত্পাদনশীল কারণ আপনি আরও গুলি চালাতে পারবেন না তবে আপনার বন্দুকটি ধরে রাখতে পারে।moveSpeed
- আপনার বন্দুকধারীর এক পালায় কত স্পেস চালাতে পারে তা নির্ধারণ করে।বেস এবং সর্বনিম্ন মান 1। প্রতিটি বৃদ্ধি 1 পয়েন্ট ব্যয় সঙ্গে সর্বাধিক 6 গতি সঙ্গে 3 পয়েন্ট। বন্দুকধারী তার চলন গতি সর্বাধিক পর্যন্ত প্রতিটি বাঁক বাম বা ডান চালাতে পারে। তিনি স্থির হয়ে দাঁড়াতে পারেন যা তাকে বোনাস দেয় (আরও পরে এটি)।
উপরের উদাহরণের ফাংশনটিতে বুলেটগুলিতে 6 পয়েন্ট ব্যয়, পুনরায় লোড গতিতে 6 পয়েন্ট ব্যয় এবং গতিবেগে 3 পয়েন্ট ব্যয় রয়েছে।
প্রধান ফাংশন
function main(bulletsLeft, yourShots, enemyShots, yourMovement, enemyMovement) {
var shots = [];
shots.push(Math.floor((Math.random() * 24) + 1));
var move = yourMovement[yourMovement.length - 1] + 2
var play = [];
play.shots = shots;
play.move = move;
play.reload = false;
return play;
}
পরামিতি:
bulletsLeft
, আপনার বন্দুকের গুলি গুলি সংখ্যাyourShots
, এটি আপনার বন্দুকধারীর দ্বারা চালিত অতীতের সমস্ত অবস্থানের অ্যারে।একজন বন্দুকধারীর উদাহরণ যিনি প্রতি রাউন্ডে 1 টি গুলি চালাতে পারেন:
[[12],[4],[22],...]
একজন বন্দুকধারীর উদাহরণ যিনি প্রতি রাউন্ডে 3 টি গুলি চালাতে পারেন:
[[12,13,14],[11,15,16],[9,14],...]
enemyShots
- উপরের মতো তবে আপনার শত্রুর জন্যওyourMovement
- আপনার সমস্ত অতীতের চলমান অবস্থানের একটি অ্যারেenemyMovement
, উপরের মতো তবে আপনার শত্রুর জন্যও
আপনাকে কী ফিরিয়ে দিতে হবে:
আপনাকে একটি পরিবর্তনশীল ফিরিয়ে দিতে হবে যার 3 টি বৈশিষ্ট্য রয়েছে:
shots
- সংখ্যার একটি অ্যারে যা নির্ধারণ করে যে আপনার বন্দুকধারী কোন স্থানটিতে গুলি করবেmove
- এমন একক সংখ্যা যা আপনার বন্দুকধারী কোন স্থানটিতে যাওয়ার চেষ্টা করবে তা নির্ধারণ করেreload
- একটি সত্য / মিথ্যা মান যার সাহায্যে আপনি আপনার বন্দুকধারাকে পুনরায় লোড করতে পারেন
দ্বৈল
প্রতিযোগিতাটি একটি বৃত্তাকার রবিন 1 বনাম 1 সিস্টেম অনুসরণ করে। প্রতিটি বন্দুকধারীর প্রতি অন্য বন্দুকধারীর বিরুদ্ধে 50 টি রাউন্ড রয়েছে। একটি গুলি যতক্ষণ না কাউকে বুলেট দ্বারা আঘাত করা হয় বা turns turns টার্ন না পেরে যায় (উভয় খেলোয়াড় যখন গুলিবিদ্ধ হয় তখনই একটি পালা হয়)।
বন্দুকধারী তাদের প্রতিপক্ষকে হত্যা করে ২ পয়েন্ট অর্জন করতে পারে, যদি তারা উভয় একই পাল্লায় মারা যায় বা যদি তারা turns 66 টার্নের সীমাতে পৌঁছায় তবে 0 পয়েন্ট। শুটিংয়ের ক্ষেত্রটি 24 স্পেসের প্রস্থ (1-24 সহ)। কোনও খেলোয়াড়কে আঘাত করতে এবং একটি রাউন্ড জিততে আপনার বর্তমানে যে স্থানে দাঁড়িয়ে আছেন ঠিক একই জায়গায় শ্যুট করতে হবে।
দ্বৈত কাজটি কীভাবে কাজ করে সে সম্পর্কে একটি ধাপে ধাপে গাইড এখানে। এটি সমস্ত অবৈধ আদেশ এবং বিশেষ বিধিগুলিও কভার করে:
- প্রতিটি দ্বন্দ্বের শুরুতে উভয় খেলোয়াড়কে 12 টি স্পেসে রাখা হয় এবং তাদের রিভলবারগুলি পুরোপুরি লোড হয়
- মূল ফাংশনটি বলা হয় এবং বন্দুকধারীরা তাদের প্রথম চালনা কমান্ড তৈরি করে এবং যেখানে তারা গুলি করতে চায় তা চয়ন করে
- প্রথমে বন্দুকধারীরা তাদের নতুন জায়গায় চলে যায়। যদি কোনও অবৈধ ইনপুট মুভ কমান্ডে করা হয় (অবস্থানগুলি নীচে তারপরে 1 বা তার বেশি হয় তবে 24 বা তারা আরও স্থান সরিয়ে নিয়ে যায় তবে তাদেরও অনুমতি দেওয়া হয়) তারা একই অবস্থানে থাকে।
- পরবর্তী পুনরায় লোডিং চেক করা হয়, যদি আপনি আগের টার্নে গুলি চালিয়ে যান বা আপনি নিজেকে পুনরায় লোডিং বলে থাকেন তবে আপনার বন্দুকধারী পুনরায় লোড চক্রের মধ্যে চলে যায়। আপনি নিজের
reloadSpeed
মান সেট করার সাথে সাথে তিনি যতগুলি টার্নের জন্য পুনরায় লোড করছেন । আপনি যদি স্থির হয়ে দাঁড়ানোর সিদ্ধান্ত নিয়েছেন (যেখানে আগে দাঁড়িয়েছেন ঠিক একই স্থান পূর্ণসংখ্যাটি ফিরে আসছেন বা কেবলমাত্র একটি অবৈধ মান প্রত্যাবর্তন করছেন) আপনি পুনরায় লোড কাউন্টারটি একের পরিবর্তে 2 টি পরিবর্তে নেমে যাবেন। - এখন আপনার শ্যুটিংয়ের মানগুলি পরীক্ষা করে আসে, প্রতিটি টার্নে আপনি যতটা শুটিংয়ের জায়গাতে চান ঠিক তেমন প্রবেশদ্বারটি যথাযথ বৈধ পরিমাণে কেটে যাবে যা দ্বারা নির্ধারিত হয়: প্রতি ঘুরিয়ে শটের সংখ্যা এবং আপনার রিভলবারের বুলেটের সংখ্যা ( যেটি কম)
shotsPerTurn
আপনি যদি এই পালাটি স্থির করার সিদ্ধান্ত নেন তবে আপনার মান 1 দ্বারা বৃদ্ধি পেয়েছে, তাই আপনি যদি স্থির থাকার সিদ্ধান্ত নেন তবে আপনি অতিরিক্ত শট করতে পারেন make আপনি যদি পুনরায় লোড চক্রের মধ্যে থাকেন তবে আপনার 0 টি শট রয়েছে। এখন আসল শুটিং আসে, এটি নীচে যেতে পারে এমন 2 টি উপায় রয়েছে। উভয় বন্দুকধারীর যদি একই মুভিস্পিড স্ট্যাট থাকে তবে তারা দুজন একই সাথে গুলি চালায় এবং দুজনেই একই সাথে একে অপরকে হত্যা করতে পারে। তাদের ক্ষেত্রে বিভিন্ন মুভিস্পিডের পরিসংখ্যান রয়েছে এমন ক্ষেত্রে উচ্চতর মুভিস্পিড স্ট্যাটের সাথে বটটি প্রথমে শ্যুটিং শুরু করে এবং যদি তিনি তার প্রতিপক্ষকে হত্যা করেন তবে তিনি এই রাউন্ডে জয়ী হন। বন্দুকধারী যদি এক রাউন্ডে এক বা একাধিক গুলি গুলি করতে পারে তবে উদাহরণ হিসাবে আরও চক্র ব্যতীত এটি উপরের মতো একই নিয়ম অনুসরণ করে: বলুন যে বট 1 এ 3 টি বুলেট রয়েছে এবং দ্রুত এবং বট 2 তে 2 গুলি রয়েছে তবে এটি এর মতো হবে :
Bot1 shoots, Bot2 shoots cycle 1 Bot1 shoots, Bot2 shoots cycle 2 Bot1 shoots cycle 3
এটি দেখতে একই রকম হবে যদি তাদের কেবল একই মুভ স্পিড থাকে তবে এখন যদি বোট 1 একই চক্রের বোট 2 টি আঘাত করে তবে বোট 2ও বট 1-এ আঘাত করতে পারে এবং এটি টাই হবে।
নিয়ম
প্রথমে আমি ক্যালভিনের শখের এন্ট্রি থেকে কিছু নিয়ম অনুলিপি করছি যা এখানেও প্রযোজ্য।
নতুন জাভাস্ক্রিপ্ট ভেরিয়েবল ঘোষণার সময়, আপনাকে অবশ্যই ভেরওয়ার্ডটি ব্যবহার করতে হবে। এর কারণ হ'ল ভেরিয়েবল পরিবর্তিত ঘোষিত ভেরিয়েবল স্থানীয় না হয়ে বৈশ্বিক হয়ে যায়, তাই নিয়ন্ত্রকের সাথে দুর্ঘটনাক্রমে (বা ইচ্ছাকৃতভাবে) ঝামেলা করা বা অন্যান্য খেলোয়াড়ের সাথে অবাধে যোগাযোগ করা সহজ হবে। এটি পরিষ্কার হতে হবে যে আপনি প্রতারণার চেষ্টা করছেন না।
ফাংশনগুলি ঘোষণাকালে ভের কীওয়ার্ডটিও ব্যবহার করা ভাল, অর্থাত্ তার var f = function(...) {...}
পরিবর্তে ব্যবহার করুন function f(...) {...}.
কেন আমি পুরোপুরি নিশ্চিত নই তবে কখনও কখনও এটি কোনও তাত্পর্যপূর্ণ বলে মনে হয়।
আপনার কোড আপনি নাও করতে পারেন ...
- নিয়ামক বা অন্যান্য প্লেয়ারের কোড অ্যাক্সেস বা সংশোধন করার চেষ্টা করুন।
- জাভাস্ক্রিপ্ট মধ্যে নির্মিত যে কোনও পরিবর্তন করার চেষ্টা।
- ওয়েব অনুসন্ধান করুন।
- অন্যথায় দূষিত জিনিসগুলি করুন।
আমার অতিরিক্ত নিয়ম:
- ব্যবহারকারীরা যতটা চান বন্দুকধারী তৈরি করতে পারেন এবং যে কোনও সময়ের জন্য তাদের ফাংশন পরিবর্তন করতে পারেন
- আমি গেমটি থেকে এমন কোনও এন্ট্রি সরিয়ে ফেলব যা হয় অতিরিক্ত পরিমাণে সময় নেয় বা যে কোনও উপায়ে আমার সাথে ফিট হওয়ার প্রবণতা দেখা যায়
- আপনার ফাংশনটি যে বৈশিষ্ট্যগুলির ফিরতে হবে তার নামগুলি একই কাঠামোর উদাহরণগুলিতে একই হতে হবে!
আপনার উত্তরটি এই ফর্ম্যাটে থাকা উচিত, প্রথম ফাংশনটি অ্যাট্রিবিউট ফাংশন এবং দ্বিতীয়টি লজিক ফাংশন। লক্ষ্য করুন যে আমি একটি বিস্ময়বোধক চিহ্নটি ব্যবহার করেছি কারণ আপনি যদি কোড ব্লকগুলির মধ্যে কেবল নতুন লাইন তৈরি করেন তবে পার্সার দুটি ভিন্ন কোড ব্লক দেখতে পাবে না যাতে সেগুলি পৃথক করতে আপনাকে কোনও চিহ্ন (কেবল একটি বিস্মৃতি চিহ্ন ব্যবহার করতে হবে):
var bot = {
name: "testBot",
numbOfBullets: 7,
reloadSpeed: 1,
shotsPerTurn: 1,
moveSpeed: 2
}
return bot
var shots = []
var testBot_moveUp = true
if(Math.random() * 2 > 1)
testBot_moveUp = false
shots.push(Math.floor((Math.random() * 24) + 1))
var move = 0
if (testBot_moveUp)
move = yourMovement[yourMovement.length - 1] + 2
else
move = yourMovement[yourMovement.length - 1] - 2
move = 12
var play = []
play.shots = shots
play.move = move
play.reload = false
return play
এবং এখানে নিয়ামক: গেম কনট্রোলার । কেবলমাত্র লিঙ্কটি খুলুন এবং বটগুলি লোড হওয়ার জন্য অপেক্ষা করুন, তারপরে লড়াইয়ে আপনি কোনটি বেছে নিতে চান (সম্ভবত সমস্ত) এবং স্টার্ট বোতামটি টিপুন।
আমি আমার উত্তর হিসাবে একটি টেস্টবোটও রেখেছিলাম যা প্রতিযোগিতা করবে, এটি উত্তরটির কাঠামোটি কেমন হওয়া উচিত তা উদাহরণ হিসাবে কাজ করে। একটি নোট হিসাবে, আপনি যদি একটি ছোট ভুল করেন এবং আপনার উত্তরটি স্ট্যাকেক্সচেঞ্জগুলি অ্যালগরিদম সম্পাদনা করেন তবে তা সরাসরি গ্রহণ করতে পারে না এবং স্ট্যাকেক্সচেঞ্জ দ্বারা উত্পাদিত কন্ট্রোলার যে সাইট ব্যবহার করে তা আপডেট হয় না (তবে পরে বা আপনি যদি আমার প্রস্তাবিত আরও বড় পরিবর্তন করেন তবে করছেন, কেবল শেষে কিছু পাঠ্য যুক্ত করুন)। এখানে সাইট: কোডেলিংক
<!---->
"অদৃশ্যভাবে" (ছাড়া !
) কোডব্লকগুলি পৃথক করতে ব্যবহার করতে পারেন ।