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

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

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

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

Python

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

Q&A

1回答

2086閲覧

pygameで作成したゲームにゲーム開始画面とゲームオーバー画面を追加したい

hanamoto

総合スコア0

Pygame

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

Python

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

0グッド

0クリップ

投稿2022/03/12 06:04

pythonを学習し始めました。
youtubeで見つけた初心者でも作成できるインベーダーゲームを見ながら、ゲームを作成してみました。

[行いたいこと]
せっかくなのでインベーダーゲームにプレイ画面(こちらは動画を参考にし作成済)の他にゲーム開始画面とゲームオーバー画面を追加する画面切り替え機能を追加したいと思っています。

[聞きたいこと]
調べてみたところクラスを使用して画面切り替えを行う参考サイトが複数見つかりました。
そうなると画面切り替えのプログラムを追加するにあたりクラスを学習し、プログラムに組み込むことは必須となりますでしょうか?(参考にした動画ではクラスを使用せずにゲームを作成しておりました)
可能であれば今回はクラスを使用せずに画面切り替えを追加したいと思っております。
なので、クラスを行わずに画面切り替え機能は追加可能になりますでしょうか?また可能であれば参考になるサイトやアドバイスを頂きたいです。

[コード]
一応作成したインベーダーゲームのコード添付いたします。
youtubeの動画を参考にした後、効果音やBGMを追加いたしました。

import pygame from pygame import mixer import random import math import time # 初期化 pygame.init() # 画面サイズ screen = pygame.display.set_mode((800, 600)) # タイトル指定 pygame.display.set_caption('Invaders Game') # 効果音 laserSound = pygame.mixer.Sound("laser.wav") bombSound = pygame.mixer.Sound("bomb.wav") gameoverSound = pygame.mixer.Sound("gameover.wav") # BGM pygame.mixer.music.load("TetrisTheme.wav") pygame.mixer.music.play(-1) # player playerImg = pygame.image.load('player.png') playerX ,playerY = 370, 480 # playerの横移動の指定のため playerX_change = 0 # Enemy enemyImg = pygame.image.load('enemy.png') enemyX = random.randint(0, 736) enemyY = random.randint(50, 150) # 画面端にぶつかる前の移動速度 enemyX_change, enemyY_change = 0.5, 40 # Bullet bulletImg = pygame.image.load('bullet.png') # playerと同じY座標、Xは0にし画面から見えない場所に配置 bulletX, bulletY = 0, 480 # Yに3ずつ上がる bulletX_change, bulletY_change = 0, 3 # いつでも動かせる状態 bullet_state = 'ready' # Score score_value = 0 # 位置設定のための関数 def player(x, y): screen.blit(playerImg, (x, y)) def enemy(x, y): screen.blit(enemyImg, (x, y)) def fire_bullet(x, y): global bullet_state bullet_state = 'fire' screen.blit(bulletImg, (x + 16, y + 10)) # 敵と弾がぶつかったかどうか def isCollision(enemyX, enemyY, bulletX, bulletY): distance = math.sqrt(math.pow(enemyX - bulletX, 2) + math.pow(enemyY - bulletY, 2)) # ぶつかればtrue if distance < 27: return True else: return False running = True while running: # player移動の残像を残さないために都度黒で上書き screen.fill((0, 0, 0)) for event in pygame.event.get(): if event.type == pygame.QUIT: # ×を押したらrunningが止まる running = False # キーを応じてplayerを移動 if event.type == pygame.KEYDOWN: if event.key == pygame.K_LEFT: playerX_change = -0.5 if event.key == pygame.K_RIGHT: playerX_change = 0.5 if event.key == pygame.K_SPACE: if bullet_state is 'ready': laserSound.play() bulletX = playerX fire_bullet(bulletX, bulletY) # KEYUP‥キーが指から離れた時(これがないと移動し続ける) if event.type == pygame.KEYUP: if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT: playerX_change = 0 # playerの数値を代入&可動域の指定 playerX += playerX_change if playerX <= 0: playerX = 0 elif playerX >= 736: playerX = 736 # enemy if enemyY > 440: gameoverSound.play() time.sleep(2) break enemyX += enemyX_change if enemyX <= 0: #左端に来たら enemyX_change = 0.5 enemyY += enemyY_change elif enemyX >=736: #右端に来たら enemyX_change = -0.5 enemyY += enemyY_change collision = isCollision(enemyX, enemyY, bulletX, bulletY) # isCollisionがtrueの際に発動 # 弾の位置をplayerの高さに、ステータスをreadyに、スコアを+1、エネミーを再出現 if collision: bombSound.play() bulletY = 480 bullet_state = 'ready' score_value += 1 enemyX = random.randint(0, 736) enemyY = random.randint(50, 150) # Bullet Movement # Y = 0 弾が画面上を通り過ぎた時 if bulletY <=0: bulletY = 480 bullet_state = 'ready' # 弾を撃っている時 if bullet_state is 'fire': fire_bullet(bulletX, bulletY) bulletY -= bulletY_change # Score font = pygame.font.SysFont(None, 32) score = font.render(f"Score : {str(score_value)}", True, (255,255,255)) screen.blit(score, (20,50)) # 関数発動 player(playerX, playerY) enemy(enemyX, enemyY) pygame.display.update()

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

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

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

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

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

guest

回答1

0

まだ手元では試せていないのですが、

python

1# Score 2 font = pygame.font.SysFont(None, 32) 3 score = font.render(f"Score : {str(score_value)}", True, (255,255,255)) 4 screen.blit(score, (20,50)) 5 6 if score_value == 10: 7 screen.fill((0, 225, 0))

のように下2行を追加したらスコアが10点になった時に画面が緑色に変わりませんかね…?

投稿2022/07/06 14:08

bamboo_music_ac

総合スコア33

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問