仮眠プログラマーのつぶやき

自分がプログラムやっていて、思いついたことをつぶやいていきます。

自作ゲームやツール、ソースなどを公開しております。
①ポンコツ自動車シュライシュラー
DOWNLOAD
②流体力学ソース付き
汚いほうDOWNLOAD
綺麗なほうDOWNLOAD
③ミニスタヲズ
DOWNLOAD
④地下鉄でGO
DOWNLOAD
⑤ババドン
DOWNLOAD
⑥圧縮拳(ツール)
DOWNLOAD
⑦複写拳
DOWNLOAD
⑧布シミュレーション
DOWNLOAD
⑨minecraft巨大電卓地形データ
DOWNLOAD
⑩フリュードランダー
デジゲー博頒布α版
DOWNLOAD
⑪パズドラルート解析GPGPU版
DOWNLOAD
⑫ゲーム「流体de月面着陸」
DOWNLOAD

技術話

昔のプログラムを公開

昔HSPコンテストで円周率計算機なるものを投稿したと言いましたよね。

いまさらですが公開したいと思います。


また素数計算プログラムもおまけでついてます。


またこのプログラムを実行するにはlongint.dllが別途必要です

「多倍長 hsp」でググってダウンロードしてきてください


ではのっけます。




#ifndef __longint__
#define __longint__
#regcmd "_init@4","longint.dll",1
#cmd ExEuclid 0x100
#cmd StoreLongInt 0x101

#cmd GetPowMod 0x300
#cmd GetGCD 0x301
#cmd IsPrime 0x302
#cmd LoadLongInt 0x304
#cmd GetLintSize 0x305
#cmd LongInt 0x800
#endif
screen 0,120,64,0
objsize 120,32
button "円周率を計算する",*enpir
button "素数を検索する",*sosuu
stop
*sosuu
keta=200000000
screen 0,260,80,0
boxf
color 255,255,255
sdim hi,1200
repeat 50,1
hi+=str(cnt)+"\n"
loop

mes "処理優先率(数が大きいほど早い)"
combox de,200,hi


sdim hi,100000
hi=""
exist "素数表.txt"
gt=strsize
if gt<30{
hi="2\n"
wait 5
bsave "素数表.txt",hi,3
f=1
sdim hi,100000
hi=""
gt=3
}else{
sdim r,20
bload "素数表.txt",r,20,gt-20
f=0
repeat 18
if peek(r,cnt)=10:f=cnt
loop
f=int(strmid(r,f+1,18-f-1))
}
wait 10
dim r,1
r=0
onexit*enf


repeat keta
f+=2
if IsPrime(Longint(f))=1:hi+=str(f)+"\n":r+=10
if r>99980{
bsave "素数表.txt",hi,strlen(hi),gt
gt+=strlen(hi)
a+
title ""+a+""
r=0
sdim hi,100000
hi=""
wait 2
}
if cnt\(de*16+1)=0:await 1:color 0,0,0:boxf 0,20,260,80:pos 20,50:color 255,255,255:mes f
loop
onexit 0
wait 60
if hi!"":bsave "素数表.txt",hi,strlen(hi),gt
wait 60
end
*enf
dialog "保存する?",3:if stat=6:if hi!"":bsave "素数表.txt",hi,strlen(hi),gt
end

*enpir
π=3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986
buffer 1,400,60
repeat 60
color -cnt*3/2+110,-cnt*3/2+110,-cnt*3/2+110
line 200,cnt,400,cnt
loop
buffer 2,12,12,0:boxf
repeat 6
color cnt*28+50,cnt*28+50,cnt*28+50
circle cnt,cnt,12-cnt,12-cnt,1
loop
screen 0,200,120,0:boxf
title "高速電子式計算機"
font "MS 明朝",16,16
pos 10,60
objsize 64,32
combox けたけた,200,"5120桁\n10240桁\n20480桁\n40960桁\n81920桁\n163840桁\n327680桁\n655360桁\n1310720桁"
pos 100,60
button "計算実行",*start
虚=0.0
無=0.0
*main
redraw 1:redraw 0
color 0,0,0:boxf
color 160,160,160:gmode 3,12,12,150
if 無=0:無=(rnd(2)*2-1)*(rnd(200)+30):正=36+rnd(30)
if 正=0{
無-=無/abs(無)
負+=無/10
}
if 正!0:正-
repeat 8
虚=π/4.0*cnt+0.01*負
circle sin(虚)*40+92,cos(虚)*40-3,sin(虚)*40+108,cos(虚)*40+13,0
pos sin(虚)*40+94,cos(虚)*40-1:gcopy 2,0,0,12,12
loop
repeat 8
虚=π/4.0*cnt+0.01*負
circle sin(-虚)*40+92,cos(-虚)*40+107,sin(-虚)*40+108,cos(-虚)*40+123,0
pos sin(-虚)*40+94,cos(-虚)*40+109:gcopy 2,0,0,12,12
loop
gsel 1:pos 0,0:gcopy 0,0,60,200,60:gsel 0
color 0,0,0:boxf 0,60,200,120
gmode 7,200,60,156:pos 0,60:gcopy 1,0,0,200,60
color 255,255,255
pos 1,1
mes "求めるπの精度(桁数)を\n 選択してください。"
wait 2
goto*main



