質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

1回答

2346閲覧

他人の作ったファイルが実行できない

sakuramochiIII

総合スコア8

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/06/07 15:55

前提・実現したいこと

他人の作ったファイルが実行できなくて困っています。pyxelのバージョンはともに1.4.3で揃っています。アドバイスを頂きたいです。

発生している問題・エラーメッセージ

Traceback (most recent call last): File "/Users/higashirinako/Downloads/invader/invader.py", line 1, in <module> import pyxel File "/usr/local/lib/python3.9/site-packages/pyxel/__init__.py", line 10, in <module> from . import core # type: ignore File "/usr/local/lib/python3.9/site-packages/pyxel/core/__init__.py", line 42, in <module> _lib = _load_library() File "/usr/local/lib/python3.9/site-packages/pyxel/core/__init__.py", line 39, in _load_library return cdll.LoadLibrary(lib_path) File "/usr/local/Cellar/python@3.9/3.9.5/Frameworks/Python.framework/Versions/3.9/lib/python3.9/ctypes/__init__.py", line 452, in LoadLibrary return self._dlltype(name) File "/usr/local/Cellar/python@3.9/3.9.5/Frameworks/Python.framework/Versions/3.9/lib/python3.9/ctypes/__init__.py", line 374, in __init__ self._handle = _dlopen(self._name, mode) OSError: dlopen(/usr/local/lib/python3.9/site-packages/pyxel/core/bin/macos/libpyxelcore.dylib, 6): Symbol not found: __ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE16find_last_not_ofEPKcmm Referenced from: /usr/local/lib/python3.9/site-packages/pyxel/core/bin/macos/libpyxelcore.dylib (which was built for Mac OS X 10.15) Expected in: /usr/lib/libstdc++.6.dylib in /usr/local/lib/python3.9/site-packages/pyxel/core/bin/macos/libpyxelcore.dylib

該当のソースコード

Python

1import pyxel 2import random 3from math import sqrt 4 5WIDTH = 128 6HEIGHT = 128 7 8SCENE_PLAY = 0 9SCENE_GAMEOVER = 1 10 11PLAYER_WIDTH = 8 12PLAYER_HEIGHT = 8 13PLAYER_SPEED = 2 14 15ENEMY_WIDTH = 8 16ENEMY_HEIGHT = 8 17ENEMY_SPEED = 2 18 19BULLET_WIDTH = 2 20BULLET_HEIGHT = 6 21BULLET_SPEED = 2 22 23enemy_list = [] 24bullet_list = [] 25 26def update_list(list): 27 for elem in list: 28 elem.update() 29 30def draw_list(list): 31 for elem in list: 32 elem.draw() 33 34def is_collision(obj_a, obj_b): 35 return obj_a.x + obj_a.w > obj_b.x and obj_a.x < obj_b.x + obj_b.w and obj_a.y + obj_a.h > obj_b.y and obj_a.y < obj_b.y + obj_b.h 36 37class Player(): 38 def __init__(self): 39 self.x = (WIDTH - PLAYER_WIDTH) / 2 40 self.y = HEIGHT - 15 41 self.w = PLAYER_WIDTH 42 self.h = PLAYER_HEIGHT 43 44 def update(self): 45 if pyxel.btn(pyxel.KEY_LEFT): 46 self.x -= PLAYER_SPEED 47 48 if pyxel.btn(pyxel.KEY_RIGHT): 49 self.x += PLAYER_SPEED 50 51 if pyxel.btnp(pyxel.KEY_SPACE): 52 if Bullet.bullet_state: 53 Bullet(self.x + (PLAYER_WIDTH - BULLET_WIDTH) / 2, self.y, 1) 54 Bullet.bullet_state = False 55 56 if self.x < 0: 57 self.x = 0 58 if self.x > WIDTH - PLAYER_WIDTH: 59 self.x = WIDTH - PLAYER_WIDTH 60 61 def draw(self): 62 pyxel.blt(self.x, self.y, 0, 0, 0, PLAYER_WIDTH, PLAYER_HEIGHT, 15) 63 64class Enemy(): 65 def __init__(self): 66 self.x = 0 67 self.y = 10 68 self.w = ENEMY_WIDTH 69 self.h = ENEMY_HEIGHT 70 self.v = ENEMY_SPEED 71 72 enemy_list.append(self) 73 74 def update(self): 75 if self.x + self.v < 0 or self.x + self.v > WIDTH - ENEMY_WIDTH: 76 self.v *= -1 77 self.y += ENEMY_HEIGHT 78 self.x += self.v 79 80 if pyxel.frame_count % (15 * random.randint(3, 5)) == 0: 81 Bullet(self.x + (ENEMY_WIDTH - BULLET_WIDTH) / 2, self.y, -1) 82 83 def draw(self): 84 pyxel.blt(self.x, self.y, 0, 0, 8, ENEMY_WIDTH, ENEMY_HEIGHT, 15) 85 86class Report(Enemy): 87 def __init__(self): 88 super().__init__() 89 self.life = 1 90 91class Test(Enemy): 92 def __init__(self): 93 super().__init__() 94 self.life = 3 95 96 def draw(self): 97 pyxel.blt(self.x, self.y, 0, 0, 8 * self.life, ENEMY_WIDTH, ENEMY_HEIGHT, 15) 98 99class Bullet(): 100 bullet_state = True 101 n = 3 102 def __init__(self, x, y, way): 103 self.x = x 104 self.y = y 105 self.w = BULLET_WIDTH 106 self.h = BULLET_HEIGHT 107 self.v = BULLET_SPEED * way 108 109 bullet_list.append(self) 110 111 def update(self): 112 self.y -= self.v 113 114 def draw(self): 115 if self.v > 0: 116 pyxel.blt(self.x, self.y, 0, 8, 0, BULLET_WIDTH, BULLET_HEIGHT, 15) 117 else: 118 pyxel.blt(self.x, self.y, 0, 10, 0, BULLET_WIDTH, BULLET_HEIGHT, 15) 119 120class App(): 121 def __init__(self): 122 pyxel.init(WIDTH, HEIGHT, caption='INVADER') 123 pyxel.load('game.pyxres') 124 125 self.scene = SCENE_PLAY 126 self.player = Player() 127 self.score = 0 128 129 pyxel.run(self.update, self.draw) 130 131 132 def update(self): 133 if pyxel.btnp(pyxel.KEY_Q): 134 pyxel.quit() 135 136 if self.scene == SCENE_PLAY: 137 self.update_play() 138 elif self.scene == SCENE_GAMEOVER: 139 self.update_gameover() 140 141 def update_play(self): 142 if pyxel.frame_count % 200 == 0: 143 Test() 144 elif pyxel.frame_count % 50 == 0: 145 Report() 146 147 self.player.update() 148 update_list(enemy_list) 149 update_list(bullet_list) 150 151 Bullet.bullet_state = all([bullet.y <= self.player.y - self.player.y / Bullet.n for bullet in bullet_list if bullet.v > 0]) 152 153 for enemy in enemy_list: 154 for bullet in bullet_list: 155 if bullet.v > 0 and is_collision(enemy, bullet): 156 enemy.life -= 1 157 if enemy.life == 0: 158 enemy_list.remove(enemy) 159 self.score += 1 160 bullet_list.remove(bullet) 161 Bullet.bullet_state = True 162 163 if bullet.v < 0 and is_collision(self.player, bullet): 164 self.scene = SCENE_GAMEOVER 165 if is_collision(self.player, enemy): 166 self.scene = SCENE_GAMEOVER 167 168 def update_gameover(self): 169 enemy_list.clear() 170 bullet_list.clear() 171 if pyxel.btnp(pyxel.KEY_ENTER): 172 self.scene = SCENE_PLAY 173 self.score = 0 174 Bullet.n = 3 175 Bullet.bullet_state = True 176 177 178 def draw(self): 179 pyxel.cls(0) 180 181 if self.scene == SCENE_PLAY: 182 self.draw_play() 183 elif self.scene == SCENE_GAMEOVER: 184 self.draw_gameover() 185 186 def draw_play(self): 187 draw_list(enemy_list) 188 draw_list(bullet_list) 189 self.player.draw() 190 pyxel.text(2, 2, "SCORE: " + str(self.score), pyxel.COLOR_WHITE) 191 192 def draw_gameover(self): 193 pyxel.text(48, 40, "GAMEOVER", pyxel.COLOR_WHITE) 194 pyxel.text(42, 55, "RESULT: {}pt".format(self.score), pyxel.COLOR_WHITE) 195 pyxel.text(34, 80, "- PRESS ENTER -", pyxel.COLOR_GRAY) 196 197App()

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jbpb0

