HTANoid 用hta编写的一个经典的游戏,htanoidhta
HTANoid 用hta编写的一个经典的游戏,htanoidhta
This game is not finished. The purpose was just to show you that you can do some graphical things without having to use external pictures.If you want to develop this game, please submit your updates.
File Name : htanoid.hta
Requirement : IE 6 ?
Author : Jean-Luc Antoine
Submitted : 17/05/2002
Category : Other
效果图:
实现代码:
<html xmlns:v="urn:schemas-microsoft-com:vml" XMLNS:t="urn:schemas-microsoft-com:time">
<head>
<HTA:APPLICATION
APPLICATIONNAME="HTAnoid"
BORDER="thick" | "dialog" | "none" | "thin"
BORDERSTYLE="normal" | "complex" | "raised" | "static" | "sunken"
CAPTION="yes" CONTEXTMENU="yes"
ID="oHTA" alert(oHTA.applicationName);
INNERBORDER="yes" MAXIMIZEBUTTON="yes" MINIMIZEBUTTON="yes"
NAVIGABLE="no" SCROLL="no" SCROLLFLAT="no"
SELECTION="yes" SHOWINTASKBAR="yes" SINGLEINSTANCE="no"
SYSMENU="yes" VERSION="0.5"
WINDOWSTATE="normal" | "maximize" | "minimize">
<script language=vbscript>
Option explicit
Const C_ScreenW=400
Const C_NbX=12
Const C_NbY=10
Dim Terrain(10,12)
Dim RaqX,RaqW,Playing,BalleX,BalleY
Dim DirBX,DirBY 'Direction balle X,Y
Dim BordDroit
BordDroit=C_ScreenW-32
Sub Document_onKeyPress()
Select Case UCase(Chr(Window.Event.keyCode))
Case "P"
Msgbox "pause"
'Window.ClearTimeOut
End Select
End Sub
Sub Document_onClick()
Playing=True
'document.title="click " & window.event.button
End Sub
Sub Document_onMouseMove()
RaqX=window.event.clientX-RaqW '.shiftKey .keyCode .ctrlKey .button .altKey
If RaqX<16 Then RaqX=16 'Mur gauche
If RaqX+RaqW>BordDroit Then RaqX=BordDroit-RaqW
Raquette.style.Left=RaqX
If Not Playing Then
BalleX=RaqX+RaqW/2
Balle.Style.Left=BalleX
End If
End Sub
Sub DrawLevel(n)
Dim k,x,y
set k=document.getElementById("Raquette")
For y=0 To C_NbY
For x=0 To C_NbX
Terrain(y,x)=0 'Nb de coups restant à porter
Next
Next
Select Case n
Case 1
'Bricks
For y=0 To 5
For x=0 To C_NbX
k.insertAdjacentHTML "beforeBegin","<TABLE style='position:absolute;top=" & 102+14*y & ";left=" & 16+27*x _
& ";width=25;height=10;' bgcolor=" & Array("silver","red","yellow","blue","magenta","lightgreen")(y) & "><TR><TD></TD></TR></TABLE>"
Next
Next
End Select
Randomize
BalleY=400
DirBX=Int(Rnd()*3)+1
DirBY=0-(Int(Rnd()*4)+1)
End Sub
Sub Init
Dim x,y,k
Window.MoveTo screen.Width/2-200,0
Window.ReSizeTo C_ScreenW,484
RaqW=Int(Replace(Raquette.style.width,"pc","")*1.6)
'Lives Left
set k=document.getElementById("Raquette")
'CreateElement + insertAdjacentElement
For x=0 To 2
k.insertAdjacentHTML "beforeBegin","<v:group style='position:absolute;top=430;left=" & 16+x*30 _
& ";width:15pc;height:5pc;'><v:roundrect style='width:100;height:100;' fillcolor=red><v:fill type='gradient'/></v:roundrect>" _
& "<v:rect style='position:relative;left:10;top:2;width:80;height:90' strokecolor=black><v:fill type='gradient' color=#4682b4 focus=0.2 /></v:rect></v:group>"
Next
DrawLevel 1
Playing=False
window.setTimeout "Gere",10
End Sub
Sub Gere
If Playing Then
'Déplacement de la balle
If DirBX>0 Then
If BalleX+DirBX>BordDroit-10 Then DirBX=0-DirBx
Else
If BalleX+DirBX<16 Then DirBX=0-DirBx
End If
If DirBY>0 Then
If BalleY+DirBY>400 Then DirBY=0-DirBY
Else
If BalleY+DirBY<50 Then DirBY=0-DirBY
End If
BalleX=BalleX+DirBX
BalleY=BalleY+DirBY
Balle.Style.Left=BalleX
Balle.Style.Top=BalleY
Else
document.title=Now
End If
window.setTimeout "Gere",10
End Sub
</script>
<STYLE TYPE="text/css">
<!--
v\:* {behavior:url(#default#VML);}
t\:* {behavior:url(#default#time2)}
BODY {
font-family: "Verdana, Arial, Helvetica, sans-serif";
background-color=#003159;
color:#0000FF;
font-size: 8pt;
}
TABLE,TD {
border:'0pix groove';
cursor:W-resize;
}
.score {
color:white;
font-size: 10pt;
}
-->
</STYLE>
</head>
<body topmargin=0 leftmargin=0 rightmargin=0 onload="vbscript:init">
<!-- Panel de score -->
<CENTER><font size=2 color=red><b>HIGH SCORE</b></font><br><table cellspacing=0 width=100%><tr><td width=50% align=center>
<div id=Score class=score>1234</div></td><td><div id=HighScore class=score>123400</div></td></tr></table></CENTER>
<!-- terrain -->
<table width=100% height=420 cellspacing=0 cellpadding=0>
<tr height=14><td colspan=3>
<v:rect style='width:100%;height:15'>
<v:fill type="gradient" color=white color2=darkgray focus=3.3 />
</v:rect>
</td></tr>
<tr height=100%><td width=15>
<v:rect style='width:15;height:100%' strokecolor="#666666" strokeweight="2pt">
<v:stroke dashstyle="dashdot" />
<v:fill type="gradient" angle="-90" color2=white color=darkgray focus=3.3 />
</v:rect>
</td>
<td width=100%>
<v:oval id="balle" style='position:absolute;top=400;width:8;height:6' fillcolor=#009999 strokecolor=#0066FF id=boule>
<v:fill type=gradientradial color2=white focusposition=0.3,0.3 focussize=0.01,0.01 />
</v:oval>
<v:group id=Raquette style='position:absolute;top=410;width:30pc;height:6pc;'>
<v:roundrect style='width:100;height:100;' fillcolor=red>
<v:fill type='gradient'/></v:roundrect>
<v:rect style='position:relative;left:10;top:2;width:80;height:90' strokecolor=black>
<v:fill type='gradient' color=#4682b4 focus=0.2 /></v:rect>
</v:group>
</td>
<td align=right>
<v:rect style='width:15;height:100%' strokecolor="#666666" strokeweight="2pt">
<v:stroke dashstyle="dashdot" />
<v:fill type="gradient" angle="-90" color2=white color=darkgray focus=3.3 />
</v:rect>
</td></tr>
</table>
</body>
</html>
原文:http://www.interclasse.com/scripts/htanoid.php
hta文件其实和htm文件是一样的,把htm的文件扩展名改为hta就行了。然后就可以像一般可执行文件一样直接双击hta文件运行了,运行效果和htm文件在浏览器中是一样的。另外,一些在htm中受限制的功能,在hta文件中则可以使用,比如读取数据库、打开WScript.Shell组件等等(这是因为hta是由用户主动点击运行的,如果发生安全问题由用户承担责任;而htm文件是用户被动接受的,如果网页存在安全问题,用户可能在完全不知情的情况下受到损害。)。
因此你用设计htm的方式设计hta即可,两者惟一的区别就是hta多了HTA:APPLICATION标签,这个你百度一下就知道了。另外在hta中,尽量不要用超链接(不管target指向哪,它都会新开一个窗口的),而应该用按钮触发javascript或VBScript,然后把运行结果发送到页面上指定ID的标签(比如div)的innerHTML或innerText属性,这样就可以在同一个hta文件实现原来多个htm页面才能实现的功能。 当然,也可以用iframe,用一个hta调用多个htm的方式,这个相对简单一些。
hta就是一个HTML应用程序(HTML Application),只要你双击就能运行
只要简单的用.hta为扩展名保存HTML页面就行了
下面的一个标准的HTML应用程序:
<HTML>
<HEAD>
<TITLE>HTA Demo</TITLE>
<HTA:APPLICATION ID=〃oHTA〃
APPLICATIONNAME=〃myApp〃
BORDER=〃thin〃
BORDERSTYLE=〃normal〃
CAPTION=〃yes〃
ICON=〃filename.ico〃
MAXIMIZEBUTTON=〃yes〃
MINIMIZEBUTTON=〃yes〃
SHOWINTASKBAR=〃no〃
INGLEINSTANCE=〃no〃
SYSMENU=〃yes〃
VERSION=〃1.0〃
WINDOWSTATE=〃normal〃>
</HEAD>
<BODY SCROLL=〃no〃>
<H1>HELLO, WORLD!</H1>
</BODY>
</HTML>
它多了HTA:APPLICATION标签。其实就是这个标签提供了一系列面向应用程序的功能。
它的各种属性:
APPLICATIONNAME属性(applicationName)
此属性为设置HTA的名称。
BORDER属性(border)
此属性为设置为HTA的窗口边框类型,默认值为 thick。
它可以设为 thick 指定窗口为粗边框
dialog window 指定窗口为对话框
none 指定窗口无边框
thin 指定窗口为窄边框
BORDERSTYLE属性(borderStyle)
此属性为设置HTA窗口的边框格式,默认值为 normal。
它可以设为
normal 普通边框格式
complex 凹凸格式组合边框
raised 凸出的3D边框
static 3D边框格式
sunken 凹进的3D边框
CAPTION属性(caption)
此属性为设置HTA窗口是否显示标题栏或标题,默认值为 yes。
ICON属性(icon)
此属性为设置应用程序的图标。
MAXIMIZEBUTTON属性(maximizeButton)
此属性为设置是否在HTA窗口中显示最大化按钮,默认值为 yes。
MINIMIZEBUTTON属性(minimizeButton)
此属性为设置是否在HTA窗口中显示最小化按钮,默认值为 yes。
SHOWINTASKBAR属性(showInTaskBar)
此属性为设置是否在任务栏中显示此应用程序,默认值为 yes。
SINGLEINSTANCE属性(singleInstance)
此属性为设置是否此应用程序同时只能运行一次。次属性以APPLICATIONNAME属性作为标识,默认值为 no。
SYSMENU属性(sysMenu)
此属性为设置是否在HTA窗口中显示系统菜单,默认值为 yes。
VERSION属性(version)
此属性为设置应用程序的版本,默认值为空。
WINDOWSTATE属性(windowState)
此属性为设置HTA窗口的初始大小,默认值为 normal。
它可以设为 normal 默认大小
minmize......余下全文>>
评论关闭