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

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

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

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

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

Python

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

Q&A

解決済

1回答

1343閲覧

unindent does not match any outer indentationの解決法

inari_sun

総合スコア3

Pygame

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

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

Python

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

0グッド

0クリップ

投稿2021/09/04 00:38

前提・実現したいこと

「ゲームを作りながら楽しく学べるpython3」でpython3を学んでいます。
埋まっている爆弾を避けつつ、すべてのタイルを裏返すマインスイーパーというゲームを書籍を参考に製作しているのですが、unindent does not match any outer indentationというエラーメッセージ表示されてしまいます。

#コード

import sys from math import floor (100.61->100) from random import randint import pygame from pygame.locals import QUIT , MOUSEBUTTONDOWN WIDTH=20 HEIGHT=15 SIZE=50 NUM_OF_BOMBS=20 EMPTY=0 BOMB=1 OPENED=2 OPEN_COUNT=0 CHECKED=[[0 for _ in range(WIDTH)]for _ in range(HEIGHT)] pygame.init() SURFACE=pygame.display.set_mode([WIDTH*SIZE,HEIGHT*SIZE]) FPSCLOCK=pygame.time.Clock() def num_of_bomb(field, x_pos , y_pos): """周囲にある爆弾の数を返す""" count=0 for yoffset in range(-1,2): for xoffset in range(-1,2): xpos,ypos=(x_pos + xoffset , y_pos + yoffset) if 0 <= xpos < WIDTH and 0 <= ypos < HEIGHT and field[ypos][xpos]==BOMB: count +=1 return count def open_tile(field,x_pos,y_pos): """タイルをオープン""" global OPEN_COUNT if CHECKED[y_pos][x_pos]: return CHECKED[y_pos][x_pos]=True for yoffset in range(-1,2): for xoffset in range(-1,2): xpos,ypos=(x_pos + xoffset , y_pos + yoffset) if 0 <= xpos < WIDTH and 0 <= ypos < HEIGHT and field[ypos][xpos]==EMPTY: field[ypos][xpos]=Opened OPEN_COUNT +=1 count = num_of_bomb(field,xpos,ypos) if count==0 and not (xpos==x_pos and ypos==y_pos): open_tile(field,xpos,ypos) def main(): """main routine""" smallfont=pygame.font.SysFont(None,36) largefont=pygame.font.SysFont(None,72) message_clear=largefont.render("!!CLEARED!!",True,(0,255,255)) message_over=largefont.render("GAMEOVER!!",True,(0,255,255)) message_rect=message_clear.get_rect() message_rect.center=(WIDTH*SIZE/2,HEIGHT*SIZE/2) game.over=False field=[[EMPTY for xpos in range(WIDTH)] for ypos in range(HEIGHT)] count=0 while count < NUM_OF_BOMBS: xpos,ypos = randint(0,WIDTH-1),randint(0,HEIGHT-1) if field[ypos][xpos]== EMPTY: field[ypos][xpos]=BOMB count +=1 while True: for event in pygame.event.get(): if event.type==QUIT: pygame.quit() sys.exit() if event.type==MOUSEBUTTONDOWN and event.button==1: xpos,ypos=floor(event.pos[0]/SIZE),floor(event.pos[1]/SIZE) if field[ypos][xpos]==BOMB: game_over=True else: open_tile(field,xpos,ypos) SURFACE.fill((0,0,0)) for ypos in range(HEIGHT): for xpos in range(WIDTH): tile=field[ypos][xpos] rect=(xpos*SIZE,ypos*SIZE,SIZE,SIZE) if tile==EMPTY or tile==BOMB: pygame.draw.rect(SURFACE,(192,192,192),rect) if geme_over and tile==BOMB: pygame.draw.ellipse(SURFACE,(225,225,0),rect) elif tile==OPENED: count=num_of_bomb(field,xpos,ypos) if count > 0: num_image=smallfont.render( "{}".format(count),True,(255,255,0)) SURFACE.blit(num_image,(xpos*SIZE+10,ypos*SIZE+10)) for index in range(0,WIDTH*SIZE,SIZE): pygame.draw.line(SURFACE,(96,96,96),(index,0),(index,HEIGHT*SIZE)) for index in range(0,HEIGHT*SIZE,SIZE): pygame.draw.line(SURFACE,(96,96,96),(0,index),(WIDTH*SIZE,index)) if OPEN_COUNT==WIDTH*HEIGHT-NUM_OF_BOMBS: SURFACE.blit(message_clear,message_rect.topleft) elif game_over: SURFACE.blit(message_over,message_rect.topleft) pygame.display.update() FPSCLOCK.tick(15) if __name__=='__main__': main()

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

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

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

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

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

guest

回答1

0

ベストアンサー

エラーメッセージのとおりです。

python

1 field=[[EMPTY for xpos in range(WIDTH)] for ypos in range(HEIGHT)] 2 3 count=0 4 while count < NUM_OF_BOMBS: 5 xpos,ypos = randint(0,WIDTH-1),randint(0,HEIGHT-1) 6 7 if field[ypos][xpos]== EMPTY: 8 field[ypos][xpos]=BOMB 9 count +=1

このあたりで、count=0if field[ypos][xpos]== EMPTY:などのインデントが正しくありません。Pythonはインデントが文法的な意味を持つ言語です。

投稿2021/09/04 00:42

maisumakun

総合スコア146018

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

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

inari_sun

2021/09/04 12:56

インデントを直してみるとその部分のエラーは解決しました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問