Python二次元配列ドット絵でインベーダーを書いてみた。

この記事を読むことで、ループとIF文を組み合わせて、Pythonでドット絵を描くことが出来ます。
今回扱うドット絵はインベーダーゲームです。


配列の要素が1だったら「□」、0だったら「半角スペース」をドットとして出力します。
二次元リストを扱うので、列の最後の所まで行ったらドットを出力したのちに改行します。

要素の中身(ドット)と、リストの添字(i,j)を扱うので、enumerateを使います。
リストの最後の要素は、リストの添字が0から始まるので、リストの長さ-1になります。jがリストの長さ-1だったらドットを出力した後に改行をします。

サイトマップはこちらから

Python自作サンプル集へ
これからプログラミングを学ぶ方へ
プログラミングと資格へ
基本情報技術者試験トップへ
自己紹介

Pythonの進捗状況(私のロードマップ)

おはこんばんにちは!
うにゃうにゃエンジニアの猫です(=^・^=)
年齢バレバレですが、子どもの頃「インベーダーゲーム」というものをやったことがあります。

そのインベーダーのキャラクターを二次元リストを使ってドット絵で描いてみます。

実行結果とコードです。

コードの詳細を見ていきましょう。
まず、ドット絵を表す二次元リストをこのように作りました。

#インベーダーのドット絵の元になる二次元リスト
invader=[
[0,0,1,0,0,0,0,0,1,0,0],
[0,0,0,1,0,0,0,1,0,0,0],
[0,0,1,1,1,1,1,1,1,0,0],
[0,1,1,0,1,1,1,0,1,1,0],
[1,1,1,1,1,1,1,1,1,1,1],
[1,0,1,1,1,1,1,1,1,0,1],
[1,0,1,0,0,0,0,0,1,0,1],
[0,0,0,1,1,0,1,1,0,0,0]
]

リストの「列の」長さは下記のように求めます。
invader[0]としているのは、リストの長さは各行同じなので、リストinvaderの1行目の、すなわちinvader[0]の長さを求めます。
リストの添字が0から始まるので-1しています。

num=len(invader[0])-1

numに列-1が入りました。

ループの中でIF分岐を使ってドット絵を書いていきます。
行をi、列をjとしています。

jがnumと等しく無い時(j!=num)、1行分のドットを表示させるので、改行させません。
jがnumと等しい時(j==num)は、ドットを出力してから改行しています。

jがnumと等しくない、and(且つ)、ドットが1の時は「□」を出力、ドットが0の時は「半角スペースを出力」しています。

jがnumと等しい、且つ、ドットが1の時、0の時はドットの出力後に改行しています。

for i,chara in enumerate(invader):
   for j,dot in enumerate(chara): 
        if j!=num and dot==1:
                print('□',end='')     
        elif j!=num and dot==0:
                print(' ',end='')    
        else:
            if j==num and dot==1:
                print('□')
            elif j==num and dot==0:
                print(' ')


ここまでの全コードは、この様になります。


#インベーダーのドット絵の元になる二次元リスト
invader=[
[0,0,1,0,0,0,0,0,1,0,0],
[0,0,0,1,0,0,0,1,0,0,0],
[0,0,1,1,1,1,1,1,1,0,0],
[0,1,1,0,1,1,1,0,1,1,0],
[1,1,1,1,1,1,1,1,1,1,1],
[1,0,1,1,1,1,1,1,1,0,1],
[1,0,1,0,0,0,0,0,1,0,1],
[0,0,0,1,1,0,1,1,0,0,0]
]

#インベーダーの二次元リストの列数を求める
num=len(invader[0])-1

#二次元リストの要素が1の時に「■」、0の時は全角スペース
for i,chara in enumerate(invader):
   for j,dot in enumerate(chara): 
        if j!=num and dot==1:
                print('□',end='')     
        elif j!=num and dot==0:
                print(' ',end='')    
        else:
            if j==num and dot==1:
                print('□')
            elif j==num and dot==0:
                print(' ')

最後までお読みいただきありがとうございました(=^・^=)mm。。。

■ 参考文献の紹介 ■
じっくり丁寧にPythonを学びたい方向けの書籍を紹介します。

Pythonを基礎から中級程度まで丁寧に学びたい方におすすめの書籍です。
まずはpaizaラーニングなどの学習コンテンツで1〜2巡(苦手な所は納得がいくまで何巡でも)してからこの本で学ぶと、自分の学習状況をブログなどでアウトプット出来るようになり、また、エラーなどの不明点を調べられる力もついていきます。

サイトマップはこちらから

Python自作サンプル集へ
これからプログラミングを学ぶ方へ
プログラミングと資格へ
基本情報技術者試験トップへ
自己紹介

Pythonの進捗状況(私のロードマップ)