• API
• FAQ
• Tools
• Archive
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.
Top