/ 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 }