HSP3 プログラミングの基礎X
前へ 目次へ 次へ 

◆ ボール(画像ファイル利用)

 ボールの画像ファイルをりようしてスクリーンセーバーを制作する。

サンプル(ssaver11.hsp)
 次のリストは、スクリーンセーバー本体となるものである。

;ssaver11.hsp
    randomize
    kosu = 50       ;画像の個数
    dim x, kosu : dim y, kosu       ;個数分の座標用配列
    dim dx, kosu : dim dy, kosu     ;個数分のX移動量用配列
    dim b, kosu         ;ボールの番号(0〜6)
    buffer 2
    picload "ball.bmp"
    win_x = 640         ;ginfo_dispx or ginfo_winx
    win_y = 480         ;ginfo_dispy or ginfo_winy
    screen 0, win_x, win_y    ;bgscr 1, win_x, win_y
    gmode 2, 16, 16    ;コピーモード
    repeat kosu        ;配列の個数分繰り返し
        x(cnt) = rnd(win_x - 16) : y(cnt) = rnd(win_y - 16)         ;初期座標
        dx(cnt) = 5 + rnd(5) * 2 : dy(cnt) = 5 + rnd(5) * 2         ;移動量
        b(cnt) = rnd(7)     ;ボール番号
    loop
    repeat
        ;描画処理
        redraw 0
        color 0, 0, 0
        boxf
        repeat kosu   ;配列の個数分繰り返し
            pos x(cnt), y(cnt)
            gcopy 2, b(cnt) * 16, 0
            ;移動方向
            x(cnt) = limit(x(cnt) + dx(cnt), 0, win_x - 16) ;座標計算
            y(cnt) = limit(y(cnt) + dy(cnt), 0, win_y - 16)
            if x(cnt) <= 0 | x(cnt) >= win_x - 16 : dx(cnt) = -dx(cnt)
            if y(cnt) <= 0 | y(cnt) >= win_y - 16 : dy(cnt) = -dy(cnt)
        loop
        redraw 1
        await 100
    loop
    end

 画像は図のようなものを用意した。一つのボールは16×16ドットで作成している。

 ball.bmp (3KB)

 画像ファイルは、buffer 2で用意したウィンドウIDの2番に読み込んでいる。

(ssaver12.hsp) 次に、スクリーンセーバーに書き直したリストを示す。
 スクリーンセーバー本体部分の青色は削除、マゼンタは追加である。

;ssaver12.hsp
#packopt name "ball"    ;実行ファイル名
#packopt type 2         ;スクリーンセーバー
#packopt xsize 320
#packopt ysize 120
    scrname = "ball"
    para = dir_cmdline          ;パラメータ取得
    para = strmid(para, 0, 2)
    if para = "/p" | para = "/P" : goto *preview    ;プレビュー
    if para = "/s" | para = "/S" : goto *ssaver         ;フルスクリーン
    if para = "/c" | para = "/C" : goto *config         ;コンフィグ
    dialog "無効なオプションです。" + "[" + para + "]"
    end
;設定画面 -----
*config
    title scrname
    gosub *dataread     ;設定データファイル読み込み
    pos 10, 8 : mes "表示個数"  ;設定画面作成
    pos 100, 8 : input skosu
    pos 240, 80 : button "OK", *settei
    stop
*settei
    noteadd skosu, 0, 1
    notesave scrname + ".dat"       ;設定データファイル書き込み
    end
;プレビュー画面 -----
*preview
    win_x = ginfo_winx          ;ウィンドウサイズ(幅)
    win_y = ginfo_winy          ;ウィンドウサイズ(高さ)
    winid = 0       ;ウィンドウID 0
    goto *ssmain
    stop
;スクリーンセーバー本体 -----
*ssaver
    win_x = ginfo_dispx         ;ディスプレイサイズ(幅)
    win_y = ginfo_dispy         ;ディスプレイサイズ(高さ)
    bgscr 1, win_x, win_y   ;枠なしのウィンドウ
    winid = 1       ;ウィンドウID 1
*ssmain
    gosub *dataread     ;設定データファイル読み込み
    randomize
    ;kosu = 50      ;画像の個数
    dim x, kosu : dim y, kosu       ;個数分の座標用配列
    dim dx, kosu : dim dy, kosu     ;個数分のX移動量用配列
    dim b, kosu         ;ボールの番号(0〜6)
    buffer 2
    picload "ball.bmp"
    ;win_x = 640        ;ginfo_dispx or ginfo_winx;
    ;win_y = 480        ;ginfo_dispy or ginfo_winy;
    ;screen 0, win_x, win_y ;bgscr 1, win_x, win_y
    gsel winid
    gmode 2, 16, 16    ;コピーモード
    repeat kosu        ;配列の個数分繰り返し
        x(cnt) = rnd(win_x - 16) : y(cnt) = rnd(win_y - 16)         ;初期座標
        dx(cnt) = 5 + rnd(5) * 2 : dy(cnt) = 5 + rnd(5) * 2         ;移動量
        b(cnt) = rnd(7)     ;ボール番号
    loop
    repeat
        ;描画処理
        redraw 0
        color 0, 0, 0
        boxf
        repeat kosu   ;配列の個数分繰り返し
            pos x(cnt), y(cnt)
            gcopy 2, b(cnt) * 16, 0
            ;移動方向
            x(cnt) = limit(x(cnt) + dx(cnt), 0, win_x - 16) ;座標計算
            y(cnt) = limit(y(cnt) + dy(cnt), 0, win_y - 16)
            if x(cnt) <= 0 | x(cnt) >= win_x - 16 : dx(cnt) = -dx(cnt)
            if y(cnt) <= 0 | y(cnt) >= win_y - 16 : dy(cnt) = -dy(cnt)
        loop
        redraw 1
        await 100
    loop
    end
;設定データファイル読み込み -----
*dataread
    notesel cfg
    exist scrname + ".dat"      ;設定データファイル
    if strsize = -1 {       ;ファイルなし
        kosu = 20
        skosu = "20"
    } else {        ;ファイルあり
        noteload scrname + ".dat"
        noteget skosu, 0    ;個数(文字型)
        kosu = 0 + skosu    ;整数変換
    }
    return


前へ 目次へ 次へ 
2007  © Hiroshi Masuda 

 

 

inserted by FC2 system