monkeymusic 0.0.1 → 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml ADDED
@@ -0,0 +1,15 @@
1
+ ---
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ ZTg1NmQzOTk5MDc1YWI5ODI3ZmFjZGUyN2Q3MDg0ZGNlM2RlNTAyNw==
5
+ data.tar.gz: !binary |-
6
+ NWQwODNmNzc1OGNkMGIyNDgyOTI2MDBhNjQ4ZTMwMmNkMmI1MmJjMQ==
7
+ !binary "U0hBNTEy":
8
+ metadata.gz: !binary |-
9
+ Mzk0YzYxYmRhOTZjYWYwYjY3NzBmYjIzNWIxMWJjOWQxZDZjMDUwMDQ1MGNm
10
+ ZWViMzRlZjM0M2VjNjYyZDhlNWM3N2Y2NzdhY2M1MjdlYWYxNTkzYTY1ZTJh
11
+ NDc4MjYwMTczMWM5ODc3YTBhNDYyZDViZDg2MzgxZjlmY2Q2MGU=
12
+ data.tar.gz: !binary |-
13
+ Y2U4MDUyOWJjN2E2ZDE5MWI4OWZkOWI4YmY4ZDhhYzdmM2FkYTQ3MjI1NWRk
14
+ MzVkYTRlN2I1NGNhOTFlZWUzOTU2NDRmNTE3ZWNlMzU3YjIyNmE5OWJlN2M5
15
+ NzkxYmVkYWRlMjYwMzNjYTdjNDEyZWVkZmExNTM4ZjNmZmQzZjI=
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env ruby
2
+ require File.dirname(__FILE__) + '/../lib/monkey_music'
3
+ require File.dirname(__FILE__) + '/../lib/monkey_music_generate'
4
+
5
+ generator = MonkeyMusic::Generator.new
6
+ generator.run
@@ -0,0 +1,31 @@
1
+ carrying_capacity 5
2
+ metadata_requests_per_turn 2
3
+ max_turns 100
4
+
5
+ legend({
6
+ "1" => Monkey.player(1),
7
+ "2" => Monkey.player(2),
8
+ "X" => Track.worth(-2),
9
+ "x" => Track.worth(-1),
10
+ "l" => Track.worth(1),
11
+ "t" => Track.worth(2),
12
+ "T" => Track.worth(3),
13
+ "U" => User,
14
+ "#" => Wall,
15
+ })
16
+
17
+ layout <<LAYOUT
18
+ Xl 1 U 2 lX
19
+ t ll ll t
20
+ ###t ########### t###
21
+ #t # #T tlTlt T# # t#
22
+ ## #T#l l#T# ##
23
+ #l ######X X###### l#
24
+ ## # # x # # ##
25
+ #T# #t# #t# #T#
26
+ #x#l##### # #####l#x#
27
+ # # # l # # #
28
+ ### # # # # # # # ###
29
+ #t # # # t#
30
+ #l###l#t#t#t#t#l###l#
31
+ LAYOUT
@@ -0,0 +1,38 @@
1
+ carrying_capacity 3
2
+ metadata_requests_per_turn 2
3
+ max_turns 100
4
+
5
+ legend({
6
+ "1" => Monkey.player(1),
7
+ "2" => Monkey.player(2),
8
+ "X" => Track.worth(-2),
9
+ "x" => Track.worth(-1),
10
+ "l" => Track.worth(1),
11
+ "t" => Track.worth(2),
12
+ "T" => Track.worth(3),
13
+ "U" => User,
14
+ })
15
+
16
+ layout <<LAYOUT
17
+ XXXXXXXXXXXXXXXXXXXXXXXXXUXXXXXXXXXXXXXXX
18
+ X X X X X X X 1 2 X X X X
19
+ X X X XXX XXX X X XXXXXXX X X X XXXXX X X
20
+ X X X X X X X X X X X X
21
+ X X XXX XXX XXX X X X XXX X XXXXXXXXX X X
22
+ X X X X X X X X X X X X X X
23
+ XXX X X X XXX X XXX XXXXX X X X X XXX X X
24
+ X X t X X X X X X X X X
25
+ X X XXXXXXXXX XXX XXXXXXX XXX XXX X X X X
26
+ X X X X X X X X X X X
27
+ XXX X X X X XXXXX X X X XXX X XXX X XXX X
28
+ X X X X X X X X X X X X X X X
29
+ X XXX X XXXXX X X X X X X X X XXXXXXX X
30
+ X X X X X X X X X X X X
31
+ XXXXXXXXX X XXX XXXXXXXXX XXX X X XXX XXX
32
+ X X lX X X X X T X X X X X
33
+ X XXX X X X X XXX X X X X XXX X XXX XXX X
34
+ X X X X X X X X X X X X X X X
35
+ XXX XXX X XXXXXXX X XXX X X XXX X X XXX X
36
+ X T X Xt X tX
37
+ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
38
+ LAYOUT
@@ -0,0 +1,38 @@
1
+ carrying_capacity 3
2
+ metadata_requests_per_turn 2
3
+ max_turns 100
4
+
5
+ legend({
6
+ "1" => Monkey.player(1),
7
+ "2" => Monkey.player(2),
8
+ "X" => Track.worth(-2),
9
+ "x" => Track.worth(-1),
10
+ "l" => Track.worth(1),
11
+ "t" => Track.worth(2),
12
+ "T" => Track.worth(3),
13
+ "U" => User,
14
+ })
15
+
16
+ layout <<LAYOUT
17
+ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
18
+ X X X X l X X XT X X X X
19
+ XXX X X X X XXXXXXX X X X X X XXX X X XXX
20
+ X X X X X X X X X X X X X X X X X X
21
+ X X XXX X X X X X X X X XXXXXXX X X X X X
22
+ X X X X X X X t X X
23
+ XXXXX X XXX XXXXX XXX X XXX XXX X XXXXX X
24
+ X X X X X X X X X X X X X
25
+ X X X XXX X XXX 1U2 X XXX XXX XXX XXX
26
+ X X l X X X X X X
27
+ X X XXX X XXX X X X XXX X X X XXX XXX X X
28
+ X X X X X X X X X X X X
29
+ XXXXX X XXXXX XXX XXX X XXXXXXX XXX X X X
30
+ X X X X X X X X X X X
31
+ X X X X XXX X X X XXXXX X X X X X X XXX X
32
+ X t X X X X X X X X XtX XT X X
33
+ X XXX XXXXX XXXXXXXXXXX X X X XXXXX X X X
34
+ X X X X X X X X X X X X X
35
+ X X X XXXXX X X X X XXXXXXX XXX X XXXXX X
36
+ X X X X X X X X X X
37
+ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
38
+ LAYOUT
@@ -0,0 +1,38 @@
1
+ carrying_capacity 3
2
+ metadata_requests_per_turn 2
3
+ max_turns 100
4
+
5
+ legend({
6
+ "1" => Monkey.player(1),
7
+ "2" => Monkey.player(2),
8
+ "X" => Track.worth(-2),
9
+ "x" => Track.worth(-1),
10
+ "l" => Track.worth(1),
11
+ "t" => Track.worth(2),
12
+ "T" => Track.worth(3),
13
+ "U" => User,
14
+ })
15
+
16
+ layout <<LAYOUT
17
+ #####################U###################
18
+ # # # # # # 1 2 # # # # #
19
+ # # ### # # # #####l#l### ### # # ### ###
20
+ # # # # # # # # # # # # #
21
+ # # # # # # # ### # # # ### ### # ### # #
22
+ # # # # # # # # # # # # # # # # #
23
+ ### # ### ##### # # # ### # ##### # ### #
24
+ # # # # l # # # T# # #
25
+ # # ### ##### # # # # # # ### ### # ### #
26
+ # # # # # # # # # # # # # #
27
+ # ### ### ####### # # ### # ### ##### ###
28
+ # # # # # # # # # # #
29
+ # # # # # # ### # # # ##### ##### # # # #
30
+ # # # # # # # # # # # # # # # # # # #
31
+ # # ##### ### ### ### # # # ### # ##### #
32
+ # # t# # # # # # t# # #
33
+ # # ### ######### # ##### ### # # # # # #
34
+ # # # # # # # # # # # #
35
+ ### # ### ### # ### # # ### # ##### ### #
36
+ # # # # # # # #
37
+ #########################################
38
+ LAYOUT
data/lib/monkey_music.rb CHANGED
@@ -5,9 +5,6 @@ require 'set'
5
5
  require 'monkey_music/runner'
