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

私がその日作った短めのソースを簡単な解説とともに載せていきます
ゲーム制作初心者にとって参考になるかもしれないソースが多いです





一日ゲームNo.17「PolyhedronSuffle」

一日ゲーム第十七弾

 

カップシャッフルゲームの三次元版みたいなものです

多面体の角の一つが黄色くなっており、クリックするとランダムに移動します

移動先をクリックすれば正解し、次のステージに進めます

全5ステージです

 

ダウンロード

ソースコード

 

0
    posted by higashijugem 15:46comments(0)|-|





    一日ゲームNo.16「打斬張」

    一日ゲーム第十六弾

    少し複雑なじゃんけんゲームです

     

    打(赤)は斬(緑)に強く、斬(緑)は張(青)に強く、張(青)は打(赤)に強いです

    「並び替え」・・・個体の並び替えを行います。先頭の五体のみ戦闘に参加させられます

    「交配」・・・二つの個体を組み合わせます。ステータスは組み合わせた個体のステータスからランダムで決定します

    「解雇」・・・個体を削除します。

     

    ダウンロード

    ソースコード

     

     

    0
      posted by higashijugem 17:33comments(0)|-|





      一日ゲームNo.15「円迷路」

      一日ゲーム第十五弾

      一風変わった迷路ゲームです

       

      白い線がルートで、サークルの外側がゴールになります

      操作キーは十字キーのみです

       

      ダウンロード

      ソースコード

      ※10/31修正

       

      0
        posted by higashijugem 18:47comments(0)|-|





        一日ゲームNo.14「KnightJumper」

        久々の一日ゲーム、第十四弾です

         

        チェスのナイトのような動きをするキャラクターを操作し、ステージをクリアしていきます

        キャラクターが移動するごとにマスが減っていくので、身動きが取れなくなる前にゴール(青枠のマス)までたどり着く必要があります

        また、キャラクターがいるマスと移動先のマスが二段以上差がある場合は移動できません

        マップ上には攻略に役立つアイテム(紫のマス)があります、上手く活用して攻略を有利に進めてください

         

        操作方法

        マップ上をクリック・・・移動

        アイテム名をクリック・・・アイテムを使用

         

        gキーを押すことでゲームオーバー、その時点でのクリアステージ数が表示されます

        ※10/24 システムを調整しました

         

        ダウンロード

        ソースコード

         

         

        0
          posted by higashijugem 19:14comments(0)|-|





          壁の透過

          壁の向こう側にいるキャラクターがいる場合、キャラと壁が重なる部分を半透明で表示するプログラムです

           

           

          ;壁の透過
          #enum d_main=0
          #enum d_wallwd
          #enum d_maskchip
          #enum d_chip
          #enum d_bb0
          #enum d_bb1
          #enum d_maskwd
          #include "gdi32.as"
          #const SRCINVERT $00660046
          csz=64
          ;チップ画像
          buffer d_chip,csz*3,csz*2:celdiv d_chip,csz,csz
          color:boxf:x=0:y=0
          color 255:circle x,y,x+csz-1,y+csz-1:y+csz    ;キャラ
          color ,,255:boxf x,y,x+csz-1,y+csz-1:y+csz    ;壁
          ;チップの黒白画像を作成
          x1=csz:x2=csz*2
          ty=0
          repeat 2
              repeat csz:j=cnt
                  repeat csz:i=cnt
                      pget i,ty+j
                      cl=ginfo(16)+ginfo(17)+ginfo(18)
                      if cl>0{
                          color 1
                          pset x1+i,ty+j
                          color 255,255,255
                          pset x2+i,ty+j
                      }
                  loop
              loop
              ty+csz
          loop
          ;マップ作成
          mc=11:mr=8
          gw=mc*csz:gh=mr*csz
          dim mapdt,mc,mr
          repeat 24
              x=rnd(mc):y=rnd(mr)
              mapdt(x,y)=1
          loop
          buffer d_bb0,gw,gh    ;XOR用1
          hdc0=hdc
          buffer d_bb1,gw,gh    ;XOR用2
          hdc1=hdc
          buffer d_wallwd,gw*2,gh    ;壁表示用
          buffer d_maskwd,gw,gh    ;重複範囲用
          ;処理開始
          screen d_main,gw,gh
          repeat
              mux=mousex:muy=mousey
              gsel d_bb0:color 255,255,255:boxf
              gsel d_bb1:color 255,255,255:boxf
              gsel d_wallwd:color:boxf
              gsel d_maskwd:color 255,255,255:boxf
              ;障害物の画像とマスク画像を描写
              gsel d_wallwd
              gmode 2
              gsel d_bb1
              gmode 2
              repeat mr:j=cnt
                  repeat mc:i=cnt
                      if mapdt(i,j){
                          gsel d_bb1
                          x=csz*i:y=csz*j
                          pos x,y:celput d_chip,1*3+1
                          gsel d_wallwd
                          pos x,y:celput d_chip,1*3
                          pos x+gw,y:celput d_chip,1*3+2
                      }
                  loop
              loop
              ;XORコピーを用いて重なる範囲を取得する
              BitBlt hdc0,0,0,gw,gh,hdc1,0,0,$00660046
              gsel d_bb1
              pos mux,muy:celput d_chip,0*3+2
              BitBlt hdc0,0,0,gw,gh,hdc1,0,0,$00660046
              ;重複範囲を半透明にする
              gsel d_maskwd:color 128,128,128:boxf
              gmode 6,,,255:gcopy d_bb0,,,gw,gh
              ;壁表示用バッファに作成した重複範囲を重ねる
              gsel d_wallwd
              pos gw,0:gcopy d_maskwd,,,gw,gh
              ;メイン画像に表示
              gsel 0
              gmode 2
              color 255,255,255:boxf
              x=mux:y=muy
              pos x,y:celput d_chip,0*3
              gmode 7,,,125
              pos 0,0:gcopy d_wallwd,,,gw,gh
              redraw:await:redraw 0
          loop

          0
            posted by higashijugem 08:16comments(0)|-|





            重ならないように円を配置ver2

            円が重なり合わないように描写するプログラムその2です

            円の配置チェックを二次元マップのマスで行います
            青色の場合はクリックすることで配置可能、赤色の場合はすでに置かれた円と重なっているので配置できません

             


            gw=640:gh=480
            mcsz=16
            cw=gw/mcsz:ch=gh/mcsz
            dim mapdt,cw,ch    ;マップデータ

            len=5
            repeat
                ok1=k1:getkey k1,1:tk1=k1^ok1&k1
                mcx=mousex/mcsz:mcy=mousey/mcsz
                mapsetflg=0
                if tk1{
                    if overflg=0{    ;重なっていたら配置できないようにする
                        mapsetflg=1
                    }                ;if文をコメントアウトで配置可能
                }
                overflg=0
                repeat len*2+1,mcy-len:c1=cnt
                    repeat len*2+1,mcx-len
                        if 0<=cnt&cnt<cw&0<=c1&c1<ch{
                            dis=0+sqrt(powf(mcx-cnt,2)+powf(mcy-c1,2))
                            if dis<len{
                                if mapdt(cnt,c1){    ;配置された円と重なっている
                                    overflg=1
                                }
                                if mapsetflg{    ;マップに配置
                                    mapdt(cnt,c1)=1
                                }
                            }
                        }
                    loop
                loop
                color 255,255,255:boxf
                repeat ch:c1=cnt
                    repeat cw
                        x=cnt*mcsz:y=c1*mcsz
                        if mapdt(cnt,c1){
                            color
                            boxf x,y,x+mcsz-1,y+mcsz-1
                        }
                        dis=0+sqrt(powf(mcx-cnt,2)+powf(mcy-c1,2))
                        if dis<len{
                            if overflg{
                                color 255
                            }else{
                                color ,,255
                            }
                            boxf x,y,x+mcsz-1,y+mcsz-1
                        }
                    loop
                loop
                redraw:await 17:redraw 0
            loop

            0
              posted by higashijugem 12:46comments(0)|-|





              重ならないように円を配置

              円が重なり合わないように描写するプログラムです

              青色の場合はクリックすることで配置可能、赤色の場合はすでに置かれた円と重なっているので配置できません

               


              crmax=10
              dim crdt,4,crmax    ;円データ
              len=50
              repeat
                  mux=mousex:muy=mousey
                  ok1=k1:getkey k1,1:tk1=k1^ok1&k1
                  color 255,255,255:boxf
                  mapsetflg=0
                  if tk1{
                      mapsetflg=1
                  }
                  overflg=0
                  color
                  repeat crmax    ;配置円の描写と、配置円との重なりがないかチェック
                      if crdt(0,cnt){
                          tx=crdt(1,cnt):ty=crdt(2,cnt):tlen=crdt(3,cnt)
                          dis=sqrt(powf(mux-tx,2)+powf(muy-ty,2))
                          if dis<=tlen+len{
                              overflg=1
                          }
                          circle tx-tlen,ty-tlen,tx+tlen,ty+tlen
                      }
                  loop
                  if overflg=0{    ;重なっていなければ
                      if mapsetflg{    ;円を配置可能
                          repeat crmax
                              if crdt(0,cnt)=0{
                                  crdt(0,cnt)=1,mux,muy,len
                                  break
                              }
                          loop
                      }
                      mapsetflg=0
                      color ,,255
                  }else{
                      color 255
                  }
                  circle mux-len,muy-len,mux+len,muy+len
                  redraw:await 17:redraw 0
              loop

              0
                posted by higashijugem 12:42comments(0)|-|





                ジャパニーズアトラクタ

                ジャパニーズアトラクタ(Japanese attractor)はローレンツアトラクタと同時期に作られたカオスです

                Bの値を変えることで形を変えられます

                 


                k=0.1    ;定数
                B=12.0    ;定数
                x=0.0    ;X座標
                y=0.0    ;Y座標
                n=10000    ;繰り返し回数
                bn=800    ;微分の項数
                dt=2.0*M_PI/bn
                t=0.0    ;時間
                kw=100    ;横倍率
                kh=15    ;縦倍率
                boxf:color 255,255,255
                repeat n
                    repeat bn
                        t=t+dt
                        xx=x+dt*y;
                        yy=y+dt*(-k*y-powf(x,3)+B*cos(t));
                        x=xx;
                        y=yy;
                    loop
                    pset x*kw,y*kh+240
                    await
                loop
                title"stop"

                0
                  posted by higashijugem 18:48comments(0)|-|





                  ローレンツアトラクタ

                  ローレンツアトラクタを描写するプログラムです

                  三次元上に描写して、立体的に見えるようにしました

                   

                   

                  #include "d3m.hsp"
                  #define global sgm 10.0
                  #define global r 28.0
                  #define global b 8.0/3.0
                  ;ローレンツ方程式の関数
                  #module
                  #defcfunc m_f double x,double y
                      return sgm*(-x + y)
                  #defcfunc m_g double x,double y,double z
                      return r*x - y - x*z
                  #defcfunc m_h double x,double y,double z
                      return -b*z + x*y
                  #global
                  ddim ps,3    ;現在位置
                  ddim nps,3    ;描写位置
                  ddim k,3,4
                  ddim calc,3
                  dt=0.01    ;時間
                  n=5000    ;繰り返し回数
                  kd=20    ;拡大率
                  repeat
                      ct++
                      redraw 0
                      color:boxf:color 255,255,255
                      ;カメラを回転させる
                      d3setcam cos(0.04*ct)*1500,sin(0.04*ct)*1500,cos(0.03*ct)*1000,,,500
                      ps=1.0,1.0,1.0
                      d3initlineto
                      repeat n:i=cnt
                          ;4次ルンゲクッタ法
                          k(0,0)=dt*m_f(ps(0),ps(1))
                          k(1,0)=dt*m_g(ps(0),ps(1),ps(2))
                          k(2,0)=dt*m_h(ps(0),ps(1),ps(2))
                      
                          k(0,1)=dt*m_f(ps(0)+k(0,0)/2,ps(1)+k(1,0)/2)
                          k(1,1)=dt*m_g(ps(0)+k(0,0)/2,ps(1)+k(1,0)/2,ps(2)+k(2,0)/2)
                          k(2,1)=dt*m_h(ps(0)+k(0,0)/2,ps(1)+k(1,0)/2,ps(2)+k(2,0)/2)
                          
                          k(0,2)=dt*m_f(ps(0)+k(0,1)/2,ps(1)+k(1,1)/2)
                          k(1,2)=dt*m_g(ps(0)+k(0,1)/2,ps(1)+k(1,1)/2,ps(2)+k(2,1)/2)
                          k(2,2)=dt*m_h(ps(0)+k(0,1)/2,ps(1)+k(1,1)/2,ps(2)+k(2,1)/2)
                          
                          k(0,3)=dt*m_f(ps(0)+k(0,2),ps(1)+k(1,2))
                          k(1,3)=dt*m_g(ps(0)+k(0,2),ps(1)+k(1,2),ps(2)+k(2,2))
                          k(2,3)=dt*m_h(ps(0)+k(0,2),ps(1)+k(1,2),ps(2)+k(2,2))
                          repeat 3
                              nps(cnt)=ps(cnt)+(k(cnt,0)+k(cnt,1)*2.0+k(cnt,2)*2.0+k(cnt,3))/6.0
                              ps(cnt)=nps(cnt)
                          loop
                          ;描写
                          d3lineto nps(0)*kd,nps(1)*kd,nps(2)*kd
                      loop
                      redraw
                      await
                  loop

                  0
                    posted by higashijugem 15:54comments(0)|-|





                    オブジェクトのドラッグver3

                    オブジェクトをドラッグ&ドロップするプログラムです

                    複数の図形をそれぞれ移動させたり大きさを変えたりできます

                     


                    randomize
                    objmax=5
                    dim objdt,5,objmax
                    repeat objmax
                        objdt(0,cnt)=cnt
                        x=rnd(390):y=rnd(260)
                        objdt(0,cnt)=x,y
                        objdt(2,cnt)=x+rnd(100)+50,y+rnd(80)+40
                    loop
                    repeat
                        mux=mousex:muy=mousey
                        ok1=k1
                        getkey k1,1
                        tk1=k1^ok1&k1
                        if tk1{
                            ;図形の辺や角をクリックする
                            id=-1:type=0
                            repeat objmax
                                ltx=objdt(0,cnt)
                                lty=objdt(1,cnt)
                                rbx=objdt(2,cnt)
                                rby=objdt(3,cnt)
                                if ltx-8<=mux&mux<=rbx+8&lty-8<=muy&muy<rby+8{
                                    id=cnt
                                    if abs(mux-ltx)<8{
                                        type|%0001
                                    }
                                    if abs(muy-lty)<8{
                                        type|%0010
                                    }
                                    if abs(mux-rbx)<8{
                                        type|%0100
                                    }
                                    if abs(muy-rby)<8{
                                        type|%1000
                                    }
                                    if type=0{
                                        type|%1111
                                    }
                                    sltx=mux-objdt(0,cnt)
                                    slty=muy-objdt(1,cnt)
                                    srbx=mux-objdt(2,cnt)
                                    srby=muy-objdt(3,cnt)
                                    break
                                }
                                if id>=0:break
                            loop
                        }
                        if k1{
                            if id>=0{
                                ;伸ばしたり縮めたりする
                                if type&%0001{
                                    objdt(0,id)=mux-sltx
                                }
                                if type&%0010{
                                    objdt(1,id)=muy-slty
                                }
                                if type&%0100{
                                    objdt(2,id)=mux-srbx
                                }
                                if type&%1000{
                                    objdt(3,id)=muy-srby
                                }
                            }
                        }
                        ;描写
                        color 255,255,255:boxf:color
                        repeat objmax
                            ltx=objdt(0,cnt)
                            lty=objdt(1,cnt)
                            rbx=objdt(2,cnt)
                            rby=objdt(3,cnt)
                            boxf ltx,lty,rbx,rby
                        loop
                        redraw:await 17:redraw 0
                    loop

                    0
                      posted by higashijugem 06:49comments(0)|-|