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

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

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

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

Q&A

解決済

1回答

392閲覧

Pythonによるブロック崩し-01

退会済みユーザー

退会済みユーザー

総合スコア0

Python

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

0グッド

0クリップ

投稿2019/09/09 04:30

前回の質問より、自身で修正できなかったエラーを1ずつ質問させていただきます。

環境

OSはMac OSを使っています。
Pythonのバージョンはver.(3.7.2)を使用しています。
実行しているソフトはIDLEを使用しています。

実現したいこと

Pythonのみを使用し、ブロック崩しというゲームを制作したいです。
参考サイト

エラー

前回のご指摘により、/から\(バックスラッシュ)を使用することにより、エラーがなくなったのですが、新たなるエラーが発生しました。
イメージ説明

エラー場所付近のコード

python

1pygame.drow.rect(screen, WHITE, paddle) #ラケットの描画 2 pygame.drow.circle(screen, WHITE, \ #ボールの描画 3 (int(ballx), int(bally)), br) 4![イメージ説明](e5a2b4dec01541aa053f0facaf05824b.png)

全体のコード

python

1import pygame 2import math 3 4def sgn(a): 5 return 1 if a > 0 else -1 6 7WIDTH = 640 8HEIGHT = 480 #修正 9YELLOW = (255,255,0) 10WHITE = (255,255,0) 11RED = (255,0.0) 12GREEN = (0,255,0) 13BLUE = (0,0,255) 14colortable = [RED, YELLOW, GREEN] 15 16pygame.init() 17screen = pygame.display.set_mode((WIDTH,HEIGHT)) 18myfont = pygame.font.Font(None, 64) 19myclock = pygame.time.Clock() 20br = 10 #ボールの半径 21paddlew = 96 #ラケットの幅 22paddleh = 16 #ラケットの高さ 23blockw = 48 #ブロックの幅 24blockh = 24 #ブロックの高さ 25endflag = 0 26 27while endflag == 0: 28 ballx = WIDTH / 2 #ボールのx座標 29 bally = HEIGHT - 170 #ボールのy座標 30 bx1 = 2 #ボールの速度(x成分) 31 by1 = -2.5 #ボールの速度(y成分) 32 x = WIDTH / 2 33 y = HEIGHT - 64 34 paddle = pygame.Rect(x -(paddlew / 2), \ 35 y - (paddleh / 2), paddlew, paddleh) 36 blocks = [] 37 for i in range(50): #50個のブロックを作成 38 x = (i % 10) * (blockw + 4) + 64 39 y = int(i / 10) * (blockh + 4) + 64 40 blocks.append(pygame.Rect(x, y, blockw, \ 41 blockh)) 42 gameover = 0 43 while endflag == 0: 44 for event in pygame.event.get(): 45 if event.type == pygame.QUIT: endflag = 1 46 press = pygame.key.get_pressed() #キー入力を取得 47 x = paddle.centerx 48 if(press[pygame.K_LEFT ]): x -= 8 #カーソル右 49 if(press[pygame.K_RIGHT]): x += 8 #カーソル左 50 if x >= (paddlew / 2) \ 51 and x <= (WIDTH - (paddlew / 2)): 52 paddle.centerx = x 53 x = ballx + bx1 54 y = bally + by1 55 if x < br or x > (WIDTH - br): bx1 = -bx1 #画面枠での反射 56 if y < br: by1 = -by1 57 if y > HEIGHT: gameover += 1 58 dx = paddle.centerx - x #ラケットでの反射 59 dy = paddle.centery - y 60 if dy == 0:dy = 1 61 if ads(dx) <(paddlew / 2 + br) \ 62 and ads(dy) < (paddleh / 2 + br): 63 if ads(dx/dy) > (paddlew / paddleh): 64 dx1 = -dx1 65 ballx = paddle.centerx - sgn(dx) \ 66 * (paddlew/2 + br) 67 else: 68 bx1 = -dx / 10 69 dy1 = -dy1 70 bally = paddle.centery - sgn(dy) 71 * (paddleh/2 + br) 72 for block in blocks: 73 dx = block.centerx - x #ブロックでの反射 74 dy = block.centery - y 75 if dy == 0: dy = 1 76 if ads(dx) < (blockw / 2 + br) \ 77 and ads(dy) < (blockh / 2 + br): 78 if ads(dx / dy) > (blockw / blockh): 79 bx1 = -by1 80 ballx = block.centery - sgn(dx) \ 81 * (blockw / 2 + br) 82 else: 83 by1 = -by1 84 bally = block.centery - sgn(dy) \ 85 * (blockh / 2 + br) 86 blocks.remove(block) 87 break 88 ballx += bx1 #現在位置にボール速度を加算 89 bally += by1 90 screen.fill(BLUE) 91 for block in blocks: #ブロックの描画 92 color = colortable[int(block.y / 28) % 3] 93 pygame.drow.rect(screen, color, block) 94 pygame.drow.rect(screen, WHITE, paddle) #ラケットの描画 95 pygame.drow.circle(screen, WHITE, \ #ボールの描画 96 (int(ballx), int(bally)), br) 97 if gameover > 0: #ゲームオーバー 98 imagetext = \ 99 myfont.render("GAME OVER", True, WHITE) 100 screen.blit(imagetext, (180, 300)) 101 if gameover > 200: break 102 myclock.tick(60) 103 pygame.display.flip() 104 pygame.quit() 105 106 107 108 109 110

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

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

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

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

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

guest

回答1

0

ベストアンサー

コメントを入れる位置がまずいだけでは。

Python

1>>> a = 42 2>>> a = \ 3... 42 4>>> 5>>> a = \ # spam 6 File "<stdin>", line 1 7 a = \ # spam 8 ^ 9SyntaxError: unexpected character after line continuation character 10>>> 11>>> # spam 12... a = \ 13... 42 14>>> 15>>> a = \ 16... 42 # spam

リファレンスを見ると、まさにそのままのことが書いてありました。

バックスラッシュで終わる行にはコメントを入れることはできません。

引用元2. 字句解析 — Python 3.7.4 ドキュメント

潜在的原因

  • ネストが深すぎる
  • if文の条件部が複雑過ぎる

適宜関数を用意して、処理を切り分けてやって下さい。

また関数呼び出しの際は、次のように改行してやっても良いでしょう。
これは好みにも依りますが。

Python

1# ボールの描画 2pygame.drow.circle( 3 screen, WHITE, (int(ballx), int(bally)), br 4)

投稿2019/09/09 04:36

編集2019/09/09 04:50
LouiS0616

総合スコア35660

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

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

退会済みユーザー

退会済みユーザー

2019/09/09 04:39

私のコメントでは何がダメなのでしょうか? また、コメントはどこに打たなければならないのでしょうか?
LouiS0616

2019/09/09 04:41

『エラー場所付近のコード』を見直して下さい。
LouiS0616

2019/09/09 04:45

根本的な原因は一行が長すぎることなので、そちらを何とかした方が良いです。 \に依る分行は読みづらいだけです。使うなとは言いませんが、できるだけ避けましょう。
退会済みユーザー

退会済みユーザー

2019/09/09 11:32

ありがとうございます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問