🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Python

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

Q&A

解決済

1回答

848閲覧

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

退会済みユーザー

退会済みユーザー

総合スコア0

Python

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

0グッド

0クリップ

投稿2019/09/09 11:57

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

環境

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

実現したいこと

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

エラー

おそらく、インデント(字下げ)がおかしいのか、エラーが表示してしまいます。

エラー画面

イメージ説明

エラー付近コード

イメージ説明

全体コード

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() 104pygame.quit() 105 106 107 108 109 110

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

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

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

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

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

guest

回答1

0

ベストアンサー

インデントの問題では無いです。

Python

1>>> 2*4 28 3>>> 2\ 4... *4 58 6>>> 2 72 8>>> *4 9 File "<stdin>", line 1 10SyntaxError: can't use starred expression here

潜在的原因

前回の回答と同じ。

投稿2019/09/09 12:03

LouiS0616

総合スコア35668

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

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

退会済みユーザー

退会済みユーザー

2019/09/09 12:34 編集

条件文が複雑すぎるのですが、どの様にすれば良いのでしょうか? 申し訳ございませんが、まだ学習不足であり修正できません。
LouiS0616

2019/09/09 12:40

まず一番外側の while endflag == 0: が本当に必要なのか?という点が気になります。
退会済みユーザー

退会済みユーザー

2019/09/09 12:55

外側というのは、先頭のことでしょうか?
LouiS0616

2019/09/09 12:59

先頭というか、トップレベルというか。 おそらくご認識の箇所で合っていると思います。
退会済みユーザー

退会済みユーザー

2019/09/09 13:15

while endflag == 0: は、このコードのみを消すのでしょうか? もしくは、whileが当たる部分すべて必要なのではないのでしょうか?
LouiS0616

2019/09/09 13:19

試してみては。
退会済みユーザー

退会済みユーザー

2019/09/09 13:24

試してみました。 しかし、質問したものは変わらず変化はありませんでした。
LouiS0616

2019/09/09 13:30

変化が無いというのは、まだエラーが残っているという意味ですか? それとも有っても無くてもちゃんと動作しているという意味ですか?
退会済みユーザー

退会済みユーザー

2019/09/09 13:34 編集

まだエラーが残っているという意味です
LouiS0616

2019/09/09 13:37

『can't use starred expression here』は既に解消できますよね?
退会済みユーザー

退会済みユーザー

2019/09/09 13:41

一度修正しましたので、新規質問を投稿したいと思いますが、よろしいですか?
LouiS0616

2019/09/09 13:45 編集

もちろん良いです。私に-apple-さんの行動を制限する権限は有りません。 しかし、問題発生⇒質問を繰り返すのは学習効率が良くないと思いますよ。 写経は動くコードを改造することに学習のうま味があります。逆に言えば、動くところまでは苦無く持っていくだけの知識や経験が無いとしんどいだけです。
退会済みユーザー

退会済みユーザー

2019/09/10 14:29

書籍通りのコードでは、動作がしなくサイトにあったコードも試したのですが、動作しませんでした。 以前、これらのことを説明した場合、解決できない問題は当サイトを使って質問していけば良いと教えてくださいました
LouiS0616

2019/09/10 14:46

文法エラーを解消できない段階ではまだ入門にすら達していません。 試しに理由を書いてみましたら、ねちねち責めるようになってしまったので詳細は省きます。 あくまで私自身の意見として、まずは基礎をしっかり固めることを強く推奨します。 例えばチュートリアルとか。https://docs.python.org/ja/3/tutorial/index.html
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問