飞行射击游戏制作实例,使用HSP
素材和脚本下载:http://bbs.emu-zone.org/newbbs/viewthread.php?tid=175079这个实例的版本为1.0~~
最新版本为3.0~~因为1.0这个版本的程序比较容易理解~~
而3.0涉及到DirectX的!~~
所以大家先从简单开始!~~以后才放出3.0的汉化版本!~~
说明一下压缩包内的文件:
日文原版.as--------------日文原版的脚本
中文汉化.as--------------中文汉化后的脚本
飞行射击实例.exe------通过HSP编译后的游戏执行文件
dmg.wav, exp.wav, INT01.MID, kin.wav, shot.wav, sample.bmp------游戏中所使用的音乐图片素材!~~
以下是游戏的脚本:
; 射击游戏脚本
; by たかのん 汉化:sdlhm520
; HSP v2.61 制作引擎
;■ 初期设定
screen 0,640,480,1 ;设置游戏画面大小
title "射击游戏范例 by たかのん 汉化:sdlhm520 "
highscore=5000
*gamestart
cls 4
randomize
move=5 ;指定我方飞机移动速度
smax=50 ;星星的最大数
emax=50 ;敌机的最大数
tmax=200 ;敌机子弹的最大数
wmax=3 ;我方飞机子弹的最大数
imax=10 ;倍数显示的最大数
vmax=10 ;信息显示的最大数
bmax=10 ;爆炸最大数
level=1 ;等级水平(难易度)
;■ 排列定义
dim sx,smax ;星的X坐标
dim sy,smax ;星的Y坐标
dim sc,smax ;星的颜色
dim ss,smax ;星的移动速度
dim ex,emax ;敌机的X坐标
dim ey,emax ;敌机的Y坐标
dim ef,emax ;敌机的生死
dim en,emax ;敌机的种类
dim exv,emax ;敌机X方向移动量
dim eyv,emax ;敌机Y方向移动量
dim et,emax ;敌人出现的时间
dim tx,tmax ;敌机子弹的X坐标
dim ty,tmax ;敌机子弹的Y坐标
dim tf,tmax ;敌机子弹on/off
dim txv,tmax ;敌机子弹X方向移动量
dim tyv,tmax ;敌机子弹Y方向移动量
dim wx,wmax ;我方子弹的X轴坐标
dim wy,wmax ;我方子弹的Y轴坐标
dim wf,wmax ;我方子弹on/off
dim wyv,wmax ;我方子弹的Y轴移动量
dim ix,imax ;倍数X轴坐标
dim iy,imax ;倍数Y轴坐标
dim iff,imax ;倍数显示时间
dim iv,imax ;倍数字体大小
dim bx,bmax ;爆炸X轴坐标
dim by,bmax ;爆炸Y轴坐标
dim bf,bmax ;爆炸出现的时间
;■ 载入游戏图象的素材
buffer 2,640,480,1
pos 0,0
picload "sample.bmp",1
;■ 载入效果声音和背景音乐
sndload "Int01.mid",0,1
sndload "dmg.wav",1,0
sndload "exp.wav",2,0
sndload "shot.wav",3,0
sndload "kin.wav",4,0
;■ 星的准备
repeat smax
rnd sx.cnt,640
rnd sy.cnt,480
rnd sc.cnt,8
ss.cnt=sc.cnt+3
sc.cnt=sc.cnt*32+31
loop
;■ 平方根的准备
dim calc,900
repeat 900
temp=cnt : calc.cnt=temp*temp
loop
;■ 启动前的准备
mx=295 : my=400 ;指定我方飞机的初期坐标
mf=8 ;指定我方飞机能量大小
gameovertime=0
score=0
frame=0
highdst=0
snd 0
gsel 0,1
palcopy 2
gmode 2
;■ 主程序
*main
redraw 2
color bgcolor,0,0 : bgcolor=0 ;指定背景颜色
boxf 0,0,640,480
gosub *message ;游戏信息
gosub *xingxing ;星星的移动
gosub *wojimove ;我方移動
gosub *weapon ;我方子弾
if frame(25-level)=0 : gosub *enemyborn ;敌机出现
gosub *enemymove ;敌机移动
gosub *dijizidanmove ;敌机子弹移动
if pat&128>0 : gosub *pausegame ;暂停
getkey returntop,121 : if returntop=1 : end ;强制结束(F10)
if mf<1 : mxv=0 : myv=0 : gameovertime++ : gosub *bomb
if gameovertime>100 : goto *gameover
await 30
redraw 1
frame++
level=frame/500+1
if level>20 : level=20
goto *main
;■ 我方移动
*wojimove
if mf>0 : stick pat,79
shottime--
if mf>0 : if (pat&64>0)&(shottime<0) : shot=1
xv=(pat>>2&1)-(pat&1)
yv=(pat>>3&1)-(pat>>1&1)
if mf>0 : mx=xv*move+mx : my=yv*move+my
if mx<0 : mx=0
if mx>590 : mx=590
if my<0 : my=0
if my>430 : my=430
pos mx,my : gcopy 2,xv*50+50,0,50,50
return
;■ 星星的移动
*xingxing
repeat smax
color sc.cnt,sc.cnt,sc.cnt
sy.cnt=sy.cnt+ss.cnt
if sy.cnt>480 : sy.cnt=0 : rnd sx.cnt,640
pset sx.cnt,sy.cnt
loop
return
;■ 我方子弹发射
*weapon
repeat wmax
if (shot=1)&(wf.cnt<1) {
wf.cnt=1
wx.cnt=mx+12
wy.cnt=my-40
shot=0
shottime=1
snd 3
}
if wf.cnt<1 : continue
pos wx.cnt,wy.cnt : gcopy 2,150,0,25,50
wy.cnt=wy.cnt-40
if wy.cnt<-50 : wf.cnt=0
loop
return
;■ 敌机出现
*enemyborn
rnd temp,7
if temp=0 : return
repeat emax
if ef.cnt>0 : continue
if temp=1 : en.cnt=1
if temp=2 : en.cnt=1
if temp=3 : en.cnt=1
if temp=4 : en.cnt=2
if temp=5 : en.cnt=2
if temp=6 : en.cnt=3
ef.cnt=en.cnt ; 固さ
rnd ex.cnt,640 ; 初期出现位置X轴
ey.cnt=-50 ; 初期出现位置Y轴
exv.cnt=0 ; 初期移动量X轴
eyv.cnt=10 ; 初期移动量Y轴
et.cnt=0
break
loop
return
;■ 敌机移动
*enemymove
repeat emax
et.cnt++
if ef.cnt<1 : continue
ent=cnt
repeat wmax
if wf.cnt<1 : continue
ddx=(ex.ent+25)-(wx.cnt+12) : if ddx<0 : ddx=-ddx
ddy=(ey.ent+25)-(wy.cnt+25) : if ddy<0 : ddy=-ddy
if (ddx>=0)&(ddx<20)&(ddy>=0)&(ddy<40) {
ef.ent-- : wf.cnt=0
if ef.ent>0 {
pos wx.cnt,wy.cnt
gcopy 2,175,25,25,25
snd 4
score++
}
else {
pos ex.ent,ey.ent
gcopy 2,200,0,50,50
snd 2
gosub *messageborn
}
}
loop
if en.cnt=1 : gosub *enemy1
if en.cnt=2 : gosub *enemy2
if en.cnt=3 : gosub *enemy3
loop
return
;■ 敌机 1
*enemy1
pos ex.cnt,ey.cnt : gcopy 2,250,0,50,50
dx=mx-ex.cnt
dy=my-ey.cnt
if dy<350 {
if dx<0 {
exv.cnt=exv.cnt-1
if exv.cnt<-25 : exv.cnt=-25
}
else {
exv.cnt=exv.cnt+1
if exv.cnt>25 : exv.cnt=25
}
}
if dx<0 : dx=-dx
if dx<50 : gosub *tamaborn
eyv.cnt=4
ex.cnt=ex.cnt+exv.cnt
ey.cnt=ey.cnt+eyv.cnt
if ex.cnt<-50 : ef.cnt=0
if ex.cnt>640 : ef.cnt=0
if ey.cnt<-50 : ef.cnt=0
if ey.cnt>480 : ef.cnt=0
return
;■ 敌机 2
*enemy2
pos ex.cnt,ey.cnt : gcopy 2,300,0,50,50
dx=mx-ex.cnt
if et.cnt<2 {
if dx<0 {
exv.cnt=-6
}
else {
exv.cnt=6
}
}
if et.cnt>25 : eyv.cnt-- : if eyv.cnt<-10 : eyv.cnt=-10
if ey.cnt>200 : gosub *tamaborn
ex.cnt=ex.cnt+exv.cnt
ey.cnt=ey.cnt+eyv.cnt
if ex.cnt<-50 : ef.cnt=0
if ex.cnt>640 : ef.cnt=0
if ey.cnt<-50 : ef.cnt=0
if ey.cnt>480 : ef.cnt=0
return;
■ 敌机 3
*enemy3
pos ex.cnt,ey.cnt : gcopy 2,350,0,50,50
dx=mx-ex.cnt
if et.cnt<2 {
if dx<0 {
exv.cnt=-3
}
else {
exv.cnt=3
}
}
if ey.cnt>200 : eyv.cnt--
if et.cnt>20 : if ey.cnt<50 : eyv.cnt++
if ey.cnt>200 : gosub *tamaborn
if et.cnt>20 : if ey.cnt<50 : gosub *tamaborn
ex.cnt=ex.cnt+exv.cnt
ey.cnt=ey.cnt+eyv.cnt
if ex.cnt<-50 : ef.cnt=0
if ex.cnt>640 : ef.cnt=0
if ey.cnt<-50 : ef.cnt=0
if ey.cnt>480 : ef.cnt=0
return
;■ 敌机子弹发射
*tamaborn
if frame(8-(level/4))>0 : return
dx=mx-ex.cnt : px=dx : if dx<0 : dx=0-dx
dy=my-ey.cnt : py=dy : if dy<0 : dy=0-dy
dst=(dx*dx)+(dy*dy)
edx=ex.cnt+12 : edy=ey.cnt+12
repeat 900
if dst<calc.cnt : dst=cnt : break
loop
repeat tmax
if tf.cnt>0 : continue
tf.cnt=1
tx.cnt=edx : ty.cnt=edy
rnd ds,8 : ds=level/5+3+ds
txv.cnt=px*ds/dst
tyv.cnt=py*ds/dst
break
loop
return
;■ 敌机子弹移动 & 击中判断
*dijizidanmove
repeat tmax
if tf.cnt<1 : continue
tx.cnt=tx.cnt+txv.cnt
ty.cnt=ty.cnt+tyv.cnt
if tx.cnt>640 : tf.cnt=0 : continue
if tx.cnt<-25 : tf.cnt=0 : continue
if ty.cnt>480 : tf.cnt=0 : continue
if ty.cnt<-25 : tf.cnt=0 : continue
pos tx.cnt,ty.cnt : gcopy 2,175,0,25,25
dx=(mx+25)-(tx.cnt+12) : if dx<0 : dx=-dx
dy=(my+25)-(ty.cnt+12) : if dy<0 : dy=-dy
if (dx>=0)&(dx<10)&(dy>=0)&(dy<10) {
repeat tmax : tf.cnt-- : loop
pos tx.cnt,ty.cnt
gcopy 2,175,25,25,25
bgcolor=128
snd 1
mf--
}
if (dx>=10)&(dx<40)&(dy>=10)&(dy<40) : score++
loop
return
;■ 倍率显示
*messageborn
dmy=my-ey.ent : if dmy<0 : dmy=-dmy
dstv=480-dmy/50
if highdst<dstv : highdst=dstv
dstlevel=level
dstcore=dstv*dstlevel
score=en.ent*100*dstcore+score
repeat imax
if iff.cnt>0 : continue
ix.cnt=ex.ent
iy.cnt=ey.ent
iv.cnt=dstv
iff.cnt=20
il.cnt=dstlevel
realscore=en.ebt*100
break
loop
return
;■ 游戏信息
*message
repeat imax
if iff.cnt<1 : continue
rnd icr,8 : icr=icr*32+31
rnd icg,8 : icg=icg*32+31
rnd icb,8 : icb=icb*32+31
color icr,icg,icb
font "SimHei",iv.cnt*2+8,1
pos ix.cnt,iy.cnt
mes "× "+iv.cnt
iy.cnt++
iff.cnt--
loop
font "SimHei",15,1
if highscore<score : highscore=score
color 0,255,255
pos 10,10 : mes "最高分 "+highscore
color 255,255,255
pos 10,30 : mes "得分 "+score
color 0,255,0
pos 10,50
mes "HIGH DISTANCE "+highdst
color 255,255,0
pos 10,70
mes "等级 "+level
color 255,255,255
pos 10,450
mes "能量 "
if mf<1 : return
repeat mf
color 255,cnt*32,0
pos cnt*10+60,450
mes "■ "
loop
return
;■ 我机爆炸
*bomb
repeat bmax
bf.cnt--
if bf.cnt<1 {
rnd bf.cnt,10 : bf.cnt=bf.cnt+10
rnd bx.cnt,50 : bx.cnt=25-bx.cnt+mx
rnd by.cnt,50 : by.cnt=25-by.cnt+my
}
pos bx.cnt,by.cnt
gcopy 2,200,0,50,50
rnd dbx,10 : dbx=dbx-5
bx.cnt=bx.cnt+dbx
by.cnt=by.cnt+10
loop
rnd effect,10
if effect=0 : snd 1 : bgcolor=128
if effect=1 : snd 2 : bgcolor=255
return
;■ 暂停处理
*pausegame
redraw 2
font "SimHei",40,1
rnd icr,8 : icr=icr*32+31
rnd icg,8 : icg=icg*32+31
rnd icb,8 : icb=icb*32+31
color icr,icg,icb
pos 270,200 : mes "暂停 "
stick pat : if pat&128>0 : return
getkey returntop,121 : if returntop=1 : end ; 强制结束(F10)
await 30
redraw 1
goto *pausegame
;■ 游戏结束
*gameover
redraw 2
font "SimHei ",40,1
rnd icr,8 : icr=icr*32+31
rnd icg,8 : icg=icg*32+31
rnd icb,8 : icb=icb*32+31
color icr,icg,icb
pos 230,200 : mes "游戏结束 "
pos 140,250 : mes "按 Enter 重新开始 "
stick pat : if pat&32>0 : sndoff : wait 10 : goto *gamestart
getkey returntop,121 : if returntop=1 : end ; 强制结束(F10)
await 30
redraw 1
goto *gameover 好厉害
看不懂
同楼上~~~~~~~~~~~~~ 我说,不要老是掘古墓嘛 其實...HSP提供了比RMXP更多的彈性和更好的支持,
只是沒有一個整合編輯器而已,但是BASIC語言的難度不會比RGSS高 等待3.0...... http://www.onionsoft.net/hsp/
目前3.1beta 看到这帖就想起以前无聊弄的一个仅花了一小时的东西,顺便也贴一下吧,虽然现在看来写得实在是烂
;HSP 2.61 script,STG sample by Advance(LOVEHINA-AVC)
;使用比GetTickCount更为精确的取时函数
;后记:反汇编了一下,其实这东西用的就是GetTickCount,我寒
#uselib "dsoundex.hpi"
#func ds_timer timer $0
;为子弹的状态判断定义常量
#define SC_EMPTY 0
#define SC_USED 1
#define SC_HITED 2
#define SC_MOVING 4
#define SC_STOP 8
#define SC_DISAPPEARING 16
#define SC_CREATING 32
;初始化窗体,开启随机取SEED
*InitWindow
x = dispx - 320 >> 1
y = dispy - 240 >> 1
screen 0,320,240,6,x,y
FPS_DrawSync = 0
title "刷新间隔:0毫秒|FPS:0"
color 0,0,0
boxf
randomize
;建立图片数据
*BulidData
buffer 2,13,13
color 255,255,255
boxf
color 255,0,0
boxf 6,6,7,7
buffer 3,8,8
color 230,0,0
boxf
color 255,255,255
boxf 2,2,5,5
buffer 4,15,15
color 0,0,230
boxf
color 255,255,255
boxf 3,3,11,11
buffer 5,30,30
color 230,230,0
boxf
color 255,255,255
boxf 8,8,22,22
;判定区域&描绘区域
SO_HitBox_Leftup = 6
SO_HitBox_RightDown = 7
ES_HitBox_LeftUp = 2,3,8
ES_HitBox_RightDown = 5,11,22
ES_DrawRect_Width = 8,15,30
ES_DrawRect_Height = 8,15,30
ExtraBorder = 64
;初始化环境参数
ES_Max = 50
dim ES_Pos_X,512
dim ES_Pos_Y,512
dim ES_Status,512
dim ES_Type,512
dim ES_Aim_X,512
dim ES_Aim_Y,512
dim ES_Move_X,512
dim ES_Move_Y,512
SO_Pos_X = 320 - 13 >> 1
SO_Pos_Y = 240 - 13 >> 1
ISHited = 0
;是否锁帧
FPS_IsLockIn60 = 1
;准备好平方根数据以节省CPU开支
dim SquareRoot,320 + 240 + (ExtraBorder << 2)
repeat 320 + 240 + (ExtraBorder << 2)
SquareRoot.cnt = cnt * cnt
loop
;以下描绘部分为GDI+
*Start
gsel 0,1
gmode 1,13,13
pos SO_Pos_X,SO_Pos_Y
gcopy 2
ds_timer
if stat < 0 {
FPS_Timer_Now = stat + 2147483647
} else {
FPS_Timer_Now = stat
}
Start_Time = FPS_Timer_Now
LeveUp_Timer = FPS_Timer_Now
FPS_Original_Timer = FPS_Timer_Now
*GameLoop
if FPS_ISLockIn60 {
ds_timer
if stat < 0 {
FPS_Timer_Now = stat + 2147483647
} else {
FPS_Timer_Now = stat
}
FPS_Template_Timer = FPS_Timer_Now
}
;停止刷新窗体客户区,开始内存搬运
gsel 0
redraw 0
*CreateNewBullet
repeat ES_Max
if ES_Status.cnt = SC_EMPTY {
Now = cnt
ES_Status.Now = SC_USED | SC_MOVING
;挑一个大小随机的子弹
rnd ES_Type.Now,3
;分配初始位置(在可视范围之外的四周,同特训救救)
rnd nTemp,2
if nTemp {
rnd nTemp,ExtraBorder << 1
if nTemp < ExtraBorder {
ES_Pos_X.Now = -nTemp >> 1
} else {
ES_Pos_X.Now = 320 + (nTemp >> 1)
}
rnd ES_Pos_Y.Now,240
} else {
rnd nTemp,ExtraBorder << 1
if nTemp < ExtraBorder {
ES_Pos_Y.Now = -nTemp >> 1
} else {
ES_Pos_Y.Now = 240 + (nTemp >> 1)
}
rnd ES_Pos_X.Now,320
}
ES_Aim_X.Now = SO_Pos_X
ES_Aim_Y.Now = SO_Pos_Y
rnd nTemp,3
ES_Speed = nTemp + 1
;确定移动方向和移动量(如需精确瞄准某处,移动量需以浮点表示或反复计算)
Dest_Pos_X = ES_Aim_X.Now - ES_Pos_X.Now
Dest_Pos_Y = ES_Aim_Y.Now - ES_Pos_Y.Now
nTemp = Dest_Pos_X * Dest_Pos_X + (Dest_Pos_Y * Dest_Pos_Y)
repeat 320 + 240 + (ExtraBorder << 2)
if nTemp < SquareRoot.cnt {
Dest_Movement = cnt
break
}
loop
ES_Move_X.Now = (Dest_Pos_X * ES_Speed / Dest_Movement)
ES_Move_Y.Now = (Dest_Pos_Y * ES_Speed / Dest_Movement)
;丢弃无效的子弹
if (ES_Move_X.Now = 0) | (ES_Move_Y.Now = 0) : ES_Status.Now = SC_EMPTY
}
loop
*KeyCheck
;自机移动检测
getkey Key_ShiftFlag,16
getkey Key_Status_Left,37
getkey Key_Status_Up,38
getkey Key_Status_Right,39
getkey Key_Status_Down,40
getkey Key_Status_Esc,27
if Key_Status_Esc : end
;慢移2星快移6星,沙沙的标准速度XD
if Key_Status_Left {
if Key_ShiftFlag : SO_Pos_X -= 2 : else : SO_Pos_X -= 6
}
if Key_Status_Up {
if Key_ShiftFlag : SO_Pos_Y -= 2 : else : SO_Pos_Y -= 6
}
if Key_Status_Right {
if Key_ShiftFlag : SO_Pos_X += 2 : else : SO_Pos_X += 6
}
if Key_Status_Down {
if Key_ShiftFlag : SO_Pos_Y += 2 : else : SO_Pos_Y += 6
}
;斜角移动速度修正(这里不使用浮点)
if Key_Status_Left & Key_Status_Up {
if Key_ShiftFlag {
SO_Pos_X += 1
So_Pos_Y += 1
} else {
SO_Pos_X += 2
So_Pos_Y += 2
}
}
if Key_Status_Right & Key_Status_Up {
if Key_ShiftFlag {
SO_Pos_X -= 1
So_Pos_Y += 1
} else {
SO_Pos_X -= 2
So_Pos_Y += 2
}
}
if Key_Status_Left & Key_Status_Down {
if Key_ShiftFlag {
SO_Pos_X += 1
So_Pos_Y -= 1
} else {
SO_Pos_X += 2
So_Pos_Y -= 2
}
}
if Key_Status_Right & Key_Status_Down {
if Key_ShiftFlag {
SO_Pos_X -= 1
So_Pos_Y -= 1
} else {
SO_Pos_X -= 2
So_Pos_Y -= 2
}
}
;边缘保证
if SO_Pos_X < 0 : SO_Pos_X = 0
if SO_Pos_Y < 0 : SO_Pos_Y = 0
if SO_Pos_X > (320 - 13) : SO_Pos_X = 320 - 13
if SO_Pos_Y > (240 - 13) : SO_Pos_Y = 240 - 13
*DrawBullet
;先刷干净,星星之类的东西我就不涂了
color 0,0,0
boxf
repeat ES_Max
if ES_Status.cnt & SC_USED = 1 {
Now = cnt
ES_Pos_X.Now += ES_Move_X.Now
ES_Pos_Y.Now += ES_Move_Y.Now
nTemp = ES_Type.cnt
gmode 1,ES_DrawRect_Width.nTemp,ES_DrawRect_Height.nTemp
pos ES_Pos_X.Now,ES_Pos_Y.Now
gcopy nTemp + 3
;出界了就TF,空出被占用的位置
if (ES_Pos_X.Now < (-ExtraBorder)) | (ES_Pos_Y.Now < (-ExtraBorder)) | (ES_Pos_X.Now > (320 + ExtraBorder)) | (ES_Pos_Y.Now > (240 + ExtraBorder)) {
ES_Status.Now = SC_EMPTY
}
;中弹判定
nTemp = ES_Type.Now
if ES_Pos_X.Now + ES_HitBox_RightDown.nTemp >= (SO_Pos_X + SO_HitBox_LeftUp) {
if ES_Pos_X.Now + ES_HitBox_LeftUp.nTemp <= (SO_Pos_X + SO_HitBox_RightDown) {
if ES_Pos_Y.Now + ES_HitBox_RightDown.nTemp >= (SO_Pos_Y + SO_HitBox_LeftUp) {
if ES_Pos_Y.Now + ES_HitBox_LeftUp.nTemp <= (SO_Pos_Y + SO_HitBox_RightDown) {
ISHited = 1
}
}
}
}
}
loop
if ISHited : goto GameOver
*DrawSelf
gmode 1,13,13
pos SO_Pos_X,SO_Pos_Y
gcopy 2
redraw 1
FPS_Now ++
;延迟锁帧
ds_timer
if stat < 0 {
FPS_Timer_Now = stat + 2147483647
} else {
FPS_Timer_Now = stat
}
if FPS_IsLockIn60 {
FPS_DrawSync = 16 - (FPS_Timer_Now - FPS_Template_Timer)
if FPS_DrawSync < 0 : FPS_DrawSync = 0
FPS_Template_Timer = FPS_Timer_Now
repeat
ds_timer
if stat < 0 {
FPS_Timer_Now = stat + 2147483647
} else {
FPS_Timer_Now = stat
}
if FPS_Timer_Now - FPS_Template_Timer >= FPS_DrawSync : break
await 0,1
loop
} else {
await 0,1
}
*CalculateFPS
;计算FPS
if FPS_Timer_Now - FPS_Original_Timer >= 1000 {
;每隔一秒刷新一次FPS记录并增加最大弹数
if ES_Max < 512 : ES_Max ++
FPS_Original_Timer = FPS_Timer_Now
title "刷新间隔:" + FPS_DrawSync + "毫秒|FPS:" + FPS_Now
FPS_Now = 0
}
goto GameLoop
*GameOver
ds_timer
if stat < 0 {
FPS_Timer_Now = stat + 2147483647
} else {
FPS_Timer_Now = stat
}
nTemp = FPS_Timer_Now - Start_Time / 1000
nTemp2 = FPS_Timer_Now - Start_Time \\ 1000
buffer 2,320,240
color 0,0,0
boxf
gsel 0
gmode 3,320,240,128
pos 0,0
gcopy 2
color 255,255,255
font "",32
pos 40,70
mes "你坚持了" + nTemp + "." + nTemp2 + "秒 "
pos 10,110
mes "按ENTER键再试一遍 "
redraw 1
repeat
stick nTemp
if nTemp = 32 : break
await 10
loop
goto BulidData
從樓主的發帖時間起算...快兩年了,HSP的漢化到底..
http://www.ppxbbs.com/archiver/?tid-168961.html
而這是結果....
雖然不用HSP了偶爾還會關注一下...
页:
[1]