Guest User

Untitled

a guest
Jan 7th, 2020
98
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. note
  2.     description: "A position on a snooker table 356.9 cm by 177.8cm."
  3.     author: "JSO"
  4.  
  5. class
  6.     BALL_POINT
  7.  
  8. inherit
  9.  
  10.     CONSTANTS
  11.         redefine
  12.             out,
  13.             is_equal
  14.         end
  15.  
  16.     DEBUG_OUTPUT
  17.         redefine
  18.             out,
  19.             is_equal
  20.         end
  21.  
  22. create
  23.     make,
  24.     make_from_tuple2
  25.  
  26. convert -- safe type conversion
  27.  
  28.     make_from_tuple2 ({TUPLE2})
  29.  
  30. feature {NONE}
  31.  
  32.     make (a_x, a_y: DECIMAL)
  33.             -- create snooker ball at position [a_x, a_y]
  34.         require
  35.             x_precondition: Zero <= a_x and a_x <= Width
  36.             y_precondition: Zero <= a_y and a_y <= Length
  37.         ensure
  38.             points_correct:
  39.                 x = a_x and y = a_y
  40.         end
  41.  
  42.     make_from_tuple2 (t: TUPLE2)
  43.             -- create a snooker ball at position `t`
  44.         require
  45.                 safe (t.x, t.y)
  46.         ensure
  47.                 x = t.x and y = t.y
  48.         end
  49.  
  50. feature -- queries
  51.  
  52.     x: DECIMAL
  53.             -- x-coordinate of the ball
  54.  
  55.     y: DECIMAL
  56.             -- y-coordinate of the ball
  57.  
  58.     safe (a_x, a_y: DECIMAL): BOOLEAN
  59.             -- is position [a_x, a_y] within the dimensions
  60.             -- of the snooker table?
  61.         ensure
  62.             class  -- static
  63.             Result = (Zero <= a_x
  64.                 and a_x <= Width
  65.                 and Zero <= a_y
  66.                 and a_y <= Length)
  67.         end
  68.  
  69.  
  70.  
  71.     t2ball (t: TUPLE2): like Current
  72.             -- convert tuple `t` to a ball position
  73.         require
  74.                 safe (t.x, t.y)
  75.         ensure
  76.                 class
  77.                 Result ~ create {BALL_POINT}.make_from_tuple2 (t)
  78.         end
  79.  
  80. feature -- comparison
  81.  
  82.     is_equal (other: like Current): BOOLEAN
  83.             -- Is other attached to an object considered
  84.             -- equal to current object?
  85.         ensure then
  86.                 Result = (x ~ other.x and y ~ other.y)
  87.         end
  88.  
  89.     distance (other: like Current): TUPLE2
  90.             -- distance as a tuple from  current ball
  91.             -- to position of other ball
  92.         ensure
  93.             Result ~
  94.                create {TUPLE2}.make_from_tuple ([other.x - x, other.y - y])
  95.         end
  96.  
  97. feature -- commands
  98.  
  99.     cue_delta (d_x, d_y: DECIMAL)
  100.             -- move ball from current position by a delta [d_x, d_y]
  101.         require
  102.             x_cue_precondition: Zero <= x + d_x and x + d_x <= Width
  103.             y_cue_precondition: Zero <= y + d_y and y + d_y <= Length
  104.         ensure
  105.                 x ~ (old x + d_x)
  106.                 y ~ (old y + d_y)
  107.         end
  108.  
  109. feature -- out
  110.  
  111.     out: STRING_8
  112.             -- New string containing terse printable representation
  113.             -- of current object
  114.         do
  115.             Result := "(" + x.precise_out + "," + y.precise_out + ")"
  116.         end
  117.  
  118.     debug_output: STRING_8
  119.         -- String that should be displayed in debugger to represent Current.
  120.         do
  121.             Result := out
  122.         end
  123.  
  124. invariant
  125.     x_constraint:
  126.         Zero <= y and y <= Length
  127.     y_constraint:
  128.         Zero <= x and x <= Width
  129.  
  130. end -- class BALL_POINT
RAW Paste Data