So I am trying to write a GUI Music Player program using Ruby. The program must read in (from a file) at least four albums and up to 15 tracks for each album.
The information read from the file should include:
Number of Albums
Artwork file name (place your artwork in an /images folder under the main folder where you run the program)
The number of tracks
The title of each track
The file location of each track
User interaction must be entirely through a GUI. GUI interface should show all the albums using either a text description, artwork or both. Users should be able to click on any Album information (i.e the artwork) and the tracks will be listed. The user should then be able to click on a track to play that track. The currently playing track must be indicated somehow (e.g the track could be highlighted or display a simple text message ‘Now playing …’). If the user clicks on another track (for the current album or another album) then any currently playing track should be stopped and the most recently selected track start playing. The Gosu audio API for this component.
I was able to get a hold of the following skeleton code to get me started. However, since I am not very experienced with GUI programming, I was hoping someone would be kind enough to provide me a few pointers on changes I could make to the code below to get me started on GUI programming.
require 'rubygems' require 'gosu' TOP_COLOR = Gosu::Color.new(0xFF1EB1FA) BOTTOM_COLOR = Gosu::Color.new(0xFF1D4DB5) module ZOrder BACKGROUND, PLAYER, UI = *0..2 end module Genre POP, CLASSIC, JAZZ, ROCK = *1..4 end GENRE_NAMES = ['Null', 'Pop', 'Classic', 'Jazz', 'Rock'] class ArtWork attr_accessor :bmp def initialize (file) @bmp = Gosu::Image.new(file) end end # Put your record definitions here class MusicPlayerMain < Gosu::Window def initialize super 600, 800 self.caption = "Music Player" # Reads in an array of albums from a file and then prints all the albums in the # array to the terminal end # Put in your code here to load albums and tracks # Draws the artwork on the screen for all the albums def draw_albums albums # complete this code end # Detects if a 'mouse sensitive' area has been clicked on # i.e either an album or a track. returns true or false def area_clicked(leftX, topY, rightX, bottomY) # complete this code end # Takes a String title and an Integer ypos # You may want to use the following: def display_track(title, ypos) @track_font.draw(title, TrackLeftX, ypos, ZOrder::PLAYER, 1.0, 1.0, Gosu::Color::BLACK) end # Takes a track index and an Album and plays the Track from the Album def playTrack(track, album) # complete the missing code @song = Gosu::Song.new(album.tracks[track].location) @song.play(false) # Uncomment the following and indent correctly: # end # end end # Draw a coloured background using TOP_COLOR and BOTTOM_COLOR def draw_background end # Not used? Everything depends on mouse actions. def update end # Draws the album images and the track list for the selected album def draw # Complete the missing code draw_background end def needs_cursor?; true; end # If the button area (rectangle) has been clicked on change the background color # also store the mouse_x and mouse_y attributes that we 'inherit' from Gosu # you will learn about inheritance in the OOP unit - for now just accept that # these are available and filled with the latest x and y locations of the mouse click. def button_down(id) case id when Gosu::MsLeft # What should happen here? end end end # Show is a method that loops through update and draw MusicPlayerMain.new.show if __FILE__ == $0