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

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

ただいまの
回答率

88.64%

ゲームを作成したいのですが、クラスの引数のSyntaxError

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 661

rgb_nk

score 25

インターネット上にあるサンプルコードをもとにゲーム製作を行っていますが、SyntaxErrorが表示され、解決方法がわかりません。
もし精通している方がいらっしゃれば教えて頂きたいです。

エラーが出る場所は、
def init(self, filename, (x, y), (vx, vy), angle=0):
ここで、(x,y)の部分で
def init(self, filename, (x, y), (vx, vy), angle=0):
^
SyntaxError: invalid syntax

この様になります。

# -*- coding: utf-8 -*-
import pygame
from pygame.locals import *
import sys

SCREEN = Rect(0, 0, 400, 400)

# スプライトのクラス
class Sprite(pygame.sprite.Sprite):
    # スプライトを作成(画像ファイル名, 位置(x, y), 速さ(vx, vy), 回転angle)

    def __init__(self, filename, (x, y), (vx, vy), angle=0):
        pygame.sprite.Sprite.__init__(self, self.containers)
        self.image = pygame.image.load(filename).convert_alpha()
        if angle != 0: self.img = pygame.transform.rotate(self.image, angle)
        w = self.image.get_width()
        h = self.image.get_height()
        self.rect = Rect(x, y, w, h)
        self.vx = vx
        self.vy = vy
        self.angle = angle

    def update(self):
        self.rect.move_ip(self.vx, self.vy)
        # 壁と衝突時の処理(跳ね返り)
        if self.rect.left < 0 or self.rect.right > SCREEN.width:
            self.vx = -self.vx
        if self.rect.top < 0 or self.rect.bottom > SCREEN.height:
            self.vy = -self.vy
        # 壁と衝突時の処理(壁を超えないように)
        self.rect = self.rect.clamp(SCREEN)

    def draw(self, screen):
        screen.blit(self.img, self.rect)

# メイン
def main():
    pygame.init()
    screen = pygame.display.set_mode(SCREEN.size)

    # スプライトグループを作成
    group = pygame.sprite.RenderUpdates()
    Sprite.containers = group

    # スプライトを作成(画像ファイル名, 位置(x, y), 速さ(vx, vy), 回転angle)
    player = Sprite("./image/player.png", (200, 200), (2, 0), 0)
    enemy1 = Sprite("./image/enemy1.png", (200, 200), (0, 2), 0)
    enemy2 = Sprite("./image/enemy2.png", (200, 200), (2, 2), 10)
    clock = pygame.time.Clock()

    # 背景の作成と描画(背景は最初に1回だけ描画)
    bg = pygame.Surface(SCREEN.size)
    bg.fill((0, 20, 0)) # 画面の背景色
    screen.blit(bg, (0,0))
    pygame.display.update()

    while (1):
        clock.tick(30)  # フレームレート(30fps)
        group.clear(screen, bg)

        # スプライトグループを更新(キャラクタ3体を一括して更新)
        group.update()

        # スプライトを更新
        dirty_rects = group.draw(screen)

        # updateにdirty rectを渡すとその部分だけ更新するので効率よい
        # 画面更新
        pygame.display.update(dirty_rects)

        # イベント処理
        for event in pygame.event.get():
            # 終了用のイベント処理
            if event.type == QUIT:          # 閉じるボタンが押されたとき
                pygame.quit()
                sys.exit()
            if event.type == KEYDOWN:       # キーを押したとき
                if event.key == K_ESCAPE:   # Escキーが押されたとき
                    pygame.quit()
                    sys.exit()

if __name__ == "__main__":
    main()

サンプルコードの参照元は以下になります。
https://algorithm.joho.info/programming/python/pygame/

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

+1

python2で許されていた文法ですね。
タプルを展開してくれる。
前の方の回答で対処ですかね。

お疲れ様です。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/06/16 14:30

    あ、python2の文法なんですね。そこまで把握していませんでした。

    キャンセル

  • 2019/06/16 14:34

    お二人ともありがとうございます。
    無事エラーは無くなりました!!!
    またよろしくお願いいたします。

    キャンセル

checkベストアンサー

0

サイトの間違いではないでしょうか。0kcalさんの回答のとおり、python2時代の文法です。python3ではこのようには書けません。

    def __init__(self, filename, xy, vxy, angle=0):
        x, y = xy
        vx, vy = vxy

とでも修正してみてください。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/06/16 14:35

    ありがとうございます。
    無事エラーは無くなりました!!!
    またよろしくお願いいたします。

    キャンセル

  • 2019/06/16 14:37

    teratailで聞いても回答はつきますが、できればこういう場合は参考サイトのコメント欄で聞いた方が親切に対応してもらえる確率は高いし、フィードバックにもなります。
    今回は私から報告しておきます。同じハマり方する人も他に出る可能性があるし。

    キャンセル

  • 2019/06/17 16:31

    ご指摘ありがとうございます。おっしゃる通りだと思います!!
    これから引用してきたサンプルコードは、参考サイトにコメントしてみます!

    キャンセル

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

  • ただいまの回答率 88.64%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る