お知らせ

  • 利用規約を守って投稿してください。また、よくある質問および投稿の手引きも参照してください。
  • メッセージの投稿にはアカウントが必要です。未登録の方は、ユーザ登録ページからアカウントを作成することができます。

#1 2011-03-14 00:33:34

cola
メンバ
登録日: 2010-12-19

pythonとpygameのコンパイルエラー

こんにちは
PythonとPygameを勉強しているんですが、
http://www.halb-katze.jp/pygt/pygt0901.html
↑で勉強しているんですが、コンパイルするとエラーになってしまいます。

cola@cola-PC:~/pro$ python test.py
Traceback (most recent call last):
  File "test.py", line 26, in <module>
    if __name__ == '__main__': main()
  File "test.py", line 10, in main
    screen = gu.init((SCR_W, SCR_H), 'Font Practice 1')
  File "/home/cola/pro/gameutil.py", line 6, in init
    pygame.init()
NameError: global name 'pygame' is not defined

上のurlのコードをコピペしました。
変えたところは一行目の
# -*- coding:sjis -*-

# -*- coding:UTF8 -*-
にしました。こうしないとエラーになってしまうからです。

NameError: global name 'pygame' is not defined
の意味がわかりません。
ちなみにPythonとPygameのインストールした方法は、「solarwol」というゲームをインストールしたら一緒にインストールされました。
調べたら「Python2.6」と「python-pygame」です。あとは手動で「Python2.6-dev」をインストールしました。

解決方法を教えてください。ちなみに上のサイトをはじめから全部書いてます。gameutil.pyも同じファイルに保存してあります。
JapaneseCodecsは以下のようにインストールしました。

# cd /usr/local/src
# sudo wget http://www.python.jp/pub/JapaneseCodecs/JapaneseCodecs-1.4.11.tar.gz
# tar xzvpf JapaneseCodecs-1.4.11.tar.gz
# cd JapaneseCodecs-1.4.11
# sudo python setup.py install

でできたと思います。

解決策お願いします(´・ω・`)

オフライン

 

#2 2011-03-14 02:53:00

Cametan
メンバ
登録日: 2007-08-12

Re: pythonとpygameのコンパイルエラー

cola による投稿:

こんにちは

こんにちわ。

cola による投稿:

コンパイルするとエラーになってしまいます。

一応念の為に。
確かにPythonでは内部的にはソースをバイトコンパイルしますが、一応インタプリタです。ですから(C言語的な意味では)コンパイルを行なう事はありません。単なるエラーですね。

cola による投稿:

http://www.halb-katze.jp/pygt/pygt0901.html
↑で勉強している

このページのコードでいいんですね?じゃあ、ちょっとエラー内容を見ていきます。
コメントを付加していきますんで、意味を見ていってください。

cola による投稿:

cola@cola-PC:~/pro$ python test.py
Traceback (most recent call last):
  File "test.py", line 26, in <module>                          # test.py の26行目の
    if __name__ == '__main__': main()                         # main() で問題が発生しているよん
  File "test.py", line 10, in main                                # test.py の main の10行目には
    screen = gu.init((SCR_W, SCR_H), 'Font Practice 1')    # screen って変数が使われてるんですけど
  File "/home/cola/pro/gameutil.py", line 6, in init         # そこに含まれてるgameutil.py の6行目には
    pygame.init()                                                    # pygame.init() っつーメソッドがあるけど
NameError: global name 'pygame' is not defined            # 大域名で pygame なんつーのはないよん

分かりますかね?エラーが起きてるのはtest.pyじゃなくってそれが呼んでるgameutil.pyの方なんです。
gameutil.pyってのは次のページのブツですよね。

http://www.halb-katze.jp/pygt/pygt0800.html

こんな風に書かれています。

# gameutil.py
# game utility functions
def init(size=(200,100), title='non title'):
    """initialize all and make surface using pygame.init()"""
    pygame.init()
    scr = pygame.display.set_mode(size)
    scrRect = scr.get_rect()
    pygame.display.set_caption(title)
    return scr

def load_image(filename, ckey=None):
    """あらゆるイメージをロードし、imageオブジェクトを返す。

    filename:ファイル名
    ckey:Colorkey設定。-1だと画像の左上ピクセルの色を拾う。"""
    try:
        img = pygame.image.load(filename)
    except pygame.error, message:
        print '画像を読み込めません', filename
        raise SystemExit, message
    img = img.convert()
    if ckey != None:
        if ckey == -1:
            ckey = img.get_at((0,0))
        img.set_colorkey(ckey, RLEACCEL)
    return img

#EOF

これは例として書かれてるみたいですが、見て分かるように、pygameがimportされていません。また、エンコードの指定もないんで、これはこのままだとエラー一直線です。これが原因ですね。
これは恐らく自作モジュールを作ろう、と言うお題でしょうけど、Pythonは1ファイル1名前空間、と言う原則があります。従って、別なモジュールでpygameをimportしていたとしても、「大域的」にはpygameと言う名前が認識される事はありません。要するに局所的に使われる名前となるんで、従ってインタプリタが

pygameは大域名として定義されてないよん

と文句を言ってくるわけです。
これを避ける為には上のgameutil.pyの冒頭に

# -*- coding: utf-8 -*-
import pygame

の二行を付け加えれば良い筈です。

オフライン

 

#3 2011-03-14 03:11:27

weyk
メンバ
登録日: 2009-04-03

Re: pythonとpygameのコンパイルエラー

変えたところは一行目の
# -*- coding:sjis -*-

# -*- coding:UTF8 -*-
にしました。こうしないとエラーになってしまうからです。

勉強をするというのは、意味を理解して応用ができるよう、次につなげることができるようにして行くくことです。
サイトをこぴぺして、わからないことは質問してその結果をまたこぴぺ・・・というのは、勉強とは言わないと思います(ものが動くので勉強したつもりにはなりますが・・・・しいていうなら、「体験」でしょうか。)。目標は、体験でしょうか?学習でしょうか?
学習が目的であるなら、まず、なぜうまくゆかないのか、どの辺にどんな問題がありそうなのか、自身の意見も書いて(答えではなく)意見や調べ方を求めてみてはいかがでしょうか。今のところ、解決したもの含めて2か所(上記引用のエラーと、今出ているglobal name 'pygame' is not definedの部分)ありますから、その2点について書いてみてはいかがでしょうか。
※発生したエラーや不具合を(あてずっぽうではない方法で)解決できるかどうかが、プログラムを作れる/作れないの境目だと思っています。

また、そっくり同じにしているつもりが動かないという場合、同じ部分は書かなくてもよいだろうと考えてしまいますが、本当に全部そっくり同じなら、ちゃんと動く可能性も高い と推測できます(動作未検証のソースを載せている書籍やサイトは除く。)
test.pyとgameutil.pyの内容も(cat test.py等で)掲載することをお勧めします。

オフライン

 

Board footer

Powered by FluxBB