6
6
  require 'monkey_music/game'
7
7
  require 'monkey_music/player'
8
- require 'monkey_music/toplist_loader'
9
- require 'monkey_music/recommendation_loader'
10
- require 'monkey_music/score_system'
11
8
  require 'monkey_music/level'
12
9
  require 'monkey_music/level_loader'
13
10
 
@@ -18,3 +15,4 @@ require 'monkey_music/units/base'
18
15
  require 'monkey_music/units/monkey'
19
16
  require 'monkey_music/units/track'
20
17
  require 'monkey_music/units/user'
18
+ require 'monkey_music/units/wall'
@@ -1,4 +1,5 @@
1
1
  require 'optparse'
2
+ require 'benchmark'
2
3
 
3
4
  module MonkeyMusic
4
5
  class Game
@@ -10,17 +11,26 @@ module MonkeyMusic
10
11
  end
11
12
 
12
13
  def start
14
+ @ui.update(@level)
13
15
  @level.max_turns.times do
14
16
  if @level.complete?
15
17
  break
16
18
  end
17
- @ui.update(@level)
18
19
  # Query players for moves
19
- @players.each { |p| p.query_move! }
20
+ query_threads = []
21
+ query_time = Benchmark.realtime do
22
+ @players.each do |p|
23
+ query_threads << Thread.new do
24
+ p.query_move!
25
+ end
26
+ end
27
+ query_threads.each(&:join)
28
+ end
20
29
  # Move players in random order
