Advertisement
PhilDrummer

Assignment_7 04 GAME.e

Nov 19th, 2014
1,186
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. class
  2.     GAME
  3.  
  4. create
  5.     make
  6.  
  7. feature {NONE} -- Initialization
  8.  
  9.     make (n: INTEGER)
  10.             -- Create a game with `n' players.
  11.         require
  12.             n_in_bounds: Min_player_count <= n and n <= Max_player_count
  13.         local
  14.             i: INTEGER
  15.             p: PLAYER
  16.         do
  17.             create die_1.roll
  18.             create die_2.roll
  19.             create players.make (1, n)
  20.             create winners.make (1, n)
  21.             from
  22.                 i := 1
  23.             until
  24.                 i > players.count
  25.             loop
  26.                 create p.make ("Player" + i.out)
  27.                 p.set_position (1)
  28.                 p.set_balance (7)
  29.                 game_over := false
  30.                 players [i] := p
  31.                 print (p.name + " joined the game.%N")
  32.                 i := i + 1
  33.             end
  34.             print ("All players receive 7 CHF!%N")
  35.             print ("%N")
  36.         end
  37.  
  38. feature -- Basic operations
  39.  
  40.     play
  41.             -- Start a game.
  42.         local
  43.             round, i: INTEGER
  44.         do
  45.             from
  46.                 round := 1
  47.                 print ("The game begins.%N")
  48.                 print_board
  49.             until
  50.                 game_over = true
  51.             loop
  52.                 print ("%NRound #" + round.out + "%N%N")
  53.                 from
  54.                     i := 1
  55.                 until
  56.                     game_over = true or else i > players.count
  57.                 loop
  58.                     players [i].play (die_1, die_2)
  59.                     if players [i].position > Square_count then
  60.                         search_winner
  61.                         game_over := true
  62.                     end
  63.                     i := i + 1
  64.                 end
  65.                 print_board
  66.                 round := round + 1
  67.             end
  68.         ensure
  69.             has_winner: game_over = true
  70.         end
  71.  
  72.     search_winner
  73.             -- Calculates who won
  74.         local
  75.             c: INTEGER
  76.         do
  77.             create final_balances.make (1, players.count)
  78.             from
  79.                 c := 1
  80.             until
  81.                 c > players.count
  82.             loop
  83.                 final_balances [c] := players [c].balance
  84.                 c := c + 1
  85.             end
  86.             set_highest_balance
  87.             from
  88.                 c := 1
  89.             until
  90.                 c > players.count
  91.             loop
  92.                 if
  93.                     players [c].balance >= highest_balance
  94.                 then
  95.                     winners [c] := players [c].name
  96.                 end
  97.                 c := c+ 1
  98.             end
  99.         end
  100.  
  101. feature -- Constants
  102.  
  103.     Min_player_count: INTEGER = 2
  104.             -- Minimum number of players.
  105.  
  106.     Max_player_count: INTEGER = 6
  107.             -- Maximum number of players.
  108.  
  109.     Square_count: INTEGER = 40
  110.             -- Number of squares.
  111.  
  112. feature -- Access
  113.  
  114.     players: V_ARRAY [PLAYER]
  115.             -- Container for players.
  116.  
  117.     die_1: DIE
  118.             -- The first die.
  119.  
  120.     die_2: DIE
  121.             -- The second die.
  122.  
  123.     final_balances: V_ARRAY [INTEGER]
  124.             -- All end-balances
  125.  
  126.     winners: V_ARRAY [STRING]
  127.             -- All winners
  128.  
  129.     game_over: BOOLEAN
  130.             -- Game over?
  131.  
  132.     highest_balance: INTEGER
  133.             -- The highest balance
  134.  
  135. feature -- Compute
  136.  
  137.     set_highest_balance
  138.             -- Sets the highest balance
  139.         local
  140.             q: INTEGER
  141.             temp: INTEGER
  142.         do
  143.             temp := 0
  144.             from
  145.                 q := 1
  146.             until
  147.                 q > players.count
  148.             loop
  149.                 if
  150.                     final_balances [q] > temp
  151.                 then
  152.                     temp := final_balances [q]
  153.                 end
  154.                 q := q + 1
  155.             end
  156.             highest_balance := temp
  157.         end
  158.  
  159. feature {NONE} -- Implementation
  160.  
  161.     print_board
  162.             -- Output players positions on the board.
  163.         local
  164.             i, j: INTEGER
  165.             board: STRING
  166.         do
  167.             io.new_line
  168.             board := "."
  169.             board.multiply (Square_count)
  170.             print (board)
  171.             io.new_line
  172.             from
  173.                 i := 1
  174.             until
  175.                 i > players.count
  176.             loop
  177.                 from
  178.                     j := 1
  179.                 until
  180.                     j >= players [i].position
  181.                 loop
  182.                     print (" ")
  183.                     j := j + 1
  184.                 end
  185.                 print (i)
  186.                 io.new_line
  187.                 i := i + 1
  188.             end
  189.         end
  190.  
  191. invariant
  192.     dice_exist: die_1 /= Void and die_2 /= Void
  193.     players_exist: players /= Void
  194.     number_of_players_consistent: Min_player_count <= players.count and players.count <= Max_player_count
  195. end
Advertisement
RAW Paste Data Copied
Advertisement