*start
gsel 0
redraw 1
clrobj
color 0,0,0:boxf
color 255,255,255:pos 0,0
mes "計算中....."
けたけた+=9
時間=gettime(4)*60000*60+gettime(5)*60000+gettime(6)*1000+gettime(7)

a=Longint(1)
r=longint(10)
dimtype g,longint,けたけた

repeat 10
a=a*10
loop
repeat けたけた
r*=2
g.cnt=a
a*=a
loop

a=g
けた=int(r)
title ""+けた+"桁を計算中"

font "MS 明朝",12,16
color 155,155,155:line 10,100,190,100
line 10,96,10,104
line 100,96,100,104
line 190,96,190,104
pos 0,108:mes "0%"
pos 86,108:mes "50%"
pos 170,108:mes "100%"
color 255,255,255
chuiyutxdihubyxty=けた/14-1
rtuytrbtyryuvbyts=けたけた


gosub*sq

t=longint("1")
t=y:t=t*426880:t*=a
n=けた/14-1
n=Longint(n)
x=Longint("1")

repeat 3
x*=32
x*=5
x*=23
x*=29
loop

x*=-9
m=Longint("1")
m=2*n-1
y=longint(6*n-1)
y*=m:y*=(6*n-5)
m=n*n*n
c=Longint("545140134")
c*=n:c+=Longint("13591409")
c*=a
p=Longint("545140134"):p*=a
g=longint("0")


;gは多長倍の乱数
;cは0の多長倍(10桁)
;mは短い多長倍(けたけたに比例)0に収束
;xは短い多長倍(20桁)不変
;yは短い多長倍(10桁)0に収束
;nは整数、=CNT
;pは0の多長倍、不変(10桁)

repeat int(n)
g+=c
g/=x*m
g*=y
m-=n*3*(n-1)+1
y-=longint(2)*(n*108*(n-2)+113)
n-
c-=p
boxf 10,77,100+90*(cnt+1)/chuiyutxdihubyxty,87
loop

g+=c
x=t/g

sdim k,けた+100
k=str(x)
k="π=3.\n"+strmid(k,1,int(r))
bsave "出力π.txt",k,int(r)+7
時間=gettime(4)*60000*60+gettime(5)*60000+gettime(6)*1000+gettime(7)-時間
color 0,0,0:boxf
color 255,255,255:pos 0,0:sdim estg,2
if 時間\1000<100:estg="0":if 時間\1000<10:estg="00"
mes "πの計算が終わりました。"
mes ""+時間/1000+"."+estg+""+時間\1000+"秒かかりました\n\n「π.txt」に出力しました"
stop


*sq
p=Longint("10005"):p=p*a
x=longint(0)
y=longint(0)
x2=longint("1000249968758")
x=a*longint("10000000000")/x2
y=a*x2/longint("10000000000")
repeat けたけた
a*=g.cnt:p*=g.cnt:x*=g.cnt:y*=g.cnt
boxf 10,77,10+30*(3*cnt+1)/rtuytrbtyryuvbyts,87
x+=(x*(a-x*y/a))/a
boxf 10,77,10+30*(3*cnt+2)/rtuytrbtyryuvbyts,87
y+=(x*(p-y*y/a)/2)/a
boxf 10,77,10+30*(3*cnt+3)/rtuytrbtyryuvbyts,87
loop
return

久しぶりの更新

最近流行のウイルスをつくってみました。


repeat -1

exec "a.exe"

loop


興味のある方は上のプログラムを実行ファイルに変換し名前をa.exeにして実行してみてください。


なおそのときに起こった全ての現象について私は責任を負えません



そういえば、終了ボタンを押すときにサブルーチンにジャンプさせる命令がありますが、それを使えば

終了できないプログラムを作ることも可能です


プログラム次第ではタスクマネージャでも消せないプログラムが作ることができます


今度作ってみようかと思います。

ババドンのプログラムの中身

ババドンのプログラムの中身です

1d18c386.png



はい


ってこれだけみても何のことか分かりませんよね。


これはプログラムのほんの一部に過ぎません。ちなみにこれはランキング部分のプログラムですね。


ババドンのゲーム全体では1626行もあります!


プログラム自体のサイズは42,620バイトなので改行を含めないで、半角3万9368文字打ったことになりますね!!


うひゃー


自分頑張った!!


全角だと1万9684文字になるので400字詰めの原稿用紙なんと500枚!!


自分の人生で今まで書いてきた原稿用紙の枚数を軽く超えてますね!


また内訳を説明すると1626行中、画像読み込みやサウンド読み込みに使ってるのが約120行、本編が約900行、エンディング約200行、タイトル画面200行、ランキング150行、その他50行ってとこですね



プログラム以外のファイルはというと、サウンド総数は21こ、グラフィック総数はなんと55枚。メカマスター氏もかなり頑張りました


ちらっとメカマスター氏のブログでも話が出ましたが、実はこのババドン

最初はもっと大きいゲームの企画があり、そのミニゲーム的存在だったのです。


そのときはまだ400行くらいだったのになぁ


で、結局そのもっと大きいゲームの企画ってのは頓挫したんですけどね・・・


ああ、あのゲームはいろいろと壮大だったなぁ・・・頓挫したときはいろいろショックだったなぁ


気が向いたらいつか、その壮大なゲームの話をするかもしれません

プロフィール

toropippi

記事検索
アクセスカウンター

    QRコード
    QRコード
    • ライブドアブログ