FIT2第05回:リストと企画
前回授業の復習
左右で反射するように
角度を30度に
少しずつ早くする
ボールを受け取ったら点数を加える
点数を表示する
「ボールを初期化する関数を定義する」という話
音を鳴らす
code: b-9-2.py
import pyxel
import math
import random
pyxel.init(200, 200)
# ボールの座標を初期化
ballx = 0
bally = 0
angle = 0
vx = 0
vy = 0
speed = 2
# 画面下部のピンクのパッドのx座標をとっておく変数
padx = 100
# スコアをとっておく変数
score = 0
# 音を設定しておく
pyxel.sound(0).set(note='C3', tone='T', volume='3',
effect='N', speed=30) # 成功の音 = 0番
pyxel.sound(1).set(note='C1', tone='T', volume='3',
effect='N', speed=30) # 失敗の音 = 1番
def reset_ball():
# ボールを初期化するたびに実行する処理を全部ここにまとめます
global ballx, bally, angle, vx, vy, padx, speed, score
ballx = random.randint(0, 199)
bally = 0
speed += 1
angle = math.radians(random.randint(30, 150)) # ボールを動かす方向の角度
vx = math.cos(angle) # vecotrx、要はupdateを1回実行するごとにボールをx方向に何ピクセル動かすか
vy = math.sin(angle) # vecotry、要はupdateを1回実行するごとにボールをy方向に何ピクセル動かすか
def update():
# データ更新
global ballx, bally, angle, vx, vy, padx, speed, score
# update関数の外側に定義された ballx, bally...を直接参照/更新するための魔法の呪文
# ボールを1回の処理分だけ動かす
ballx += vx * speed
bally += vy * speed
# ボールが画面の左右端に着た時
if ballx < 0 or 200 < ballx:
vx *= -1
# ボールがpadに接触したとき
if 195 <= bally and padx - 20 < ballx and ballx < padx + 20:
score += 100
# 成功の音を再生する
pyxel.play(0, 0)
# ボールの座標を初期化
reset_ball()
# ボールが画面の下端にきたとき
if bally >= 200: # 画面の高さは200pxに設定されている (pyxel.init(200, 200))に由来
# 失敗の音を再生する
pyxel.play(0, 1)
# ボールの座標を初期化
reset_ball()
# padのx座標をマウスのx座標位置に更新するよ
padx = pyxel.mouse_x
def draw():
# 画面描画
global ballx, bally, angle, vx, vy, padx, score
pyxel.cls(7) # 画面を真っ白に塗る
pyxel.circ(ballx, bally, 10, 6) # ボールの円を描画
pyxel.rect(padx - 20, 195, 40, 5, 14) # padを描画
pyxel.text(0, 0, str(score), 0) # 点数を表示
reset_ball()
pyxel.run(update, draw)
講義
https://gyazo.com/6339bd7d6c11bafeccc66a3711b45014
赤 … 1つめのボールの値
橙 … 2つめのボールの値
青 … 3つめのボールの値
紫 … 4つめのボールの値
https://gyazo.com/8c9d5145832cc33bfe6f59003058b8a9
len(xs) → xsというリストの要素数を返す (=4)
0以上4未満の数字、要は0~3 を返すので、ボールの個数だけ繰り返してくれる
どんなことを書けばよいか?
ゲームのコンセプト
類似するゲーム
おおまかな画面構成とプレイの流れ
実現する上での懸念点、不明点、課題点