プログラミング超初心者のゲーム製作 by Pyxel(8日目)

今日は「ニコちゃんの数を増やす」を学びます。複数の値を管理するリストという仕組みを使う。

今日書いたコード

結果:8つのニコちゃんが上から降ってきてバウンドを繰り返す。徐々にバウンドが小さくなる。

import pyxel

def draw_nico(x, y, color_a, color_b): #ニコちゃんを描く関数
    pyxel.circ(x, y, 5, color_a)
    pyxel.line(x - 2, y - 2, x - 2, y - 1, color_b)
    pyxel.line(x + 2, y - 2, x + 2, y - 1, color_b)
    pyxel.line(x - 2, y + 2, x + 2, y + 2, color_b)

pyxel.init(120, 120, title = "Day08")

NUM_NICO = 8 #ニコちゃんの数
NICO_HEIGHT = 8 #ニコちゃんの高さ
NICO_BOUNCY_Y = pyxel.height - NICO_HEIGHT

nico_xs = [7, 22, 37, 52, 67, 82, 97, 112] #ニコちゃんのX座標のリスト
nico_ys = [21, 18, 15, 12, 9, 6, 3, 0] #ニコちゃんのY座標のリスト
nico_vys = [0] * NUM_NICO #ニコちゃんの速度のリスト。[0, 0, 0, 0, 0]と同じ意味。
nico_color_a = [9, 8, 7, 6, 5, 4, 3, 2] #ニコちゃんの色リスト
nico_color_b = [11, 10, 9, 8, 7, 6, 5, 4] #ニコちゃんの色リスト

while True:
    for i in range(NUM_NICO): #ニコちゃんの数だけ繰り返す
        nico_ys[i] += nico_vys[i] #ニコちゃんのY座標を更新する
        nico_vys[i] += 0.39 #ニコちゃんの速度を更新する

        if nico_ys[i] >= NICO_BOUNCY_Y:
            nico_ys[i] = NICO_BOUNCY_Y
            nico_vys[i] *= -0.93

    pyxel.cls(1)
    for i in range(NUM_NICO):
        draw_nico(nico_xs[i], nico_ys[i], nico_color_a[i], nico_color_b[i])
    pyxel.flip()

結果:沢山のカラフルなニコちゃんが上から降ってきてバウンドを繰り返す。徐々にバウンドが小さくなる。

from random import randint

import pyxel

def draw_nico(x, y, color_a, color_b): #ニコちゃんを描く関数
    pyxel.circ(x, y, 5, color_a)
    pyxel.line(x - 2, y - 2, x - 2, y - 1, color_b)
    pyxel.line(x + 2, y - 2, x + 2, y - 1, color_b)
    pyxel.line(x - 2, y + 2, x + 2, y + 2, color_b)

pyxel.init(120, 120, title = "Day08")

NUM_NICO = 40 #ニコちゃんの数
NICO_WIDTH = 8 #ニコちゃんの幅
NICO_HEIGHT = 8 #ニコちゃんの高さ
NICO_BOUNCY_Y = pyxel.height - NICO_HEIGHT

nico_xs = [] #ニコちゃんのX座標のリスト
nico_ys = [] #ニコちゃんのY座標のリスト
nico_vys = [] * NUM_NICO #ニコちゃんの速度のリスト
nico_color_a = [] #ニコちゃんの色
nico_color_b = [] #ニコちゃんの色

for i in range(NUM_NICO):
    nico_xs.append(pyxel.rndi(-NICO_WIDTH, pyxel.width))
    nico_ys.append(pyxel.rndi(0, 30))
    nico_vys.append(pyxel.rndf(0.1, 1.0))
    nico_color_a.append(pyxel.rndi(2, 11))
    nico_color_b.append(pyxel.rndi(12, 14))

while True:
    for i in range(NUM_NICO): #ニコちゃんの数だけ繰り返す
        nico_ys[i] += nico_vys[i] #ニコちゃんのY座標を更新する
        nico_vys[i] += 0.1 #ニコちゃんの速度を更新する

        if nico_ys[i] >= NICO_BOUNCY_Y:
            nico_ys[i] = NICO_BOUNCY_Y
            nico_vys[i] *= -0.9

    pyxel.cls(1)
    for i in range(NUM_NICO):
        draw_nico(nico_xs[i], nico_ys[i], nico_color_a[i], nico_color_b[i])
    pyxel.flip()

コードの要点

nico_xs = [7, 22, 37, 52, 67, 82, 97, 112]
nico_xs[3]
[]内はインデックス。上記例だとインデックス番号3の要素である37を取り出す。

nico_xs = []
要素数が0のリスト

nico_xs.append(val)
nico_xsはリスト、valはリストに追加したい要素の値