monkeymusic 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
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: []