আপডেট: আইসুসিডিডাল () প্লেন ক্লাসে যুক্ত করা হয়েছিল, এটি আপনাকে প্লেনটি দেয়ালগুলির সাথে অপরিবর্তনীয় সংঘর্ষের কোর্সে রয়েছে কিনা তা পরীক্ষা করতে দেয়!
আপডেট: আপডেটকুলডাউন () সিমুলেটমভ () থেকে পৃথক
আপডেট: স্পার দ্বারা লিখিত জাভাবিহীন এন্ট্রি র্যাপার, পরীক্ষার জন্য উপলব্ধ, মন্তব্য দেখুন see
আপডেট আপডেট জোভ গেমস এই কোথার জন্য দুর্দান্ত একটি 3D ভিজ্যুয়ালাইজার লিখেছেন, এখানে প্রিডিক্টঅ্যান্ডএভয়েডের লড়াইয়ের প্রিডিক্ট অ্যান্ডভাইয়েডের একটি শিট ইউটিউব ভিডিও রয়েছে।
প্লেন ক্লাসের সিমুলেটমভ () ফাংশনটি কিছুটা সংশোধন করা হয়েছিল তাই এটি শীতল হওয়ার পরে আর আপডেট না করে, শুটিংয়ের পরে নতুন আপডেটকুলডাউন () ফাংশনটি ব্যবহার করুন। নতুন ইসসাইসিডাল () সত্য প্রত্যাবর্তন করে যদি কোনও প্লেন মৃতপ্রায় হয়ে যেতে বাধ্য হয়, শত্রুদের চালগুলি ছাঁটাই করতে এবং প্রাচীরকে আঘাত করা এড়াতে এটি ব্যবহার করুন। আপডেট হওয়া কোডটি পেতে, গিথুব রেপোগুলিতে কেবল কন্ট্রোলার এবং প্লেন ক্লাসগুলি প্রতিস্থাপন করুন ।
বিবরণ
এই চ্যালেঞ্জের লক্ষ্য হ'ল দুটি ডগফাইটিং প্লেনকে কোড করা যা অন্য প্রতিযোগীর দ্বারা দুটি প্লেনের বিরুদ্ধে মুখোমুখি হবে। প্রতিটি পালা আপনি একটি স্থান সরানো এবং অঙ্কুর করার সুযোগ আছে। এটাই, এটি এতটা সহজ।
ভাল প্রায়...
এরিনা এবং সম্ভাব্য পদক্ষেপ
মহাকাশে প্রাচীরটি একটি 14x14x14 প্রাচীর। প্রতিযোগী 1 এর প্লেনগুলি অবস্থানগুলি (0,5,0) এবং (0,8,0) এবং প্রতিযোগী 2 এর (13,5,13) এবং (13,8,13) থেকে শুরু হয়। সমস্ত প্লেনগুলি যার কাছাকাছি অবস্থিত উল্লম্ব দেয়ালগুলি থেকে অনুভূমিকভাবে উড়ে গিয়ে শুরু হয়।
এখন আপনি যেহেতু হেলিকপ্টার নয় প্লেনগুলি উড়াল করছেন, আপনি কেবল ইচ্ছামত দিক পরিবর্তন করতে পারবেন না এমনকি চলন্তও থামিয়ে দিতে পারবেন না, সুতরাং প্রতিটি বিমানের একটি দিক রয়েছে এবং প্রতি মোড়ের দিকে একটি টাইল সরানো হবে।
সম্ভাব্য দিকনির্দেশগুলি হ'ল: উত্তর (এন), দক্ষিণ (এস), পূর্ব (ই), পশ্চিম (ডাব্লু), আপ (ইউ) এবং ডাউন (ডি) এবং এই ছয়টির যে কোনও যৌক্তিক সমন্বয়। যেখানে এনএস অক্ষটি এক্স অক্ষের সাথে মিলে যায়, ডব্লিউই থেকে y এবং ডিইউ থেকে জেড। NW, SU এবং NED দিকনির্দেশের সম্ভাব্য উদাহরণ হিসাবে মনে আসে; ইউডি একটি অবৈধ সংমিশ্রণের দুর্দান্ত উদাহরণ।
আপনি অবশ্যই আপনার বিমানগুলির দিক পরিবর্তন করতে পারেন, তবে একটি সীমাবদ্ধতা রয়েছে, আপনি কেবলমাত্র সর্বোচ্চ 45 ডিগ্রি দ্বারা আপনার দিক পরিবর্তন করতে পারেন। এটি দেখতে, আপনার রুবিকের ঘনক্ষেতটি ধরুন (আমি জানি আপনার একটি রয়েছে) এবং কল্পনা করুন যে ২ outer টি বাহ্যিক ছোট ঘনক্ষেত্রের সমস্তই সম্ভাব্য দিকনির্দেশনা (একটি অক্ষরের দিক মুখ, দুটি অক্ষরের দিক প্রান্ত এবং তিনটি অক্ষরের দিক কোণ)। আপনি যদি সামান্য ঘনক্ষেত্র দ্বারা প্রতিনিধিত্ব করা কোনও দিকে যাচ্ছেন তবে আপনি নিজের স্পর্শের প্রতিটি ঘনকের দিকে দিক পরিবর্তন করতে পারবেন (তির্যকভাবে স্পর্শকারী গণনাগুলি, তবে কেবল স্পর্শকাতরভাবে স্পর্শ করা, এটি কিউবটি স্পর্শ করছে না)।
সমস্ত প্লেনগুলি কোন দিকে পরিবর্তন করতে চায় তার দিকে ইঙ্গিত করার পরে তারা তা করে এবং একই সাথে একটি টাইল সরিয়ে দেয়।
আপনি কোনও বৈধ দিকে যাওয়ার দিকেও যেতে পারেন তবে আপনি যে দিকে যাচ্ছেন সেদিকে আপনার দিক পরিবর্তন করার পরিবর্তে আপনি যে দিকে যাচ্ছেন সেদিকেই উড়তে থাকুন। এটি একটি কোণার কাছাকাছি যাওয়া গাড়ি এবং একটি গাড়ি পরিবর্তনকারী লেনের পার্থক্যের সাথে সাদৃশ্য।
শুটিং এবং মরণ
আপনি প্রতি রাউন্ডে একবারে গুলি করতে পারেন এবং ঠিক একই সময়ে সিদ্ধান্ত নেওয়া উচিত যে আপনি কোন দিকটি উড়তে হবে এবং আপনি নিজের বিমানটি (এবং এক্সটেনশনের মাধ্যমে, আপনার বন্দুকটি) একই দিকে নির্দেশিত রাখতে চান কিনা তা ঠিক করুন। বুলেটটি আপনার বিমানটি চলার ঠিক পরে গুলিবিদ্ধ হয়। শুটিংয়ের পরে এক পালা শীতল ডাউন আছে, তৃতীয় টার্নে, আপনি আবার যেতে ভাল good আপনি কেবল যে দিকে যাত্রা করছেন সেদিকেই গুলি করতে পারেন A একটি বুলেট তাত্ক্ষণিক হয় এবং এটি কোনও দেয়াল বা বিমানকে আঘাত না করা পর্যন্ত একটি সরলরেখায় উড়ে যায়।
আপনি যেভাবে দিক পরিবর্তন করতে পারেন তেমন 'লেন পরিবর্তন করুন' তা বিবেচনায় নিয়ে আসার অর্থ এই যে আপনি আপনার সামনে 3x3 লাইন পর্যন্ত একটি কলামকে অতিরিক্ত কিছু তির্যক, একক লাইনকে হুমকি দিতে পারেন।
যদি এটি কোনও বিমানকে আঘাত করে, তবে এই বিমানটি মারা যায় এবং তাত্ক্ষণিকভাবে বোর্ড থেকে অদৃশ্য হয়ে যায় (কারণ এটি পুরোপুরি বিস্ফোরিত হয় বা কোনও কিছু)। বুলেটগুলি কেবলমাত্র একটি বিমানকে সর্বোচ্চ আঘাত করতে পারে। বুলেটগুলি একই সাথে গুলি করা হয়, যাতে দুটি প্লেন একে অপরকে গুলি করতে পারে। দুটি গুলি যদিও বাতাসে সংঘর্ষ করতে পারে না (দু: খিত, আমি জানি)।
দুটি প্লেন অবশ্য সংঘর্ষে পড়তে পারে (যদি তারা একই ঘনক্ষেত্রের মধ্যে শেষ হয় এবং যদি তারা একই বিমানে শেষ না করে একে অপরকে অতিক্রম করে তবে) এবং এর ফলে উভয় বিমান মারা যায় (এবং সম্পূর্ণ বিস্ফোরিত হয়)। আপনি প্রাচীরের মধ্যেও উড়ে যেতে পারেন যার ফলে বিমানটি প্রশ্নোত্তর হয়ে উঠবে এবং এর ক্রিয়াগুলি সম্পর্কে চিন্তা করতে কোণায় ফেলে দেওয়া হবে। সংঘর্ষগুলি শুটিংয়ের আগে পরিচালনা করা হয়।
নিয়ন্ত্রকের সাথে যোগাযোগ
আমি জাভা এবং অন্যান্য ভাষায় এন্ট্রি গ্রহণ করব। যদি আপনার এন্ট্রি জাভাতে থাকে, আপনি এসটিডিআইএন এর মাধ্যমে ইনপুট পাবেন এবং এসটিডিআউট মাধ্যমে আউটপুট পাবেন।
যদি আপনার এন্ট্রি জাভাতে থাকে, .আপনার প্রবেশ অবশ্যই নিম্নলিখিত শ্রেণীর প্রসারিত করতে হবে:
package Planes;
//This is the base class players extend.
//It contains the arena size and 4 plane objects representing the planes in the arena.
public abstract class PlaneControl {
// note that these planes are just for your information, modifying these doesn't affect the actual plane instances,
// which are kept by the controller
protected Plane[] myPlanes = new Plane[2];
protected Plane[] enemyPlanes = new Plane[2];
protected int arenaSize;
protected int roundsLeft;
...
// Notifies you that a new fight is starting
// FightsFought tells you how many fights will be fought.
// the scores tell you how many fights each player has won.
public void newFight(int fightsFought, int myScore, int enemyScore) {}
// notifies you that you'll be fighting anew opponent.
// Fights is the amount of fights that will be fought against this opponent
public void newOpponent(int fights) {}
// This will be called once every round, you must return an array of two moves.
// The move at index 0 will be applied to your plane at index 0,
// The move at index1 will be applied to your plane at index1.
// Any further move will be ignored.
// A missing or invalid move will be treated as flying forward without shooting.
public abstract Move[] act();
}
এই শ্রেণীর তৈরি করা দৃষ্টান্তটি পুরো প্রতিযোগিতা জুড়ে থাকবে, যাতে আপনি ভেরিয়েবলগুলিতে সঞ্চয় করতে চান এমন কোনও ডেটা সংরক্ষণ করতে পারেন। আরও তথ্যের জন্য কোডটিতে মন্তব্য পড়ুন।
আমি আপনাকে নিম্নলিখিত সহায়ক ক্লাসগুলি সরবরাহ করেছি:
package Planes;
//Objects of this class contain all relevant information about a plane
//as well as some helper functions.
public class Plane {
private Point3D position;
private Direction direction;
private int arenaSize;
private boolean alive = true;
private int coolDown = 0;
public Plane(int arenaSize, Direction direction, int x, int y, int z) {}
public Plane(int arenaSize, Direction direction, Point3D position) {}
// Returns the x coordinate of the plane
public int getX() {}
// Returns the y coordinate of the plane
public int getY() {}
// Returns the z coordinate of the plane
public int getZ() {}
// Returns the position as a Point3D.
public Point3D getPosition() {}
// Returns the distance between the plane and the specified wall,
// 0 means right next to it, 19 means at the opposite side.
// Returns -1 for invalid input.
public int getDistanceFromWall(char wall) {}
// Returns the direction of the plane.
public Direction getDirection() {}
// Returns all possible turning directions for the plane.
public Direction[] getPossibleDirections() {}
// Returns the cool down before the plane will be able to shoot,
// 0 means it is ready to shoot this turn.
public int getCoolDown() {}
public void setCoolDown(int coolDown) {}
// Returns true if the plane is ready to shoot
public boolean canShoot() {}
// Returns all positions this plane can shoot at (without first making a move).
public Point3D[] getShootRange() {}
// Returns all positions this plane can move to within one turn.
public Point3D[] getRange() {}
// Returns a plane that represents this plane after making a certain move,
// not taking into account other planes.
// Doesn't update cool down, see updateCoolDown() for that.
public Plane simulateMove(Move move) {}
// modifies this plane's cool down
public void updateCoolDown(boolean shot) {
coolDown = (shot && canShoot())?Controller.COOLDOWN:Math.max(0, coolDown - 1);
}
// Returns true if the plane is alive.
public boolean isAlive() {}
// Sets alive to the specified value.
public void setAlive(boolean alive) {}
// returns a copy of itself.
public Plane copy() {}
// Returns a string representing its status.
public String getAsString() {}
// Returns a string suitable for passing to a wrapped plane process
public String getDataString() {}
// Returns true if a plane is on an irreversable colision course with the wall.
// Use this along with simulateMove() to avoid hitting walls or prune possible emeny moves.
public boolean isSuicidal() {}
}
// A helper class for working with directions.
public class Direction {
// The three main directions, -1 means the first letter is in the direction, 1 means the second is, 0 means neither is.
private int NS, WE, DU;
// Creates a direction from 3 integers.
public Direction(int NSDir, int WEDir, int DUDir) {}
// Creates a direction from a directionstring.
public Direction(String direction) {}
// Returns this direction as a String.
public String getAsString() {}
// Returns The direction projected onto the NS-axis.
// -1 means heading north.
public int getNSDir() {}
// Returns The direction projected onto the WE-axis.
// -1 means heading west.
public int getWEDir() {}
// Returns The direction projected onto the DU-axis.
// -1 means heading down.
public int getDUDir() {}
// Returns a Point3D representing the direction.
public Point3D getAsPoint3D() {}
// Returns an array of chars representing the main directions.
public char[] getMainDirections() {}
// Returns all possible turning directions.
public Direction[] getPossibleDirections() {}
// Returns true if a direction is a valid direction to change to
public boolean isValidDirection(Direction direction) {}
}
public class Point3D {
public int x, y, z;
public Point3D(int x, int y, int z) {}
// Returns the sum of this Point3D and the one specified in the argument.
public Point3D add(Point3D point3D) {}
// Returns the product of this Point3D and a factor.
public Point3D multiply(int factor) {}
// Returns true if both Point3D are the same.
public boolean equals(Point3D point3D) {}
// Returns true if Point3D is within a 0-based arena of a specified size.
public boolean isInArena(int size) {}
}
public class Move {
public Direction direction;
public boolean changeDirection;
public boolean shoot;
public Move(Direction direction, boolean changeDirection, boolean shoot) {}
}
আপনি এই ক্লাসগুলির উদাহরণ তৈরি করতে পারেন এবং তাদের যে কোনও ফাংশন আপনার পছন্দ মতো ব্যবহার করতে পারেন। আপনি এখানে এই সহায়ক ক্লাসগুলির জন্য সম্পূর্ণ কোডটি সন্ধান করতে পারেন ।
আপনার এন্ট্রিটি দেখতে কেমন হতে পারে তার একটি উদাহরণ এখানে রয়েছে (আশা করি আপনি আমার চেয়ে আরও ভাল করতে পারছেন , প্রাচীর এড়াতে তাদের সর্বোত্তম প্রচেষ্টা সত্ত্বেও এই বিমানগুলির সাথে বেশিরভাগ ম্যাচগুলি প্রাচীরের সাথে উড়ে যাওয়ার সাথে শেষ হয়)):
package Planes;
public class DumbPlanes extends PlaneControl {
public DumbPlanes(int arenaSize, int rounds) {
super(arenaSize, rounds);
}
@Override
public Move[] act() {
Move[] moves = new Move[2];
for (int i=0; i<2; i++) {
if (!myPlanes[i].isAlive()) {
moves[i] = new Move(new Direction("N"), false, false); // If we're dead we just return something, it doesn't matter anyway.
continue;
}
Direction[] possibleDirections = myPlanes[i].getPossibleDirections(); // Let's see where we can go.
for (int j=0; j<possibleDirections.length*3; j++) {
int random = (int) Math.floor((Math.random()*possibleDirections.length)); // We don't want to be predictable, so we pick a random direction out of the possible ones.
if (myPlanes[i].getPosition().add(possibleDirections[random].getAsPoint3D()).isInArena(arenaSize)) { // We'll try not to fly directly into a wall.
moves[i] = new Move(possibleDirections[random], Math.random()>0.5, myPlanes[i].canShoot() && Math.random()>0.2);
continue; // I'm happy with this move for this plane.
}
// Uh oh.
random = (int) Math.floor((Math.random()*possibleDirections.length));
moves[i] = new Move(possibleDirections[random], Math.random()>0.5, myPlanes[i].canShoot() && Math.random()>0.2);
}
}
return moves;
}
@Override
public void newFight(int fightsFought, int myScore, int enemyScore) {
// Using information is for schmucks.
}
@Override
public void newOpponent(int fights) {
// What did I just say about information?
}
}
ডাম্বপ্লেনগুলি অন্যান্য এন্ট্রিগুলির সাথে টুর্নামেন্টে যোগ দেবে, সুতরাং আপনি যদি শেষ অবধি শেষ করেন তবে কমপক্ষে ডাম্বপ্লেনের চেয়ে ভাল না করার জন্য এটি আপনার নিজের দোষ।
বিধিনিষেধ
KOTH উইকিতে উল্লিখিত বিধিনিষেধগুলি প্রযোজ্য:
- নিয়ামক, রানটাইম বা অন্যান্য সাবমিশনগুলির সাথে টিঙ্কার করার যে কোনও প্রয়াস অযোগ্য ঘোষণা করা হবে। সমস্ত সাবমিশনগুলি কেবলমাত্র প্রদত্ত ইনপুট এবং স্টোরেজগুলির সাথে কাজ করা উচিত।
- নির্দিষ্ট অন্যান্য বটগুলিকে বীট বা সমর্থন করতে বটগুলি লেখা উচিত নয়। (বিরল ক্ষেত্রে এটি আকাঙ্ক্ষিত হতে পারে, তবে এটি যদি চ্যালেঞ্জের মূল ধারণা না হয় তবে এটিকে আরও ভালভাবে উড়িয়ে দেওয়া হবে))
- আমি যুক্তিগুলিকে অযোগ্য করার অধিকার সংরক্ষণ করি যেগুলি যুক্তিসঙ্গত পরিমাণ সংস্থান দিয়ে ট্রায়াল চালাতে খুব বেশি সময় বা মেমরি ব্যবহার করে।
- একটি বট ইচ্ছাকৃতভাবে বা দুর্ঘটনাক্রমে কোনও বিদ্যমান কৌশল হিসাবে ঠিক একই কৌশলটি প্রয়োগ করতে পারে না।
আপনার জমা দেওয়ার পরীক্ষা করা হচ্ছে
এখান থেকে নিয়ামক কোডটি ডাউনলোড করুন । সামথিংজভা হিসাবে আপনার জমা দিন। আপনার প্লেনের জন্য []] এবং নামগুলিতে প্রবেশের জন্য কন্ট্রোলার.জেভা পরিবর্তন করুন] Eclipse প্রজেক্ট বা এর সাথে সবকিছু সংকলন করুন javac -d . *.java
, তারপরে কন্ট্রোলারটি চালান java Planes/Controller
। প্রতিযোগিতার একটি লগ থাকবে test.txt
শেষে, স্কোরবোর্ড সহ। matchUp()
একে অপরের বিরুদ্ধে দুটি প্লেন পরীক্ষা করার জন্য আপনি দুটি এন্ট্রি দিয়ে সরাসরি কল করতে পারেন ments
লড়াই জিতেছে
লড়াইয়ের বিজয়ী হলেন যিনি শেষ বিমানটি উড়াল করেছেন, যদি 100 টার্ন পরে, এখনও 1 টিরও বেশি দল বাকি রয়েছে, সর্বাধিক প্লেনসম্পন্ন দলটি জিতেছে। এটি সমান হলে এটি একটি ড্র draw
স্কোরিং এবং প্রতিযোগিতা
বর্তমান অনুগ্রহ শেষ হয়ে গেলে পরবর্তী অফিশিয়াল টুর্নামেন্টটি চালানো হবে।
প্রতিটি এন্ট্রি প্রতিটি অন্যান্য এন্ট্রি (কমপক্ষে) 100 বার লড়াই করবে, প্রতিটি ম্যাচ আপের বিজয়ী 100 এর মধ্যে সবচেয়ে বেশি বিজয়ী এবং 2 পয়েন্ট দেওয়া হবে awarded ড্রয়ের ক্ষেত্রে উভয় এন্ট্রিকে ১ পয়েন্ট দেওয়া হয়।
প্রতিযোগিতায় বিজয়ী বেশিরভাগ পয়েন্ট সহ এক। ড্রয়ের ক্ষেত্রে, বিজয়ী হ'ল সেই ব্যক্তি যিনি টানা প্রবেশের মধ্যে ম্যাচ আপে জয়ী হয়েছিলেন।
এন্ট্রিগুলির পরিমাণের উপর নির্ভর করে, এন্ট্রিগুলির মধ্যে মারামারিগুলির পরিমাণ উল্লেখযোগ্যভাবে বাড়ানো যেতে পারে, আমি প্রথম টুর্নামেন্টের পরে ২-৪টি সেরা এন্ট্রিগুলিও বেছে নিতে পারি এবং আরও লড়াইয়ের সাথে এন্ট্রিগুলির মধ্যে একটি এলিট টুর্নামেন্ট স্থাপন করতে পারি (এবং সম্ভবত প্রতি রাউন্ডে আরও রাউন্ড) যুদ্ধ)
(প্রাথমিক) স্কোরবোর্ড
আমরা একটি নতুন এন্ট্রি পেয়েছি যারা দৃ another়ভাবে অন্য একটি উত্তেজনাপূর্ণ টুর্নামেন্টে দ্বিতীয় স্থান অর্জন করেছে , দেখে মনে হচ্ছে ক্রসফায়ার প্রিডিক্ট অ্যান্ড অ্যাভিড ব্যতীত সবার জন্য গুলি করা অবিশ্বাস্যরকম কঠিন। নোট করুন যে এই টুর্নামেন্টটি প্রতিটি প্লেনের মধ্যে কেবল 10 টি মারামারি নিয়ে পরিচালিত হয়েছিল এবং এরপরে কীভাবে পরিস্থিতি দাঁড়ায় তার পুরোপুরি সঠিক উপস্থাপনা নেই।
----------------------------
¦ 1. PredictAndAvoid: 14 ¦
¦ 2. Crossfire: 11 ¦
¦ 3. Weeeeeeeeeeee: 9 ¦
¦ 4. Whirligig: 8 ¦
¦ 4. MoveAndShootPlane: 8 ¦
¦ 6. StarFox: 4 ¦
¦ 6. EmoFockeWulf: 2 ¦
¦ 7. DumbPlanes: 0 ¦
----------------------------
নন-জাভা র্যাপার থেকে আউটপুট দেওয়ার উদাহরণ এখানে দেওয়া হয়েছে:
NEW CONTEST 14 20
ইঙ্গিত দেয় যে একটি 14x14x14 অঙ্গনে একটি নতুন প্রতিযোগিতা শুরু হচ্ছে এবং এতে প্রতি লড়াইয়ে 20 টি জড়িত থাকবে।
NEW OPPONENT 10
আপনি নতুন প্রতিপক্ষের মুখোমুখি হয়ে আছেন এবং আপনি এই প্রতিপক্ষের সাথে 10 বার লড়াই করবেন বলে ইঙ্গিত দেয়
NEW FIGHT 5 3 2
ইঙ্গিত দেয় যে বর্তমান প্রতিপক্ষের বিরুদ্ধে একটি নতুন লড়াই শুরু হচ্ছে, আপনি এখন পর্যন্ত 5 বার এই প্রতিপক্ষের সাথে লড়াই করেছেন, 3 জিতে এবং 2 টি লড়াই হেরে গেছেন
ROUNDS LEFT 19
ইঙ্গিত দেয় যে বর্তমান লড়াইয়ে 19 রাউন্ড বাকি আছে
NEW TURN
ইঙ্গিত দেয় যে আপনি লড়াইয়ের এই রাউন্ডের জন্য চারটি প্লেনের ডেটা পেতে চলেছেন
alive 13 8 13 N 0
alive 13 5 13 N 0
dead 0 0 0 N 0
alive 0 8 0 S 0
এই চারটি লাইন ইঙ্গিত দেয় যে আপনার উভয় বিমানই যথাক্রমে [13,8,13] এবং [13,5,13] স্থানাঙ্কগুলিতে, উভয়ই উত্তরমুখী, উভয়ই শূন্য কোলডাউন সহ। প্রথম শত্রু বিমানটি মারা গেছে এবং দ্বিতীয়টি জীবিত রয়েছে [0,8,0] এ এবং শূন্য কোলডাউন সহ দক্ষিণের দিকে মুখ করে।
এই মুহুর্তে আপনার প্রোগ্রামটি নীচের মত দুটি লাইন আউটপুট করা উচিত:
NW 0 1
SU 1 0
এটি ইঙ্গিত দেয় যে আপনার প্রথম সমতলটি বর্তমান শিরোনামটি না ঘুরিয়ে, এবং সক্ষম হলে শুটিং করে উত্তর-পশ্চিম ভ্রমণ করবে। আপনার দ্বিতীয় বিমানটি সাউথআপ ভ্রমণ করবে, শুটিং নয়, সাউথআপের মুখোমুখি হবে।
এখন আপনি ইত্যাদি ROUNDS LEFT 18
অনুসরণ করুন NEW TURN
এটি অব্যাহত থাকে যতক্ষণ না কেউ জেতে বা রাউন্ড টাইম আউট হয়ে যায়, এমন সময়ে আপনি NEW FIGHT
আপডেট হওয়া লড়াইয়ের গণনা এবং স্কোরগুলির সাথে আরও একটি লাইন পাবেন সম্ভবত সম্ভবত এর আগে NEW OPPONENT
।