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

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

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

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

Q&A

解決済

1回答

4168閲覧

Pythonによるブロック崩し

退会済みユーザー

退会済みユーザー

総合スコア0

Python

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

0グッド

0クリップ

投稿2019/09/07 16:49

参考サイトと、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() 104 pygame.quit() 105 106 107 108 109 110

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

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

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

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

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

querykuma

2019/09/07 21:10

トレースバックも含めてエラーは全文載せください。 ユーザディレクトリ名などはマスクしていいです。 質問はエラー1件につき質問1件を作成してください。 エラー1件ごとに質問1件を解決させるのがいいでしょう。
meg_

2019/09/08 01:50 編集

1.エラーメッセージは出なかったということでしょうか? 2.環境(OS、Python・モジュールのバージョン)は何ですか?
退会済みユーザー

退会済みユーザー

2019/09/08 02:22

1. エラーメッセージは出ませんでした。 2. OSはmac OSです。 pythonのver.は最新のものを使用しています。 IDLEで実行しようと思うのですが、ダメなのでしょうか?
can110

2019/09/08 02:37

提示コードを実行すると「SyntaxError: invalid syntax」が出ます。 他人が実行できるコードを提示ください。
meg_

2019/09/08 03:15

1.pygame window は出ましたか? 2.下記メッセージは表示されましたか? pygame X.X.X Hello from the pygame community. https://www.pygame.org/contribute.html WindowsのIDLEで実行したところ、上記が出ましたがゲーム画面は表示されませんでした。 ※掲載のコードではエラーが多数あるため、こちらで修正したコードでの実行結果です
guest

回答1

0

ベストアンサー

私の環境におけるエラーを載せるのは違うと思いますが

shell

1$ python game.py 2 File "game.py", line 34 3 paddle = pygame.Rect(x -(paddlew / 2), / 4 ^ 5SyntaxError: invalid syntax

のエラーが出て/を\に直しました。

Qiitaのpythonで長くなった式を折り返すは分かりやすいのではないでしょうか。

「実行する、エラーが出る、エラーを直す」を何十回も繰り返してください。
何十個も質問を作成することになるかもしれません。
そのようにしてエラーを直すと動くようになると思います。

どのように回答すればいいか難しいのですが、直したコードをお渡しするのは差し控えたいと思います。

ヘルプによるとコードをください・デバッグしてください等の丸投げの質問は推奨されていません。

書籍のコードのライセンスが分からないので私が書籍のコードを公開していいか分かりません。

一番困ったのがpygame.error: video system not initializedのエラーです。
pygame.quit()の後にpygame.key.get_pressed()を呼ぶからです。

pygame.quit()のインデントを直しました。

diff

1- pygame.quit() 2+pygame.quit()

インデントが合っていない箇所が多かったです。
pythonの関数のブロックをご理解されていないと思われますので「python 関数」で検索されることをオススメします。

インデントとは、行頭に空白を入れて文字を入れて字下げを行う事を言います。
pythonにおけるインデントは非常に重要です。
なぜなら、pythonは同じ数の空白でインデントされたまとまりを一つのブロックと認識する為です。

侍エンジニア塾ブログの【空白は何個が正解?】pythonのインデントについて解説はわかりやすいのではないでしょうか。

投稿2019/09/07 21:16

querykuma

総合スコア777

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

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

退会済みユーザー

退会済みユーザー

2019/09/08 02:23

書籍と、ネットでのコードどちらともしたのですが、上手くいきませんでした
退会済みユーザー

退会済みユーザー

2019/09/08 02:24

追記) 私の環境では、エラーがでませんでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問