2021/06/07 22:59

> pyxelのバージョンはともに1.4.3で揃っています。 Pythonのバージョンも同じですか?
jbpb0

2021/06/08 00:01 編集

「他人の作ったファイルが実行できなくて困っています。」とは、 pyxel.load('game.pyxres') でエラー出る、ということですよね? Pyxelのサンプルコードの内の一つ https://github.com/kitao/pyxel/blob/master/pyxel/examples/02_jump_game.py には、 pyxel.load("assets/jump_game.pyxres") がありますけど、このサンプルコードの実行でもエラー出るのですか? 上記が大丈夫なら、読めるファイルと読めないファイルがあるのですよね 読めない「game.pyxres」を、質問者さんのMacのpyxel 1.4.3に付属するPyxel Editorで読んで保存し直して、それを読んでもエラー出ますか? 【追記】 https://teratail.com/questions/342412 の「質問への追記・修正の依頼」に、 「pyxelの公式サンプルや、自分が今まで作ったファイルは正常に動きました!」 と書いてるところから、Pyxelのサンプルコードはエラー出ずに実行できるみたいですね
guest

回答1

0

おはようございます。

問題文読ませていただきました。

以下の手順を踏まえてご確認いただけますか?????‍♂️

  1. ターミナルを開く。
  2. デスクトップへ移動する。(cd)
  3. pip install pyxel==1.4.0(pipのバージョンをダウングレードする。(https://github.com/kitao/pyxel/issues/257))
  4. brew install python3 gcc sdl2 sdl2_image gifsicleを実行する。
  5. invader.pyファイルを実行する。

<参考>
https://github.com/kitao/pyxel/blob/master/README.ja.md#mac
https://dev.classmethod.jp/articles/gamedev-with-python-pyxel1/
https://gammasoft.jp/python/python-library-install/

投稿2021/06/07 22:52

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sakuramochiIII

2021/06/08 01:26

頂いた手順を実行致しましたら、 pyxel error: unsupported resource file version '1.4.3' in 'LoadAsset' と言うエラーが出ました汗
退会済みユーザー

退会済みユーザー

2021/06/08 01:48

pip listしてpyxelのバージョンは変更されていますか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問