SHARE
TWEET

Untitled

a guest Jan 7th, 2020 72 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
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
Top