RECOMMEND
SELECTED ENTRIES
CATEGORIES
ARCHIVES
MOBILE
qrcode
LINKS
PROFILE
OTHERS

05
--
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
--
>>
<<
--

ゲームを作りたい人のためのソースコード集

私がその日作った短めのソースを簡単な解説とともに載せていきます。
ゲーム制作初心者にとって参考になるかもしれないソースが多いです。
主にHSPでプログラミングされています。
模様(剰余)
0

    剰余(割り算の余り)を元に導き出した模様パターンです

    剰余の値を変えることで新しい模様を出すこともできます

     


    buffer 1
    gsel 0
    repeat 29:p=cnt        ;パターン
        gsel 1
        color 255,255,255:boxf:color
        repeat 128:y=cnt
            repeat 128:x=cnt
                h0=(x*x+y*y)¥29
                if h0=p{
                    pset x,y
                }
            loop
        loop
        gsel 0            ;拡大して表示
        title""+p
        gzoom 512,512,1,0,0,128,128
        wait 100
    loop

    | HSP | 22:00 | comments(0) | - | - |
    模様(波線)
    0

      波の模様を作成するプログラムです

       


      repeat 256:y=cnt
          repeat 256:x=cnt
              y0=y+6.0*cos((12.0*(0f+x)/255)*M_PI)
              flag=0
              if y0<0{
                  flag=1
              }
              if (y0/20)¥2=flag{
                  color 255,0,0
              }else{
                  color 255,255,255
              }
              pset x,y
          loop
      loop

      | HSP | 11:04 | comments(0) | - | - |
      模様(渦巻き)
      0

        うずまき模様を描写するプログラムです

         


        repeat 256,-128:y=cnt
            repeat 256,-128:x=cnt
                len=0+sqrt(x*x+y*y)
                a=rad2deg(atan(y,x))
                t=len+(41*a/360)
                if (t/20)¥2=0&t>=0{
                    color 255-len,0,len
                }else{
                    color 255,255,255
                }
                tx=x+128
                ty=-y+127
                pset tx,ty
            loop
        loop

        | HSP | 23:05 | comments(0) | - | - |
        有限体
        0

          有限体を模様として見えるようにしたものです

          こちらのサイトを参考に作成しました

           


          screen ,480,480
          repeat 291,10:p=cnt
              color 255,255,255:boxf
              clset=255.0/p
              csz=480.0/p
              dim table,p,p
              repeat p:y=cnt
                  repeat p:x=cnt
                      table(x,y)=x*y¥p    ;乗法
                      ;table(x,x*y¥p)=y    ;除法
                  loop
              loop
              repeat p:y=cnt
                  repeat p:x=cnt
                      cl=clset*table(x,y)
                      color cl,cl,cl
                      boxf csz*x,csz*y,csz*(x+1),csz*(y+1)
                  loop
              loop
              title""+p
              redraw:await 17:redraw 0
          loop

          | HSP | 22:17 | comments(0) | - | - |
          ビット操作(1バイト)
          0

            1byteに対してbitの代入や取得を行うプログラムです

            flag管理などに利用できます

             


            ;フラグ番号
            #const b0 $01
            #const b1 $02
            #const b2 $04
            #const b3 $08
            #const b4 $10
            #const b5 $20
            #const b6 $40
            #const b7 $80
            ;フラグ設定
            h0|=b0
            mes""+h0    ;00000001
            h0|=b1
            mes""+h0    ;00000011
            h0|=b2
            mes""+h0    ;00000111
            h0&=h0^b0
            mes""+h0    ;00000110
            ;フラグチェック
            if h0&b0{
                mes"フラグ0 = ON"
            }else{
                mes"フラグ0 = OFF"
            }
            if h0&b1{
                mes"フラグ1 = ON"
            }else{
                mes"フラグ1 = OFF"
            }

            | HSP | 15:16 | comments(0) | - | - |
            楕円曲線
            0

              楕円曲線を描写するプログラムです

              a, bの値を変えることでグラフの形も変わります

               

               

              orix=320:oriy=240    ;原点
              scalex=50:scaley=50    ;一目盛りの大きさ
              msum=400            ;表示範囲(初期値+(表示範囲×加算値)まで)
              pls=0.01            ;Xの加算値
              ddim xi,msum    ;方程式のX座標
              ddim yi,msum    ;方程式のY座標
              a=1.0:b=1.0        ;a、bの値指定
              ;直線の方程式
              title"y^2 = x^3 +"+strf("%.1f",a)+"x +"+strf("%.1f",b)
              x=-1.0        ;Xの初期値
              ;描写処理
              repeat msum
                  id=cnt
                  xi(id)=x
                  yi(id)=sqrt(x*x*x+a*x+b)
                  pset xi(id)*scalex+orix,yi(id)*scaley+oriy
                  pset xi(id)*scalex+orix,-yi(id)*scaley+oriy
                  x+=pls
              loop

              | HSP | 07:03 | comments(0) | - | - |
              放物運動
              0

                物を投げた時にどのような線を描くかを描写するプログラムです

                ボールや矢の動きをシミュレーションする時に参考になります

                マウスの位置で発射角度を決めます

                 


                #include"hspmath.as"
                u=0.0    ;打ち出す角度
                v=3.0    ;初速
                g=1.0    ;重力加速度
                h=0.0    ;高さ
                kak=50    ;拡大率
                ;発射位置
                shotx=100:shoty=240
                w=1.0/2*acos((g*h)/(g*h+v*v))
                title"最大飛距離の発射角度:"+rad2deg(w)
                repeat
                    mx=mousex:my=mousey
                    u=atan(shoty-my,mx-shotx)
                    gosub *throwdraw
                    redraw:await 17:redraw 0
                loop
                ;放物線描写
                *throwdraw
                    color 255,255,255:boxf:color
                    circle shotx-5,shoty-5,shotx+5,shoty+5
                    t=0.0    ;時間
                    repeat 200
                        x=v*cos(u)*t*kak
                        y=-(v*sin(u)*t-1.0/2*g*t*t)*kak+h
                        x+=shotx
                        y+=shoty
                        if cnt=0{
                            pos x,y
                        }else{
                            line x,y
                        }
                        t+=0.05
                    loop
                    return

                | HSP | 21:32 | comments(0) | - | - |
                ウェーブアニメ
                0

                  布が波打つアニメーションのようなものです

                  pl_dirの値を変えることで緩やかな波や激しい波に変更できます

                  こちらのサイトを参考にしました

                   


                  ;点の総数
                  cr_sum=20*20
                  ;データ作成
                  ddim cr_dt,4,cr_sum
                  len=20
                  pl_dir=10
                  sx=10:sy=10
                  x=sx:y=sy:deg=0
                  repeat cr_sum
                      if cnt¥20=0&cnt>0{
                          x=sx:y+=len:deg=(cnt/20)*pl_dir
                      }
                      cr_dt(0,cnt)=0f+x,0f+y,0f+deg
                      x+=len:deg+=pl_dir
                  loop
                  ;描写処理
                  repeat
                      gosub *draw
                      redraw:await 17:redraw 0
                  loop
                  *draw
                      color 255,255,255:boxf:color
                      repeat cr_sum
                          ;circle cr_dt(0,cnt)-len,cr_dt(1,cnt)-len,cr_dt(0,cnt)+len,cr_dt(1,cnt)+len,0
                          x=cos(deg2rad(cr_dt(2,cnt)))*len+cr_dt(0,cnt)
                          y=sin(deg2rad(cr_dt(2,cnt)))*len+cr_dt(1,cnt)
                          circle x-4,y-4,x+4,y+4
                          cr_dt(2,cnt)+=3
                      loop
                      return

                  | HSP | 18:04 | comments(0) | - | - |
                  オブジェクトの配置入れ替え
                  0

                    指定したオブジェクト同士を交換するプログラムです

                    最初のクリックでオブジェクトを決め、次のクリックで選択元と選択先を入れ替えます

                     

                     

                    ;オブジェクト画像生成
                    csz=32
                    buffer 2,csz*5,csz:celdiv 2,csz,csz
                    x=0
                    repeat 5
                        hsvcolor 30*cnt,255,255
                        boxf x,0,x+csz,csz
                        x+csz
                    loop
                    ;選択エリアを作成
                    p_max=30
                    dim p_area,4,p_max
                    dim p_id,p_max
                    ltx=100:lty=100:inter=5
                    x=ltx:y=lty
                    repeat p_max
                        if cnt¥10=0{
                            x=ltx:y+=csz+inter
                        }
                        p_area(0,cnt)=x,y,x+csz,y+csz
                        p_id(cnt)=-1
                        x+=csz+inter
                    loop
                    ;選択エリアにオブジェクトを入れる
                    repeat 5
                        p_id(cnt)=cnt
                    loop
                    ;処理開始
                    screen
                    sel_flg=0
                    sel_turn=0
                    sel_id=0
                    set_id=-1
                    repeat
                        mx=mousex:my=mousey
                        ok1=k1:getkey k1,1:tk1=k1^ok1&k1
                        if tk1{
                            sel_id=-1
                            repeat p_max
                                ltx=p_area(0,cnt)
                                lty=p_area(1,cnt)
                                rbx=p_area(2,cnt)
                                rby=p_area(3,cnt)
                                if ltx<=mx&mx<=rbx&lty<=my&my<=rby{
                                    sel_id=cnt:sel_flg=1
                                }
                            loop
                            if sel_flg{
                                if sel_turn=0{    ;選択1を指定
                                    set_id=sel_id
                                    sel_turn=1
                                }else{        ;選択2を指定し、1と交換する
                                    tmp=p_id(set_id)
                                    p_id(set_id)=p_id(sel_id)
                                    p_id(sel_id)=tmp
                                    set_id=-1
                                    sel_turn=0
                                }
                                sel_flg=0
                            }else{
                                set_id=-1
                                sel_turn=0
                            }
                        }
                        gosub *draw
                        redraw:await 17:redraw 0
                    loop
                    ;描写処理
                    *draw
                        color 255,255,255:boxf
                        if set_id>=0{
                            ltx=p_area(0,set_id)
                            lty=p_area(1,set_id)
                            rbx=p_area(2,set_id)
                            rby=p_area(3,set_id)
                            color:boxf ltx-2,lty-2,rbx+2,rby+2
                        }
                        repeat p_max
                            ltx=p_area(0,cnt)
                            lty=p_area(1,cnt)
                            rbx=p_area(2,cnt)
                            rby=p_area(3,cnt)
                            color:boxf ltx,lty,rbx,rby
                            color 255,255,255:boxf ltx+1,lty+1,rbx-1,rby-1
                            if p_id(cnt)>=0{
                                pos ltx,lty:celput 2,p_id(cnt)
                            }
                        loop
                        return

                    | HSP | 20:36 | comments(0) | - | - |
                    二次元配列の並べ替え
                    0

                      2次元配列を昇順に並び替えるプログラムです

                      ソートする値は一番最初の要素を参照しています

                       

                       

                      #module
                      #deffunc dim2sort array dt,int order
                          ;並べ替え処理
                          len=length2(dt)
                          repeat len-1,1:i=cnt
                              j=i
                              repeat
                                  if j<=0:break
                                  if order=0{
                                      if dt(0,j-1)<=dt(0,j):break    ;「>=」にすると降順
                                  }else{
                                      if dt(0,j-1)>=dt(0,j):break    ;「>=」にすると降順
                                  }
                                  repeat length(dt)
                                      tmp=dt(cnt,j-1)
                                      dt(cnt,j-1)=dt(cnt,j)
                                      dt(cnt,j)=tmp
                                  loop
                                  j--
                              loop
                          loop
                          return
                      #global

                      randomize
                      len=10        ;データ総数
                      dim dt,2,len
                      repeat len
                          dt(0,cnt)=rnd(len),rnd(len)    ;データ作成
                          mes""+dt(0,cnt)+", "+dt(1,cnt)
                      loop
                      dim2sort dt
                      ;結果
                      pos 100,0
                      repeat len
                          mes""+dt(0,cnt)+", "+dt(1,cnt)
                      loop

                      | HSP | 19:20 | comments(0) | - | - |