# CSE 1325-001 Homework #6 – Inheritance solved

\$35.00

## Description

5/5 - (1 vote)

In this homework assignment, you will be creating multiple classes based off the following UML diagram.
Part 1: Robot
For this part, you will create a robot class. The robot has a model number, a name, a battery life (an int
representing how many “units” the battery will last for), and a position ((x,y) coordinate).
The constructor assigns all values to the input parameters, sets the position to (0,0), and sets the battery
level to max. The move method changes the coordinate location of the robot. It also reduces the battery
level by 1 unit for each distance of one it moves. The distance it moves can be calculated with the classic
distance formula. Since battery life is represented as an int, you just round up the distance traveled. This
method returns true if the move was successful and false if not, such as if the battery would die by doing
the move. charge restores the battery level to full. get_battery_percentage returns the current battery
level as a percent.
Part 2: Arm_Robot
Arm_Robot is derived from Robot. Think of an Arm robot as a Sawyer Robot from Rethink Robotics. It is
a stationary robot, but the arm can move. Position and move now pertain to the end of the arm’s
position.
Three new variables are introduced. The length is how long the arm is. The weight limit is how heavy an
object the arm can pick up. is_holding is whether or not the arm is holding an object.
The constructor assigns all values to the input parameters, sets the position to (0,0), sets the battery
level to max, and sets the is_holding to false. Move acts the same as the parent class, but now each 1
distance takes an extra battery unit if it is holding an object (1 if moving, 2 if moving and holding an
object). It can also not move to a location if the desired location is past the length of the arm. Consider
the base of the arm is at (0,0). Pick_up will tell the robot to hold the object if it is under the weight limit.
Pick_up also takes 1 unit of battery. It cannot pick up an object if it already holding an object. This
method returns true if it was successful and false if not. Drop will tell the robot to drop the object. Drop
also takes 1 unit of battery. It cannot drop an object if it not holding an object. This method returns true
if the move was successful and false if not.
Part 3: Extendable_Arm
Extendable_Arm is derived from Arm_Robot. This robot can extend its arm further out than a regular
Arm_Robot. If it can’t reach an object, it will extend its arm further.
Two new variables are introduced. The extend_length is the distance that the arm can extend.
Therefore, the total distance the robot can reach is now the length + extend_length. is_extended is
whether or not the arm is extended.
The constructor assigns all values to the input parameters, set the position to (0,0), sets the battery level
to max, sets is_holding to false, and sets is_extended to false. Move acts the same as Arm_Robot, but
now each 1 distance takes an extra battery unit if the arm is extended (1 if moving; 2 if moving and
holding an object; 2 if moving and extended; 3 if moving, holding and object, and extended). If the
position is too far for the arm to reach, but can with the arm extended, the move() method will call
extend(). If the arm can reach the position with the arm not extended, move() will call retract. Both
extend and retract each take 1 battery unit. Extend can’t extend if already extended, and retract can’t
retract if already retracted.
Part 4: Powered_Arm
Powered_Arm is derived from Arm_Robot. This robot can turn on a motor that can pick up heavier
objects than an Arm_Robot.
Two new variables are introduced. The motor_limit is how much the arm can pick up when the motor is
on. This this different than extend_length. extend_length was an additional amount to the arm length.
motor_limit is the total amount the arm can lift when the motor is on, not an additional amount. Also,
there is motor_on, which states whether or not the motor is on or not.
The constructor assigns all values to the input parameters, set the position to (0,0), sets the battery level
to max, sets is_holding to false, and sets motor_on to false. Move acts the same as Arm_Robot, but now
each 2 distance takes an extra battery unit if the motor is on (1 if moving; 2 if moving and holding an
object; 3 if moving and the motor is on; 4 if moving, holding and object, and motor is on). Pick_up() will
turn the motor on if the object is too heavy for the arm to lift on its own. Drop() will turn off the motor if
the motor is on when the object is dropped. Turning on and off the motor does not cost battery.
Part 5: Mobile Robot
Mobile_Robot is derived from Robot. This robot can move around at three different speed levels.
One new variable is introduced. The speed level is how fast the robot will move. If it is a 1, it will move
slowly. If it is a 2, it will move at an average speed. If it is a 3, it will move at a fast speed.
The constructor assigns all values to the input parameters, set the position to (0,0), and sets speed level
to 1. Move with 3 parameters will set the speed level, then move the robot. Move with 2 parameters
will move the robot at whatever the current speed level is at. Slow movement is 1 battery unit for every
1 distance. Average movement is 2 battery units for every 1 distance. Fast movement is 3 battery units
for every 1 distance.
Part 6: Main
In your main function, you will create one robot of each type, each with a battery life of 100. Then the
robots will do the following (Each must print out a statement whether the robot was able to complete
the task or not. Also it must say which robot it was):
 Robot will move around until the battery drains, charge up, then move around till it drains again.
 Mobile robot will move around at three different speeds. It will also move once without not
changing the speed.
 Arm robot will move, pick up an object that it can pick up, move it, and drop it. Then the Arm
robot will attempt to pick up an object that is too heavy. Then the robot will attempt to move
beyond the length of the arm.
 Extendable_Arm will move to pick up an object that it can pick up while retracted, move it, and
drop it. Then the arm will move to pick up an object that it can only pick up while extended,
move it to a spot that it can reach only while extended, and drop it. Then the robot will to pick
up an object that it can pick up while retracted, move it to a spot it can only reach while
extended, and drop it. Next, the robot will try to reach an object it can’t reach even, while
extended.
 Powered Arm will move to pick up an object that it can pick up without the motor, move it, and
drop it. Then it will move to pick up an object that it can only pick up with the motor, move it,
and drop it. Lastly it will move and attempt to pick up an object that is too heavy.
Bonus (10pts)
For the Mobile Robot, change the speed_level to be an object of an Enumerator Class instead of an int.
Be sure to update the UML diagram to reflect this.

Deliverables
You will submit your code and screenshots via Blackboard. You will upload a zip file, named
“abc1234_HW6zip”, which contains 1 folder (2 if you did the bonus)
 full_credit
o abc1234_Robot.h and abc1234_Robot.cpp
o abc1234_Arm_Robot.h and abc1234_Arm_Robot.cpp
o abc1234_Extendable_Arm.h and abc1234_Extendable_Arm.cpp
o abc1234_Powered_Arm.h and abc1234_Powered_Arm.cpp
o abc1234_Mobile_Robot.h and abc1234_Mobile_Robot.cpp
o abc1234_main.cpp
o makefile
o abc1234_main.png (or multiple if multiple screenshots were taken). These screenshots
will be picture of your code running in terminal.
o Instructions for compiling and running your code (either in comments in blackboard or
in a README file)
 bonus_1
o abc1234_HW6_Class_Diagram.xmi
o abc1234_Robot.h and abc1234_Robot.cpp
o abc1234_Arm_Robot.h and abc1234_Arm_Robot.cpp
o abc1234_Extendable_Arm.h and abc1234_Extendable_Arm.cpp
o abc1234_Powered_Arm.h and abc1234_Powered_Arm.cpp
o abc1234_Mobile_Robot.h and abc1234_Mobile_Robot.cpp
o abc1234_main.cpp
o makefile
o abc1234_main.png (or multiple if multiple screenshots were taken). These screenshots
will be picture of your code running in terminal.
o Instructions for compiling and running your code (either in comments in blackboard or
in a README file)
Full credit files named incorrectly result in a loss of 5 points each.