/examples/poignant.coffee
CoffeeScript | 181 lines | 50 code | 32 blank | 99 comment | 8 complexity | 6b4f0487d97df620985989e03c63a772 MD5 | raw file
- # Examples from the Poignant Guide.
- # These are examples of syntax differences between CoffeeScript and Ruby,
- # they won't run.
- # ['toast', 'cheese', 'wine'].each { |food| print food.capitalize }
- print food.capitalize() for food in ['toast', 'wine', 'cheese']
- # class LotteryTicket
- # def picks; @picks; end
- # def picks=(var); @picks = var; end
- # def purchased; @purchased; end
- # def purchased=(var); @purchased = var; end
- # end
- LotteryTicket =
- get_picks: -> @picks
- set_picks: (@picks) ->
- get_purchased: -> @purchase
- set_purchased: (@purchased) ->
- # class << LotteryDraw
- # def play
- # result = LotteryTicket.new_random
- # winners = {}
- # @@tickets.each do |buyer, ticket_list|
- # ticket_list.each do |ticket|
- # score = ticket.score( result )
- # next if score.zero?
- # winners[buyer] ||= []
- # winners[buyer] << [ ticket, score ]
- # end
- # end
- # @@tickets.clear
- # winners
- # end
- # end
- LotteryDraw =
- play: ->
- result = LotteryTicket.new_random()
- winners = {}
- for buyer, ticketList of @tickets
- for ticket in ticketList when (score = ticket.score result) isnt 0
- (winners[buyer] or= []).push [ticket, score]
- @tickets = {}
- winners
- # module WishScanner
- # def scan_for_a_wish
- # wish = self.read.detect do |thought|
- # thought.index( 'wish: ' ) == 0
- # end
- # wish.gsub( 'wish: ', '' )
- # end
- # end
- WishScanner =
- scan_for_a_wish: ->
- wish = @read().detect (thought) -> thought.indexOf('wish: ') is 0
- wish.replace 'wish: ', ''
- # class Creature
- #
- # # This method applies a hit taken during a fight.
- # def hit( damage )
- # p_up = rand( charisma )
- # if p_up % 9 == 7
- # @life += p_up / 4
- # console.log "[#{ self.class } magick powers up #{ p_up }!]"
- # end
- # @life -= damage
- # console.log "[#{ self.class } has died.]" if @life <= 0
- # end
- #
- # # This method takes one turn in a fight.
- # def fight( enemy, weapon )
- # if life <= 0
- # console.log "[#{ self.class } is too dead to fight!]"
- # return
- # end
- #
- # # Attack the opponent
- # your_hit = rand( strength + weapon )
- # console.log "[You hit with #{ your_hit } points of damage!]"
- # enemy.hit( your_hit )
- #
- # # Retaliation
- # p enemy
- # if enemy.life > 0
- # enemy_hit = rand( enemy.strength + enemy.weapon )
- # console.log "[Your enemy hit with #{ enemy_hit } points of damage!]"
- # self.hit( enemy_hit )
- # end
- # end
- #
- # end
- Creature =
- # This method applies a hit taken during a fight.
- hit: (damage) ->
- p_up = Math.rand @charisma
- if p_up % 9 is 7
- @life += p_up / 4
- console.log "[#{@name} magick powers up #{p_up}!]"
- @life -= damage
- if @life <= 0 then console.log "[#{@name} has died.]"
- # This method takes one turn in a fight.
- fight: (enemy, weapon) ->
- return console.log "[#{@name} is too dead to fight!]" if @life <= 0
- # Attack the opponent.
- your_hit = Math.rand @strength + weapon
- console.log "[You hit with #{your_hit}points of damage!]"
- enemy.hit your_hit
- # Retaliation.
- console.log enemy
- if enemy.life > 0
- enemy_hit = Math.rand enemy.strength + enemy.weapon
- console.log "[Your enemy hit with #{enemy_hit}points of damage!]"
- @hit enemy_hit
- # # Get evil idea and swap in code words
- # print "Enter your new idea: "
- # idea = gets
- # code_words.each do |real, code|
- # idea.gsub!( real, code )
- # end
- #
- # # Save the jibberish to a new file
- # print "File encoded. Please enter a name for this idea: "
- # idea_name = gets.strip
- # File::open( "idea-" + idea_name + ".txt", "w" ) do |f|
- # f << idea
- # end
- # Get evil idea and swap in code words
- print "Enter your new idea: "
- idea = gets()
- code_words.each (real, code) -> idea.replace(real, code)
- # Save the jibberish to a new file
- print "File encoded. Please enter a name for this idea: "
- idea_name = gets().strip()
- File.open "idea-#{idea_name}.txt", 'w', (file) -> file.write idea
- # def wipe_mutterings_from( sentence )
- # unless sentence.respond_to? :include?
- # raise ArgumentError,
- # "cannot wipe mutterings from a #{ sentence.class }"
- # end
- # while sentence.include? '('
- # open = sentence.index( '(' )
- # close = sentence.index( ')', open )
- # sentence[open..close] = '' if close
- # end
- # end
- wipe_mutterings_from = (sentence) ->
- throw new Error "cannot wipe mutterings" unless sentence.indexOf
- while '(' in sentence
- open = sentence.indexOf('(')
- close = sentence.indexOf(')')
- sentence = "#{sentence[0...open]}#{sentence[close + 1..]}"
- sentence