レッスン73
スクラッチでタイピングゲームをつくる⌗
ランダムにもじをだす⌗
ねこのスプライトはいらないのでけします。
「J」のもじのスプライトをいれます。
まんなかにいどうさせるために、Xざひょうを0、Yざひょうを0にします。
「F」と「K」と「D」のもじのコスチュームをいれて、「J」と「F」と「K」と「D」の4つのコスチュームが1つのスプライトにあるじょうたいにします。
このあとらんすうをつかって、4つのコスチュームをきりかえます。
「ブロック定義」の「ブロックを作る」で「もじをかえる」というブロックをつくります。
「コスチュームを○にする」をいれます。
その○のなかに、「1から4までの乱数」をいれます。
コスチュームには、ばんごうがついているので、なまえではなく、ばんごうでもえらべます。
いまつくったブロック「もじをかえる」をクリックしてうごかしてみましょう。もじがランダムにかわればせいこうです。
キーをおしたら、ただしいか、しらべましょう⌗
「イベント」の「スペースキーが押されたとき」をいれて、「j」キーが押されたときにかえましょう。
Jがおされたとき、なにをすればいいでしょうか?
コスチュームがJのときと、Jではないときで、やることをかえます。
Jのときは、せいかいのおとをならして、がめんにでているもじをかえます。
Jでないときは、まちがいのおとをならします。がめんにでているもじはかえないので、そのほかには、なにもしません。
コスチュームがJであるかどうかは、どうすればしらべられますか?
「見た目」の「コスチュームの番号」をつかいます。
それが、なにとひとしければ、コスチュームがJであるとわかりますか?
Jがおされたとき、のコードができたら、それをコピーして、FとKとDのコードをつくりましょう。
ここまでできると、こうなります。
https://scratch.mit.edu/projects/1196333732/
10びょうたったら、ゲームがおわるようにしましょう⌗
つぎのようにかえましょう。
はたがおされたら
もじをかくす
3びょうまつ
もじをだす
ゲームをしているとき、10びょうをかぞえる
10びょうたったら
もじをかくす
10びょうをかぞえるのは、どうやったら、できるでしょうか?
「のこりじかん」というへんすうをつくって、1びょうまって、そのへんすうを1へらす、というほうほうでやってみましょう。
ここまでできると、こうなります。
https://scratch.mit.edu/projects/1196335188/
このプログラムにはもんだいがあります。なにかわかりますか?
もじがかくれたあとに、キーをおしてみましょう。
なにがもんだいか、わかりましたか?
このもんだいは、あとでなおします。
せいかいのキーをおしたら、てんすうをふやすようにしましょう⌗
「てんすう」というへんすうをつくりましょう。
せいかいのキーをおしたら、「てんすう」をふやすようにしましょう。
ただし、あとでてんすうをふやすやりかたをかえたいので、「てんすうをふやす」というブロックをつくって、てんすうをふやすようにしてください。
てんすうをふやすやりかたをかえるというのは、はやくおしたら、たかいてんすうがとれるとか、つづけてせいかいしたら、てんすうを2ばいにするとか。
ゲームのさいしょで、「てんすう」を0にするのをわすれないようにしましょう。
てんすうをふやせるようになりましたか?
でも、もじがかくれたあとも、キーをおすと、てんすうがふえてしまいますね。
このもんだいをなおしましょう。
もじがでているときだけ、てんすうをふやすようにしましょう⌗
ゲームちゅうであるかどうかを、おぼえておくへんすうをつくりましょう。
「ゲームちゅう」というへんすうをつくります。
ゲームちゅう(もじがでているとき)は、このへんすうに、「はい」をいれます。
ゲームちゅうでない(もじがかくれている)ときは、このへんすうに、「いいえ」をいれます。
そうすると、このへんすうが「はい」のときだけ、キーがおされたときのコードをうごかせばいい、ということになります。
そのようにコードをかえてみましょう。
かえると、このようになります。
https://scratch.mit.edu/projects/1196339885/
はやくキーをおしたら、てんすうがたかくなるようにしましょう⌗
つぎのように、てんすうがふえるように、してみましょう。
0びょうでおしたら、3てん。
1びょうでおしたら、2てん。
2びょうでおしたら、1てん。
3びょうでおしたら、0てん。
4びょうでおしたら、-1てん。
5びょうでおしたら、-2てん。
など
これをつくるには、もじがでてからキーがおされるまでのじかんを、はからなければいけません。
スクラッチでは、なにもしなくても、「タイマー」というものが、じかんをはかってくれています。
ストップウォッチのようなものです。
ただし、「タイマー」は、はたがおされたときからのじかんをはかっています。
でも、いまは、もじをかえたときからのじかんをはかりたい。
このとき、「タイマーをリセット」というめいれいがやくにたちます。
これは、じかんを0にしてくれます。ストップウォッチをスタートしなおすようなものです。
そして、てんすうをふやすときに、「タイマー」をつかって、ふやすてんすうをけいさんします。
けいさんのやりかたは、じぶんでかんがえてみてください。
ヒントは、「タイマー」をつかってひきざんをします。
あと、「タイマー」はしょうすうなので、きりさげなどをして、せいすうにかえたほうがいいとおもいます。
できあがると、このようになります。
https://scratch.mit.edu/projects/1196556146/
このプログラムにはもんだいがあります。
あるやりかたをすると、かんたんに、たかいとくてんをとることができます。
そのやりかたを、さがしてみましょう。
ヒントは、このプログラムでは、まちがったキーをおしても、てんすうがへったりはしないことです。
もし、そのやりかたがみつかったら、コードをなおして、そのやりかたをつかえなくしましょう。
もじのがぞうをかえてみましょう⌗
すきなもじフォントをつかって、だすもじのがぞうをかえてみましょう。
もじフォントは「Googleフォント」などからさがしてみましょう。
フォントファイルからもじのがぞうをつくるPythonのプログラムをつくっておきました。
このPythonのプログラムは、つぎのようにAIにおねがいして、つくってもらいました。
Pythonでフォントファイルから画像を作るプログラムを作ってください。
アルファベットの大文字、AからZの26文字を、1文字ずつ画像にしてください。
画像のサイズは縦50ピクセル、横50ピクセルにしてください。
画像ファイルは"画像"フォルダに保存してください。
フォントファイルはカレントディレクトリにあります。
Pythonの実行時引数で、フォントファイルの名前を指定できるようにしてください。
これをつかって、がぞうをつくってみましょう。
import sys
import os
from PIL import Image, ImageDraw, ImageFont
def create_text_images(font_path, output_dir="画像", image_size=(50, 50)):
"""
指定されたフォントとサイズでアルファベット大文字の画像を生成します。
Args:
font_path (str): フォントファイルへのパス。
output_dir (str): 画像を保存するディレクトリ名。
image_size (tuple): 生成する画像の (幅, 高さ) のタプル。
"""
# 出力ディレクトリが存在しない場合は作成
if not os.path.exists(output_dir):
os.makedirs(output_dir)
try:
# フォントをロード
# フォントサイズを調整して、50x50の画像に収まるようにします。
# 経験的に、画像サイズの約7割程度が適切なフォントサイズになることが多いです。
font_size = int(image_size[1] * 0.7)
font = ImageFont.truetype(font_path, font_size)
except IOError:
print(f"エラー: フォントファイル '{font_path}' が見つからないか、読み込めません。")
return
print(f"フォントファイル '{font_path}' を使用して画像を生成中...")
# AからZまでのアルファベット大文字をループ
for i in range(26):
char = chr(ord('A') + i) # 'A', 'B', 'C', ... 'Z'
# 白い背景の新しい画像を作成
img = Image.new('RGB', image_size, color = (255, 255, 255))
d = ImageDraw.Draw(img)
# テキストの描画位置を計算(中央揃え)
# getbbox() メソッドを使用して、テキストのバウンディングボックスを取得し、中央揃えを計算します。
bbox = d.textbbox((0,0), char, font=font)
text_width = bbox[2] - bbox[0]
text_height = bbox[3] - bbox[1]
x = (image_size[0] - text_width) / 2
y = (image_size[1] - text_height) / 2 - bbox[1] # bbox[1] を引くことで上端に合わせる
# 黒い文字で描画
d.text((x, y), char, fill=(0, 0, 0), font=font)
# 画像を保存
output_path = os.path.join(output_dir, f"{char}.png")
img.save(output_path)
print(f"'{char}.png' を保存しました。")
print(f"\nすべての画像が '{output_dir}' フォルダに保存されました。")
if __name__ == "__main__":
if len(sys.argv) != 2:
print("使い方: python your_script_name.py <フォントファイル名>")
print("例: python generate_char_images.py Arial.ttf")
sys.exit(1)
font_file_name = sys.argv[1]
create_text_images(font_file_name)
がぞうをつくったら、スクラッチのコスチュームにアップロードしましょう。
アップロードしたあとにやること
「もじをかえる」ブロックのらんすうのかずをふやす。
「○キーが押されたとき」のコードをコピーしてなおす。
なおすのは、おされたキーとコスチュームのばんごう。