HSPソースコードとかいろいろ
HSPのver.3コードを公開していくブログです
2016年4月8日金曜日
2014年9月22日月曜日
リーグ戦の組み合わせ作成プログラム
;hsp3.21
;league.as 03.12.29
;リーグ戦組み合わせ表
;#include "debug.as"
font "MS ゴシック",16: objmode 2
file="league.txt" ;出力ファイル
mes "チーム数を入力してください。"
input nteam
button "OK",*l_ok
*l_reinput
objsel 0: c=-1: sendmsg objinfo(0,2),177,0,varptr(c)
repeat: wait 1
stick c,,1
if c==32 {
break
}
loop
*l_ok
if nteam\2|(nteam<4)|(nteam>98) {
dialog "4~98の偶数を入力してください"
goto *l_reinput
}
cls
mes "このウィンドウに表示されるのは進捗状況です。"
mes "結果は"+file+"に出力されます。"
mes "表は、例えば、第0日の第1試合はチーム0とチーム1が対戦するという意味です"
mes "途中で終了させても、そこまでの結果は出力されます"
;nteam=6 ;チーム数
days=nteam-1 ;日数
ngame=nteam/2 ;1日の試合数
sdim buf,(days*6+2)*(ngame+2)+100
sdim s,days*6+1
bsave file,buf,1
;↑後のbsaveはファイルがないとエラーになるので、とりあえずファイルを作る
dim teamA,days,ngame ;第i日第j試合の対戦チームA
dim teamB,days,ngame ;第i日第j試合の対戦チームB
dim taisen,nteam,nteam ;対戦済みフラグ
dim use,days,nteam ;その日にチームを使ったことのフラグ
;taisen初期化(i==jについて1にする)
repeat nteam: taisen.cnt.cnt=1: loop
;表示
gosub *l_head
repeat days,1
if cnt>9 { s=" " } else { s=" " }
buf+=" 0-"+cnt+s
loop
mes buf
;メイン
iday=0
repeat ;日付ごとのループ
title "iday="+iday+" 解数="+nsol
if flg!=2 { ;正解が見つかって戻ったのでなければ
;第0試合を固定する(常にteamA.iday.0=0)
c=iday+1
teamB.iday.0=c ;0の相手は常にiday+1
use.iday.0=1: use.iday.c=1: taisen.0.c=1: taisen.c.0=1
base=1: igame=1
;第1試合以降
}
repeat ;1試合ごとのループ
await
if flg!=2 { ;次の試合から戻ったのでなければ
;teamAを探す(使ってないだけで十分)
flg=0
repeat: if base>=nteam {
break
}
if use.iday.base==0 {
flg=1
a=base ;仮のteamA
break
}
base++
loop
}
if flg { ;teamAが見つかったとき
flg=0
;teamBを探す(使っていず、aと対戦していないチーム)
repeat: base++: if base>=nteam {
break
}
if use.iday.base==0 { if taisen.a.base==0 {
flg=1
break
} }
loop
if flg { ;teamBが見つかったとき
teamA.iday.igame=a
teamB.iday.igame=base
use.iday.a=1: use.iday.base=1
taisen.a.base=1: taisen.base.a=1
;表示
x=iday*48+8: y=igame*16+96
color 255,255,255: boxf x,y,x+40,y+15
color: pos x,y: mes ""+a+"-"+base
;次の試合の準備
igame++
if igame>=ngame {
break
}
base=a+1 ;次の試合のteamAはこの試合のteamAの次から探す
;↑この試合のteamBに使えなくても次の試合のteamAには
;↑使えるかもしれない。
} else { ;teamBが見つからなかったとき
base=a+1 ;この試合のteamAを探し直す
}
} else { ;teamAを終わりまで調べたとき
igame--
if igame>=1 {
;前の試合に戻る
gosub *l_clrgame
} else {
iday--
if iday>=0 {
;前の日の最後の試合に戻る
igame=ngame-1
gosub *l_clrgame
} else {
buf="組み合わせ数="+nsol+"\n"
l=strlen(buf)
bsave file,buf,l,fp
pos 0,ngame*16+112: mes "組み合わせ数="+nsol
mes "終了しました"
stop
}
}
}
loop
iday++
if iday>=days { ;正解発見
gosub *l_head
i=0
repeat ngame
repeat days
if teamA.cnt.i>9 { s=" " } else { s=" " }
if teamB.cnt.i>9 { t="-" } else { t="- " }
buf+=s+teamA.cnt.i+t+teamB.cnt.i
loop
buf+="\n"
i++
loop
buf+="\n"
l=strlen(buf)
bsave file,buf,l,fp: fp+=l
nsol++
;最終日の最後の試合に戻る
iday--
igame=ngame-1
gosub *l_clrgame
}
loop
end ;ここには来ない
*l_head
buf="": s=""
repeat days
if cnt>9 { t=" " } else { t=" " }
buf+=t+cnt+" "
s+="------"
loop
buf+="\n"+s+"\n"
return
*l_clrgame
flg=2
;別のteamBを探す
a=teamA.iday.igame
base=teamB.iday.igame
;useとtaisenを戻す
use.iday.a=0: use.iday.base=0
taisen.a.base=0: taisen.base.a=0
return
;試し表示
iday=0: base=0
repeat days
n=base
repeat ngame
teamA.iday.cnt=n: n++
teamB.iday.cnt=n: n++
if n>9 {
n=0
}
loop
iday++: base+=2: if base>9 {
base=0
}
loop
mes " 0 1 2 3 4 5 6 7 8"
mes "---------------------------"
i=0: y=32
repeat ngame: x=0
repeat days
pos x,y: mes " "+teamA.cnt.i+teamB.cnt.i
x+=24
loop
i++: y+=16
loop
stop
8チーム以上だと遅くなります
カレンダー(一部バグあり)
;hsp3.21
;
#include "anthspex3.as"
;↓added by hsp2to3
dim br,16
sdim s,64
sdim t,64
sdim u,64
;↑added by hsp2to3
;このカレンダーは、以下のことを事実と考えて作られています
;・紀元前46年からユリウス暦(したがって、それ以前の動作は未定義)
;・紀元前44年から紀元前8年まで、誤って3年ごとに13の閏年が設けられた
;・上記の誤りを正すため、紀元前5年、紀元前1年、西暦4年は閏年にしなかった
;・紀元前1年の翌年は西暦1年
;・1582年10月4日の翌日は10月15日で、この日からグレゴリオ暦
; (実際の採用は国によって異なる)
;※日本については1873年1月1日から有効
fsize=16
hw=fsize+4 ;1日分の高さ
bday=fsize+8 ;1日分の横幅
bmon=bday*7+8 ;1月分の横幅
;各月の日数
dim mday,13
;mday.2(2月の日数)は後で書き換える
mday=0,31,28,31,30,31,30,31,31,30,31,30,31
;国民の祝日
nholiday=15
dim holidaym,nholiday
dim holidayd,nholiday
dim holidayw,nholiday
dim holidayy,nholiday
;↓後で年による修正が行なわれる
; 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
holidaym=1,1, 2,3, 4,5,5,5,7,9, 9,10,11,11,12
holidayd=1,0,11,0,29,3,4,5,0,0, 0, 0, 3,23,23
holidayw=0,2, 0,0, 0,0,0,0,3,3, 0, 2, 0, 0, 0
;holidayd=0 は春分・秋分・第n月曜
;holidaywは第何月曜か
;有効開始年
; 正月 成人 建国 春分 昭和 憲法 みど 子供 海 敬老 秋分 体育 文化 勤労 天皇
; 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
holidayy=1873,1948,1873,1948,1912,1948,1985,1948,1996,1966,1948,1966,1873,1948,1989
;画面
wid=bmon*4+16: heit=(8*3+3)*hw
screen 0,wid,heit,,(ginfo_dispx-wid)/2,(ginfo_dispy-heit)/2
title "-46年(日本では1873年)から有効なカレンダー"
getsyscolor br,15: if br==192 {
br--
}
dup bg,br.1: if bg==192 {
bg--
}
dup bb,br.2: if bb==192 {
bb--
}
color br,bg,bb: boxf
font "MS ゴシック",fsize: color
year=gettime(0)
wyear=fsize*2+10: hyear=fsize
objh=fsize+8
btw=fsize+8: objsize btw
x=(wid-(btw*2+wyear+44))/2: y=8
pos x,y: button "←", *l_back: x+=btw+4: btleft=oid: oid++
inyear=""+year
xyear=x: yyear=y+4
pos x,y: input inyear,wyear,objh,4: x+=wyear: inid=oid: oid++
pos x,y+4: mes "年": x+=fsize+4
pos x,y: button "→", *l_forw: x+=btw+4: btrit=oid: oid++
begy=y+32
*l_restart
if year<0 {
if year<-7 { ;-8年以前
if year\3==-2 {
mday.2=29
} else {
mday.2=28
}
} else { ;~-1年
mday.2=28
}
} else { if year\4!=0 { ;4の倍数でない
mday.2=28
} else { if year\400==0 { ;400の倍数
mday.2=29
} else { if year\100==0 { ;100の倍数
if year<1582 {
mday.2=29
} else {
mday.2=28
}
} else { if year!=4 { ;4年でない
mday.2=29
} else { ;4年
mday.2=28
} } } } }
if year>1872 {
;春分の日・秋分の日の計算
d=year-2000
e=d*2421904
holidayd.3 =(e+6911500)/10000000-(d/4)+(d/100)-(d/400)+20
holidayd.10=(e+ 900000)/10000000-(d/4)+(d/100)-(d/400)+23
;祝日
repeat nholiday
if holidayw.cnt>0 {
;第 n 月曜の祝日の日付確定
getweek c,year,holidaym.cnt,1
d=holidayw.cnt*7
if c<2 { ;1日が日曜か月曜のとき
holidayd.cnt=d-5-c
} else { ;1日が火曜~土曜のとき
holidayd.cnt=d+2-c
}
}
loop
if 1912<=year&(year<=1913) { holidaym.4=8: holidayd.4=31 } ;天長節(大正)
else { if 1914<=year&(year<=1926) { holidaym.4=10: holidayd.4=31 } ;同上
else { if 1927<=year { holidaym.4=4: holidayd.4=29 } } } ;昭和天皇誕生日
if 1948<=year {
if year<=1999 {
holidayd.1=15 ;成人の日
}
}
if 1948<=year&(year<1966) { holidayd.2=0 } ;建国記念の日
else { holidayd.2=11 }
if year>=1966 {
if year<=1999 {
holidayd.11=10 ;体育の日
}
if year<=2002 {
holidayd.9=15: holidayd.8=20 ;敬老の日、海の日
}
}
}
;1月1日の曜日
if year>=1582 { ;1582年~
getweek week,year,1,1
if year==1582 {
week=(week+3)\7
}
} else { if year>4 { ;5~1581
week=(year*365+((year-1)/4)+5)\7
} else { if year>0 { ;1~4
week=(year*365+6)\7
} else { if year>-8 { ;-7~-1
week=(year+84)*365\7
} else { ;-44~-8
week=((year+84)*365+((year+85)/3)+2)\7
} } } }
;カレンダー表示
by=begy: mon=1
color br,bg,bb: boxf 16,by,wid,heit
repeat 12
;月の表示
bx=(mon-1)\4*bmon+16: y=by
color: pos (bday*7-32)/2+bx,y: mes ""+mon+"月"
;曜日の表示
x=bx: y+=hw
digit s,""+year,'0',4: digit t,""+mon,'0',2
s+=t
if s!"187300">0&(s!"187603"<0) { color }
else { color 255,0,0 }
pos x,y: mes "日": x+=bday
color: pos x,y: mes "月 火 水 木 金": x+=bday*5
if year>=1873&(s!"187603"<0)|(year<1850) { ;~1850,1873/1~1876/2
color
} else { ;1872年以前と1876/3~
if s!"199204">0 { color 255,0,0 } ;1992/5~
else { color 0,0,255 }
}
pos x,y: mes "土"
;日付の表示
day=1-week: y+=hw
repeat 6
x=bx
w=0
repeat 7
if day>0 {
;祝日判定
flg=0 ;祝日フラグ
repeat nholiday
if holidayd.cnt==day {
if holidaym.cnt==mon {
;日本では1873年1月1日より太陽暦。
;それ以前の祝日は意味なし
if year>1872 { if year>=holidayy.cnt {
flg=1
if year>2007 {
;祝日の間の日は休日(敬老と秋分の差が2日の場合)
if cnt==9 {
if day+2==holidayd.10 {
furikae=1
}
}
}
} }
}
}
loop
r=0: b=0
digit s,""+year,'0',4: digit t,""+mon,'0',2: digit u,""+day,'0',2
s+=t+u
if year>=1873&(s!"18760312"<0) { ;1873年~1876年3月11日
if day\5==1 {
if day!=31 {
r=255
}
}
} else { ;1872年以前と1876年3月12日以降
if (cnt==6) { ;土曜
if s!"19920500">0|flg { r=255 }
else { if year>=1850 { b=255 } }
} else { if cnt==0 { ;日曜
r=255
if flg {
if s!"19730412">=0 {
furikae=1
}
}
} else { ;土日以外
r=0
if flg {
r=255
} else {
if furikae {
r=255: furikae=0
}
}
} }
}
;日付の表示
color r,0,b
pos x,y
astr s,day,2,' '
mes s
}
day++
if year==1582 {
if mon==10 {
if day==5 {
day=15
}
}
}
if day>mday.mon {
week=(cnt+1)\7 ;翌月1日の曜日
break
}
x+=bday
w++
loop
if day>mday.mon {
break
}
y+=hw
loop
mon++
if (mon-1)\4==0 {
by+=hw*8
}
loop
objsel inid: objselstr inid,0,-1
;キー入力待ち
repeat: wait 10
stick key,,1
if key&37 {
break ;←,→,Enter
}
prmx=ginfo_act: prmy=ginfo_sel
if act!=prmx {
if prmx==0 {
objsel inid: objselstr inid,0,-1
}
act=prmx
}
loop
if key==1 {
goto *l_back ;←
}
if key==4 {
goto *l_forw ;→
}
;Enter
year=0+inyear
if year==0 {
year=1: goto *l_setyear
}
goto *l_restart
*l_back
year--
if year==0 {
year=-1
}
goto *l_setyear
*l_forw
year++
if year==0 {
year=1
}
*l_setyear
s=""+year
objprm inid,s
goto *l_restart
たまにバグあり。
戦車ゲーム
基本設定
ゲームスピード
game_speed
弾MAX
ball_max
*/
/*
弾設定
弾の種類
ball_type
1 自分の弾
2 敵の弾
3 味方の弾
弾の角度(radian)
ball_angle_radian
弾の位置
ball_posx
ball_posy
弾の存在・弾の種類など保存
ball_life
*/
/*
自機設定
自機の角度
mainbody_angle
自機の角度(radian)
mainbody_angle_radian
自機の位置
mainbody_posx
mainbody_posy
*/
;自機のスピード
mainbody_acc_speed =4
;自機の回転スピード
mainbody_acc_anglespeed =int(2.2 * mainbody_acc_speed)
/**/
;初期設定
game_speed=50 ;ゲームスピード
ball_max=50 ;計算できるすべての弾の合計
ball_type=3 ;弾の種類数
;すべて小数点を扱えるようにする(弾丸)
dimtype ball_angle_radian,vartype("double"),ball_max;弾の角度(ラジアン)
dimtype ball_posx,vartype("double"),ball_max ;弾の位置
dimtype ball_posy,vartype("double"),ball_max
dimtype ball_life,vartype("int"),ball_max,2 ;弾が飛ぶ時間
dimtype ball_type_vol,vartype("int"),ball_type ;弾の種類別の量
;すべて小数点を扱えるようにする(自機)
dimtype mainbody_angle_radian,vartype("double"),1 ;自機の角度(ラジアン)
dimtype mainbody_posx,vartype("double"),1 ;自機の位置
dimtype mainbody_posy,vartype("double"),1
screen 0,400,400,0:gsel 0,2
mainbody_posx=ginfo(12)/2
mainbody_posy=ginfo(13)/2
gosub *gos_loadsound ;音を読み込む
*mainrepeat ;メインリピート始まり
redraw 1:await game_speed:redraw 0
gosub *gos_keyget ;ボタン感知
gosub *gos_mainbody ;自機関係
gosub *gos_ball ;弾関係
goto *mainrepeat ;リピート戻る
;|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
;弾丸関係
*gos_ball
gosub *gos_ball_acc ;弾の計算
gosub *gos_ball_draw ;弾の表示
return
*gos_ball_acc ;/////////弾の計算/////////
repeat ball_max
if ball_life(cnt,1)=0{continue}
switch ball_life(cnt,0) ;タイプ別に スピードと飛距離を設定
case 1 :ball_acc_speed=8 :ball_acc_life=15 :swbreak
swend
ball_life(cnt,1)+=1 ;弾がどのくらいで消えるか(飛距離)
if ball_life(cnt,1) > ball_acc_life { ;弾消去
ball_life(cnt,1) = 0
ball_type_vol(ball_life(cnt,0)) -=1 ;タイプ別の弾の合計数を減らす
;弾爆発音
}
ball_posx(cnt)=ball_posx(cnt)+(sin(ball_angle_radian(cnt))*ball_acc_speed) ;弾の場所を計算
ball_posy(cnt)=ball_posy(cnt)+(cos(ball_angle_radian(cnt))*ball_acc_speed)
loop
return
*gos_ball_add ;/////////弾発行/////////
;弾発行 例
;ball_pub_type=1
;ball_pub_angle=rnd(360)
;ball_pub_posx=100 ;rnd(ginfo(12))
;ball_pub_posy=100 ;rnd(ginfo(13))
;弾の合計数を調節(例 自分の弾は合計4発までしか発行できないなど)
ball_type_max_ch=0:switch ball_pub_type
case 1
if ball_type_vol(ball_pub_type)=4:ball_type_max_ch=1
swbreak
swend
if ball_type_max_ch=1:return
;弾発行
repeat ball_max
if ball_life(cnt,1)!0{continue}
ball_life(cnt,0)=ball_pub_type ;タイプ発行
ball_type_vol(ball_life(cnt,0)) +=1 ;タイプ別の弾の合計数を増やす
ball_life(cnt,1)=1 ;消えるまでのタイム用
ball_angle_radian(cnt)=3.14159265 * ball_pub_angle / (180.0) ;ラジアンをここで計算
ball_posx(cnt)=double(ball_pub_posx) ;弾の初期位置を実数にして代入
ball_posy(cnt)=double(ball_pub_posy)
;弾発射音
break
loop
return
*gos_ball_draw ;/////////弾の摸写/////////
repeat ball_max
if ball_life(cnt,1)=0{continue}
pset int(ball_posx(cnt)),int(ball_posy(cnt))
loop
return
;弾丸関係
;|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
;自機関係
*gos_mainbody
gosub *gos_mainbody_acc ;自機の計算
gosub *gos_mainbody_draw ;自機の表示
gosub *gos_mainbody_keyget ;自機から発射される弾のキー調査
return
*gos_mainbody_acc
mainbody_angle_radian = 3.14159265 * double(mainbody_angle) / (180.0)
mainbody_posx=mainbody_posx + ((sin(mainbody_angle_radian(cnt))*mainbody_acc_speed) ) * mainbody_move
mainbody_posy=mainbody_posy + ((cos(mainbody_angle_radian(cnt))*mainbody_acc_speed) ) * mainbody_move
return
*gos_mainbody_draw
pset int(mainbody_posx),int(mainbody_posy)
return
*gos_mainbody_keyget ;弾発射ボタン
getkey mainbody_ball,90:if mainbody_ball=1{mainbody_ball_ch=1} ;Z
getkey mainbody_ball,88:if mainbody_ball=1{mainbody_ball_ch=1} ;X
if mainbody_ball_ch=1{
;弾発行手続き
ball_pub_type=1
ball_pub_angle=mainbody_angle
ball_pub_posx=mainbody_posx
ball_pub_posy=mainbody_posy
;弾発射
gosub *gos_ball_add
mainbody_ball_ch=0
}
return
;自機関係
;|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
;基本的なキー操作取得
*gos_keyget
stick key,1+2+4+8
mainbody_move=0
if key&1:mainbody_angle+=mainbody_acc_anglespeed ;回転
if key&2:mainbody_move+=1 ;前進
if key&4:mainbody_angle-=mainbody_acc_anglespeed ;回転
if key&8:mainbody_move-=1 ;後進
return
;音声ファイルの読み込み
*gos_loadsound
;発射
;爆発
return
戦車ゲームです。
画像は適当に。
山田ウイルス防護プログラム
#uselib "ADVAPI32.DLL"
#cfunc global RegCloseKey "RegCloseKey" sptr
#cfunc global RegOpenKeyExA "RegOpenKeyExA" sptr,sptr,sptr,sptr,sptr
#cfunc global RegDeleteValueA "RegDeleteValueA" sptr,sptr
#define HKEY_CURRENT_USER $80000001
#define KEY_SET_VALUE $00000002
#define NULL 0
TitleName ="山田ウィルスチェッカー.exe 2つのレジストリだけ削除"
sdim SubKey,128,3:sdim ValueName,128,3
SubKey ="Software\\Microsoft\\Windows\\CurrentVersion\\Explorer","Software\\Microsoft\\Windows\\CurrentVersion\\Run"
ValueName="Count","SVCHOST",""
screen 0,400,200,2
title TitleName
syscolor 15:boxf:sysfont 17:syscolor 7
mes "山田チェッカーに書き換えられたレジストリを削除します。\n(現在2つのキーのみ対応。)"
objsize ginfo(12),ginfo(15)+10
button gosub "スクリーンショットした回数のレジストリを削除",*regdel
button gosub "自動実行のレジストリを削除",*regdel
width ,ginfo(23):gsel 0,1
stop
*regdel
id=stat
flg=RegOpenKeyExA(HKEY_CURRENT_USER,varptr(SubKey(id)),0,KEY_SET_VALUE,varptr(hkey))
if flg{dialog "キーをオープン出来ませんでした。":return}
flg=RegDeleteValueA(hkey,varptr(ValueName(id)))
if flg{dialog "キーから値を削除出来ませんでした。":flg=RegCloseKey(hkey):return}
flg=RegCloseKey(hkey):dialog "キーから値を削除しました。"
return
が山田ウイルス防護プログラムです
ちなみに数年前に流行った糞プロです
2014年9月9日火曜日
コードとか色々
;
; ヨッパライゲームサンプル
; onitama / WEB+DB PRESS 2011/6
;
#packopt name "yopparai"
#pack "chr.bmp"
#module
#deffunc fprt str _p1
; fprt "message"
; (画像を使用したフォント表示を行ないます)
; "message" : 表示するメッセージ
; 表示座標は、posで指定した位置から
;
i=0:st=_p1
repeat
a1=peek(st,i):i++:if a1=0 : break
if a1=13 {
a1=peek(st,i)
if a1=10 : i++
continue ; 改行
} else {
celput 1,a1
}
loop
return
#deffunc putscore
gmode 0
pos 0,0:fprt "SCORE "+score@
return
#global
title "Yopparai"
randomize
screen 0,640,480
celload "chr.bmp",1
celdiv 1,16,16,0,0
*start
cls 4
pos 210,128
fprt "Y O P P A R A I"
pos 234,300
fprt "PRESS ENTER"
putscore
repeat
stick key
if key&$30 : break
if key&128 : end
await 24
loop
level=2
score=0
*go
cls 4
color 255,255,255
boxf 0,20,20,480
boxf 620,20,640,480
repeat level*4+8
y=rnd(8)*32+64
x=rnd(16)*32+64
boxf x,y,x+32,y+32
loop
x=320.0:y=440:px=0.0:dir=0.0
*main
redraw 0
color 0,0,0
boxf 0,0,640,16
boxf x,y,x+32,y+32
stick key,15
if key&1 : dir=-0.5
if key&4 : dir=0.5
if key&128 : end
px=limitf(px+dir,-10,10)
x=x+px
y=y-1
score++
pget x+8,y-1:hit=ginfo_r
pget x+16,y-1:hit+=ginfo_r
pget x+24,y-1:hit+=ginfo_r
color 255,255,255
circle x+8,y+26,x+24,y+42
gmode 2
pos x,y:celput 1,$21,2,2
putscore
redraw 1
await 24
if hit : goto *miss
if y>20 : goto *main
pos 320,0:fprt "GOOD!"
level++
wait 300
goto *go
*miss
repeat 32
redraw 0
color 0,0,0
boxf x,y,x+32,y+32
gmode 2
pos x,y:celput 1,$21+(cnt&3),2,2
redraw 1
await 96
loop
goto *start
; IEコンポーネントを使ったブラウザ
;
#define DIID_DWebBrowserEvents2 "{34A715A0-6587-11D0-924A-0020AFC7AC4D}"
#define DISPID_NAVIGATECOMPLETE2 252
cls 1
sdim url,512
url="http://hsp.tv/"
objsize 600,24
pos 0,2:mes "URL:"
pos 0,26:mes "WEB Browser Sample"
pos 40,0:input url
objsize 120,24
pos 520,24:button "移動",*wow
pos 400,24:button "進む",*go_f
pos 280,24:button "戻る",*go_b
pos 0,48
axobj ie, "Shell.Explorer.2",640,480-48
num=stat
comevent ie_event, ie, "{34A715A0-6587-11D0-924A-0020AFC7AC4D}",*event ; DIID_DWebBrowserEvents2
ie->"Navigate" url
*main
stop
*event
; COMイベント処理
dispid = comevdisp(ie_event)
if dispid = DISPID_NAVIGATECOMPLETE2 : gosub *OnNavigateComplete2
return
*OnNavigateComplete2
name = ie("LocationURL")
objprm 0,name
pDoc = ie("Document")
name = pDoc("Title")
title name
delcom pDoc
return
*wow
ie->"Navigate" url
goto *main
*go_f
ie->"GoForward"
goto *main
*go_b
ie->"GoBack"
goto *main
; SQL serverのバージョンと現在時刻を得る
; (MySQL+MyODBCで確認)
;
#include "hspdb.as"
sdim buf,1024
sdim dsn,256
dsn="TEST"
; ODBC環境の初期化
dbini
if stat : dialog "ODBC環境がありません。終了します。("+stat+")" : end
screen 0,320,200:cls 1
objmode 1,1:objsize 320,24
mes "DSN名:"
input dsn
button "接続",*start
stop
*start
clrobj 1
; DBドライバに接続します
; ODBCのDSN設定であらかじめデータベースを準備しておく必要があります。
dbopen "DSN="+dsn
if stat : dialog "DB接続できませんでした。終了します。("+stat+")" : end
; 接続が成功したら、後はSQLを自由に送信することができます。
; SQLの送信はdbsend、結果はdbgetsで取得してください。
mes "QUERY VERSION:"
dbsend "SELECT VERSION();"
if stat : dialog "SQL送信に失敗しました。("+stat+")" : goto *over
gosub *resput
mes "QUERY NOW:"
dbsend "SELECT NOW();"
if stat : dialog "SQL送信に失敗しました。("+stat+")" : goto *over
gosub *resput
*over
dbclose ; DBとの接続を切ります
stop
*resput ; 結果の表示
; SQLの結果を取得します。多くの場合すぐに終了します。
; 結果が長い場合やネットワーク越しの場合は時間がかかることがあります。
;
repeat
dbgets buf ; 結果の取得
if stat : break ; すべて取得したらループから抜ける
mes buf
loop
return
↑は時計。
*notepad
*paint
*calc
*owari
screen 0,200,200:title "タイルランチャ"
objsize 100,100
pos 0 ,0 :button "メモ帳",*notepad
pos 100,0 :button "ペイント",*paint
pos 0 ,100:button "電卓",*calc
pos 100,100:button "終了",*owari
stop
;メモ帳を起動する
exec "notepad.exe"
stop
;ペイントを起動する
exec "mspaint.exe"
stop
;電卓を起動する
exec "calc.exe"
stop
;プログラムを終了する
end
↑はタイルランチャー。
; ヨッパライゲームサンプル
; onitama / WEB+DB PRESS 2011/6
;
#packopt name "yopparai"
#pack "chr.bmp"
#module
#deffunc fprt str _p1
; fprt "message"
; (画像を使用したフォント表示を行ないます)
; "message" : 表示するメッセージ
; 表示座標は、posで指定した位置から
;
i=0:st=_p1
repeat
a1=peek(st,i):i++:if a1=0 : break
if a1=13 {
a1=peek(st,i)
if a1=10 : i++
continue ; 改行
} else {
celput 1,a1
}
loop
return
#deffunc putscore
gmode 0
pos 0,0:fprt "SCORE "+score@
return
#global
title "Yopparai"
randomize
screen 0,640,480
celload "chr.bmp",1
celdiv 1,16,16,0,0
*start
cls 4
pos 210,128
fprt "Y O P P A R A I"
pos 234,300
fprt "PRESS ENTER"
putscore
repeat
stick key
if key&$30 : break
if key&128 : end
await 24
loop
level=2
score=0
*go
cls 4
color 255,255,255
boxf 0,20,20,480
boxf 620,20,640,480
repeat level*4+8
y=rnd(8)*32+64
x=rnd(16)*32+64
boxf x,y,x+32,y+32
loop
x=320.0:y=440:px=0.0:dir=0.0
*main
redraw 0
color 0,0,0
boxf 0,0,640,16
boxf x,y,x+32,y+32
stick key,15
if key&1 : dir=-0.5
if key&4 : dir=0.5
if key&128 : end
px=limitf(px+dir,-10,10)
x=x+px
y=y-1
score++
pget x+8,y-1:hit=ginfo_r
pget x+16,y-1:hit+=ginfo_r
pget x+24,y-1:hit+=ginfo_r
color 255,255,255
circle x+8,y+26,x+24,y+42
gmode 2
pos x,y:celput 1,$21,2,2
putscore
redraw 1
await 24
if hit : goto *miss
if y>20 : goto *main
pos 320,0:fprt "GOOD!"
level++
wait 300
goto *go
*miss
repeat 32
redraw 0
color 0,0,0
boxf x,y,x+32,y+32
gmode 2
pos x,y:celput 1,$21+(cnt&3),2,2
redraw 1
await 96
loop
goto *start
↑のコードは酔っ払いゲーム。左右ボタンで操作。
;; IEコンポーネントを使ったブラウザ
;
#define DIID_DWebBrowserEvents2 "{34A715A0-6587-11D0-924A-0020AFC7AC4D}"
#define DISPID_NAVIGATECOMPLETE2 252
cls 1
sdim url,512
url="http://hsp.tv/"
objsize 600,24
pos 0,2:mes "URL:"
pos 0,26:mes "WEB Browser Sample"
pos 40,0:input url
objsize 120,24
pos 520,24:button "移動",*wow
pos 400,24:button "進む",*go_f
pos 280,24:button "戻る",*go_b
pos 0,48
axobj ie, "Shell.Explorer.2",640,480-48
num=stat
comevent ie_event, ie, "{34A715A0-6587-11D0-924A-0020AFC7AC4D}",*event ; DIID_DWebBrowserEvents2
ie->"Navigate" url
*main
stop
*event
; COMイベント処理
dispid = comevdisp(ie_event)
if dispid = DISPID_NAVIGATECOMPLETE2 : gosub *OnNavigateComplete2
return
*OnNavigateComplete2
name = ie("LocationURL")
objprm 0,name
pDoc = ie("Document")
name = pDoc("Title")
title name
delcom pDoc
return
*wow
ie->"Navigate" url
goto *main
*go_f
ie->"GoForward"
goto *main
*go_b
ie->"GoBack"
goto *main
↑はウェブブラウザです。
;; SQL serverのバージョンと現在時刻を得る
; (MySQL+MyODBCで確認)
;
#include "hspdb.as"
sdim buf,1024
sdim dsn,256
dsn="TEST"
; ODBC環境の初期化
dbini
if stat : dialog "ODBC環境がありません。終了します。("+stat+")" : end
screen 0,320,200:cls 1
objmode 1,1:objsize 320,24
mes "DSN名:"
input dsn
button "接続",*start
stop
*start
clrobj 1
; DBドライバに接続します
; ODBCのDSN設定であらかじめデータベースを準備しておく必要があります。
dbopen "DSN="+dsn
if stat : dialog "DB接続できませんでした。終了します。("+stat+")" : end
; 接続が成功したら、後はSQLを自由に送信することができます。
; SQLの送信はdbsend、結果はdbgetsで取得してください。
mes "QUERY VERSION:"
dbsend "SELECT VERSION();"
if stat : dialog "SQL送信に失敗しました。("+stat+")" : goto *over
gosub *resput
mes "QUERY NOW:"
dbsend "SELECT NOW();"
if stat : dialog "SQL送信に失敗しました。("+stat+")" : goto *over
gosub *resput
*over
dbclose ; DBとの接続を切ります
stop
*resput ; 結果の表示
; SQLの結果を取得します。多くの場合すぐに終了します。
; 結果が長い場合やネットワーク越しの場合は時間がかかることがあります。
;
repeat
dbgets buf ; 結果の取得
if stat : break ; すべて取得したらループから抜ける
mes buf
loop
return
↑は時計。
*notepad
*paint
*calc
*owari
screen 0,200,200:title "タイルランチャ"
objsize 100,100
pos 0 ,0 :button "メモ帳",*notepad
pos 100,0 :button "ペイント",*paint
pos 0 ,100:button "電卓",*calc
pos 100,100:button "終了",*owari
stop
;メモ帳を起動する
exec "notepad.exe"
stop
;ペイントを起動する
exec "mspaint.exe"
stop
;電卓を起動する
exec "calc.exe"
stop
;プログラムを終了する
end
↑はタイルランチャー。
みんな使えよ!
登録:
投稿 (Atom)