আপনার পাথকে বর্ণনা করে এমন উপায়-পয়েন্টগুলি সংরক্ষণ করার জন্য "পাথ" নামে একটি তালিকা এবং চলন্ত বস্তু এবং পথ সঞ্চয় করার জন্য "স্নেক" নামে একটি দ্বিগুণ-সংযুক্ত তালিকা ব্যবহার করুন ।
শীর্ষস্থানীয় অবজেক্টটি ভ্রমণের সাথে সাথে নতুন উপায়-পয়েন্টগুলি সংজ্ঞায়িত করে। নিম্নলিখিত উপায়গুলি এই পয়েন্ট-পয়েন্ট দ্বারা সংজ্ঞায়িত হিসাবে পথ বরাবর সরানো হয়।
প্রতিটি বস্তুর একটি সুরক্ষা অঞ্চল থাকে কিছু দূরত্ব দ্বারা সংজ্ঞায়িত। যদি শীর্ষস্থানীয় অবজেক্ট বন্ধ হয়ে যায় তবে নিম্নলিখিত বিষয়গুলি কেবল পূর্ববর্তী পূর্ববর্তী সিকিউরিটি জোনে স্পর্শ না করা পর্যন্ত চলতে থাকবে।
কীভাবে এই জিনিসগুলি প্রয়োগ করা যেতে পারে তার জন্য এখানে কয়েকটি সিউডো কোড রয়েছে। সচেতন থাকুন যে দায়িত্ব ও এনক্যাপসুলেশন বিতরণের ক্ষেত্রে এটি সবচেয়ে মার্জিত সমাধান নাও হতে পারে।
class Position {
property x;
property y;
}
class WayPoint extends ListNode {
property position;
}
class Path extends List {
property WayPoints = array();
// Find out the x, y coordinates given the distance traveled on the path
function getPositionFromDistanceFromEnd(distance) {
currentWayPoint = this->first();
while(distance > 0) {
distanceBetweenWayPoints = this->getDistance(currentWayPoint, currentWayPoint->next());
if(distanceBetweenWayPoints > distance) {
position = ... // travel remaining distance between currentWayPoint and currentWayPoint->next();
return position;
} else {
distance -= distanceBetweenWayPoints;
currentWayPoint = currentWayPoint->next();
}
}
}
function addWayPoint(position) {
// Vector describing the current and new direction of movement
currentDirection = this->first() - this->second();
newDirection = position - this->first();
// If the direction has not changed, there is no need to add a new WayPoint
if( this->sameDirection(currentDirection, newDirection) {
this->first->setPosition(position);
} else {
this->add(position);
}
}
}
class Snake extends DoublyLinkedList {
property Path;
property MovingObjects = array();
}
abstract class MovingObject extends DoublyLinkedListNode {
property Snake; // shared among all moving objects of the same snake
property position;
const securityDistance = 10;
abstract function move() { }
}
class MovingObjectLeader extends MovingObject {
property direction;
function move() {
this->position += this->direction * this->Snake->speed;
this->Snake->Path->addWayPoint(this->position);
if(this->hasFollower()) {
this->follower->move();
}
}
}
class MovingObjectFollower extends MovingObject {
property distanceFromEnd;
function move() {
this->distanceFromEnd += this->Snake->speed;
// If too close to leader: stop in order to respect security distance
if(this->distanceFromEnd > this->leader()->distanceFromEnd - this->securityDistance) {
this->distanceFromEnd = this->leader()->distanceFromEnd - this->securityDistance;
}
this->position = this->Snake->getPositionFromDistanceFromEnd(this->distanceFromEnd);
if(this->hasFollower()) {
this->follower->move();
}
}
}
পাথ-> ওয়ে পয়েন্টগুলি খেলাটি আরও দীর্ঘতর হয়। যদি আপনার সাপটি বেশ কিছু সময়ের জন্য বিদ্যমান থাকে তবে আপনাকে যখন স্নপের শেষ উপাদানটি দ্বিতীয় থেকে শেষের পথের পয়েন্টটি পেরিয়ে গেছে তখন আপনাকে শেষের ওয়ে পয়েন্টটি মুছতে হবে। সেই অনুসারে সাপের সমস্ত মুভিংঅবজেক্টগুলিতে দূরত্বফ্রেন্ডএন্ডও হ্রাস করতে ভুলবেন না।