/ Player.java
Player.java
 1  /// Player - Interactive agent
 2  ///
 3  /// SPDX-License-Identifier: GPL-3.0-or-later
 4  /// SPDX-FileCopyrightText: 2024 Jonas Smedegaard <dr@jones.dk>
 5  ///
 6  /// * v0.0.1
 7  ///   * initial release, derived frop delivery "assignment 6"
 8  ///
 9  /// @version 0.0.1
10  /// @see <https://app.radicle.xyz/nodes/ash.radicle.garden/rad:z3YzABgyz2D36LiKe3YcdJ6PcDCXM/tree/README.md>
11  /// @see <https://moodle.ruc.dk/course/section.php?id=201713>
12  class Player implements Agent {
13  
14  	/// Constructor
15  	///
16  	/// @param heading  orientation as Bearing
17  	Player(final Bearing heading) {
18  		this.heading = heading;
19  
20  		getDressed();
21  	}
22  
23  	/// Get visual presence
24  	///
25  	/// Characterization of appearance
26  	///
27  	/// @return  appearance as a char
28  	public char seeDress() {
29  		return dress;
30  	}
31  
32  	/// Get orientation
33  	///
34  	/// @return  orientation as a Bearing
35  	public Bearing getHeading() {
36  		return heading;
37  	}
38  
39  	public void setHeading(final Bearing newHeading) {
40  		heading = newHeading;
41  	}
42  
43  	/// Turn right
44  	///
45  	/// Change yaw orientation one step forward
46  	public void turnRight() {
47  		this.setHeading(heading.yaw);
48  		getDressed();
49  	}
50  
51  	/// Turn left
52  	///
53  	/// Change yaw orientation one step backward
54  	public void turnLeft() {
55  		this.setHeading(heading.yawNegative);
56  		getDressed();
57  	}
58  
59  	/// Orientation
60  	private Bearing heading;
61  
62  	/// Appearance
63  	private char dress;
64  
65  	/// Update dress to reflect heading
66  	private void getDressed() {
67  		switch (heading) {
68  		  case NORTH:
69  			dress = '^';
70  			break;
71  		  case EAST:
72  			dress = '>';
73  			break;
74  		  case SOUTH:
75  			dress = 'v';
76  			break;
77  		  case WEST:
78  			dress = '<';
79  			break;
80  
81  		// we should never experience an alien bearing enum
82  		  default:
83  			throw new UnsupportedOperationException(
84  				"Impossible heading: " + heading);
85  		}
86  	}
87  }