38315


pygameを使用してゲーム制作を始めてみたいと思い、以下のURLを参考にまずはpng画像を  
用いたマップの作成からやってみようと思ったのですが、画像のロードがうまく行きません。

参考URL : <http://aidiary.hatenablog.com/entry/20080524/1275748651>

以下にソースコードとエラーメッセージを記述します。

[code]

    import pygame
    from pygame.locals import *
    import sys
    import os
    
    SCR_RECT = Rect(0,0,640,480)
    ROW,COL = 15,20 # mapsize 10*20マス
    GS = 32 # pixelsize
    # mapdata
    map = [[0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1],
           [1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0],
           [0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1],
           [1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2],
           [2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1],
           [1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2],
           [0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1],
           [1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0],
           [0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1],
           [1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2],
           [2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1],
           [1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2],
           [0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1],
           [1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0],
           [0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1]]
    
    def load_image(filename, colorkey=None):
            filename = os.path.join("C:\python_images\フォルダ名", filename)
            try:
                    image = pygame.image.load(filename)
            except pygame.error as message:
                    print ("Cannot load image:" + filename)
                    raise SystemExit(message)
            image = image.convert()
            if colorkey is not None:
                    if colorkey is -1:
                            colorkey = image.get_at((0,0))
                    image.set_colorkey(colorkey, RLEACCEL)
            return image
    
    def draw_map(screen):
            # map の描画
            for r in range (ROW):
                    for c in range(COL):
                            if map[r][c] == 0:
                                    screen.blit(tileImg0,(c*GS,r*GS))
                            elif map[r][c] == 1:
                                    screen.blit(tileImg1,(c*GS,r*GS))
                            elif map[r][c] == 2:
                                    screen.blit(tileImg2,(c*GS,r*GS))
    
    pygame.init()
    screen = pygame.display.set_mode(SCR_RECT.size)
    pygame.display.set_caption("map")
    
    #imageload
    tileImg0 = load_image('ファイル名01.png')
    tileImg1 = load_image('ファイル名02.png')
    tileImg2 = load_image('ファイル名03.png')
    
    while True:
            draw_map(screen)
            pygame.display.update()
            for event in pygame.event.get():
                    if event.type == QUIT:
                            sys.exit()
                    if event.type == KEYDOWN and event.key == K_ESCAPE:
                            sys.exit()
    
[/code]

エラーメッセージ :

[code]

    Cannot load image:C:\python_images\フォルダ名\ファイル名01.png
    Traceback (most recent call last):
      File "C:\Users\OWNER\Desktop\プログラム名.py", line 29, in load_image
        image = pygame.image.load(filename)
    pygame.error
    
    During handling of the above exception, another exception occurred:
    
    Traceback (most recent call last):
      File "C:\Users\OWNER\Desktop\プログラム名.py", line 56, in <module>
        tileImg0 = load_image('ファイル名01.png')
      File "C:\Users\OWNER\Desktop\プログラム名.py", line 32, in load_image
        raise SystemExit(message)
    SystemExit
    
[/code]

肝心の質問ですが、どうすれば画像をうまく読み込んでマップ描画ができるか解決方法が  
分からないので教えていただきたいです。  
Pythonでのプログラミング自体も始めて日が浅く、エラーの細かい部分等も理解できない  
ような若輩者ですが、回答のほどよろしくお願いします。


CC BY-SA 4.0
2017-09-29T09:56:56.687
38293
2020-04-20T17:03:13.787
2020-04-20T17:03:13.787
3060
25599
question
python pygame
pygameでの画像読み込みがうまくいきません


これは、ディレクトリの指定の方法が間違えていますね。  
`import
os`,で、`os.getcwd()`を調べ、現在どのディレクトリの情報を取得しようとしているのかをチェックしてください。これは、現在のディレクトリ（カレントディレクトリ）を調べられる関数です。今たちまちそのPythonファイルがあるディレクトリが返ってくると思います。こう書くと、より汎用的な動作になると思います。少し、あなたのディレクトリ関係がわからないので、仮定を交えてかきたいとおもいます。  
あなたの現在実行中のコードがあるディレクトリを、現在のディレクトリとします。  
あなたは、その中にある、さらに設けられたフォルダ内の、イメージを取り出したいとします。  
これをサブディレクトリとし、そのフォルダこそが、python_imagesフォルダであると、私は  
思い込んでいます。  
`import os`  
(省略)  
`filename = os.path.join(os.getcwd(), "\\python_images\\"+filename)`  
こうしておけば、どのような場合でも、そのコードを実行したいディレクトリの中の、  
python_imagesフォルダの中にある、あなたが取り出したい画像ファイルが、ゲット  
できるんじゃないかなと思います。予防線を張っておきますが、pygameは、1年以上  
前でいったん中断しています。確かこれでよかったと思いますが、とりあえず試して  
みてくださいませ。あと、老婆心ながら、フォルダの指定の時には、Uなど、文字によっては  
スラッシュの後に、特定のアルファベットが来ると、別の文字だと解釈されることがあ  
りますから、\2本引いたほうがいいと思いますよ。`"python_images\\"+filename`  
にするべきだったか少し自信がありません。  
あと、私の経験から、pythonインタプリタ（初期から付属してあるIDE)で、`os.getcwd()`  
を使うと、違う場所が返ってくることがあります。。しっかりと、エディタに書いてから実行し たほうが、
正確な情報が返ってくると思います。2+3=5って返してくれるから便利なんですけ
ど、たまにドジをします。もしうまくいかなければ、またコメントをください。参考になれば幸 いです。


CC BY-SA 3.0
2017-09-30T03:18:11.167
38315
2017-09-30T03:18:11.167
24284
38293
answer