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

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

詳細はこちら
Pygame

Pygameは、ビデオゲームの製作用に設計されたクロスプラットフォームのPythonモジュールセットです。Pythonでコンピューターグラフィックスと音声を扱うためのライブラリが含まれています。

Python

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

Q&A

解決済

2回答

2016閲覧

pygameでエラーは出ないが表示がされない

iPatch

総合スコア9

Pygame

Pygameは、ビデオゲームの製作用に設計されたクロスプラットフォームのPythonモジュールセットです。Pythonでコンピューターグラフィックスと音声を扱うためのライブラリが含まれています。

Python

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

0グッド

0クリップ

投稿2019/10/08 04:34

pygameで画面に何も表示されないのですが、問題点がありますでしょうか。

python

1import sys 2from random import randint 3import pygame 4from pygame.locals import QUIT,KEYDOWN,KEYUP,K_LEFT,K_RIGHT,K_UP,K_DOWN 5 6pygame.init() 7SURFACE=pygame.display.set_mode((800,800)) 8FPSCLOCK=pygame.time.Clock() 9 10def main(): 11 game_over = False 12 score = 0 13 speed = 25 14 stars = [] 15 keymap = [] 16 ship = [0,0] 17 scope_image = pygame.image.load("scope.jpg") 18 star_image = pygame.image.load("star.jpg") 19 20 scorefont = pygame.font.SysFont(None,36) 21 sysfont = pygame.font.SysFont(None,72) 22 message_over = sysfont.render("GAME OVER!!",True,(0,255,255)) 23 message_rect = message_over.get_rect()#center=(400,400)) 24 message_rect.center = (400,400) 25 26 while len(stars) < 200: 27 stars.append({"pos":[randint(-1600,1600),randint(-1600,1600),randint(0,4095)],"theta":randint(0,360)}) 28 29 while True: 30 for event in pygame.event.get(): 31 if event.type == QUIT: 32 pygame.quit() 33 sys.exit() 34 elif event.type == KEYDOWN: 35 if not event.key in keymap: 36 keymap.append(event.key) 37 elif event.type == KEYUP: 38 keymap.remove(event.key) 39 40 #フレームごとの処理 41 if not game_over: 42 score += 1 43 if score % 10 == 0: 44 speed += 1 45 46 47 if K_LEFT in keymap: 48 ship[0] -= 30 49 elif K_RIGHT in keymap: 50 ship[0]+=30 51 elif K_UP in keymap: 52 ship[1] -= 30 53 elif K_DOWN in keymap: 54 ship[1] += 30 55 56 ship[0] = max(-800,min(800,ship[0])) 57 ship[1] = max(-800,min(800,ship[1])) 58 59 for star in stars: 60 star["pos"][2] -= speed 61 if star["pos"][2] < 64: 62 if abs(star["pos"][0]-ship[0]) <50 and abs(star["pos"][1]-ship[1]) < 50: 63 game_over = True 64 star["pos"] = [randint(-1600,1600),randint(-1600,1600),4095] 65 66 67 #描画 68 SURFACE.fill((0,0,0)) 69 stars = sorted(stars,key = lambda x: x["pos"][2],reverse=True) 70 for star in stars: 71 zpos=star["pos"][2] 72 xpos=((star["pos"][0]-ship[0])<<9)/zpos+400 73 74 ypos=((star["pos"][1]-ship[1])<<9)/zpos+400 75 size=(50<<9)/zpos 76 rotated=pygame.transform.rotozoom(star_image,star["theta"],size/145) 77 SURFACE.bilt(rotated,(xpos,ypos)) 78 79 SURFACE.blit(scope_image,(0,0)) 80 81 if game_over: 82 SURFACE.blit(message_over,message_rect) 83 pygame.mixer.music.stop() 84 85 #スコアの描画 86 score_str = str(score).zfill(6) 87 score_image=scorefont.render(score_str,True,(0,255,0)) 88 SURFACE.blit(score_image,(700,50)) 89 90 pygame.display.update() 91 FPSCLOCK.tick(20) 92 93if __name__ == '__main__': 94 main() 95 96 97 98

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

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

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

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

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

guest

回答2

0

ぱっと見では

#フレームごとの処理 if not game_over: # 略 if abs(star["pos"][0]-ship[0]) <50 and abs(star["pos"][1]-ship[1]) < 50: game_over = True star["pos"] = [randint(-1600,1600),randint(-1600,1600),4095]```

のインデントが一段、低い気がします。

投稿2019/10/08 23:10

nomuken

総合スコア1627

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

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

0

ベストアンサー

このプログラムが何をするものなのか、ざっと読んだだけ且つ質問で一切触れられていないのでわかりかねますが、軽く見てみたところでは

Python

1 while True: 2 for event in pygame.event.get(): 3 if event.type == QUIT: 4 pygame.quit() 5 sys.exit() 6 elif event.type == KEYDOWN: 7 if not event.key in keymap: 8 keymap.append(event.key) 9 elif event.type == KEYUP: 10 keymap.remove(event.key)

ここで無限ループになっているようです。

投稿2019/10/08 10:17

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

iPatch

2019/10/08 14:44

説明不足でした。キー入力で移動し、隕石を避けるゲームです。 これはインデントがおかしいのか、それともこのコード自体がおかしいのでしょうか。
退会済みユーザー

退会済みユーザー

2019/10/09 05:46

「キー入力で移動し、隕石を避ける」という概要はわかりましたが、プログラムの各処理が何を意図しているのかは依然わかりません。また、「インデントがおかしい」とはどういう意味でしょうか。 どちらにしろwhile文の中でbreakがないので、基本的にこのコードでは無限ループして次の処理まで進まないのです。それについて軽微なミスによるものなのか、根本的な考え方の間違いなのかは現段階ではあなたにしかわからないことだと思います。
iPatch

2019/10/11 04:19

回答ありがとうございました。 もう一度考え直します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問