FIT2第04回:乱数と簡単なゲームづくり
授業冒頭アンケート
前回授業の復習
イベントループ
https://gyazo.com/9177d8e8b71a2f729114bfb7ff000049
第2回までの描画は「一回きり」
これではゲームにならない(インタラクション性がない)
第3回授業では「描画を繰り返し続ける」ためにイベントループを教えた
愚直に実装する場合
code:単純な無限ループ.py
import pyxel
pyxel.init(200, 200)
xy = 0
vector = 1
while True:
xy += vector
if xy > 200:
vector *= -1
if xy < 0:
vector += 1
pyxel.cls(7)
pyxel.circ(xy, xy, 10, 0)
pyxel.flip()
while True: は Trueである限り :以降のインデント箇所を繰り返すという書き方
描画処理を無限に繰り返している
関数を定義することでコードの可読性を高める
code:関数を定義.py
import pyxel
pyxel.init(200, 200)
xy = 0
vector = 1
def update():
global xy, vector
xy += vector
if xy > 200:
vector *= -1
if xy < 0:
vector += 1
def draw():
global xy
pyxel.cls(7)
pyxel.circ(xy, xy, 10, 0)
while True:
update()
draw()
pyxel.flip()
def 関数名(): 構文で、処理を「関数」として切り出し
コードの可読性と再利用性を高めることが本来の目的
「計算処理」と「描画処理」を分離した形
pyxelのやり方に則る
code:pyxelのやりかたに則る.py
import pyxel
pyxel.init(200, 200)
xy = 0
vector = 1
def update():
global xy, vector
xy += vector
if xy > 200:
vector *= -1
if xy < 0:
vector += 1
def draw():
global xy
pyxel.cls(7)
pyxel.circ(xy, xy, 10, 0)
pyxel.run(update, draw)
while True: でなく、pyxel.runを活用
こうすることでpyxelが高度な機能を提供してくれるようになる
状態管理
code:sample.py
import pyxel
x = 10
y = 10
def update():
global x, y
変数のスコープおよび「global」について再解説
code: sample.py
import pyxel
import random
x = 1
y = 2
z = 0
def add():
# global z とここに記載するかどうかで挙動がかわる
z = x + y
print("addの中のz:" + str(z))
add()
print("addの外のz:" + str(z))
ゲームを通じて共通管理したい値は関数の外側に定義して、globalを使って関数の中から書き換える
講義
簡単なゲームづくり
コードが読めれば課題8-1系列は解けるはず
演習