More ... | HSPベンチマークHSPのベンチマーク the Ackermann functionソース;HSP3用 #module #deffunc A int x, int y if x == 0 { return y + 1 } if y == 0 { A x - 1, 1 return } else { A x, y - 1 A x - 1, stat return } #global #uselib "winmm.dll" #func timeGetTime "timeGetTime" timeGetTime s_time = stat A 3, 4 result = stat timeGetTime e_time = stat mes result mes e_time - s_time 結果
多分、何かのベンチマークrandomize buffer 1 picload "rpg.bmp" screen 0,480,336 *START gmode 2 gosub *SETMAP MESSAGE="" MHP=100 ;主人公のデータ MLEVEL=1 MAT=1 MDF=3 EXP=0 sdim INVENT,128 :INVENT="" ;/■/■/■メインループ/■/■/■ *LOOP1 redraw 0 color 0,0,0 :boxf 0,0,479,335 ;移動ルーチン MDX=0 :MDY=0 stick KY,15,1 if KY=1 :MDX=-1 if KY=4 :MDX=+1 if KY=2 :MDY=-1 if KY=8 :MDY=+1 if KY=16 :gosub *INVENTORY MMX=MX+MDX :MMY=MY+MDY if MAP.MMX.MMY>='タ':gosub *TAKARABAKO if (MAP.MMX.MMY>='ア') and (MAP.MMX.MMY<='コ'):gosub *ENCOUNT if (MAP.MMX.MMY>='a') and (MAP.MMX.MMY<='z') :gosub *PUSHSW if (MAP.MMX.MMY>='A') and (MAP.MMX.MMY<='Z') { S="A" poke S,0,MAP.MMX.MMY MESSAGE=S+"と書かれたドアは閉ざされている" } if MAP.MMX.MMY<'3' {MX=MMX:MY=MMY} if MX<0 :MX=0 if MX>44 :MX=44 if MY<0 :MY=0 if MY>44 :MY=44 ;画面表示 gosub *DRAWMAP color 255,255,255 :pos 0,288 :mes MESSAGE redraw 1 if MHP<=0 :goto *GAMEOVER if MAP.MX.MY='2' :goto *GOAL await 80 goto *LOOP1 ;/■/■/■マップ表示/■/■/■ *DRAWMAP SX=MX-7 if SX<0 :SX=0 if SX>30 :SX=30 SY=MY-4 if SY<0 :SY=0 if SY>36 :SY=36 repeat 9 RCNT=cnt repeat 15 SSX=SX+cnt :SSY=SY+RCNT S=MAP.SSX.SSY if S>='タ' :SS=5 if S<='ソ' :SS=0 if S<='z' :SS=6 if S<='Z' :SS=8 if S<='9' :SS=S-'0' pos cnt*32,RCNT*32 :gcopy 1,32*SS,0,32,32 if (S>='ア')and(S<='ソ') :gcopy 1,ANIM*32+64,32,32,32 loop loop ANIM=ANIM+1 :if ANIM>1 :ANIM=0 pos (MX-SX)*32,(MY-SY)*32 :gcopy 1,ANIM*32,32,32,32 return ;/■/■/■マップ初期化/■/■/■ *SETMAP ASC=0 dim MAP,45,45 alloc MAPS,2115 bload "rpgmap.txt",MAPS repeat 45 RCNT=cnt repeat 45 peek ASC,MAPS,RCNT*47+cnt MAP.cnt.RCNT=ASC if ASC='9' {MX=cnt :MY=RCNT :MAP.cnt.RCNT='0'} loop loop sdim MONDATA,128:notesel MONDATA noteload "monster.txt" sdim ITMDATA,128:notesel ITMDATA noteload "item.txt" return ;/■/■/■スイッチ発見/■/■/■ *PUSHSW S="A" poke S,0,MAP.MMX.MMY S=S+"のスイッチです。\n押しますか?" dialog S,2,"RPG" if stat=7 :return MESSAGE="何も起こらない" SS=MAP.MMX.MMY-32 ;小文字を大文字にする repeat 45 RCNT=cnt repeat 45 if MAP.cnt.RCNT=SS { MAP.cnt.RCNT='1' MESSAGE="どこかでギィッという音がした" } loop loop return ;/■/■/■宝箱発見/■/■/■ *TAKARABAKO dialog "宝箱がある\n開けますか?",2,"RPG" if stat=7 :return ITM=MAP.MMX.MMY-'タ' ;アイテム番号取得 notesel ITMDATA noteget ITEMNAME,ITM*3 noteget S,ITM*3+1 :ITEMTYPE=S noteget S,ITM*3+2 :ITEMVAL=0+S dialog ITEMNAME+"を拾いますか?",2,"RPG" if stat=7 :return if ITEMTYPE="H" { notesel INVENT noteadd ""+ITM,0 notemax SS if SS>6 :notedel 6 } if ITEMTYPE="S" { MAT=ITEMVAL } if ITEMTYPE="A" { MDF=ITEMVAL } MESSAGE=ITEMNAME+"を手に入れた" MAP.MMX.MMY='0' return ;/■/■/■アイテム一覧/■/■/■ *INVENTORY gosub *DRAWMAP redraw 1 color 0,0,0 :boxf 80,40,400,240 color 255,255,255 pos 84,44 :mes "レベル"+MLEVEL+" 体力"+MHP+" 攻撃力"+MAT+" 防御力"+MDF NEXP=(MLEVEL*MLEVEL*MLEVEL*246)-EXP pos 84,60 :mes "経験値"+EXP+"(次のレベルに"+NEXP+"必要)" pos 84,90 :mes "セーブ:S、ロード:L" pos 84,120 :mes "アイテム(使う:A〜F、閉じる:スペース)" notesel INVENT :notemax SS repeat SS notesel INVENT :noteget S,cnt :ITM=0+S notesel ITMDATA :noteget ITEMNAME,ITM*3 S="A":poke S,0,cnt+65 pos 84,cnt*16+136 :mes S+":"+ITEMNAME loop *IVKYLOOP KY=0 repeat SS getkey KY,'A'+cnt if KY=1 { notesel INVENT :noteget S,cnt :ITM=0+S notedel cnt notesel ITMDATA :noteget ITEMNAME,ITM*3 noteget S,ITM*3+2 MHP=MHP+S MAXHP=MLEVEL*30+70 if MHP>MAXHP :MHP=MAXHP MESSAGE=ITEMNAME+"を使った。体力が"+MHP+"に回復した" break } loop if KY=1 :return getkey KY,'S' if KY=1 {gosub *DATASAVE :return} getkey KY,'L' if KY=1 {gosub *DATALOAD :return} stick KY if KY=16 :return wait 5 goto *IVKYLOOP ;/■/■/■データのセーブ/■/■/■ *DATASAVE dim SDATA,7 SDATA.0=MHP :SDATA.1=MLEVEL :SDATA.2=MAT SDATA.3=MDF :SDATA.4=EXP SDATA.5=MX :SDATA.6=MY bsave "save1.dat",SDATA notesel INVENT notesave "save2.dat" bsave "save3.dat",MAP MESSAGE="データをセーブした" return ;/■/■/■データのロード/■/■/■ *DATALOAD dim SDATA,7 bload "save1.dat",SDATA MHP=SDATA.0 :MLEVEL=SDATA.1 :MAT=SDATA.2 MDF=SDATA.3 :EXP=SDATA.4 MX=SDATA.5 :MY=SDATA.6 notesel INVENT noteload "save2.dat" bload "save3.dat",MAP MESSAGE="データをロードした" return ;/■/■/■怪しい気配発見/■/■/■ *ENCOUNT dialog "怪しげな気配がある\n踏み込みますか?",2,"RPG" if stat=7 :return ENCT=MAP.MMX.MMY-'ア' ;モンスター番号取得 buffer 2 :picload "monster"+ENCT+".bmp" gsel 0 notesel MONDATA noteget S,ENCT*6 :ENAME=S noteget S,ENCT*6+1 :EHP=0+S noteget S,ENCT*6+2 :ELEVEL=0+S noteget S,ENCT*6+3 :EAT=0+S noteget S,ENCT*6+4 :EDF=0+S noteget S,ENCT*6+5 :ETMR=0+S gosub *BATTLESTART return ;/■/■/■モンスターとの戦闘/■/■/■ *BATTLESTART gosub *DRAWMAP redraw 1 pos 80,40 :gcopy 2,0,0,320,220 color 255,255,255 :pos 0,288 :mes ENAME+"が現れた" wait 100 ETM=0 *BATTLE ;戦闘 color 0,0,0:boxf 0,288,479,335 color 255,0,0 :pos 0,288 :mes "どうする(攻撃A、防御D、逃げるE)?" color 255,255,255 DICENUM=MLEVEL*2 gosub *DICE *KYLOOP getkey KY,'A' if KY=1 :goto *ATTACK getkey KY,'D' if KY=1 :goto *DEFENCE getkey KY,'E' if KY=1 :goto *ESCAPE wait 5 goto *KYLOOP *ATTACK CMAT=DICEVAL+MAT CMDF=MDF goto *ENEMY *DEFENCE CMAT=0 CMDF=DICEVAL+MDF *ENEMY DICENUM=ELEVEL*2 gosub *DICE RND R,10 if R<ETMR { ETM=ETM+DICEVAL+EAT :CEAT=0 } else { CEAT=DICEVAL+EAT+ETM :ETM=0 } CEDF=EDF ;ダメージ判定 MDAMAGE=CEAT-CMDF :if MDAMAGE<0 :MDAMAGE=0 EDAMAGE=CMAT-CEDF :if EDAMAGE<0 :EDAMAGE=0 MHP=MHP-MDAMAGE :if MHP<0 :MHP=0 EHP=EHP-EDAMAGE :if EHP<0 :EHP=0 color 0,0,0:boxf 0,288,479,335 color 255,255,255 :pos 0,288 mes "あなたの攻撃が敵に" +EDAMAGE+"のダメージを与えた!" wait 50 if (ETM >0)and (EHP>0) { mes "敵は力をためている" } else :mes "敵から"+MDAMAGE+"のダメージを受けた" wait 100 color 0,0,0:boxf 0,288,479,335 color 255,255,255 :pos 0,288 :mes "自分の体力"+MHP+"、敵の体力"+EHP wait 100 if (EHP<=0) and (MHP>0) :goto *BKATI if MHP<=0 :goto *BMAKE goto *BATTLE *ESCAPE MESSAGE="あなたは命からがら逃げ出した" return *BKATI GEXP=ELEVEL*ELEVEL*ELEVEL*49 ;獲得経験値計算 RND R,(GEXP/10) GEXP=GEXP+R-(GEXP/20) EXP=EXP+GEXP NEXP=(MLEVEL*MLEVEL*MLEVEL*246)-EXP color 0,0,0:boxf 0,288,479,335 color 255,255,255 :pos 0,288 :mes ENAME+"を倒した" mes "経験値"+GEXP+"を得た(次のレベルアップに"+NEXP+"必要)" MAP.MMX.MMY='0' if NEXP<=0 { wait 100 color 0,0,0:boxf 0,288,479,335 color 255,255,255 :pos 0,288 :mes "レベルアップ!" MLEVEL=MLEVEL+1 } MESSAGE="" wait 200 return *BMAKE color 0,0,0:boxf 0,288,479,335 color 255,255,255 :pos 0,288 :mes "あなたは敵に敗れた" MESSAGE="" wait 200 return ;/■/■/■サイコロ投げ/■/■/■ *DICE DICEVAL=0 repeat DICENUM RND R,6 DICEVAL=DICEVAL+R+1 loop return ;/■/■/■ゲームクリアー/■/■/■ *GOAL color 0,200,255 :font "MS ゴシック",30,1 pos 140,140 :mes "STAGECLEAR" wait 400 END ;/■/■/■ゲームオーバー/■/■/■ *GAMEOVER color 255,0,0 :font "MS ゴシック",30,1 pos 160,160 :mes "GAMEOVER" wait 200 sysfont dialog "REPLAY?",2,"GAMEOVER" if stat=6 : goto *START end |