40代から始めるプログラミング②~祭礼の蛇

 Pythonが実行できるようになり、二日目です。
 本読んで、1+1とか単品でやってみてましたが、体系的にやると、少し趣が違いますね。
 私の仕事であるフィールドエンジニアについて、後輩に教える時は、作業手順について、みたいなマニュアルそのものの内容よりも、手順一つ一つの意味だったり、失敗するとどうなるか、切り戻しはどのように判断するか、みたいなマニュアル外の情報も併せて伝えると理解が促進されるように感じます。
 同様に、Pythonの勉強においても、コード一行書いて完了、ではなく、少し視線を高く、全体においてどのような位置にいるかを考えた方が良いのかもしれません。
 このプログラミング学習を始めて、少し既視感を覚えたのは、赤髪のギターヒーローにあこがれて、そのコピーの練習に勤しんだあの頃を思い出したからです。ギターもプログラミングと同様です。メジャーコードやマイナーコードみたいに一つ一つを反復練習するだけでは飽きてしまいます。コード一つ一つを覚えるよりも、コード進行のようにそれが連なり、音が音楽に変わりゆく様子によって、上達を実感してモチベーションに変換するほうがより効率的です。音を楽しむと書いて音楽なのですから。
 あ、私ギターなんて一切やっていなかったことを今思い出しました。すみません、イキってました。楽譜は読めない、カラオケでは音外しまくりの、笑えないレベルで音楽センス皆無なんですよね、私。
 で、前回の続きで『Pythonチュートリアル』が文系殺しだったため、『やさしいPython入門』から勉強を開始しました。
 Python Promptを立ち上げ、
pip install pygame
と入力するとPython用のゲームモジュールが利用可能になります、と書いてありますが、モジュール?なんかよく分からんけど、機能の集まりみたいですね。インストールの進捗のインジケータが100%になりました。オッケー?
 こんな感じで、今までそれっぽく流してきたプログラミング系のジャーゴンがいちいち学習の進行を妨げます。変数?インシデント?文字リテラル?よく分かりません。なんか、疑問符ばかりですね。
 で、この教本では3*3マスの〇✖ゲームを作ることを目指します。
最初に
import pygame
pygame.init()
♯ ゲーム画面を初期化
BOARD=pygame.display.set_mode((400,300))
♯ ゲーム画面の大きさを指定し、BOARDと名前を付ける
def main():
BOARD.fill((255,255,255))
♯ ゲーム画面の色の指定
pygame.draw.rect(BOARD,(0,255,0),((100,80),(50,50 0)))
♯ 上記BOARDの上に描く図形
pygame.display.update()
if __name=='main':
main()

で、〇✖ゲームの緑の背景を作ります。作り、ん? なんか黒い画面が出ただけだ。ちょっと違うが続けよう。 

 次は、上記の緑のBOARDの上に〇✖ゲームの升目を描く。

import pygame
pygame.init()
BOARD=pygame.display.set_mode((400,300))
def main():
BOARD.fill((255,255,255))
pygame.draw.rect(BOARD,(0,0,255),((90,70),(190,190)))
pygame.draw.rect(BOARD,(0,255,0),((100,80),(50,50)))
pygame.draw.rect(BOARD,(0,255,0),((160,80),(50,50)))
pygame.draw.rect(BOARD,(0,255,0),((220,80),(50,50)))
pygame.draw.rect(BOARD,(0,255,0),((100,140),(50,50)))
pygame.draw.rect(BOARD,(0,255,0),((160,140),(50,50)))
pygame.draw.rect(BOARD,(0,255,0),((220,140),(50,50)))
pygame.draw.rect(BOARD,(0,255,0),((100,200),(50,50)))
pygame.draw.rect(BOARD,(0,255,0),((160,200),(50,50)))
pygame.draw.rect(BOARD,(0,255,0),((220,200),(50,50)))
pygame.display.update()
if __name=='main':
main()

 で、黒画面、と。升目出てこないじゃないか!意味分からん。構文違えばエラーになるから実行結果の画面が出てくるので、これはエラーではなく黒い画面を出すコードとして解釈されているようです。
pygame.draw.rect(BOARD,(X,X,X),((X,X),(X,X)))が九個あるので、これは
升目であろうと思われますが、黒い画面。色の指定っぽいところを変更しても黒い画面。何をやっても黒い画面。
 とりあえず、別のところから引っ張ってきた、黒い画面に〇を書くコード
をコピーすると

import sys, random import pygame from pygame.locals import *
# ゲーム画面を初期化 --- (*1)
pygame.init() screen =
pygame.display.set_mode((600, 400)) white = (255,255,255) black = (0,0,0)
# 繰り返し画面を描画 --- (*2)
while True:
# 背景と円を描画 --- (*3)
screen.fill(black) # 背景を黒で塗りつぶす
pygame.draw.circle(screen, white, (300,200), 150) # 円を描画 # 画面を更新 --- (*4)
pygame.display.update() # 終了イベントを確認 --- (*5)
for event in pygame.event.get(): if event.type == QUIT: pygame.quit() sys.exit()
 で、〇になった。
 では、これを、BOARDがscreenになっているなど、今やってるものと微妙に違うから合わせて、

import pygame
pygame.init()
BOARD=pygame.display.set_mode((400,300))
BOARD = pygame.display.set_mode((600, 400))
white = (255,255,255)
black = (0,0,0)
BOARD.fill(black)
while True:
pygame.draw.rect(BOARD,(0,0,255),((90,70),(190,190)))
pygame.draw.rect(BOARD,(0,255,0),((100,80),(50,50)))
pygame.draw.rect(BOARD,(0,255,0),((160,80),(50,50)))
pygame.draw.rect(BOARD,(0,255,0),((220,80),(50,50)))
pygame.draw.rect(BOARD,(0,255,0),((100,140),(50,50)))
pygame.draw.rect(BOARD,(0,255,0),((160,140),(50,50)))
pygame.draw.rect(BOARD,(0,255,0),((220,140),(50,50)))
pygame.draw.rect(BOARD,(0,255,0),((100,200),(50,50)))
pygame.draw.rect(BOARD,(0,255,0),((160,200),(50,50)))
pygame.draw.rect(BOARD,(0,255,0),((220,200),(50,50)))
pygame.display.update()
if __name=='main':
main()

 どうじゃい!升目だ!色々と試行錯誤の結果、どうやらwhile True:の部分の有無で変化があるようです。
 なんそれ、全然優しくない。
 しょっぱなから挫折しそうになりました。ここは、一旦『Pythonチュートリアル』に戻った方が良さそうです。


pipモジュール
idle⇒new file
while True:


この記事が気に入ったらサポートをしてみませんか?