2017-09-09 13 views
1

この実装はConway's Game of Lifeにあります。私はGUIを扱ったことがなく、私はこのコードを理解しようとしています(自分自身を実装しています)。人生を描く関数(カメ)のpythonゲーム(インスタンスメソッドを呼び出す?)

私はバグという特定の機能があります。それぞれの生物を描く機能(黒は生きている、白は死んでいる)。

# import turtle (at the top) 
def draw(self, x, y): 
    "Update the cell (x,y) on the display." 
    turtle.penup() 
    key = (x, y) 
    if key in self.state: 
     turtle.setpos(x*CELL_SIZE, y*CELL_SIZE) 
     turtle.color('black') 
     turtle.pendown() 
     turtle.setheading(0) 
     turtle.begin_fill() 
     for i in range(4): 
      turtle.forward(CELL_SIZE-1) 
      turtle.left(90) 
     turtle.end_fill() 

そして、これはボード全体を表示する機能である: DEFディスプレイ(自己):コースの

"""Draw the whole board""" 
turtle.clear() 
for i in range(self.xsize): 
    for j in range(self.ysize): 
     self.draw(i, j) 
turtle.update() 

コード動作しますが、 のIntelliJは、彼がへの参照を見つけることができないと言いますこれらすべての機能。 私はクラスメソッドとしてインスタンスメソッドを呼び出すため、自己がないためだと思います。

  1. どのように動作するのか分かりません。
  2. どうすれば修正できますか?私は新しいタートルを作ろうとしましたが、うまくいかなかったと思います。たぶん私は関数に引数としてタートルを置くべきですか?

これは数時間前から貼り付けられています。いくつかの助けが大好きです。

+0

このコードはクラス内にありますか?もしそうなら、私たちはクラスコードを持つことができますか? – notcompletelyrational

+0

最初の文のリンクを押してください - ConwayのGame of Life。 (http://fiftyexamples.readthedocs.io/en/latest/life.html) – TheCrystalShip

答えて

2

のIntelliJは、彼はすべてのこれらの機能

亀モジュールが奇数鳥への参照を見つけることができないと言います。 (混合メタファーすみません。)それは違う観客に異なるものになろうとし、それが混乱の原因:

1)機能対方法

タートルあなたはカメ&画面のインスタンスを作成し、オブジェクト指向のモジュールですそしてそれらのメソッドを呼び出します。

turtle.setworldcoordinates(0, 0, xsize, ysize) 
turtle.forward(100) # move the "default" turtle forward 
:プログラマーを始めて対応するために、しかし

screen = turtle.Screen() 
screen.setworldcoordinates(0, 0, xsize, ysize) 

yertle = turtle.Turtle() 
yertle.forward(100) 

を、および/または他のカメの言語をエミュレートし、それはまた、機能的なインターフェースを提供します関数やメソッドを混合防ぐため

、私は亀をこのようにインポートするお勧め:

from turtle import Turtle, Screen 

のみオブジェクト・インタフェースと機能しないものを可能にします。

IntelliJの警告は、カメへの機能インターフェイスが、ロード時にオブジェクトメソッドのインターフェイスから動的に導出されるため、発生します。実際に関数を呼び出すことはできません。

2)組込

対スタンドアロンカメモジュールは、いずれかの実行スタンドアロンように設計以上Tkinterのプロジェクトに埋め込まれています。あなたが行っていることによって、カメやスクリーンにアクセスする方法が異なります。

ConwayのGame of Lifeの実装では、オブジェクトインターフェイスを使用する必要があり、タートルモジュールをスタンドアロンとして扱いますが、他のTkベースのパネルを開くために使用しています。

from turtle import TK 

これは逆です。このモジュールを適合させるための迅速な修正はありません。すべてのカメとtkinterリファレンスを調べて再検討する必要があります。