ex-col-02-bucket-chain/BucketChain/Person.cs
github-classroom[bot] 593d8ebfea
Initial commit
2024-11-17 08:52:38 +00:00

109 lines
No EOL
4.1 KiB
C#

namespace BucketChain;
/// <summary>
/// Represents a person working together with others in a bucket chain to extinguish a fire.
/// </summary>
public sealed class Person
{
// TODO
/// <summary>
/// Creates a new person.
/// We are not interested in any specific details of the person,
/// only the position in the chain is relevant.
/// </summary>
public Person()
{
// TODO
}
/// <summary>
/// Gets if the person currently has at least one bucket (forward or backward).
/// </summary>
public bool HasBucket => false; // TODO
/// <summary>
/// Gets the left neighbor of the person. Can be null.
/// </summary>
// TODO
// public Person? LeftNeighbor ...
/// <summary>
/// Gets the right neighbor of the person. Can be null.
/// </summary>
// TODO
// public Person? RightNeighbor ...
/// <summary>
/// Gets the number of the last step in which this person performed a bucket move action.
/// Each person can only move, at most, once per step.
/// </summary>
// TODO
// public int LastStepPerformed ...
/// <summary>
/// The person joins an existing bucket chain at a specific position.
/// This position is defined by the passed person and the information if this person will join
/// the chain on the left or right side of the passed person.
/// If the passed person already had a neighbor at this side this person joins between them.
/// </summary>
/// <param name="neighbor">The neighbor in the bucket chain</param>
/// <param name="isLeftNeighbor">If true the passed person will become the left hand side
/// neighbor of this person; otherwise it will become the right hand side neighbor</param>
public void JoinChain(Person neighbor, bool isLeftNeighbor)
{
// TODO
}
/// <summary>
/// Attempts to move the forward bucket along the chain towards the fire.
/// The person negotiates with the right hand side neighbor.
/// If that neighbor can accept a forward bucket it received it.
/// They also check if the right hand side neighbor has a backward (towards the well)
/// bucket. If this person is able to receive the backward bucket it receives it.
/// If at least one bucket is exchanged both involved people are done for the current step.
/// </summary>
/// <param name="currentStep">Number of the current (chain) operation step</param>
/// <returns>True if the move attempt produced no errors - this does not mean
/// that a bucket was moved, only that no invalid state was detected; false otherwise</returns>
public bool MoveBucket(int currentStep)
{
// TODO
return false;
}
/// <summary>
/// Fights the passed fire with water from the forward bucket. This empties the bucket.
/// After using it the now empty bucket is moved to the backward position.
/// </summary>
/// <param name="fire">The fire to throw water at</param>
public void FightFire(Fire fire)
{
// TODO
}
/// <summary>
/// Uses the passed well to fill the bucket.
/// If this person currently has no empty bucket to fill but there are still unused buckets
/// available for the chain a new bucket will be introduced with this method.
/// If the person has no forward bucket but a backward bucket that one is filled.
/// </summary>
/// <param name="well">The well to use for filling the bucket</param>
/// <param name="additionalBucket">A new bucket to use; can be null</param>
public void UseWell(Well well, Bucket? additionalBucket)
{
// TODO
}
/// <summary>
/// Creates a string representation of this person instance.
/// Shows if the person has none, an empty or full bucket.
/// If the person has both forward and backward buckets the forward bucket is displayed.
/// </summary>
/// <returns>String representation of the person</returns>
public override string ToString()
{
// TODO
return string.Empty;
}
}