21
30
  @players.shuffle.each { |p| p.move! }
31
+ # Update ui
32
+ @ui.update(@level, query_time)
22
33
  end
23
- @ui.update(@level)
24
34
  end
25
35
 
26
36
  end
@@ -2,7 +2,7 @@ require 'json'
2
2
 
3
3
  module MonkeyMusic
4
4
  class Level
5
- attr_accessor :width, :height, :max_turns
5
+ attr_accessor :width, :height, :max_turns, :requests_per_turn
6
6
  attr_reader :players
7
7
  attr_reader :user
8
8
 
@@ -13,7 +13,7 @@ module MonkeyMusic
13
13
  end
14
14
 
15
15
  def metadata_requests_per_turn(n)
16
- @metadata_requests_per_turn = n
16
+ @level.requests_per_turn = n
17
17
  end
18
18
 
19
19
  def carrying_capacity(capacity)
@@ -27,8 +27,8 @@ module MonkeyMusic
27
27
  def layout(layout)
28
28
  # Transform layout into x y indexed array
29
29
  units = (layout.lines.map { |l| l.chomp.split(//) }).transpose
30
- @level.width = units[0].length
31
- @level.height = units.length
30
+ @level.width = units.length
31
+ @level.height = units[0].length
32
32
  # Add units from layout to level
33
33
  @level.height.times do |y|
34
34
  @level.width.times do |x|
@@ -1,6 +1,6 @@
1
1
  module MonkeyMusic
2
2
  class Player
3
- attr_accessor :monkey
3
+ attr_accessor :monkey, :level
4
4
 
5
5
  def initialize(file)
6
6
  @file = file
@@ -9,16 +9,22 @@ module MonkeyMusic
9
9
 
10
10
  def query_move!
11
11
  IO.popen(@file, "r+") do |io|
12
- io.puts @monkey.serialize
13
- io.puts @monkey.remaining_capacity
14
- io.puts @monkey.level.width
15
- io.puts @monkey.level.height
16
- io.puts @monkey.level.serialize
12
+ io.puts player_output
17
13
  move = io.gets
18
14
  @next_move = parse_move(move) if move
19
15
  end
20
16
  end
21
17
 
18
+ def player_output
19
+ [ @monkey.id,
20
+ @monkey.remaining_capacity,
21
+ @monkey.level.requests_per_turn,
22
+ @monkey.level.width,
23
+ @monkey.level.height,
24
+ @monkey.level.serialize,
25
+ ].join("\n")
26
+ end
27
+
22
28
  def parse_move(s)
23
29
  case s.chomp
24
30
  when "N" then :north
@@ -34,7 +40,7 @@ module MonkeyMusic
34
40
  end
35
41
 
36
42
  def to_s
37
- "#{@monkey.name}: #{@file}"
43
+ @monkey.name
38
44
  end
39
45
 
40
46
  end
@@ -3,6 +3,9 @@ require 'optparse'
3
3
  module MonkeyMusic
4
4
  class Runner
5
5
 
6
+ @@default_level = 'testlevel.rb'
7
+ @@default_user = 'synth.yaml'
8
+
6
9
  def initialize(arguments)
7
10
  @arguments = arguments
8
11
  @opt_parser = OptionParser.new
@@ -13,41 +16,19 @@ module MonkeyMusic
13
16
 
14
17
  def run
15
18
  @opt_parser.parse!
16
- if generate_user?
17
- # Create user
18
- user = User.new
19
- # Connect to libspotify
20
- Hallon.load_timeout = 0
21
- session = Hallon::Session.initialize(IO.read(@spotify_appkey_file))
22
- session.login!(@spotify_account, @spotify_password)
23
- # Load toplists
24
- puts "Loading toplists from #{@toplist_file}..."
25
- toplist_loader = ToplistLoader.new(@toplist_file)
26
- toplist_loader.load_for_user!(user)
27
- # Generate recommendations
28
- puts "Loading recommendations..."
29
- loaded_toplists = toplist_loader.loaded_toplists
30
- recommendation_loader = RecommendationLoader.new(loaded_toplists)
31
- recommendation_loader.load_for_user!(user)
32
- # Disconnect from libspotify
33
- session.logout!
34
- # Evaluate recommendations
35
- puts "Evaluating recommendations..."
36
- score_system = ScoreSystem.new
37
- score_system.evaluate_user_recommendations!(user)
38
- # Dump and print the user
39
- File.open(@out_file, 'w') do |f|
40
- f.write(user.dump)
41
- end
42
- puts "====="
43
- puts "DONE!"
44
- puts "====="
45
- puts "Loaded tracks:"
46
- user.recommendations.group_by(&:multiplier).sort.each do |k,v|
47
- puts "#Multiplier #{k}:\t#{v.length}"
48
- end
49
- exit
50
- elsif not game_is_playable?
19
+ # Handle fallback to default level
20
+ @level_file ||= File.join(
21
+ File.dirname(__FILE__),
22
+ "../../levels",
23
+ @@default_level
24
+ )
25
+ # Handle fallback to default user
26
+ @user_file ||= File.join(
27
+ File.dirname(__FILE__),
28
+ "../../users",
29
+ @@default_user
30
+ )
31
+ if (not game_is_playable?)
51
32
  puts @opt_parser
52
33
  exit
53
34
  end
@@ -73,14 +54,6 @@ module MonkeyMusic
73
54
 
74
55
  private
75
56
 
76
- def generate_user?
77
- (defined? @toplist_file) &&
78
- (defined? @out_file) &&
79
- (defined? @spotify_appkey_file) &&
80
- (defined? @spotify_account) &&
81
- (defined? @spotify_password)
82
- end
83
-
84
57
  def game_is_playable?
85
58
  (defined? @user_file) &&
86
59
  (defined? @level_file) &&
@@ -92,19 +65,7 @@ module MonkeyMusic
92
65
  end
93
66
 
94
67
  def init_parser(opts)
95
- opts.banner = 'Usage: monkeymusic [options]'
96
-
97
- opts.on('-l',
98
- '--level LEVEL',
99
- 'The level to play.') do |file|
100
- @level_file = File.join(Dir.getwd, file)
101
- end
102
-
103
- opts.on('-u',
104
- '--user USER',
105
- 'The user the players will recommend music for.') do |user|
106
- @user_file = File.join(Dir.getwd, user)
107
- end
68
+ opts.banner = 'Usage: monkeymusic -p PLAYER_FILE -n PLAYER_NAME [-u USER_FILE] [-l LEVEL_FILE]'
108
69
 
109
70
  opts.on('-p',
110
71
  '--player FILE',
@@ -119,38 +80,21 @@ module MonkeyMusic
119
80
  @players[-1].monkey.name = name unless @players.empty?
120
81
  end
121
82
 
122
- opts.on('-d', '--delay DELAY', OptionParser::DecimalNumeric,
123
- 'The delay (in seconds) between each round.') do |delay|
124
- @delay = delay
125
- end
126
-
127
- opts.on('-g',
128
- '--generate TOPLIST_FILE',
129
- 'Generate a user from a toplist file.') do |user|
130
- @toplist_file = File.join(Dir.getwd, user)
131
- end
132
-
133
- opts.on('-o',
134
- '--out OUT_FILE',
135
- 'The file to dump a generated user to.') do |file|
136
- @out_file = File.join(Dir.getwd, file)
137
- end
138
-
139
- opts.on('-k',
140
- '--app-key KEY',
141
- 'Path to libspotify application key.') do |key|
142
- @spotify_appkey_file = File.join(Dir.getwd, key)
83
+ opts.on('-l',
84
+ '--level LEVEL',
85
+ 'The level to play.') do |file|
86
+ @level_file = File.join(Dir.getwd, file)
143
87
  end
144
-
145
- opts.on('-a',
146
- '--account ACCOUNT',
147
- 'Username for a Spotify premium account.') do |account|
148
- @spotify_account = account
88
+
89
+ opts.on('-u',
90
+ '--user USER',
91
+ 'The user the players will recommend music for.') do |user|
92
+ @user_file = File.join(Dir.getwd, user)
149
93
  end
150
94
 
151
- opts.on('-w', '--password PASSWORD',
152
- 'Password for a Spotify premium account.') do |password|
153
- @spotify_password = password
95
+ opts.on('-d', '--delay DELAY', OptionParser::DecimalNumeric,
96
+ 'The delay (in seconds) between each round.') do |delay|
97
+ @delay = delay
154
98
  end
155
99
 
156
100
  opts.on('-b', '--browser-ui',
@@ -12,20 +12,24 @@ module MonkeyMusic
12
12
  puts "\n"*5
13
13
  end
14
14
 
15
- def update(level)
15
+ def update(level, query_time = 0)
16
16
  # Clear screen
17
17
  puts "\e[H\e[2J"
18
18
  # Level
19
19
  puts level.to_s
20
20
  # Score
21
21
  puts "\n"
22
- puts "="*10
23
- puts "\n"
24
22
  level.players.each do |player|
25
- puts "#{player.monkey.name}: #{player.monkey.score}"
26
- puts "{ #{"0"*player.monkey.carrying.count}#{"_"*player.monkey.remaining_capacity} }\n"
23
+ monkey = player.monkey
24
+ puts "---"
25
+ print "#{monkey.name} | "
26
+ print "Score: #{monkey.score} | "
27
+ puts "Capacity: #{monkey.remaining_capacity}"
28
+ monkey.carrying.each { |t| puts "#{t.value}p: #{t.name}" }
29
+ print("\n"*monkey.remaining_capacity)
27
30
  end
28
- sleep @delay
31
+ puts "---"
32
+ sleep [@delay - query_time, 0].max
29
33
  end
30
34
  end
31
35
  end
@@ -70,6 +70,10 @@ module MonkeyMusic
70
70
  (@capacity - carrying.count) || 0
71
71
  end
72
72
 
73
+ def serialize
74
+ @id
75
+ end
76
+
73
77
  def to_json(options = {})
74
78
  { :id => @id,
75
79
  :x => @x,
@@ -0,0 +1,6 @@
1
+ $: << File.dirname(__FILE__)
2
+
3
+ require 'monkey_music_generate/generator'
4
+ require 'monkey_music_generate/toplist_loader'
5
+ require 'monkey_music_generate/recommendation_loader'
6
+ require 'monkey_music_generate/score_system'
@@ -0,0 +1,98 @@
1
+ require 'optparse'
2
+ require 'hallon'
3
+
4
+ module MonkeyMusic
5
+ class Generator
6
+
7
+ def initialize
8
+ OptionParser.new do |opts|
9
+ opts.banner = 'Usage: monkeymusic-generate [options]'
10
+
11
+ opts.on('-g',
12
+ '--generate TOPLIST_FILE',
13
+ 'Generate a user from a toplist file.') do |user|
14
+ @toplist_file = File.join(Dir.getwd, user)
15
+ end
16
+
17
+ opts.on('-o',
18
+ '--out OUT_FILE',
19
+ 'The file to dump a generated user to.') do |file|
20
+ @out_file = File.join(Dir.getwd, file)
21
+ end
22
+
23
+ opts.on('-k',
24
+ '--app-key KEY',
25
+ 'Path to libspotify application key.') do |key|
26
+ @spotify_appkey_file = File.join(Dir.getwd, key)
27
+ end
28
+
29
+ opts.on('-a',
30
+ '--account ACCOUNT',
31
+ 'Username for a Spotify premium account.') do |account|
32
+ @spotify_account = account
33
+ end
34
+
35
+ opts.on('-w', '--password PASSWORD',
36
+ 'Password for a Spotify premium account.') do |password|
37
+ @spotify_password = password
38
+ end
39
+
40
+ opts.on_tail('-h',
41
+ '--help',
42
+ 'Show this message.') do
43
+ puts opts
44
+ exit
45
+ end
46
+ end.parse!
47
+ end
48
+
49
+ def run
50
+ if generate_user?
51
+ # Create user
52
+ user = User.new
53
+ # Connect to libspotify
54
+ Hallon.load_timeout = 0
55
+ session = Hallon::Session.initialize(IO.read(@spotify_appkey_file))
56
+ session.login!(@spotify_account, @spotify_password)
57
+ # Load toplists
58
+ puts "Loading toplists from #{@toplist_file}..."
59
+ toplist_loader = ToplistLoader.new(@toplist_file)
60
+ toplist_loader.load_for_user!(user)
61
+ # Generate recommendations
62
+ puts "Loading recommendations..."
63
+ loaded_toplists = toplist_loader.loaded_toplists
64
+ recommendation_loader = RecommendationLoader.new(loaded_toplists)
65
+ recommendation_loader.load_for_user!(user)
66
+ # Disconnect from libspotify
67
+ session.logout!
68
+ # Evaluate recommendations
69
+ puts "Evaluating recommendations..."
70
+ score_system = ScoreSystem.new
71
+ score_system.evaluate_user_recommendations!(user)
72
+ # Dump and print the user
73
+ File.open(@out_file, 'w') do |f|
74
+ f.write(user.dump)
75
+ end
76
+ puts "====="
77
+ puts "DONE!"
78
+ puts "====="
79
+ puts "Loaded tracks:"
80
+ user.recommendations.group_by(&:multiplier).sort.each do |k,v|
81
+ puts "#Multiplier #{k}:\t#{v.length}"
82
+ end
83
+ exit
84
+ end
85
+ end
86
+
87
+ private
88
+
89
+ def generate_user?
90
+ (defined? @toplist_file) &&
91
+ (defined? @out_file) &&
92
+ (defined? @spotify_appkey_file) &&
93
+ (defined? @spotify_account) &&
94
+ (defined? @spotify_password)
95
+ end
96
+
97
+ end
98
+ end
metadata CHANGED
@@ -1,68 +1,18 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: monkeymusic
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
5
- prerelease:
4
+ version: 0.0.2
6
5
  platform: ruby
7
6
  authors:
8
7
  - Oscar Soderlund
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-05-06 00:00:00.000000000 Z
11
+ date: 2013-05-07 00:00:00.000000000 Z
13
12
  dependencies:
14
- - !ruby/object:Gem::Dependency
15
- name: hallon
16
- requirement: !ruby/object:Gem::Requirement
17
- none: false
18
- requirements:
19
- - - ! '>='
20
- - !ruby/object:Gem::Version
21
- version: '0'
22
- type: :runtime
23
- prerelease: false
24
- version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
- requirements:
27
- - - ! '>='
28
- - !ruby/object:Gem::Version
29
- version: '0'
30
- - !ruby/object:Gem::Dependency
31
- name: rack
32
- requirement: !ruby/object:Gem::Requirement
33
- none: false
34
- requirements:
35
- - - ! '>='
36
- - !ruby/object:Gem::Version
37
- version: '0'
38
- type: :runtime
39
- prerelease: false
40
- version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
- requirements:
43
- - - ! '>='
44
- - !ruby/object:Gem::Version
45
- version: '0'
46
13
  - !ruby/object:Gem::Dependency
47
14
  name: json
48
15
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
- requirements:
51
- - - ! '>='
52
- - !ruby/object:Gem::Version
53
- version: '0'
54
- type: :runtime
55
- prerelease: false
56
- version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
- requirements:
59
- - - ! '>='
60
- - !ruby/object:Gem::Version
61
- version: '0'
62
- - !ruby/object:Gem::Dependency
63
- name: em-websocket
64
- requirement: !ruby/object:Gem::Requirement
65
- none: false
66
16
  requirements:
67
17
  - - ! '>='
68
18
  - !ruby/object:Gem::Version
@@ -70,7 +20,6 @@ dependencies:
70
20
  type: :runtime
71
21
  prerelease: false
72
22
  version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
23
  requirements:
75
24
  - - ! '>='
76
25
  - !ruby/object:Gem::Version
@@ -82,6 +31,11 @@ executables:
82
31
  extensions: []
83
32
  extra_rdoc_files: []
84
33
  files:
34
+ - lib/monkey_music_generate.rb
35
+ - lib/monkey_music_generate/recommendation_loader.rb
36
+ - lib/monkey_music_generate/toplist_loader.rb
37
+ - lib/monkey_music_generate/generator.rb
38
+ - lib/monkey_music_generate/score_system.rb
85
39
  - lib/monkey_music.rb
86
40
  - lib/monkey_music/level.rb
87
41
  - lib/monkey_music/units/wall.rb
@@ -89,19 +43,21 @@ files:
89
43
  - lib/monkey_music/units/track.rb
90
44
  - lib/monkey_music/units/base.rb
91
45
  - lib/monkey_music/units/user.rb
92
- - lib/monkey_music/recommendation_loader.rb
93
46
  - lib/monkey_music/game.rb
94
- - lib/monkey_music/toplist_loader.rb
95
47
  - lib/monkey_music/runner.rb
96
48
  - lib/monkey_music/player.rb
97
49
  - lib/monkey_music/level_loader.rb
98
50
  - lib/monkey_music/ui/browser_ui.rb
99
51
  - lib/monkey_music/ui/console_ui.rb
100
- - lib/monkey_music/score_system.rb
52
+ - levels/testmaze_30.rb
53
+ - levels/bomberman2.rb
101
54
  - levels/the_last_crusade.rb
102
55
  - levels/testlevel.rb
56
+ - levels/testmaze_10.rb
103
57
  - levels/testlevel_maze.rb
104
58
  - levels/travelling_salesmonkeys.rb
59
+ - levels/testmaze_20.rb
60
+ - bin/monkeymusic-generate
105
61
  - bin/monkeymusic
106
62
  - users/synth.yaml
107
63
  - users/synth.rb
@@ -111,26 +67,25 @@ files:
111
67
  - LICENSE
112
68
  homepage: https://github.com/odsod/monkey-music
113
69
  licenses: []
70
+ metadata: {}
114
71
  post_install_message:
115
72
  rdoc_options: []
116
73
  require_paths:
117
74
  - lib
118
75
  required_ruby_version: !ruby/object:Gem::Requirement
119
- none: false
120
76
  requirements:
121
77
  - - ! '>='
122
78
  - !ruby/object:Gem::Version
123
79
  version: '0'
124
80
  required_rubygems_version: !ruby/object:Gem::Requirement
125
- none: false
126
81
  requirements:
127
82
  - - ! '>='
128
83
  - !ruby/object:Gem::Version
129
84
  version: 1.3.4
130
85
  requirements: []
131
86
  rubyforge_project: monkeymusic
132
- rubygems_version: 1.8.23
87
+ rubygems_version: 2.0.3
133
88
  signing_key:
134
- specification_version: 3
89
+ specification_version: 4
135
90
  summary: A runtime for an AI programming competition.
136
91
  test_files: []