HSPでプログラミングの練習がてら作ってみた、ちょっとした脳トレ計算ゲームです。内容はシンプルで、1分間ひたすら答えが1桁になる加算・減算・除算を解いていくスタイル。 集中力と反射神経が試されるので、頭のウォーミングアップになります!
| タイトル | 計算1分勝負 |
|---|---|
| ジャンル | 脳トレ計算 |
| プレイ人数 | 1人 |
| 動作環境 | Windows11 (64bit) |
| 1から9キー | 解答する |
|---|
下のリンクからファイルをダウンロードできます。
※ZIP形式で圧縮されてるので、使う前に解凍してね!
keisan.zip
ゲームを起動すると、まずタイトル画面が表示されます。
いずれかのキーを押すと、いよいよスタート!
表示されるのは、答えが1桁になる足し算、引き算と割り算。
出てきた問題に対して、正しい数字キーをポチッと押していきましょう。
テンキーを使う場合は、NumLockがオンになってるか確認してね。
制限時間は1分!その間にどれだけ多く正解できるかチャレンジしてみてください。
時間が切れるとゲーム終了→タイトル画面に戻ります。集中力勝負です…!
#packopt name "keisan"
title "計算1分勝負 - High Speed Math"
randomize
*start
cls
mode = 0 : score = 0 : number = 0 : siki = ""
ans_key = 0 ; 回答した数字を保持する変数
result_flag = 0 ; 0:通常 1:正解 2:不正解
; --- タイトル画面 ---
repeat
redraw 0
gradf 0, 0, ginfo_winx, ginfo_winy, 1, $000044, $000000
color 255, 255, 255 : font msgothic, 60, 1 : pos 140, 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 *sikisakusei
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 0, 200, 255 : 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"
color 60, 60, 60 : boxf 100, 150, 540, 350
color 0, 200, 255 : line 100, 150, 540, 150 : line 540, 150, 540, 350
line 540, 350, 100, 350 : line 100, 350, 100, 150
if mode = 1 {
; 式の表示用文字列を作成
display_siki = siki
if result_flag > 0 : display_siki += str(ans_key) ; 回答済みなら数字を足す
font msgothic, 100, 1
; 影
pos 124, 204 : color 0, 0, 0 : mes display_siki
; 本体
pos 120, 200 : color 255, 255, 255 : mes display_siki
; 正誤の重ね表示
if result_flag > 0 {
font msgothic, 200, 1
pos 220, 150
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 = 0
repeat 9, 1
getkey k1, cnt + 48 : getkey k2, cnt + 96
if k1 | k2 : a = cnt : break
loop
if a = 0 : return
ans_key = a ; どの数字キーを押したか記録
if a == number {
score += 100
result_flag = 1
} else {
result_flag = 2
}
; 回答数字を含めて再描画
redraw 0 : gosub *draw_ui : redraw 1
wait 25
result_flag = 0
mode = 0
return
; --- 問題作成 ---
*sikisakusei
ans = rnd(9) + 1 : type = rnd(3)
if type = 0 : x = rnd(ans) : y = ans - x : siki = str(x) + "+" + str(y) + "="
if type = 1 : y = rnd(10) : x = ans + y : siki = str(x) + "-" + str(y) + "="
if type = 2 : y = rnd(9) + 1 : x = ans * y : siki = str(x) + "÷" + str(y) + "="
number = ans : mode = 1
return
; --- ゲームオーバー ---
*gameover
; --- リザルト演出 ---
screen 0, 640, 480
buffer 1, 640, 480 : color 0, 0, 0 : boxf ; 黒いフェード用のバッファを作成
gsel 0 ; 操作先をメインウィンドウに戻す
repeat 50
redraw 0
; 1. 背景と文字を先に描画
color 255, 255, 255 : boxf ; 背景クリア
color 255, 50, 50 : font msgothic, 80, 1
pos 180, 200 : mes "TIME UP!"
; 2. 上から黒い画像を重ねてフェードアウトさせる
; gmode 3, 幅, 高さ, 輝度(0-256)
gmode 3, 640, 480, cnt * 5
pos 0, 0
gcopy 1, 0, 0 ; バッファ1(黒)をコピー
redraw 1
wait 5
loop
wait 50
; スコアに応じたランク判定
rank_msg = ""
if score < 500 : rank_msg = "見習い計算員"
if score >= 500 : rank_msg = "一人前計算員"
if score >= 1500 : rank_msg = "計算マスター"
if score >= 2500 : rank_msg = "暗算の達人"
if score >= 3500 : rank_msg = "人間計算機"
; 最終結果表示
redraw 0
color 0, 0, 0 : boxf
; 金色の枠線
color 255, 215, 0 : line 50, 50, 590, 50 : line 590, 50, 590, 430
line 590, 430, 50, 430 : line 50, 430, 50, 50
color 255, 255, 255 : font msgothic, 30, 1
pos 100, 100 : mes "=== 最終結果発表 ==="
font msgothic, 50, 1 : pos 120, 180
color 200, 200, 200 : mes "SCORE:"
color 255, 255, 255 : pos 300, 180 : mes strf("%04d", score)
font msgothic, 40, 1 : pos 120, 260
color 200, 200, 200 : mes "RANK :"
color 255, 255, 0 : pos 300, 260 : mes rank_msg
redraw 1
; ウェイト
wait 1000
goto *start |