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

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

詳細はこちら
Pygame

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

Python

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

Q&A

1回答

1886閲覧

Python じゃんけんゲーム 数値代入と画像表示について

coconatsu1234

総合スコア0

Pygame

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

Python

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

0グッド

0クリップ

投稿2020/12/05 15:57

編集2020/12/06 09:10

初心者で学校のグループでじゃんけんゲームを作成しています。
今回、どうしてもうまくいかないところが2か所あり解決できていません。
1つはintに代入する部分ががエラーとなりうまくいきません。
IndentationError: expected an indented blockとなります。
本来ボタンを押したら各ボタンの1、2、3の数をiに代入したいです。
下記のようであればエラー出ませんがi=0のため進んでしまいます。
iが1、2、3であればじゃんけんに進むようにしたいです。
import random
def func_1():
i = 0
if i == [1,2,3]:
print("番号を入力してください")
print("[1,グー 2.チョキ 3.パー]")
b = int(i)

残る1つは相手の手を表示させる画像表示のエラーです。
NameError: name 'screen' is not defined

c = random.randint(1,3)
if b==1:
if c==1:
print("コンピュータ:グー 結果:あいこ")
img3 = pygame.image.load("グー.png")
ここがエラー→  screen.blit(img3, (150, 60))

よろしくお願いします

import pygame import sys def main(): pygame.init() # Pygameを初期化 screen = pygame.display.set_mode((760, 600)) # 画面を作成 pygame.display.set_caption("Pygame じゃんけん") # タイトルを作成 img1 = pygame.image.load("枠.png") screen.blit(img1, (10, 10)) button1 = pygame.image.load('グー.png').convert_alpha() button1_pos = (50, 300) button2 = pygame.image.load('チョキ.png').convert_alpha() button2_pos = (220, 280) button3 = pygame.image.load('パー.png').convert_alpha() button3_pos = (150, 440) btn1rct = button1.get_rect() btn1rct.topleft = button1_pos btn2rct = button2.get_rect() btn2rct.topleft = button2_pos btn3rct = button3.get_rect() btn3rct.topleft = button3_pos mask1 = pygame.mask.from_surface(button1) mask2 = pygame.mask.from_surface(button2) mask3 = pygame.mask.from_surface(button3) while True: pygame.display.update() #描画処理を実行 for e in pygame.event.get(): if e.type == pygame.QUIT: # 終了イベント pygame.quit() #pygameのウィンドウを閉じる return if e.type == pygame.MOUSEBUTTONDOWN: if btn1rct.collidepoint(e.pos): img3 = pygame.image.load("グー.png") screen.blit(img3, (450, 60)) i = 1 if btn2rct.collidepoint(e.pos): img4 = pygame.image.load("チョキ.png") screen.blit(img4, (450, 60)) i = 2 if btn3rct.collidepoint(e.pos): img5 = pygame.image.load("パー.png") screen.blit(img5, (450, 60)) i = 3 screen.blit(button1, button1_pos) screen.blit(button2, button2_pos) screen.blit(button3, button3_pos) pygame.display.flip() import random def func_1(): print("番号を入力してください") print("[1,グー 2.チョキ 3.パー]") if i == [1,2,3]: b = int(a) c = random.randint(1,3) if b==1: if c==1: print("コンピュータ:グー 結果:あいこ") img3 = pygame.image.load("グー.png") screen.blit(img3, (150, 60)) elif c==2: print("コンピュータ:チョキ 結果:勝ち") img4 = pygame.image.load("チョキ.png") screen.blit(img4, (150, 60)) else: print("コンピュータ:パー 結果:負け") img5 = pygame.image.load("パー.png") screen.blit(img5, (150, 60)) elif b==2: if c==1: print("コンピュータ:グー 結果:負け") img3 = pygame.image.load("グー.png") screen.blit(img3, (150, 60)) elif c==2: print("コンピュータ:チョキ 結果:あいこ") img4 = pygame.image.load("チョキ.png") screen.blit(img4, (150, 60)) else: print("コンピュータ:パー 結果:勝ち") img5 = pygame.image.load("パー.png") screen.blit(img5, (150, 60)) elif b==3: if c==1: print("コンピュータ:グー 結果:勝ち") img3 = pygame.image.load("グー.png") screen.blit(img3, (150, 60)) elif c==2: print("コンピュータ:チョキ 結果:負け") img4 = pygame.image.load("チョキ.png") screen.blit(img4, (150, 60)) else: print("コンピュータ:パー 結果:あいこ") img5 = pygame.image.load("パー.png") screen.blit(img5, (150, 60)) else: print("1から3の整数を入力してください") from threading import Thread p = Thread(target=func_1) p.start() main()コード

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

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

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

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

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

gasbombe

2020/12/06 07:20

importなしでpygameを使用されていますが、ソースコードは全部ですか? 1つめのエラーは、iが初期化されていなくてaもiも中身がNoneになるように見えます。 func_1が別スレッドで1度だけ実行されていますが、そのタイミングとスレッド分けは意図した通りですか? あと、エラーメッセージは省略せずに書くのがマナーのようです。
coconatsu1234

2020/12/06 09:11

最初のimport pygameはコピー忘れでした。 すみませんでした。 よろしくお願いいたします。
coconatsu1234

2020/12/06 09:25

書き忘れました。すみません。 画像を表示しながらじゃんけんの回路も動かしたいという意図があります。 その為、func_1を利用しています。
guest

回答1

0

エラーメッセージについてはご自身で検索なり翻訳なりで調べる癖をつけてください。
IndentationError: expected an indented block
→インデントがおかしいので修正してください。
NameError: name 'screen' is not defined
→変数「screen」が定義されていません。

2つめの変数定義の問題が出ているのは、処理される順番がおかしいからでしょう。
・起動時に実行する処理
・ボタンが押されたときに実行する処理
どういうタイミングでどんな処理したいのか、設計を整理されたほうがいいと思います。

投稿2020/12/06 10:16

gasbombe

総合スコア204

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問