本文へスキップ

Clamini library

早打ち1分勝負

 HSPでプログラミングの練習がてら作ってみた、ちょっとしたタイピングゲームです。内容はシンプルで、1分間ひたすら表示されるキーを押していくスタイル。 集中力と反射神経が試され、タイピングの練習にもなります!

ゲーム画面

早打ち1分勝負

概要

タイトル早打ち1分勝負
ジャンルタイピング
プレイ人数1人
動作環境Windows11 (64bit)

操作方法

AからZキータイプする

使い方

ダウンロード


 下のリンクからファイルをダウンロードできます。

 ※ZIP形式で圧縮されてるので、使う前に解凍してね! hayauti.zip

遊び方


 ゲームを起動すると、まずタイトル画面が表示されます。
いずれかのキーを押すと、いよいよスタート!

 表示されるのは、キーボードの配列と同様のAからZ。
出てきたアルファベットに対して、正しいキーをポチッと押していきましょう。

 制限時間は1分!その間にどれだけ多く打てるかチャレンジしてみてください。
時間が切れるとゲーム終了→タイトル画面に戻ります。集中力勝負です…!

ソースコード


#packopt name "typing_game"
    title "早打ち1分勝負 - Speed Typing"
    randomize

*start
    cls
    mode = 0 : score = 0 : target_char = "" : target_code = 0
    result_flag = 0  ; 0:通常 1:正解 2:不正解
    
    ; キーボード配列の定義(QWERTY)
    sdim k_rows, 64, 3
    k_rows(0) = "QWERTYUIOP"
    k_rows(1) = "ASDFGHJKL"
    k_rows(2) = "ZXCVBNM"

    ; --- タイトル画面 ---
    repeat
        redraw 0
        gradf 0, 0, ginfo_winx, ginfo_winy, 1, $440000, $000000
        color 255, 255, 255 : font msgothic, 60, 1 : pos 110, 150 : mes "早打ち1分勝負"
        font msgothic, 25, 1 : pos 170, 280
        if (cnt / 30) \ 2 : color 200, 200, 200 : else : color 50, 50, 50
        mes "PRESS ANY KEY TO START"
        redraw 1
        stick k, 0, 1
        if k != 0 : break 
        wait 2
    loop
    wait 20

    start_total_sec = gettime(4)*3600 + gettime(5)*60 + gettime(6)
    limit_sec = 60 

*main
    current_total_sec = gettime(4)*3600 + gettime(5)*60 + gettime(6)
    passed_sec = current_total_sec - start_total_sec
    if passed_sec < 0 : passed_sec += 86400
    time = limit_sec - passed_sec
    if time <= 0 : time = 0 : goto *gameover

    if mode = 0 : gosub *mondaisakusei

    redraw 0
    gosub *draw_ui
    redraw 1
    
    gosub *key_check
    wait 2
    goto *main

; --- UIの描画 ---
*draw_ui
    gradf 0, 0, ginfo_winx, ginfo_winy, 1, $222222, $000000
    color 40, 40, 40 : boxf 0, 0, 640, 80
    color 255, 100, 0 : line 0, 80, 640, 80
    
    font msgothic, 30, 1
    pos 40, 25 : color 200, 200, 200 : mes "SCORE:"
    pos 140, 25 : color 255, 255, 255 : mes strf("%04d", score)
    pos 380, 25 : color 200, 200, 200 : mes "TIME:"
    if time <= 10 : color 255, 50, 50 : else : color 255, 255, 255
    pos 470, 25 : mes strf("%02d", time) + "s"
    
    ; メインのお題表示
    font msgothic, 120, 1
    pos 270, 120 : color 255, 255, 255 : mes target_char
    
    ; --- キーボードガイドの表示 ---
    font msgothic, 20, 1
    ky = 280 : k_size = 45
    repeat 3
        r_idx = cnt
        row_str = k_rows(r_idx)
        kx = 100 + (cnt * 20) ; 段ごとに少し右にずらす
        repeat strlen(row_str)
            char = strmid(row_str, cnt, 1)
            ; 今打つべきキーをハイライト
            if char = target_char {
                color 255, 255, 0 : boxf kx, ky, kx+k_size-5, ky+k_size-5
                color 0, 0, 0
            } else {
                color 60, 60, 60 : boxf kx, ky, kx+k_size-5, ky+k_size-5
                color 200, 200, 200
            }
            pos kx+15, ky+10 : mes char
            kx += k_size
        loop
        ky += k_size
    loop

    ; 正誤の重ね表示
    if result_flag > 0 {
        font msgothic, 200, 1
        pos 220, 120
        if result_flag = 1 : color 0, 255, 0 : mes "〇"
        if result_flag = 2 : color 255, 0, 0 : mes "×"
    }
    return

; --- キー入力判定 ---
*key_check
    if result_flag > 0 : return 
    
    ; A(65)からZ(90)までのキーをチェック
    pressed = -1
    repeat 26, 65
        getkey k, cnt
        if k : pressed = cnt : break
    loop
    
    if pressed = -1 : return 

    if pressed = target_code {
        score += 100
        result_flag = 1
    } else {
        if score > 0 : score -= 50 ; 間違えると減点
        result_flag = 2
    }
    
    redraw 0 : gosub *draw_ui : redraw 1
    wait 15
    
    result_flag = 0
    mode = 0
    return

; --- 問題作成 ---
*mondaisakusei
    target_code = rnd(26) + 65 ; A-Zの文字コード
    target_char = strf("%c", target_code)
    mode = 1
    return

; --- ゲームオーバー ---
*gameover
    cls
    color 0, 0, 0 : boxf
    
    rank_msg = ""
    if score < 1000  : rank_msg = "ひよこ級"
    if score >= 1000 : rank_msg = "一般市民級"
    if score >= 3000 : rank_msg = "タイピスト級"
    if score >= 5000 : rank_msg = "プロ級"
    if score >= 7000 : rank_msg = "神速級"

    color 255, 215, 0 : font msgothic, 30, 1
    pos 180, 100 : mes "=== 最終結果発表 ==="
    
    font msgothic, 50, 1 : pos 120, 180
    color 200, 200, 200 : mes "SCORE:"
    color 255, 255, 255 : pos 320, 180 : mes strf("%04d", score)
    
    font msgothic, 40, 1 : pos 120, 260
    color 200, 200, 200 : mes "RANK :"
    color 255, 255, 0   : pos 320, 260 : mes rank_msg
    
    pos 200, 380 : font msgothic, 20 : color 255, 255, 255
    mes "PRESS ANY KEY TO TITLE"
    redraw 1

    wait 100
    loop_end = 0
    repeat
        stick k, 0, 1
        if k != 0 : break
        wait 2
    loop
    goto *start