আপনি যদি কখনও স্পেসওয়ার খেলেন ! , আপনি জানেন যে এটি একটি মজাদার খেলা ছিল। যদি আপনার না থাকে তবে এটি জানুন: এটি ছিল প্রথম এবং সবচেয়ে গুরুত্বপূর্ণ কম্পিউটার গেমগুলির মধ্যে একটি (এবং এটি)। এবং এটি এখনও মজা! আমি যে ক্লোনটির উপরে বড় হয়েছিলাম এটি হ'ল এটি দৃশ্যত এবং দুর্ভাগ্যক্রমে কেবল উইন্ডোজ। তাই আমি এটি পুনরায় তৈরি!
কোটটি এখানে হোস্ট করা হয়েছে: পিপিসিজি - স্পেসওয়ার! পাহাড়ের রাজা । গেমটি কীভাবে কাজ করে তার অনুভূতি পেতে আপনাকে কমপক্ষে একটি অন্য বটের বিরুদ্ধে মানব হিসাবে খেলতে উত্সাহিত করি।
খেলাাটি
- একটি ফ্রেম 30 মিলিসেকেন্ড (এইভাবে, প্রতি সেকেন্ডে প্রায় 33 ফ্রেম)।
- ক্ষেত্রটি 800 পিক্সেল প্রশস্ত এবং 600 পিক্সেল লম্বা।
- ক্ষেত্রটি টেরয়েডাল, যার অর্থ ক্ষেত্রের বাইরে চলে যাওয়া স্পেসশিপ এবং মিসাইলগুলি বিপরীত দিকে আবার উপস্থিত হবে।
- লাল এবং নীল দুটি স্পেসশিপ রয়েছে।
- রেডটি x = 50 এবং এলোমেলো y এর 50, (ক্ষেত্রের উচ্চতা - 50) পিক্সেলের মধ্যে অবস্থিত।
- নীলটি x = (ক্ষেত্রের প্রস্থ - 50) এবং এলোমেলো y এর 50, (ক্ষেত্রের উচ্চতা - 50) পিক্সেলের উপরে অবস্থিত।
- উভয় মুখ x = (ক্ষেত্রের প্রস্থ) / 2।
- উপলব্ধ নিয়ন্ত্রণগুলি হ'ল:
- বাম দিকে ঘুরুন - প্রতি ফ্রেমের প্রতি ঘড়ির কাঁটার দিকে 5 ডিগ্রি।
- ডানদিকে ঘুরুন - ঘড়ির কাঁটার দিকে ফ্রেম প্রতি 5 ডিগ্রি।
- অগ্নি ক্ষেপণাস্ত্র - জাহাজটি যে দিকে ইশারা করছিল সেদিকে জাহাজের গতিবেগ ছাড়াও ফ্রেম প্রতি অতিরিক্ত 10 পিক্সেল ভ্রমণ করে।
- ফায়ার ইঞ্জিন - স্পেসশিপটি নির্দেশ করছে যে দিকে ফ্রেম প্রতি 0.30 পিক্সেল এ স্পেসশিপটি ত্বরান্বিত করে।
- হাইপারস্পেস জাম্প - ক্ষেত্রের কয়েকটি এলোমেলো স্থানাঙ্কে টেলিফোনগুলি, বিস্ফোরণের 25% সম্ভাবনা রয়েছে। এই এলোমেলো স্থানাঙ্কগুলি সূর্যের শীর্ষে থাকতে পারে।
- মাধ্যাকর্ষণ বৃদ্ধির সময় জাহাজগুলির জন্য সর্বোচ্চ গতি ইঞ্জিন পাওয়ারের অধীনে ফ্রেম প্রতি 15 পিক্সেল এবং ফ্রেম প্রতি 40 পিক্সেল।
- প্রতি ফ্রেম 15 পিক্সেলের বেশি দ্রুত ভ্রমণ করার সময় ইঞ্জিন থ্রাস্ট কেবল দিক পরিবর্তন বা ধীর হতে পারে।
- ক্ষেপণাস্ত্র সম্পর্কিত:
- মিসাইলগুলি একটি সরল লাইনে ভ্রমণ করে।
- মিসাইলগুলি 0.1 সেকেন্ডে সর্বোচ্চ 1 হারে নিক্ষেপ করা হতে পারে।
- মিসাইলগুলির আজীবন ২.২৫ সেকেন্ড থাকে।
- জাহাজগুলির প্রতিটিতে সর্বোচ্চ 20 টি ক্ষেপণাস্ত্র রয়েছে।
- মিসাইলগুলি অভ্যন্তরীণভাবে পয়েন্ট কণা।
- খুব কেন্দ্রে একটি সূর্য রয়েছে যা আপনার জাহাজের পক্ষে অত্যন্ত বিপজ্জনক। নামমাত্র যোগাযোগ মারাত্মক হয়। এই সূর্য ক্ষেপণাস্ত্র ধ্বংস করে।
- সূর্যের মাধ্যাকর্ষণ আছে। ফলস্বরূপ ত্বরণটি 5000 / (দূরত্ব ^ 2) পিক্সেল / ফ্রেম ^ 2, যেখানে দূরত্ব পিক্সেলে রয়েছে। স্পেসশিপ এবং ক্ষেপণাস্ত্রগুলি প্রভাবিত হয়।
- উভয় জাহাজের তিনটি স্ট্রাইক অঞ্চল রয়েছে: নাক, বাম শাখা এবং ডান ডানা।
- নাকের উপর আঘাত হানা তাত্ক্ষণিক মৃত্যু।
- উভয় পক্ষের উপর আঘাত হ'ল স্পেসশিপের টার্ন রেট এবং ইঞ্জিনের ত্বরণ অর্ধেক হ্রাস করে।
- উভয় ডানা ধ্বংস হয়ে গেলে, স্পেসশিপটি চালিত করা যায় না এবং কেবল মিসাইল গুলি চালানো যেতে পারে fire
- জাহাজগুলির একে অপরের সাথে সংঘর্ষ হতে পারে।
- উভয় জাহাজের জন্য নাক-নাকের প্রভাব মারাত্মক।
- একটি নাক ডানা প্রভাব ডানা ধ্বংস।
- একটি ডানা ডানা প্রভাব উভয় ডানা ধ্বংস করে।
- মৃত জাহাজগুলি শক্ত এবং হিমায়িত হয় যতক্ষণ না তারা 1 সেকেন্ড পরে বিস্ফোরিত হয়।
- কমপক্ষে একটি জাহাজ মারা যাওয়ার পরে, ক্ষেত্রটি 3 সেকেন্ড পরে পুনরায় সেট করা হবে। ততক্ষণে, সূর্য এবং অন্য কোনও মিসাইল এখনও ঝুঁকিপূর্ণ।
আসল গেমটিতে মারাত্মক এবং অবিনাশী গ্রহাণুও রয়েছে তবে আমি সেগুলি অন্তর্ভুক্ত করব না।
নিয়ম
- আপনার বটটি অবশ্যই জাভাস্ক্রিপ্টে লেখা উচিত।
- আপনার বটটি এর সিদ্ধান্তটিকে প্রায় 10 মিলিসেকেন্ডে সীমাবদ্ধ করে। আপনার বোটের কারণে যদি আমি ধারাবাহিকভাবে পিছিয়ে পড়ে লক্ষ্য করি তবে আমি এটিকে অযোগ্য ঘোষণা করব এবং আপনাকে জানাতে পারি যাতে আপনি এটি ঠিক করতে পারেন।
- বটগুলির নিম্নলিখিতগুলিতে অ্যাক্সেস থাকবে:
- ক্ষেত্রের প্রস্থ এবং ক্ষেত্রের উচ্চতা
- সূর্যের অবস্থান এবং ব্যাসার্ধ
- উভয় জাহাজের অবস্থান, ঘূর্ণন, বেগ, আকার, ক্ষেপণাস্ত্র স্টক এবং হাইপারস্পেসের স্থিতি
- সমস্ত ক্ষেপণাস্ত্রগুলির অবস্থান এবং বেগ
- জিজ্ঞাসা করা হলে, আপনার বট স্ট্রিংগুলির একটি তালিকা ফেরত দেওয়া উচিত।
- : এই স্ট্রিং নিম্নলিখিত কোনো একটি হওয়া আবশ্যক
turn left
,turn right
,fire engine
,fire missile
,hyperspace
। অন্য কোনও স্ট্রিং উপেক্ষা করা হবে। - যদি কোনও সদৃশ থাকে তবে কেবল প্রথমটিই লক্ষ্য করা যাবে।
hyperspace
অন্য সকলের চেয়ে অগ্রাধিকার নেয়।turn left
এবংturn right
একই সাথে কোনও প্রভাব ফেলবে না।fire engine
যদি জাহাজটির কেবল নাক থাকে বা মারা যায় তবে তার কোনও প্রভাব পড়বে না।fire missile
খুব সম্প্রতি একটি ক্ষেপণাস্ত্র চালিত হলে এর কোনও প্রভাব পড়বে না।
- : এই স্ট্রিং নিম্নলিখিত কোনো একটি হওয়া আবশ্যক
- স্বাভাবিকের পরিবর্তনে, আপনার বটকে অন্য বটের আচরণের সুযোগ নিতে দেওয়া হয়। আমি একটি মেটাগেমকে উত্সাহিত করতে চাই।
- বটগুলি অন্যান্য বটগুলি অনুকরণ করতে পারে না । (অর্থাত্ মন-পঠন নেই))
- বটস গেম এবং পদার্থবিজ্ঞানের কোড দ্বারা ব্যবহৃত কোনও ভেরিয়েবল সেট নাও করতে পারে । (অর্থাত্ কোনও প্রতারণা নেই))
বট বাস্তবায়ন বিশদ
আমি আপনার বটটি ফাইলের নাম সহ স্বয়ংক্রিয়ভাবে অন্তর্ভুক্ত করা নিজস্ব জাভাস্ক্রিপ্ট ফাইলটিতে সংরক্ষণ করব bot_<name>.js
। সুতরাং এমন কোনও স্পেস বা অক্ষর রাখবেন না যা এতে বা জাভাস্ক্রিপ্টে কোনও ফাংশন নামকরণের সাথে হস্তক্ষেপ করবে। এটি কারণ আপনার নিম্নলিখিত ফাংশনগুলি সংজ্ঞায়িত করা উচিত: <name>_setup(team)
এবং <name>_getActions(gameInfo, botVars)
। পৃষ্ঠার আরও নিচে, ব্যবহারকারীর জন্য টেক্সারিয়াস রয়েছে যা আপনি আপনার কোডটি পরীক্ষা করতে সম্পাদনা করতে পারবেন।
<name>_setup(team)
আপনি অবিরত রাখতে চান এমন কোনও ভেরিয়েবল সংজ্ঞায়িত করার জন্য এই ফাংশনটি। team
হয় হয় "red"
বা হয় "blue"
। এই ফাংশন অবশ্যই একটি বস্তু ফেরত দিতে হবে। ভেরিয়েবলগুলি এর মতো সংজ্ঞায়িত করুন:
var vars = {};
vars['example'] = "example";
return vars;
এই vars
অবজেক্টটি অন্য ফাংশনে প্রবেশ করবে:
<name>_getActions(gameInfo, botVars)
botVars
বস্তুটি দ্বারা প্রত্যাবর্তিত হয় <name>_setup(team)
। gameInfo
নিম্নলিখিত ভেরিয়েবল সমন্বিত একটি অবজেক্ট:
redScore
blueScore
timeLeft
fieldWidth
fieldHeight
sun_x
sun_y
sun_r //sun's radius
gravityStrength //acceleration in pixels/frame^2 at 1 pixel away from the sun's center
engineThrust //acceleration in pixels/frame^2
speedLimit //maximum speed under engine power
maxSpeed //maximum speed from gravity boosts
red_x
red_y
red_rot //rotation in degrees
red_xv //x velocity
red_yv //y velocity
red_shape //one of "full ship", "left wing", "right wing", "nose only"
red_missileStock //the number of missiles red has left
red_inHyperspace //true if red is in hyperspace
red_exploded //until red explodes, it is still solid and hazardous
red_alive
// likewise for blue //
numMissiles
missiles //this is a list of objects, each with the following variables
x
y
xv
yv
আপনার বট এগুলিতে সম্পূর্ণ অ্যাক্সেস রয়েছে। আমি নিশ্চিত যে আপনি তাদের কাছে লিখতে পারেন এবং আসল ভেরিয়েবলগুলি প্রভাবিত করতে পারবেন না, তবে যাইহোক এটি করবেন না। ঘুর্ণন একটি নোট: জাহাজ বাতলান , + Y দিক নিচের দিকে, তাই কিছু জাহাজ দিয়ে সারিবদ্ধ করতে চান 90 ডিগ্রী পুষিয়ে করা প্রয়োজন। এছাড়াও, ইতিবাচক ঘূর্ণনটি ঘড়ির কাঁটার দিকে।
এই ফাংশনটি অবশ্যই আপনার বটের ক্রিয়াকলাপ উপস্থাপন করে স্ট্রিংগুলির একটি তালিকা ফেরত দিতে হবে। উদাহরণস্বরূপ ["turn right","thrust"]
,। এ সম্পর্কে আরও বিশদ বিধি বিধানে রয়েছে।
অতিরিক্ত তথ্য
আপনি নিম্নলিখিত ব্যবহার করতে পারেন:
LineIntersection(L1, L2)
L1 এবং L2 দ্বি-উপাদান অ্যারেগুলির দুটি-উপাদান অ্যারে। যে, L1 := [[x1,y1],[x2,y2]]
এবং L2 := [[u1,v1],[u2,v2]]
। এই ফাংশনটি দুই লাইন ছেদ নির্ণয় এবং এই ফেরৎ: [[x,y], [a,b]]
। [x,y]
ছেদ বিন্দুর স্থানাঙ্ক এবং [a,b]
এটি এমন এক অনুপাত যা প্রকাশ করে যে প্রতিটি লাইন বরাবর ছেদ বিন্দু কতটা দূরে express হিসাবে হিসাবে, a = 0.25
ছেদ বিন্দু থেকে [x1,y1]
যেতে পথ চতুর্থাংশ [x2,y2]
, এবং তেমনিভাবে হবে b
। যদি কোনও ছেদ না থাকে তবে একটি খালি অ্যারে ফিরে আসে।
window["shipShapes"]
var shipShapes = {
'full ship': [[-8,16],[0,-8],[8,16]],
'left wing': [[-8,16],[0,-8],[4,4],[0,8],[0,16]],
'right wing':[[-4,4],[0,-8],[8,16],[0,16],[0,8]],
'nose only': [[-4,4],[0,-8],[4,4],[0,8]]
};
এগুলি হ'ল জাহাজের বহুভুজগুলির স্থানাঙ্ক। বর্তমান স্থানাঙ্কগুলি সহজতর করতে আপনি ব্যবহার করতে পারেন ...
getShipCoords(<color>)
getShipCoords("red")
রেডের জাহাজের শীর্ষাংশের বর্তমান স্থানাঙ্কগুলি এবং একইভাবে getShipCoords("blue")
এবং নীলকে ফিরিয়ে দেবে । এই স্থানাঙ্ক তাই মত একটি তালিকা আছে: [[x1,y1],[x2,y2],[x3,y3],...]
। বহুভুজগুলি সুস্পষ্টভাবে বন্ধ রয়েছে, সুতরাং প্রথম এবং শেষ স্থানাঙ্ক জোড়াগুলির মধ্যে একটি লাইন রয়েছে।
আপনি গেম / ওয়েবসাইটের দ্বারা ব্যবহারযোগ্য কোনও অন্যান্য ভেরিয়েবল বা ফাংশন অ্যাক্সেস বা পরিবর্তন করতে পারবেন না। এবং অবশ্যই আপনার ফাংশনগুলির নাম একই রাখবেন না। আমি ভাবছি না যে এটি একটি সমস্যা হবে তবে আপনার বট যদি গেম কোডটি ভেঙে দেয় তবে এটিই সম্ভাবনা। কোনও লগিং বা ব্যতিক্রম ধরা নেই is
জয়লাভ
- প্রতিটি জোড়া বট কমপক্ষে 10 বার, উভয় উপায়ে খেলতে হবে। (সুতরাং, কমপক্ষে কমপক্ষে 20 গেমস))
- সামগ্রিকভাবে সর্বোচ্চ বিজয় / হ্রাস অনুপাতের লক্ষ্য । যদি আপনার বটটি অন্য একটি বটের বিরুদ্ধে দুর্দান্তভাবে কাজ করে তবে অন্য তিনটির বিরুদ্ধে হারাতে পারে, এটি দুটিয়ের বিরুদ্ধে জিততে এবং দু'জনের বিরুদ্ধে হারাতে (থাম্বের একটি সাধারণ নিয়ম হিসাবে) হিসাবে ভাল নয়।
- প্রতিটি বোটের জন্য অনুপাত (জিত + 1) / (ক্ষয় + 1) গণনা করা হবে, তারপরে এই অনুপাতগুলির গড় এবং মান বিচ্যুতি গণনা করা হবে। একটি উচ্চতর গড়ের অগ্রাধিকার থাকবে এবং যদি উপায়গুলি একে অপরের 1 ইউনিটের মধ্যে থাকে তবে নিম্নতম বৈকল্পিকতায় অগ্রাধিকার থাকবে।
- আজ থেকে এক সপ্তাহের মধ্যে বা নতুন জমা দেওয়ার তিন দিন পরে স্কোরিং শুরু হবে। এটি এমন যে আমাকে কোনও জোড়া লাগানোর পুনরাবৃত্তি করতে হবে না।
সর্বোপরি, মজা করুন!
লিডারবোর্ড (2016-01-08 05:15):
# Name Mean StdDev
1. Helios 13.625 6.852
2. EdgeCase 8.335 8.155
3. OpponentDodger 8.415 8.186
4. OrbitBot 5.110 6.294
5. SunAvoider 5.276 6.772
6. DangitBobby 3.320 4.423
7. SprayAndPray 3.118 4.642
8. Engineer 3.903 6.315
9. RighthandedSpasms 1.805 2.477
10. AttackAndComeBack 2.521 2.921
11. PanicAttack 2.622 3.102
12. FullSpeedAhead 2.058 3.295
13. UhhIDKWhatToCallThisBot 2.555 3.406
14. MissilesPlusScore 0.159 0.228
15. Hyper 0.236 0.332
16. RandUmmm 0.988 1.329
17. Kamikaze 0.781 1.793
দ্রষ্টব্য: আমি আরও গেমস চালানোর কারণে এটি পরিবর্তন হতে পারে। এছাড়াও, 9-13 র্যাঙ্কের ক্রমটি আমাকে বিরক্ত করে, সুতরাং তাদের কীভাবে র্যাঙ্কিং করা উচিত তার অন্তর্দৃষ্টির সাথে আরও ভালভাবে মেলে আমি স্কোরিং পদ্ধতিটি টুইঙ্ক করতে পারি।
(মানে এবং স্ট্যান্ডার্ড বিচ্যুতিগুলি তিন দশমিক অঙ্ককে গোল করা হয়েছিল Also এছাড়াও, হ'ল হাইডিংয়ে গোলযোগ Hyper
হওয়া উচিত HYPER
: পি)
LineIntersection
ছেদকারী বিভাগগুলিতে কল করা একটি ফাঁকা অ্যারে দেয়।