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

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

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

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

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

3085閲覧

pygameの長方形の色の変更をしたい

kinopi

総合スコア16

Pygame

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

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2019/08/10 12:23

編集2019/08/17 00:18

##pygameで○×ゲームのようなものを作成中なのですが
pygameでボタン作成の記事を読んでRectオブジェクトを利用して、ボタンもどきを作成して、このRectオブジェクトを押したらRectオブジェクトの色が変わって同じ色が3つ揃ったら勝ちみたいにしたいのですがわからないことが2つありました
###1.Rectオブジェクトを押したらRectオブジェクトの色を変更するやり方
###2.3つ揃ったら勝ちみたいにするやり方
この二つのやり方を教えてください!

python

1# -*- coding:utf-8 -*- 2import pygame 3from pygame.locals import * 4import sys 5 6def main(): 7 pygame.init() # Pygameの初期化 8 screen = pygame.display.set_mode((400, 400)) # 400*300の画面 9 # screen = pygame.display.set_mode((400, 300), FULLSCREEN) # フルスクリーン(解除時は大きさ400*300の画面) 10 pygame.display.set_caption("○×ゲーム") # タイトルバーに表示する文字 11 12 while (1): 13 screen.fill((0,0,0)) # 画面を黒色(#000000)に塗りつぶし 14 15 button1 = pygame.Rect(0,0,40,40) 16 button2 = pygame.Rect(0,45,40,40) 17 button3 = pygame.Rect(0,90,40,40) 18 button4 = pygame.Rect(45,0,40,40) 19 button5 = pygame.Rect(45,45,40,40) 20 button6 = pygame.Rect(45,90,40,40) 21 button7 = pygame.Rect(90,0,40,40) 22 button8 = pygame.Rect(90,45,40,40) 23 button9 = pygame.Rect(90,90,40,40) 24 25 pygame.draw.rect(screen,(100,100,100),button1) 26 pygame.draw.rect(screen,(100,100,100),button2) 27 pygame.draw.rect(screen,(100,100,100),button3) 28 pygame.draw.rect(screen,(100,100,100),button4) 29 pygame.draw.rect(screen,(100,100,100),button5) 30 pygame.draw.rect(screen,(100,100,100),button6) 31 pygame.draw.rect(screen,(100,100,100),button7) 32 pygame.draw.rect(screen,(100,100,100),button8) 33 pygame.draw.rect(screen,(100,100,100),button9) 34 35 pygame.display.update() # 画面を更新 36 37 # イベント処理 38 for event in pygame.event.get(): 39 if event.type == QUIT: # 閉じるボタンが押されたら終了 40 pygame.quit() # Pygameの終了(画面閉じられる) 41 sys.exit() 42 for event in pygame.event.get(): 43 if event.type == pygame.MOUSEBUTTONDOWN: 44 if button1.collidepoint(event.pos): 45 46 47if __name__ == "__main__": 48 main()

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

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

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

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

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

can110

2019/08/15 23:57

現状のコードを提示すると回答が得られやすくなるかもしれません。
kinopi

2019/08/17 00:20

アドバイスありがとうございます。 現状のコードを提示させていただきました!
guest

回答1

0

ベストアンサー

1.Rectオブジェクトを押したらRectオブジェクトの色を変更するやり方

以下のように2次元リストでボタンと状態を管理するとわりと簡潔に書けます。

Python

1import pygame 2from pygame.locals import * 3import sys 4 5N = 5 # マス目の数 6 7def main(): 8 pygame.init() 9 screen = pygame.display.set_mode((400, 400)) 10 pygame.display.set_caption("○×ゲーム") 11 12 # ボタンと状態フラグの初期化 13 buttons, flags = [], [] 14 for r in range(N): 15 bs, fs = [], [] 16 for c in range(N): 17 bs.append( pygame.Rect(r*45,c*45,40,40)) 18 fs.append(False) 19 buttons.append(bs) 20 flags.append(fs) 21 22 while (1): 23 screen.fill((0,0,0)) 24 25 # ボタン描画 26 for r in range(N): 27 for c in range(N): 28 29 # 状態により色を変える 30 color = (100,100,100) 31 if flags[r][c]: 32 color = (255,0,0) 33 34 pygame.draw.rect(screen, color, buttons[r][c]) 35 36 pygame.display.update() # 画面を更新 37 38 # イベント処理 39 for event in pygame.event.get(): 40 if event.type == QUIT: # 閉じるボタンが押されたら終了 41 pygame.quit() # Pygameの終了(画面閉じられる) 42 sys.exit() 43 elif event.type == pygame.MOUSEBUTTONDOWN: 44 for r in range(N): 45 for c in range(N): 46 if buttons[r][c].collidepoint(event.pos): 47 flags[r][c] = not flags[r][c] # 状態の反転 48 49if __name__ == "__main__": 50 main()

2.3つ揃ったら勝ちみたいにするやり方

縦の各ライン、横の各ライン、対角線の2つのラインについて、いずれかのラインがすべてTrueなら勝ちと判定すればよいです。コードは長くなるので省略しますがfor文とnumpyを使えば比較的短く書けます。
参考:Python implementation of automatic Tic Tac Toe game using random number

投稿2019/08/17 00:59

編集2019/08/17 01:07
can110

総合スコア38233

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問