FC2ブログ

スポンサードリンク

【HSP3dish】放置すごろく 作成(180309)

  09, 2018 22:26
以前、ゲームに飽きたと書きましたが それを見た友人が「なら、ゲーム作れば」などという話からトントン拍子でお題をもらってゲームを作ってみることにしました。

作る方にも興味を持ってそうなのでプログラミングについても解説をいれていこうと思います。

お題



一応済 なお題
・すごろくゲー
・自動化して勝手にすごろくをさせて鑑賞したい(これはゲームなのか?)
・CPU同士に対戦させる。
・それに気まぐれで介入したい。

未/追加されたばかりのお題
・結果の取り出し →厳しいのでDrop。

作ってるうちにお題は変わる可能性は大いにあるし、こっちも時間ある時にチマチマやってこうかと思ってます。

現時点でのプログラムはこんな感じです。



~~~~
#include "hsp3dish.as"
#cmpopt varname 1

randomize

//共通
    x1=0:y1=0                ; 画面左上の座標
    x2=320:y2=480        ; 画面右下の座標
    screen 0,x2,y2
    title "すごろく"

//Solo
    y9=9    ;我 初期位置
    dn=0    ;サイコロ振った回数
    gl=0    ;上がった回数
    dim dd,6 ;累計目の数

//Multi
    sdim mn,9,3 :mn="松","竹","梅" ;駒の名前
    dim my,3 :my=9,8,7 ;駒の初期位置
    dim mm,10 :mm=0,2,1,1,3,1,1,1,1,9 ;マスの初期配置 0=G 1=N 2=戻 3=休 9=S
    dim mg,3 :mg=0,0,0 ;上がった回数
    md=0 ;サイコロ振る人
    dim mk,3 :mk=0,0,0 ;休み判定

//goto *g2start

    redraw 0
    color 0,0,0:boxf
    color 255,255,255:font "MS ゴシック",44
    pos 28,128:mes "放置 すごろく"
    color 255,255,255
    boxf 10,250,150,333
    boxf 170,250,310,333
    color 0,0,0
    pos 30,270:mes "Solo"
    pos 190,270:mes "Multi"
    redraw 1

*gtitle
    stick key
    if key&256 {
        if mousey>240 {
            if mousex<160 :goto *gstart
            goto *g2start
        }
    }
    await 1
    goto *gtitle


//Solo
*gstart
        repeat 11+rnd(3)

        di=rnd(6)+1    ;サイコロの目

        gosub *gdraw
        await 50
   
        loop

    await 1000
    dn+
    dd(di-1)+

*gmove
    y9- :di-
    gosub *gdraw
    await 500

    if di=0 and y9=0 :y9=9 :gl+
    if di=0 : await 1000 :goto *gstart
    if y9=0 : goto *gmove2

    goto *gmove

*gmove2
    y9+ :di-
    gosub *gdraw
    await 500

    if di=0 : await 1000 :goto *gstart

    goto *gmove2
   

    stop


*gdraw
   
        redraw 0
        color 0,0,0:boxf

            repeat 10
            color 55,55,55
            if cnt=0 :color 255,55,55
            if cnt=9 :color 55,55,255
            boxf 8,8+cnt*44,48,48+cnt*44
            loop
   
        color 255,255,255:font "MS ゴシック",33
        pos 11,11+y9*44:mes "我"

        color 255,255,255:font "MS ゴシック",22
        pos 58,8 :mes "サイコロ→  "+di+" "
        mes " "
        mes "振った回数="+dn
        mes "上がった回数="+gl
        mes " "
        mes "目の分布"
            repeat 6
            mes " "+(cnt+1)+": "+dd(cnt)+"回 "
            loop

        redraw 1

    return


//Multi
*g2start
        if mk(md)>0 {
            mk(md)-
            md+ :if md=3 :md=0
            goto *g2start
        }

   
        repeat 11+rnd(3)

        di=rnd(6)+1    ;サイコロの目

        aw=1 :gosub *g2draw

   
        loop

        aw=20 :gosub *g2draw


*g2move
    my(md)- :di-
    aw=10 :gosub *g2draw

    if di=0 and mm(my(md))=0 :my(md)=9 :mg(md)+
    if di=0 and mm(my(md))=2 :my(md)=9
    if di=0 and mm(my(md))=3 :mk(md)+
    if di=0 {
        aw=20 :gosub *g2draw
        md+ :if md=3 :md=0
        goto *g2start
    }
    if my(md)=0 : goto *g2move2

    goto *g2move

*g2move2
    my(md)+ :di-
    aw=10 :gosub *g2draw

    if di=0 and mm(my(md))=0 :my(md)=9 :mg(md)+
    if di=0 and mm(my(md))=2 :my(md)=9
    if di=0 and mm(my(md))=3 :mk(md)+
    if di=0 {
        aw=20 :gosub *g2draw
        md+ :if md=3 :md=0
        goto *g2start
    }

    goto *g2move2




    stop


*g2draw

repeat aw
   
    stick key
    if key&256 {
        if (mousex>50) and (mousex<150) {
            repeat 10
            if (mousey>8+cnt*44) and (mousey<48+cnt*44) {
                if mm(cnt)!=9 :mm(cnt)+
                if mm(cnt)=4 :mm(cnt)=0
            }
            loop
        }
    }
   




        redraw 0
        color 0,0,0:boxf

        font "MS ゴシック",33
            repeat 10
            color 55,55,55 :pos 10,8+cnt*44
            if mm(cnt)=0 :color 255,11,11 :mes "G"
            if mm(cnt)=2 :color 11,155,11 :mes "戻"
            if mm(cnt)=3 :color 255,11,255 :mes "休"
            if mm(cnt)=9 :color 33,33,255 :mes "S"
            boxf 50,8+cnt*44,150,48+cnt*44
            loop

            color 255,255,255:font "MS ゴシック",33
            repeat 3
            pos 50+33*(cnt),11+my(cnt)*44:mes mn(cnt)
            pos 180,10+155*(cnt):mes mn(cnt)
            mes mg(cnt)
            if md=cnt :mes "→ "+di+" "
            if mk(cnt)>0 :mes"休"
            loop

        redraw 1

await 50
loop

    return






    stop

~~~~

スポンサードリンク

更新履歴および簡単なプログラム解説


2018/3/7


Soloプレイ版、一通り作ってしまった。

今回はタイトル画面について簡単に解説。

【HSP3dish】タイトル画面プログラミング 解説
http://no1027.blog.fc2.com/blog-entry-929.html

2018/3/9


セーブ関係を検討しましたがことごとくコケました。
プログラムのUpdateはしてませんが、他の箇所の解説を記載しました。

【HSP3dish】「セーブ機能の検討」と「画面描写について」
http://no1027.blog.fc2.com/blog-entry-932.html

マルチプレイを実装。
もう少しイジる予定。

さらに改良。
マスをタッチするとマスの効果を変更できます(STARTを除く)。

これで、概ね終了かな?




ご覧いただきありがとうございました。

関連リンク


HSP3dishを使って自作ゲームをFC2ブログ上に置く方法。
http://no1027.blog.fc2.com/blog-entry-861.html

ゲーム飽きてきたなぁ
http://no1027.blog.fc2.com/blog-entry-926.html
関連記事

スポンサードリンク

HSP3dish ゲーム

0 Comments

Post a comment


スポンサードリンク

What's New