Guest User

Untitled

a guest
Jun 18th, 2018
151
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.31 KB | None | 0 0
  1. if(not defined?(@dict))
  2. @dict = Array.new
  3. file = File.open('data/hangman/dictionary.txt', 'r');
  4. file.each { |line| line = line.chomp!;@dict << line if line.length >= 6 }
  5. file.close
  6. end
  7.  
  8. import 'net.newbiehacker.commodore.event.IrcEventListener'
  9. import 'net.newbiehacker.bot.UserManager'
  10. import 'net.newbiehacker.bot.GroupManager'
  11.  
  12. class Game
  13. attr_accessor :word, :guesses, :guessed, :bin
  14.  
  15. def initialize(word, guesses)
  16. @word, @guesses = word, guesses
  17. @guessed = '';
  18. @bin = Array.new
  19. @word.each_byte { |b| @guessed += '_'}
  20. end
  21.  
  22. def guess(str)
  23. str.downcase!
  24. count = 0
  25. str.length.times { |g|
  26. g = str[g]
  27. if(g >= ?a && g <= ?z && !guessed.include?(g.chr) && !bin.include?(g.chr))
  28. t_count = 0
  29. @word.length.times { |i|
  30. if @word[i] == g
  31. t_count += 1
  32. @guessed[i] = g
  33. end
  34. }
  35. if t_count == 0
  36. @guesses -= 1
  37. @bin << g.chr
  38. if(@guesses == 0)
  39. return count;
  40. end
  41. else
  42. count += t_count;
  43. end
  44. end
  45. }
  46. return count
  47. end
  48. end
  49.  
  50. class Listener
  51. include IrcEventListener
  52.  
  53. attr_accessor :games
  54.  
  55. def initialize(dict)
  56. @games = {}
  57. @dict = dict
  58. end
  59.  
  60. def onAction(evt)
  61. end
  62.  
  63. def onConnect(evt)
  64. end
  65.  
  66. def onCtcpRequest(evt)
  67. end
  68.  
  69. def onDisconnect(evt)
  70. end
  71.  
  72. def onError(evt)
  73. end
  74.  
  75. def onInvite(evt)
  76. end
  77.  
  78. def onJoin(evt)
  79. end
  80.  
  81. def onKick(evt)
  82. end
  83.  
  84. def onMessage(evt)
  85. src = evt.getSource
  86. snd = evt.getSender
  87. tgt = evt.getTarget
  88. msg = evt.getMessage
  89. bu = UserManager.getUser(snd)
  90. if(bu == nil || bu.getBool('ignored', false))
  91. return
  92. end
  93. if msg == 'kill_hangman' && GroupManager.inGroup(bu, 'admin')
  94. src.sendMessage(tgt.to_s, 'Hangman script killed.');
  95. src.removeListener(self);
  96. return;
  97. end
  98. if msg == 'start'
  99. if(@games[snd] != nil)
  100. src.sendMessage(tgt.to_s, 'You\'re already playing a game of hangman you idiot, wow...');
  101. return
  102. end
  103. @games[snd] = Game.new(@dict[rand(@dict.size)], 7)
  104. game = @games[snd]
  105. src.sendMessage(tgt.to_s, 'Please type \'gc\' (where c is one or more character in the alphabet) to make a guess!');
  106. src.sendMessage(tgt.to_s, snd.to_s + ': ' + (game.guessed.upcase.split('') * ' ') + (game.bin.size == 0? '': ', tried: ' + (game.bin * ', ')) + ', guesses left: ' + game.guesses.to_s)
  107. elsif msg == 'stats'
  108. wins = bu.getInt('hangman_wins', 0)
  109. loses = bu.getInt('hangman_loses', 0)
  110. src.sendMessage(tgt.to_s, snd.to_s + ': wins: ' + wins.to_s + ', losses: ' + loses.to_s + ', win to loss ratio: ' + (wins.to_f / loses.to_f).to_s);
  111. else
  112. game = @games[snd]
  113. if(game != nil)
  114. if msg[0,1] == 'g'
  115. guess = msg[1..-1]
  116. count = game.guess(guess)
  117. if(game.word == game.guessed)
  118. src.sendMessage(tgt.to_s, 'Congratulations! The word was \'' + game.word + '\'.');
  119. bu.set('hangman_wins', (bu.getInt('hangman_wins', 0) + 1).to_s);
  120. @games[snd] = nil;
  121. elsif game.guesses == 0
  122. src.sendMessage(tgt.to_s, 'Oh dear, you let that poor guy hang. The word was \'' + game.word + '\'');
  123. bu.set('hangman_loses', (bu.getInt('hangman_loses', 0) + 1).to_s);
  124. @games[snd] = nil;
  125. else
  126. src.sendMessage(tgt.to_s, snd.to_s + ': ' + (game.guessed.upcase.split('') * ' ') + (game.bin.size == 0? '': ', tried: ' + (game.bin * ', ')) + ', guesses left: ' + game.guesses.to_s)
  127. end
  128. end
  129. end
  130. end
  131. end
  132.  
  133. def onModeChange(evt)
  134. end
  135.  
  136. def onNickChange(evt)
  137. end
  138.  
  139. def onNotice(evt)
  140. end
  141.  
  142. def onNumericMessage(evt)
  143. end
  144.  
  145. def onPart(evt)
  146. if @games[evt.getUser()] != nil
  147. evt.getSource().sendMessage(evt.getChannel().to_s, 'Game for ' + evt.getUser().getNick() + ' cancelled.');
  148. @games[evt.getUser()] = nil;
  149. end
  150. end
  151.  
  152. def onQuit(evt)
  153. if @games[evt.getUser()] != nil
  154. @games[evt.getUser()] = nil;
  155. end
  156. end
  157.  
  158. def onTopicChange(evt)
  159. end
  160. end
  161.  
  162. @hangman_inst = Listener.new(@dict)
  163.  
  164. $irc.addListener(@hangman_inst)
  165. reply 'Please type start to start a game of hangman (cross-channel)'
  166. return
Add Comment
Please, Sign In to add comment