2015-08-24 3 views
0

Я пытался сделать палача игру, где, если команда «! Палач» является iniated, этот код будет выполняться:Python - Sikuli и палач игры

def cmdHangman(event): 
    print("!hangman") #this print works 
    type("Game: Hangman") 
    type(Key.ENTER, Key.SHIFT) 
    Hangman.Playing() 

Где Hangman.Playing() приводит к:

listOfWords = ["example", "says", "python", "rocks"] 
guessWord = random.choice(listOfWords) 
board = [" * " for char in guessWord] 
alreadySaid = "" 

class Hangman(): 

    def Playing(): 
     print("Playing") #print not showing 
     global guessWord, board, alreadySaid  

     whatplayersaid = hangmanRegion.text() 
     hangmanRegion.stopObserver() 

     if whatplayersaid in guessWord: 
      board = [char if char == whatplayersaid or char in alreadySaid else " * " for char in guessWord] 
      board = "".join(board) 
      type(board) 
      type(Key.ENTER) 
     else: 
     type("Nope") 
     type(Key.ENTER) 
     alreadySaid = alreadySaid + whatplayersaid 
     Hangman.PlayBuffer() 

    def gotoPlaying(event): 
     print("gotoPlaying") #print not showing 
     Hangman.Playing() 

    def PlayBuffer(): 
     print("PlayBuffer") #print not showing 
     wait(1) 
     hangmanRegion.onChange(Hangman.gotoPlaying) 
     hangmanRegion.observe(FOREVER) 

Он должен сканировать следующий вход чат для писем с использованием hangmanRegion.text(), так что если кто-то в типах: «к конференции» А, whatplayersaid должна равняться «А»

странная вещь, он даже не работает. Вообще. Журнала ошибок нет. Я попытался разместить отпечатки повсюду в class Hangman(), и я не видел никаких отпечатков в журнале.

Может ли кто-то определить недостаток в моем коде? Разве это не выполняется или SICUL IDE сбой? Или я просто устал?

Log после ввода команды:

!hangman 
[log] TYPE "Game: Hangman" 

[log] (Shift) TYPE "#ENTER." 

ответ

2

Похоже, что есть 2 вещи неправильно с классом, который вызывает его молча умирать. Когда вы вызываете функцию воспроизведения, вы пытаетесь вызвать ее напрямую, а не из экземпляра класса.

Также (и я могу быть вне базы с этим, так как я все еще изучаю сам python), функция внутри класса должна быть передана как минимум 1 аргумент, обычно сам.

Если вы посмотрите на приведенный ниже пример, вы можете увидеть, пытаюсь ли я напрямую вызвать Hangman.Playing(), я получаю сообщение об ошибке, не являющемся экземпляром.

Если вместо этого я создаю экземпляр x и вызываю его из этого, оператор печати успешно выполнит.

Python 2.7.10 (default, May 23 2015, 09:40:32) [MSC v.1500 32 bit (Intel)] on win32 
Type "help", "copyright", "credits" or "license" for more information. 
>>> class Hangman: 
...  def Playing(self): 
...    print "Playing" 
... 
>>> Hangman.Playing() 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: unbound method Playing() must be called with Hangman instance as  first argument (got nothing instead) 
>>> x = Hangman() 
>>> x.Playing() 
Playing 
>>> 
+0

Святое дерьмо, спасибо огромное! Я продолжаю учиться каждый день! :) Это, наконец, работает! Жаль, что я еще не могу вас проголосовать. – SikuliXUser