Blog Post

Small Basic Blog
9 MIN READ

Small Basic Game Programming - Shooting Game

NonkiTakahashi's avatar
NonkiTakahashi
Iron Contributor
Feb 12, 2019
First published on MSDN on Aug 18, 2014

Authored by Nonki Takahashi


In Challenge of the Month - August 2013 , there were following two challenges.


Game Challenge


Write a DuckShoot game.


Interface Challenge


Write a fancy Game Opening screen for DuckShoot game - see above.


At that time, I tried only opening.  Today, I will introduce new DuckShoot game as Program ID TLR995-2 .



This program has 425 lines.  But there are 166 lines that automatically generated by Shapes editor.  So actual coded lines are 259.


Main


I added shooting part.  But only one duck comes.  Because I thought the code becomes complex and worse readable if ducks increases.



1. ' DuckShoot 0.31b

2. ' Copyright (c) 2013-2014 Nonki Takahashi. The MIT License.

3. '

4. ' History:

5. ' 0.31b 2014-08-01 Sorted subroutines. (TLR995-2)

6. ' 0.3b 2014-07-26 Supported in remote. (TLR995-1)

7. ' 0.2b 2014-07-13 Created a core of shooting. (TLR995-0)

8. ' 0.1a 2013-08-03 Created as DuckShoot opening. (TLR995)

9. ' 0.0 2013-08-03 14:38:49 Shapes generated by Shapes 1.5b.

10. '

11. GraphicsWindow . Title = "DuckShoot 0.31b"

12. SB_Workaround ( )

13. Opening ( )

14. GameInit ( )

15. GameLoop ( )

16. Ending ( )


Ending


This subroutine calculates score from a number of shoot and a number of hit.



17. Sub Ending

18. Shapes . Remove ( stair )

19. If hit [ i ] Then

20. point = 1

21. Else

22. point = 0

23. EndIf

24. score = point * 110 - shoot * 10

25. GraphicsWindow . BrushColor = "White"

26. GraphicsWindow . FontSize = 40

27. GraphicsWindow . DrawText ( 170 , 180 , "SCORE " + score )

28. Program . Delay ( 500 )

29. GraphicsWindow . DrawText ( 170 , 230 , "SHOOT " + shoot )

30. Program . Delay ( 500 )

31. GraphicsWindow . DrawText ( 170 , 280 , "HIT " + point )

32. Program . Delay ( 2000 )

33. GraphicsWindow . FontSize = 50

34. GraphicsWindow . DrawText ( 170 , 80 , "GAME OVER" )

35. EndSub


Initialization


At this point there is one duck.  But for the future, arrays are used instead of single variables for the duck.  I decided to use mouse for the operation of the gun, so events for mouse click and move are initialized here.



36. Sub GameInit

37. ' Game start

38. Shapes . ShowShape ( duck [ 1 ] )

39. mouseDown = "False"

40. GraphicsWindow . MouseDown = OnMouseDown

41. GraphicsWindow . MouseMove = OnMouseMove

42. Shapes . Animate ( duck [ 1 ] , gw , 150 , 3000 )

43. Program . Delay ( 3000 )

44. i = 1

45. hit [ i ] = "False"

46. a [ i ] = 90

47. x [ i ] = - dw

48. yDuck = 150

49. y [ i ] = yDuck

50. Shapes . Move ( duck [ i ] , x [ i ] , y [ i ] )

51. GraphicsWindow . PenWidth = 0

52. GraphicsWindow . BrushColor = bgColor

53. yRS = yStair - ( yDuck + dh / 2 )

54. shoot = 0

55. EndSub


Main Loop


Last week obstacles are moved in the timer event handler.  This time, a duck is moved 4 dots rightward in main loop.


When a player shoots the gun, another duck is drawn under the moving Shapes duck to check hitting.  If the target is an ellipse or a rectangle, the hit checking can be calculated from the co-ordinate.  But the duck shape is a little difficult for the calculation.  So, I used GraphicsWindow.GetPixel() and check the color is the background color or not.


There is a problem on a browser at GetPixel.  A browser hangs up and returns no response at GraphicsWindow.GetPixel() after GraphicsWindow.DrawImage().  Program imported into IDE doesn't  have this problem.  To avoid this problem, I changed this program not to use DrawImage() but to use FillRectangle(), FillTriangle() and FillEllipse() with shape data created by Shapes editor.  This workaround works well because the duck drawing was made with Shapes editor.


When the gun hits, the duck image falls down by using Shapes.Zoom().  We can give zoom levels from 0.1 to 20 for this operation.  So, be careful not to give smaller value than 0.1.  In following subroutine, the zoom level is reduced little by little until 0.1.


I found there is another problem with Shapes.Zoom() in imported program.  When the zoom level was smaller than 0.7, the program stopped.  At that time, the image of the duck had transparent background.  To avoid this issue, I changed the image to have opaque background.



56. Sub GameLoop

57. While x [ i ] < gw

58. Program . Delay ( 50 )

59. If mouseDown Then

60. Sound . PlayClick ( )

61. shoot = shoot + 1

62. If silverlight Then

63. shX = x [ i ]

64. shY = y [ i ]

65. iMin = 1

66. iMax = 10

67. Shapes_Draw ( )

68. Else

69. GraphicsWindow . DrawImage ( img , x [ i ] , y [ i ] )

70. EndIf

71. color = GraphicsWindow . GetPixel ( dx , dy )

72. GraphicsWindow . PenWidth = 0

73. GraphicsWindow . BrushColor = bgColor

74. GraphicsWindow . FillRectangle ( x [ i ] , y [ i ] , dw , dh )

75. If color < > bgColor Then

76. hit [ i ] = "True"

77. EndIf

78. mouseDown = "False"

79. EndIf

80. If hit [ i ] Then

81. If 0 < a [ i ] Then

82. a [ i ] = a [ i ] - 5

83. cos = Math . Round ( Math . Sin ( Math . GetRadians ( a [ i ] ) ) * 100 ) / 100

84. Shapes . Zoom ( duck [ i ] , 1 , Math . Max ( cos , 0.1 ) )

85. deltaY = yRS - yRS * cos

86. y [ i ] = yDuck + deltaY

87. EndIf

88. EndIf

89. x [ i ] = x [ i ] + 4

90. Shapes . Move ( duck [ i ] , x [ i ] , y [ i ] )

91. EndWhile

92. EndSub


Mouse Event Handler (on Click)


This subroutine sets a flag mouseDown and saves the co-ordinate of the mouse.  This co-ordinate is used to check that the gun hits the duck in GameLoop().



93. Sub OnMouseDown

94. mouseDown = "True"

95. dx = GraphicsWindow . MouseX

96. dy = GraphicsWindow . MouseY

97. EndSub


Mouse Event Handler (on Move)


This subroutine moves the sighter depending on the mouse moving.  The mouse pointer (the arrow mark) is hided when the mouse is in the window, and is showed when the mouse is out of the window.



98. Sub OnMouseMove

99. mx = GraphicsWindow . MouseX

100. my = GraphicsWindow . MouseY

101. If 0 < = mx And mx < gw And 0 < = my And my < gh Then

102. Mouse . HideCursor ( )

103. Shapes . Move ( sighter , mx - 40 , my - 40 )

104. Else

105. Mouse . ShowCursor ( )

106. EndIf

107. EndSub


Opening


This subroutine shows the game title and images of a duck and a sighter.  Originally these images were combination of shapes created with Shapes editor.  But to make the motion of the images smoother, I converted these shapes data to .png files.  The detail about how to convert shapes drawings created by Shapes editor to .png files is described here .


For following two reasons, I used both the image and shapes of the duck.  One is for it's eye blink.  The other is to avoid the GetPixel issue in browser described above (Main Loop).



108. Sub Opening

109. bgColor = "#8B0000" ' DarkRed

110. stColor = "#990000" ' for stair

111. GraphicsWindow . BackgroundColor = bgColor

112. gw = 598

113. gh = 428

114. GraphicsWindow . Width = gw

115. GraphicsWindow . Height = gh

116. GraphicsWindow . PenWidth = 0

117. GraphicsWindow . BrushColor = bgColor

118. GraphicsWindow . FillRectangle ( 0 , 0 , gw , gh )

119. ' add duck image


121. img = ImageList . LoadImage ( path )

122. If silverlight Then

123. dw = 246 + 1

124. dh = 192 + 2

125. Else

126. dw = ImageList . GetWidthOfImage ( img )

127. dh = ImageList . GetHeightOfImage ( img )

128. EndIf

129. duck [ 1 ] = Shapes . AddImage ( img )

130. Shapes . Move ( duck [ 1 ] , 194 , 150 )

131. Shapes . HideShape ( duck [ 1 ] )

132. ' add stair

133. GraphicsWindow . BrushColor = stColor

134. GraphicsWindow . PenWidth = 0

135. stair = Shapes . AddRectangle ( gw , gh - yStair )

136. yStair = Math . Round ( gh * 2 / 3 )

137. Shapes . Move ( stair , 0 , yStair )

138. Shapes . HideShape ( stair )

139. ' initialize shapes

140. GraphicsWindow . FontName = "Trebuchet MS"

141. GraphicsWindow . FontSize = 50

142. GraphicsWindow . BrushColor = "White"

143. title = Shapes . AddText ( "DuckShoot" )

144. Shapes . Move ( title , 170 , 60 )

145. Shapes_Init ( )

146. ' add shapes

147. scale = 1

148. angle = 0

149. iMin = 1

150. iMax = 10

151. Shapes_Add ( )

152. ' add sighter image


154. sighter = Shapes . AddImage ( path )

155. Shapes . Move ( sighter , 250 , 200 )

156. ' Blink start

157. wait = "True"

158. ems = Clock . ElapsedMilliseconds

159. While wait

160. Program . Delay ( 1000 )

161. x = 250 + ( Math . GetRandomNumber ( 50 ) - 25 )

162. y = 200 + ( Math . GetRandomNumber ( 50 ) - 25 )

163. Shapes . Move ( sighter , x , y )

164. Program . Delay ( 100 )

165. Shapes . HideShape ( shape [ 4 ] [ "obj" ] )

166. Program . Delay ( 100 )

167. Shapes . ShowShape ( shape [ 4 ] [ "obj" ] )

168. If 5000 < Clock . ElapsedMilliseconds - ems Then

169. wait = "False"

170. EndIf

171. EndWhile

172. Shapes . ShowShape ( stair )

173. iMin = 1

174. iMax = 10

175. Shapes_Remove ( )

176. Shapes . Remove ( title )

177. EndSub


Drawing Shapes


I wrote this subroutine for checking whether the gun shoot hit the duck or not.  This subroutine is used only for this purpose so far.  But for the future, I wrote this to be as general-purpose as possible.  And it has still restrictions as follows.



  • not support to draw border

  • not support rotation for rectangles and ellipses


This routine is called only when the program is run in browser.



178. Sub Shapes_Draw

179. ' Shapes | draw shapes

180. ' param iMin, iMax - shape indices to add

181. ' param shape - array of shapes

182. ' param scale - 1 if same scale

183. ' TODO to draw border line for rectangle, triangle and ellipse

184. ' TODO to rotate rectangle and ellipse (text?)

185. Stack . PushValue ( "local" , x )

186. Stack . PushValue ( "local" , y )

187. Stack . PushValue ( "local" , i )

188. s = scale

189. For i = iMin To iMax

190. If shape [ i ] [ "pw" ] > 0 Then

191. GraphicsWindow . PenColor = shape [ i ] [ "pc" ]

192. EndIf

193. If Text . IsSubText ( "rect|ell|tri|text" , shape [ i ] [ "func" ] ) Then

194. GraphicsWindow . BrushColor = shape [ i ] [ "bc" ]

195. EndIf

196. x = shX + shape [ i ] [ "x" ] * s

197. y = shY + shape [ i ] [ "y" ] * s

198. If shape [ i ] [ "func" ] = "rect" Then

199. GraphicsWindow . FillRectangle ( x , y , shape [ i ] [ "width" ] * s , shape [ i ] [ "height" ] * s )

200. ElseIf shape [ i ] [ "func" ] = "ell" Then

201. GraphicsWindow . FillEllipse ( x , y , shape [ i ] [ "width" ] * s , shape [ i ] [ "height" ] * s )

202. ElseIf shape [ i ] [ "func" ] = "tri" Then

203. x [ 1 ] = shX + shape [ i ] [ "x" ] * s + shape [ i ] [ "x1" ] * s

204. y [ 1 ] = shY + shape [ i ] [ "y" ] * s + shape [ i ] [ "y1" ] * s

205. x [ 2 ] = shX + shape [ i ] [ "x" ] * s + shape [ i ] [ "x2" ] * s

206. y [ 2 ] = shY + shape [ i ] [ "y" ] * s + shape [ i ] [ "y2" ] * s

207. x [ 3 ] = shX + shape [ i ] [ "x" ] * s + shape [ i ] [ "x3" ] * s

208. y [ 3 ] = shY + shape [ i ] [ "y" ] * s + shape [ i ] [ "y3" ] * s

209. angle = shape [ i ] [ "angle" ]

210. If angle < > 0 Then

211. n = 3

212. ox = ( x [ 2 ] + x [ 3 ] ) / 2

213. oy = ( y [ 1 ] + y [ 2 ] ) / 2

214. Shapes_RotatePolyline ( )

215. EndIf

216. GraphicsWindow . FillTriangle ( x [ 1 ] , y [ 1 ] , x [ 2 ] , y [ 2 ] , x [ 3 ] , y [ 3 ] )

217. ElseIf shape [ i ] [ "func" ] = "line" Then

218. x [ 1 ] = shX + shape [ i ] [ "x" ] * s + shape [ i ] [ "x1" ] * s

219. y [ 1 ] = shY + shape [ i ] [ "y" ] * s + shape [ i ] [ "y1" ] * s

220. x [ 2 ] = shX + shape [ i ] [ "x" ] * s + shape [ i ] [ "x2" ] * s

221. y [ 2 ] = shY + shape [ i ] [ "y" ] * s + shape [ i ] [ "y2" ] * s

222. If angle < > 0 Then

223. n = 3

224. ox = ( x [ 2 ] + x [ 3 ] ) / 2

225. oy = ( y [ 1 ] + y [ 2 ] ) / 2

226. Shapes_RotatePolyline ( )

227. EndIf

228. GraphicsWindow . DrawLine ( x [ 1 ] , y [ 1 ] , x [ 2 ] , y [ 2 ] )

229. ElseIf shape [ i ] [ "func" ] = "text" Then

230. If silverlight Then

231. fs = Math . Floor ( shape [ i ] [ "fs" ] * 0.9 )

232. Else

233. fs = shape [ i ] [ "fs" ]

234. EndIf

235. GraphicsWindow . FontSize = fs * s

236. GraphicsWindow . FontName = shape [ i ] [ "fn" ]

237. GraphicsWindow . DrawText ( x , y , shape [ i ] [ "text" ] )

238. EndIf

239. EndFor

240. i = Stack . PopValue ( "local" )

241. y = Stack . PopValue ( "local" )

242. x = Stack . PopValue ( "local" )

243. EndSub


Polyline Rotation


This subroutine is written for rotating vertices of a triangle.  But this subroutine supports more vertices as a polyline or a polygon for general-purpose.



244. Sub Shapes_RotatePolyline

245. ' Shapes | rotate polyline

246. ' param n - number of points

247. ' param x, y - array of x and y co-ordinates

248. ' param ox, oy, - center of rotation

249. ' param angle - angle of rotation

250. Stack . PushValue ( "local" , i )

251. _a = Math . GetRadians ( angle )

252. For i = 1 To n

253. xi = ( x [ i ] - ox ) * Math . Cos ( _a ) + ( y [ i ] - oy ) * Math . Sin ( _a )

254. yi = - ( x [ i ] - ox ) * Math . Sin ( _a ) + ( y [ i ] - oy ) * Math . Cos ( _a )

255. x [ i ] = xi + ox

256. y [ i ] = yi + oy

257. EndFor

258. i = Stack . PopValue ( "local" )

259. EndSub


Auto Generated Code


And this program also have following subroutines.  These subroutines are generated by Shapes editor 1.5b.  So I skip to show these codes.  But I listed up brief description for these.  There are other subroutines generated by Shapes.  But I deleted because they are not called in this program.



  • SB_Workaround - determine which workarounds needed or not for running on browser

  • Shapes_Add - adds Shapes objects along with the array shape

  • Shapes_CalcWidthAndHeight - calculates whole width and height for data in the array shape

  • Shapes_Init - sets duck shapes data into an array shape

  • Shapes_Move - moves shapes added in Shapes_Add

  • Shapes_Remove - removes shapes added in Shapes_Add


As duck shooting game, increasing ducks will make this game more fun.  Would you like to challenge?

Published Feb 12, 2019
Version 1.0
No CommentsBe the first to comment
"}},"componentScriptGroups({\"componentId\":\"custom.widget.Social_Sharing\"})":{"__typename":"ComponentScriptGroups","scriptGroups":{"__typename":"ComponentScriptGroupsDefinition","afterInteractive":{"__typename":"PageScriptGroupDefinition","group":"AFTER_INTERACTIVE","scriptIds":[]},"lazyOnLoad":{"__typename":"PageScriptGroupDefinition","group":"LAZY_ON_LOAD","scriptIds":[]}},"componentScripts":[]},"component({\"componentId\":\"custom.widget.MicrosoftFooter\"})":{"__typename":"Component","render({\"context\":{\"component\":{\"entities\":[],\"props\":{}},\"page\":{\"entities\":[\"board:SmallBasic\",\"message:336824\"],\"name\":\"BlogMessagePage\",\"props\":{},\"url\":\"https://techcommunity.microsoft.com/blog/smallbasic/small-basic-game-programming---shooting-game/336824\"}}})":{"__typename":"ComponentRenderResult","html":""}},"componentScriptGroups({\"componentId\":\"custom.widget.MicrosoftFooter\"})":{"__typename":"ComponentScriptGroups","scriptGroups":{"__typename":"ComponentScriptGroupsDefinition","afterInteractive":{"__typename":"PageScriptGroupDefinition","group":"AFTER_INTERACTIVE","scriptIds":[]},"lazyOnLoad":{"__typename":"PageScriptGroupDefinition","group":"LAZY_ON_LOAD","scriptIds":[]}},"componentScripts":[]},"cachedText({\"lastModified\":\"1743151752863\",\"locale\":\"en-US\",\"namespaces\":[\"components/community/NavbarDropdownToggle\"]})":[{"__ref":"CachedAsset:text:en_US-components/community/NavbarDropdownToggle-1743151752863"}],"cachedText({\"lastModified\":\"1743151752863\",\"locale\":\"en-US\",\"namespaces\":[\"shared/client/components/common/QueryHandler\"]})":[{"__ref":"CachedAsset:text:en_US-shared/client/components/common/QueryHandler-1743151752863"}],"cachedText({\"lastModified\":\"1743151752863\",\"locale\":\"en-US\",\"namespaces\":[\"components/messages/MessageCoverImage\"]})":[{"__ref":"CachedAsset:text:en_US-components/messages/MessageCoverImage-1743151752863"}],"cachedText({\"lastModified\":\"1743151752863\",\"locale\":\"en-US\",\"namespaces\":[\"shared/client/components/nodes/NodeTitle\"]})":[{"__ref":"CachedAsset:text:en_US-shared/client/components/nodes/NodeTitle-1743151752863"}],"cachedText({\"lastModified\":\"1743151752863\",\"locale\":\"en-US\",\"namespaces\":[\"components/messages/MessageTimeToRead\"]})":[{"__ref":"CachedAsset:text:en_US-components/messages/MessageTimeToRead-1743151752863"}],"cachedText({\"lastModified\":\"1743151752863\",\"locale\":\"en-US\",\"namespaces\":[\"components/messages/MessageSubject\"]})":[{"__ref":"CachedAsset:text:en_US-components/messages/MessageSubject-1743151752863"}],"cachedText({\"lastModified\":\"1743151752863\",\"locale\":\"en-US\",\"namespaces\":[\"components/users/UserLink\"]})":[{"__ref":"CachedAsset:text:en_US-components/users/UserLink-1743151752863"}],"cachedText({\"lastModified\":\"1743151752863\",\"locale\":\"en-US\",\"namespaces\":[\"shared/client/components/users/UserRank\"]})":[{"__ref":"CachedAsset:text:en_US-shared/client/components/users/UserRank-1743151752863"}],"cachedText({\"lastModified\":\"1743151752863\",\"locale\":\"en-US\",\"namespaces\":[\"components/messages/MessageTime\"]})":[{"__ref":"CachedAsset:text:en_US-components/messages/MessageTime-1743151752863"}],"cachedText({\"lastModified\":\"1743151752863\",\"locale\":\"en-US\",\"namespaces\":[\"components/messages/MessageBody\"]})":[{"__ref":"CachedAsset:text:en_US-components/messages/MessageBody-1743151752863"}],"cachedText({\"lastModified\":\"1743151752863\",\"locale\":\"en-US\",\"namespaces\":[\"components/messages/MessageCustomFields\"]})":[{"__ref":"CachedAsset:text:en_US-components/messages/MessageCustomFields-1743151752863"}],"cachedText({\"lastModified\":\"1743151752863\",\"locale\":\"en-US\",\"namespaces\":[\"components/messages/MessageRevision\"]})":[{"__ref":"CachedAsset:text:en_US-components/messages/MessageRevision-1743151752863"}],"cachedText({\"lastModified\":\"1743151752863\",\"locale\":\"en-US\",\"namespaces\":[\"components/messages/MessageReplyButton\"]})":[{"__ref":"CachedAsset:text:en_US-components/messages/MessageReplyButton-1743151752863"}],"cachedText({\"lastModified\":\"1743151752863\",\"locale\":\"en-US\",\"namespaces\":[\"components/messages/MessageAuthorBio\"]})":[{"__ref":"CachedAsset:text:en_US-components/messages/MessageAuthorBio-1743151752863"}],"cachedText({\"lastModified\":\"1743151752863\",\"locale\":\"en-US\",\"namespaces\":[\"shared/client/components/users/UserAvatar\"]})":[{"__ref":"CachedAsset:text:en_US-shared/client/components/users/UserAvatar-1743151752863"}],"cachedText({\"lastModified\":\"1743151752863\",\"locale\":\"en-US\",\"namespaces\":[\"shared/client/components/ranks/UserRankLabel\"]})":[{"__ref":"CachedAsset:text:en_US-shared/client/components/ranks/UserRankLabel-1743151752863"}],"cachedText({\"lastModified\":\"1743151752863\",\"locale\":\"en-US\",\"namespaces\":[\"components/users/UserRegistrationDate\"]})":[{"__ref":"CachedAsset:text:en_US-components/users/UserRegistrationDate-1743151752863"}],"cachedText({\"lastModified\":\"1743151752863\",\"locale\":\"en-US\",\"namespaces\":[\"shared/client/components/nodes/NodeAvatar\"]})":[{"__ref":"CachedAsset:text:en_US-shared/client/components/nodes/NodeAvatar-1743151752863"}],"cachedText({\"lastModified\":\"1743151752863\",\"locale\":\"en-US\",\"namespaces\":[\"shared/client/components/nodes/NodeDescription\"]})":[{"__ref":"CachedAsset:text:en_US-shared/client/components/nodes/NodeDescription-1743151752863"}],"cachedText({\"lastModified\":\"1743151752863\",\"locale\":\"en-US\",\"namespaces\":[\"shared/client/components/nodes/NodeIcon\"]})":[{"__ref":"CachedAsset:text:en_US-shared/client/components/nodes/NodeIcon-1743151752863"}]},"CachedAsset:pages-1743058945341":{"__typename":"CachedAsset","id":"pages-1743058945341","value":[{"lastUpdatedTime":1743058945341,"localOverride":null,"page":{"id":"BlogViewAllPostsPage","type":"BLOG","urlPath":"/category/:categoryId/blog/:boardId/all-posts/(/:after|/:before)?","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1743058945341,"localOverride":null,"page":{"id":"CasePortalPage","type":"CASE_PORTAL","urlPath":"/caseportal","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1743058945341,"localOverride":null,"page":{"id":"CreateGroupHubPage","type":"GROUP_HUB","urlPath":"/groups/create","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1743058945341,"localOverride":null,"page":{"id":"CaseViewPage","type":"CASE_DETAILS","urlPath":"/case/:caseId/:caseNumber","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1743058945341,"localOverride":null,"page":{"id":"InboxPage","type":"COMMUNITY","urlPath":"/inbox","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1743058945341,"localOverride":null,"page":{"id":"HelpFAQPage","type":"COMMUNITY","urlPath":"/help","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1743058945341,"localOverride":null,"page":{"id":"IdeaMessagePage","type":"IDEA_POST","urlPath":"/idea/:boardId/:messageSubject/:messageId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1743058945341,"localOverride":null,"page":{"id":"IdeaViewAllIdeasPage","type":"IDEA","urlPath":"/category/:categoryId/ideas/:boardId/all-ideas/(/:after|/:before)?","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1743058945341,"localOverride":null,"page":{"id":"LoginPage","type":"USER","urlPath":"/signin","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1743058945341,"localOverride":null,"page":{"id":"BlogPostPage","type":"BLOG","urlPath":"/category/:categoryId/blogs/:boardId/create","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1743058945341,"localOverride":null,"page":{"id":"UserBlogPermissions.Page","type":"COMMUNITY","urlPath":"/c/user-blog-permissions/page","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1743058945341,"localOverride":null,"page":{"id":"ThemeEditorPage","type":"COMMUNITY","urlPath":"/designer/themes","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1743058945341,"localOverride":null,"page":{"id":"TkbViewAllArticlesPage","type":"TKB","urlPath":"/category/:categoryId/kb/:boardId/all-articles/(/:after|/:before)?","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1730819800000,"localOverride":null,"page":{"id":"AllEvents","type":"CUSTOM","urlPath":"/Events","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1743058945341,"localOverride":null,"page":{"id":"OccasionEditPage","type":"EVENT","urlPath":"/event/:boardId/:messageSubject/:messageId/edit","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1743058945341,"localOverride":null,"page":{"id":"OAuthAuthorizationAllowPage","type":"USER","urlPath":"/auth/authorize/allow","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1743058945341,"localOverride":null,"page":{"id":"PageEditorPage","type":"COMMUNITY","urlPath":"/designer/pages","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1743058945341,"localOverride":null,"page":{"id":"PostPage","type":"COMMUNITY","urlPath":"/category/:categoryId/:boardId/create","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1743058945341,"localOverride":null,"page":{"id":"ForumBoardPage","type":"FORUM","urlPath":"/category/:categoryId/discussions/:boardId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1743058945341,"localOverride":null,"page":{"id":"TkbBoardPage","type":"TKB","urlPath":"/category/:categoryId/kb/:boardId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1743058945341,"localOverride":null,"page":{"id":"EventPostPage","type":"EVENT","urlPath":"/category/:categoryId/events/:boardId/create","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1743058945341,"localOverride":null,"page":{"id":"UserBadgesPage","type":"COMMUNITY","urlPath":"/users/:login/:userId/badges","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1743058945341,"localOverride":null,"page":{"id":"GroupHubMembershipAction","type":"GROUP_HUB","urlPath":"/membership/join/:nodeId/:membershipType","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1743058945341,"localOverride":null,"page":{"id":"MaintenancePage","type":"COMMUNITY","urlPath":"/maintenance","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1743058945341,"localOverride":null,"page":{"id":"IdeaReplyPage","type":"IDEA_REPLY","urlPath":"/idea/:boardId/:messageSubject/:messageId/comments/:replyId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1743058945341,"localOverride":null,"page":{"id":"UserSettingsPage","type":"USER","urlPath":"/mysettings/:userSettingsTab","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1743058945341,"localOverride":null,"page":{"id":"GroupHubsPage","type":"GROUP_HUB","urlPath":"/groups","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1743058945341,"localOverride":null,"page":{"id":"ForumPostPage","type":"FORUM","urlPath":"/category/:categoryId/discussions/:boardId/create","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1743058945341,"localOverride":null,"page":{"id":"OccasionRsvpActionPage","type":"OCCASION","urlPath":"/event/:boardId/:messageSubject/:messageId/rsvp/:responseType","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1743058945341,"localOverride":null,"page":{"id":"VerifyUserEmailPage","type":"USER","urlPath":"/verifyemail/:userId/:verifyEmailToken","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1743058945341,"localOverride":null,"page":{"id":"AllOccasionsPage","type":"OCCASION","urlPath":"/category/:categoryId/events/:boardId/all-events/(/:after|/:before)?","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1743058945341,"localOverride":null,"page":{"id":"EventBoardPage","type":"EVENT","urlPath":"/category/:categoryId/events/:boardId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1743058945341,"localOverride":null,"page":{"id":"TkbReplyPage","type":"TKB_REPLY","urlPath":"/kb/:boardId/:messageSubject/:messageId/comments/:replyId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1743058945341,"localOverride":null,"page":{"id":"IdeaBoardPage","type":"IDEA","urlPath":"/category/:categoryId/ideas/:boardId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1743058945341,"localOverride":null,"page":{"id":"CommunityGuideLinesPage","type":"COMMUNITY","urlPath":"/communityguidelines","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1743058945341,"localOverride":null,"page":{"id":"CaseCreatePage","type":"SALESFORCE_CASE_CREATION","urlPath":"/caseportal/create","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1743058945341,"localOverride":null,"page":{"id":"TkbEditPage","type":"TKB","urlPath":"/kb/:boardId/:messageSubject/:messageId/edit","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1743058945341,"localOverride":null,"page":{"id":"ForgotPasswordPage","type":"USER","urlPath":"/forgotpassword","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1743058945341,"localOverride":null,"page":{"id":"IdeaEditPage","type":"IDEA","urlPath":"/idea/:boardId/:messageSubject/:messageId/edit","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1743058945341,"localOverride":null,"page":{"id":"TagPage","type":"COMMUNITY","urlPath":"/tag/:tagName","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1743058945341,"localOverride":null,"page":{"id":"BlogBoardPage","type":"BLOG","urlPath":"/category/:categoryId/blog/:boardId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1743058945341,"localOverride":null,"page":{"id":"OccasionMessagePage","type":"OCCASION_TOPIC","urlPath":"/event/:boardId/:messageSubject/:messageId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1743058945341,"localOverride":null,"page":{"id":"ManageContentPage","type":"COMMUNITY","urlPath":"/managecontent","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1743058945341,"localOverride":null,"page":{"id":"ClosedMembershipNodeNonMembersPage","type":"GROUP_HUB","urlPath":"/closedgroup/:groupHubId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1743058945341,"localOverride":null,"page":{"id":"CommunityPage","type":"COMMUNITY","urlPath":"/","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1743058945341,"localOverride":null,"page":{"id":"ForumMessagePage","type":"FORUM_TOPIC","urlPath":"/discussions/:boardId/:messageSubject/:messageId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1743058945341,"localOverride":null,"page":{"id":"IdeaPostPage","type":"IDEA","urlPath":"/category/:categoryId/ideas/:boardId/create","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1730819800000,"localOverride":null,"page":{"id":"CommunityHub.Page","type":"CUSTOM","urlPath":"/Directory","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1743058945341,"localOverride":null,"page":{"id":"BlogMessagePage","type":"BLOG_ARTICLE","urlPath":"/blog/:boardId/:messageSubject/:messageId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1743058945341,"localOverride":null,"page":{"id":"RegistrationPage","type":"USER","urlPath":"/register","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1743058945341,"localOverride":null,"page":{"id":"EditGroupHubPage","type":"GROUP_HUB","urlPath":"/group/:groupHubId/edit","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1743058945341,"localOverride":null,"page":{"id":"ForumEditPage","type":"FORUM","urlPath":"/discussions/:boardId/:messageSubject/:messageId/edit","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1743058945341,"localOverride":null,"page":{"id":"ResetPasswordPage","type":"USER","urlPath":"/resetpassword/:userId/:resetPasswordToken","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1730819800000,"localOverride":null,"page":{"id":"AllBlogs.Page","type":"CUSTOM","urlPath":"/blogs","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1743058945341,"localOverride":null,"page":{"id":"TkbMessagePage","type":"TKB_ARTICLE","urlPath":"/kb/:boardId/:messageSubject/:messageId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1743058945341,"localOverride":null,"page":{"id":"BlogEditPage","type":"BLOG","urlPath":"/blog/:boardId/:messageSubject/:messageId/edit","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1743058945341,"localOverride":null,"page":{"id":"ManageUsersPage","type":"USER","urlPath":"/users/manage/:tab?/:manageUsersTab?","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1743058945341,"localOverride":null,"page":{"id":"ForumReplyPage","type":"FORUM_REPLY","urlPath":"/discussions/:boardId/:messageSubject/:messageId/replies/:replyId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1743058945341,"localOverride":null,"page":{"id":"PrivacyPolicyPage","type":"COMMUNITY","urlPath":"/privacypolicy","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1743058945341,"localOverride":null,"page":{"id":"NotificationPage","type":"COMMUNITY","urlPath":"/notifications","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1743058945341,"localOverride":null,"page":{"id":"UserPage","type":"USER","urlPath":"/users/:login/:userId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1743058945341,"localOverride":null,"page":{"id":"OccasionReplyPage","type":"OCCASION_REPLY","urlPath":"/event/:boardId/:messageSubject/:messageId/comments/:replyId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1743058945341,"localOverride":null,"page":{"id":"ManageMembersPage","type":"GROUP_HUB","urlPath":"/group/:groupHubId/manage/:tab?","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1743058945341,"localOverride":null,"page":{"id":"SearchResultsPage","type":"COMMUNITY","urlPath":"/search","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1743058945341,"localOverride":null,"page":{"id":"BlogReplyPage","type":"BLOG_REPLY","urlPath":"/blog/:boardId/:messageSubject/:messageId/replies/:replyId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1743058945341,"localOverride":null,"page":{"id":"GroupHubPage","type":"GROUP_HUB","urlPath":"/group/:groupHubId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1743058945341,"localOverride":null,"page":{"id":"TermsOfServicePage","type":"COMMUNITY","urlPath":"/termsofservice","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1743058945341,"localOverride":null,"page":{"id":"CategoryPage","type":"CATEGORY","urlPath":"/category/:categoryId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1743058945341,"localOverride":null,"page":{"id":"ForumViewAllTopicsPage","type":"FORUM","urlPath":"/category/:categoryId/discussions/:boardId/all-topics/(/:after|/:before)?","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1743058945341,"localOverride":null,"page":{"id":"TkbPostPage","type":"TKB","urlPath":"/category/:categoryId/kbs/:boardId/create","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1743058945341,"localOverride":null,"page":{"id":"GroupHubPostPage","type":"GROUP_HUB","urlPath":"/group/:groupHubId/:boardId/create","__typename":"PageDescriptor"},"__typename":"PageResource"}],"localOverride":false},"CachedAsset:text:en_US-components/context/AppContext/AppContextProvider-0":{"__typename":"CachedAsset","id":"text:en_US-components/context/AppContext/AppContextProvider-0","value":{"noCommunity":"Cannot find community","noUser":"Cannot find current user","noNode":"Cannot find node with id {nodeId}","noMessage":"Cannot find message with id {messageId}"},"localOverride":false},"CachedAsset:text:en_US-shared/client/components/common/Loading/LoadingDot-0":{"__typename":"CachedAsset","id":"text:en_US-shared/client/components/common/Loading/LoadingDot-0","value":{"title":"Loading..."},"localOverride":false},"User:user:-1":{"__typename":"User","id":"user:-1","uid":-1,"login":"Deleted","email":"","avatar":null,"rank":null,"kudosWeight":1,"registrationData":{"__typename":"RegistrationData","status":"ANONYMOUS","registrationTime":null,"confirmEmailStatus":false,"registrationAccessLevel":"VIEW","ssoRegistrationFields":[]},"ssoId":null,"profileSettings":{"__typename":"ProfileSettings","dateDisplayStyle":{"__typename":"InheritableStringSettingWithPossibleValues","key":"layout.friendly_dates_enabled","value":"false","localValue":"true","possibleValues":["true","false"]},"dateDisplayFormat":{"__typename":"InheritableStringSetting","key":"layout.format_pattern_date","value":"MMM dd yyyy","localValue":"MM-dd-yyyy"},"language":{"__typename":"InheritableStringSettingWithPossibleValues","key":"profile.language","value":"en-US","localValue":"en","possibleValues":["en-US"]}},"deleted":false},"Theme:customTheme1":{"__typename":"Theme","id":"customTheme1"},"Category:category:EducationSector":{"__typename":"Category","id":"category:EducationSector","entityType":"CATEGORY","displayId":"EducationSector","nodeType":"category","depth":3,"title":"Education Sector","shortTitle":"Education Sector","parent":{"__ref":"Category:category:solutions"},"categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Category:category:top":{"__typename":"Category","id":"category:top","displayId":"top","nodeType":"category","depth":0,"title":"Top","entityType":"CATEGORY","shortTitle":"Top"},"Category:category:communities":{"__typename":"Category","id":"category:communities","displayId":"communities","nodeType":"category","depth":1,"parent":{"__ref":"Category:category:top"},"title":"Communities","entityType":"CATEGORY","shortTitle":"Communities"},"Category:category:solutions":{"__typename":"Category","id":"category:solutions","displayId":"solutions","nodeType":"category","depth":2,"parent":{"__ref":"Category:category:communities"},"title":"Topics","entityType":"CATEGORY","shortTitle":"Topics"},"Blog:board:SmallBasic":{"__typename":"Blog","id":"board:SmallBasic","entityType":"BLOG","displayId":"SmallBasic","nodeType":"board","depth":4,"conversationStyle":"BLOG","title":"Small Basic Blog","description":"","avatar":null,"profileSettings":{"__typename":"ProfileSettings","language":null},"parent":{"__ref":"Category:category:EducationSector"},"ancestors":{"__typename":"CoreNodeConnection","edges":[{"__typename":"CoreNodeEdge","node":{"__ref":"Community:community:gxcuf89792"}},{"__typename":"CoreNodeEdge","node":{"__ref":"Category:category:communities"}},{"__typename":"CoreNodeEdge","node":{"__ref":"Category:category:solutions"}},{"__typename":"CoreNodeEdge","node":{"__ref":"Category:category:EducationSector"}}]},"userContext":{"__typename":"NodeUserContext","canAddAttachments":false,"canUpdateNode":false,"canPostMessages":false,"isSubscribed":false},"boardPolicies":{"__typename":"BoardPolicies","canPublishArticleOnCreate":{"__typename":"PolicyResult","failureReason":{"__typename":"FailureReason","message":"error.lithium.policies.forums.policy_can_publish_on_create_workflow_action.accessDenied","key":"error.lithium.policies.forums.policy_can_publish_on_create_workflow_action.accessDenied","args":[]}}},"shortTitle":"Small Basic Blog","repliesProperties":{"__typename":"RepliesProperties","sortOrder":"REVERSE_PUBLISH_TIME","repliesFormat":"threaded"},"tagProperties":{"__typename":"TagNodeProperties","tagsEnabled":{"__typename":"PolicyResult","failureReason":null}},"requireTags":false,"tagType":"FREEFORM_ONLY"},"Rank:rank:35":{"__typename":"Rank","id":"rank:35","position":16,"name":"Iron Contributor","color":"333333","icon":null,"rankStyle":"TEXT"},"User:user:276938":{"__typename":"User","id":"user:276938","uid":276938,"login":"NonkiTakahashi","deleted":false,"avatar":{"__typename":"UserAvatar","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/dS0yNzY5MzgtNzE3NDZpMjU5Njk4QTMxRUVDOTczMw"},"rank":{"__ref":"Rank:rank:35"},"email":"","messagesCount":53,"biography":null,"topicsCount":24,"kudosReceivedCount":39,"kudosGivenCount":27,"kudosWeight":1,"registrationData":{"__typename":"RegistrationData","status":null,"registrationTime":"2019-02-01T17:08:53.242-08:00","confirmEmailStatus":null},"followersCount":null,"solutionsCount":0},"BlogTopicMessage:message:336824":{"__typename":"BlogTopicMessage","uid":336824,"subject":"Small Basic Game Programming - Shooting Game","id":"message:336824","revisionNum":1,"repliesCount":0,"author":{"__ref":"User:user:276938"},"depth":0,"hasGivenKudo":false,"board":{"__ref":"Blog:board:SmallBasic"},"conversation":{"__ref":"Conversation:conversation:336824"},"messagePolicies":{"__typename":"MessagePolicies","canPublishArticleOnEdit":{"__typename":"PolicyResult","failureReason":{"__typename":"FailureReason","message":"error.lithium.policies.forums.policy_can_publish_on_edit_workflow_action.accessDenied","key":"error.lithium.policies.forums.policy_can_publish_on_edit_workflow_action.accessDenied","args":[]}},"canModerateSpamMessage":{"__typename":"PolicyResult","failureReason":{"__typename":"FailureReason","message":"error.lithium.policies.feature.moderation_spam.action.moderate_entity.allowed.accessDenied","key":"error.lithium.policies.feature.moderation_spam.action.moderate_entity.allowed.accessDenied","args":[]}}},"contentWorkflow":{"__typename":"ContentWorkflow","state":"PUBLISH","scheduledPublishTime":null,"scheduledTimezone":null,"userContext":{"__typename":"MessageWorkflowContext","canSubmitForReview":null,"canEdit":false,"canRecall":null,"canSubmitForPublication":null,"canReturnToAuthor":null,"canPublish":null,"canReturnToReview":null,"canSchedule":false},"shortScheduledTimezone":null},"readOnly":false,"editFrozen":false,"moderationData":{"__ref":"ModerationData:moderation_data:336824"},"teaser":"First published on MSDN on Aug 18, 2014 Authored by Nonki TakahashiIn Challenge of the Month - August 2013, there were following two challenges.","body":"\n \n \n First published on MSDN on Aug 18, 2014\n \n
\n

\n \n Authored by Nonki Takahashi\n \n

\n
\n

\n In\n \n Challenge of the Month - August 2013\n \n , there were following two challenges.\n

\n
\n

\n \n Game Challenge\n \n

\n
\n

\n Write a DuckShoot game.\n
\n \n \n

\n
\n

\n \n Interface Challenge\n \n

\n
\n

\n Write a fancy Game Opening screen for DuckShoot game - see above.\n

\n
\n

\n At that time, I tried only opening.  Today, I will introduce new DuckShoot game as Program ID\n \n TLR995-2\n \n .\n

\n
\n

\n \n

\n
\n

\n This program has 425 lines.  But there are 166 lines that automatically generated by Shapes editor.  So actual coded lines are 259.\n

\n
\n

\n Main\n

\n
\n

\n I added shooting part.  But only one duck comes.  Because I thought the code becomes complex and worse readable if ducks increases.\n

\n
\n
\n
\n
\n \n 1.\n \n \n ' DuckShoot 0.31b\n \n
\n
\n
\n \n 2.\n \n \n ' Copyright (c) 2013-2014 Nonki Takahashi. The MIT License.\n \n
\n
\n
\n \n 3.\n \n \n '\n \n
\n
\n
\n \n 4.\n \n \n ' History:\n \n
\n
\n
\n \n 5.\n \n \n ' 0.31b 2014-08-01 Sorted subroutines. (TLR995-2)\n \n
\n
\n
\n \n 6.\n \n \n ' 0.3b 2014-07-26 Supported in remote. (TLR995-1)\n \n
\n
\n
\n \n 7.\n \n \n ' 0.2b 2014-07-13 Created a core of shooting. (TLR995-0)\n \n
\n
\n
\n \n 8.\n \n \n ' 0.1a 2013-08-03 Created as DuckShoot opening. (TLR995)\n \n
\n
\n
\n \n 9.\n \n \n ' 0.0 2013-08-03 14:38:49 Shapes generated by Shapes 1.5b.\n \n
\n
\n
\n \n 10.\n \n \n '\n \n
\n
\n
\n \n 11.\n \n \n GraphicsWindow\n \n \n .\n \n \n Title\n \n \n =\n \n \n \"DuckShoot 0.31b\"\n \n
\n
\n
\n \n 12.\n \n \n SB_Workaround\n \n \n (\n \n \n )\n \n
\n
\n
\n \n 13.\n \n \n Opening\n \n \n (\n \n \n )\n \n
\n
\n
\n \n 14.\n \n \n GameInit\n \n \n (\n \n \n )\n \n
\n
\n
\n \n 15.\n \n \n GameLoop\n \n \n (\n \n \n )\n \n
\n
\n
\n \n 16.\n \n \n Ending\n \n \n (\n \n \n )\n \n
\n
\n
\n
\n

\n Ending\n

\n
\n

\n This subroutine calculates score from a number of shoot and a number of hit.\n

\n
\n
\n
\n
\n \n 17.\n \n \n Sub\n \n \n Ending\n \n
\n
\n
\n \n 18.\n \n \n \n \n Shapes\n \n \n .\n \n \n Remove\n \n \n (\n \n \n stair\n \n \n )\n \n
\n
\n
\n \n 19.\n \n \n \n \n If\n \n \n hit\n \n \n [\n \n \n i\n \n \n ]\n \n \n Then\n \n
\n
\n
\n \n 20.\n \n \n \n \n point\n \n \n =\n \n \n 1\n \n
\n
\n
\n \n 21.\n \n \n \n \n Else\n \n
\n
\n
\n \n 22.\n \n \n \n \n point\n \n \n =\n \n \n 0\n \n
\n
\n
\n \n 23.\n \n \n \n \n EndIf\n \n
\n
\n
\n \n 24.\n \n \n \n \n score\n \n \n =\n \n \n point\n \n \n *\n \n \n 110\n \n \n -\n \n \n shoot\n \n \n *\n \n \n 10\n \n
\n
\n
\n \n 25.\n \n \n \n \n GraphicsWindow\n \n \n .\n \n \n BrushColor\n \n \n =\n \n \n \"White\"\n \n
\n
\n
\n \n 26.\n \n \n \n \n GraphicsWindow\n \n \n .\n \n \n FontSize\n \n \n =\n \n \n 40\n \n
\n
\n
\n \n 27.\n \n \n \n \n GraphicsWindow\n \n \n .\n \n \n DrawText\n \n \n (\n \n \n 170\n \n \n ,\n \n \n 180\n \n \n ,\n \n \n \"SCORE \"\n \n \n +\n \n \n score\n \n \n )\n \n
\n
\n
\n \n 28.\n \n \n \n \n Program\n \n \n .\n \n \n Delay\n \n \n (\n \n \n 500\n \n \n )\n \n
\n
\n
\n \n 29.\n \n \n \n \n GraphicsWindow\n \n \n .\n \n \n DrawText\n \n \n (\n \n \n 170\n \n \n ,\n \n \n 230\n \n \n ,\n \n \n \"SHOOT \"\n \n \n +\n \n \n shoot\n \n \n )\n \n
\n
\n
\n \n 30.\n \n \n \n \n Program\n \n \n .\n \n \n Delay\n \n \n (\n \n \n 500\n \n \n )\n \n
\n
\n
\n \n 31.\n \n \n \n \n GraphicsWindow\n \n \n .\n \n \n DrawText\n \n \n (\n \n \n 170\n \n \n ,\n \n \n 280\n \n \n ,\n \n \n \"HIT \"\n \n \n +\n \n \n point\n \n \n )\n \n
\n
\n
\n \n 32.\n \n \n \n \n Program\n \n \n .\n \n \n Delay\n \n \n (\n \n \n 2000\n \n \n )\n \n
\n
\n
\n \n 33.\n \n \n \n \n GraphicsWindow\n \n \n .\n \n \n FontSize\n \n \n =\n \n \n 50\n \n
\n
\n
\n \n 34.\n \n \n \n \n GraphicsWindow\n \n \n .\n \n \n DrawText\n \n \n (\n \n \n 170\n \n \n ,\n \n \n 80\n \n \n ,\n \n \n \"GAME OVER\"\n \n \n )\n \n
\n
\n
\n \n 35.\n \n \n EndSub\n \n
\n
\n
\n
\n

\n Initialization\n

\n
\n

\n At this point there is one duck.  But for the future, arrays are used instead of single variables for the duck.  I decided to use mouse for the operation of the gun, so events for mouse click and move are initialized here.\n

\n
\n
\n
\n
\n \n 36.\n \n \n Sub\n \n \n GameInit\n \n
\n
\n
\n \n 37.\n \n \n \n \n ' Game start\n \n
\n
\n
\n \n 38.\n \n \n \n \n Shapes\n \n \n .\n \n \n ShowShape\n \n \n (\n \n \n duck\n \n \n [\n \n \n 1\n \n \n ]\n \n \n )\n \n
\n
\n
\n \n 39.\n \n \n \n \n mouseDown\n \n \n =\n \n \n \"False\"\n \n
\n
\n
\n \n 40.\n \n \n \n \n GraphicsWindow\n \n \n .\n \n \n MouseDown\n \n \n =\n \n \n OnMouseDown\n \n
\n
\n
\n \n 41.\n \n \n \n \n GraphicsWindow\n \n \n .\n \n \n MouseMove\n \n \n =\n \n \n OnMouseMove\n \n
\n
\n
\n \n 42.\n \n \n \n \n Shapes\n \n \n .\n \n \n Animate\n \n \n (\n \n \n duck\n \n \n [\n \n \n 1\n \n \n ]\n \n \n ,\n \n \n gw\n \n \n ,\n \n \n 150\n \n \n ,\n \n \n 3000\n \n \n )\n \n
\n
\n
\n \n 43.\n \n \n \n \n Program\n \n \n .\n \n \n Delay\n \n \n (\n \n \n 3000\n \n \n )\n \n
\n
\n
\n \n 44.\n \n \n \n \n i\n \n \n =\n \n \n 1\n \n
\n
\n
\n \n 45.\n \n \n \n \n hit\n \n \n [\n \n \n i\n \n \n ]\n \n \n =\n \n \n \"False\"\n \n
\n
\n
\n \n 46.\n \n \n \n \n a\n \n \n [\n \n \n i\n \n \n ]\n \n \n =\n \n \n 90\n \n
\n
\n
\n \n 47.\n \n \n \n \n x\n \n \n [\n \n \n i\n \n \n ]\n \n \n =\n \n \n -\n \n \n dw\n \n
\n
\n
\n \n 48.\n \n \n \n \n yDuck\n \n \n =\n \n \n 150\n \n
\n
\n
\n \n 49.\n \n \n \n \n y\n \n \n [\n \n \n i\n \n \n ]\n \n \n =\n \n \n yDuck\n \n
\n
\n
\n \n 50.\n \n \n \n \n Shapes\n \n \n .\n \n \n Move\n \n \n (\n \n \n duck\n \n \n [\n \n \n i\n \n \n ]\n \n \n ,\n \n \n x\n \n \n [\n \n \n i\n \n \n ]\n \n \n ,\n \n \n y\n \n \n [\n \n \n i\n \n \n ]\n \n \n )\n \n
\n
\n
\n \n 51.\n \n \n \n \n GraphicsWindow\n \n \n .\n \n \n PenWidth\n \n \n =\n \n \n 0\n \n
\n
\n
\n \n 52.\n \n \n \n \n GraphicsWindow\n \n \n .\n \n \n BrushColor\n \n \n =\n \n \n bgColor\n \n
\n
\n
\n \n 53.\n \n \n \n \n yRS\n \n \n =\n \n \n yStair\n \n \n -\n \n \n (\n \n \n yDuck\n \n \n +\n \n \n dh\n \n \n /\n \n \n 2\n \n \n )\n \n
\n
\n
\n \n 54.\n \n \n \n \n shoot\n \n \n =\n \n \n 0\n \n
\n
\n
\n \n 55.\n \n \n EndSub\n \n
\n
\n
\n
\n

\n Main Loop\n

\n
\n

\n Last week obstacles are moved in the timer event handler.  This time, a duck is moved 4 dots rightward in main loop.\n

\n
\n

\n When a player shoots the gun, another duck is drawn under the moving Shapes duck to check hitting.  If the target is an ellipse or a rectangle, the hit checking can be calculated from the co-ordinate.  But the duck shape is a little difficult for the calculation.  So, I used GraphicsWindow.GetPixel() and check the color is the background color or not.\n

\n
\n

\n There is a problem on a browser at GetPixel.  A browser hangs up and returns no response at GraphicsWindow.GetPixel() after GraphicsWindow.DrawImage().  Program imported into IDE doesn't  have this problem.  To avoid this problem, I changed this program not to use DrawImage() but to use FillRectangle(), FillTriangle() and FillEllipse() with shape data created by Shapes editor.  This workaround works well because the duck drawing was made with Shapes editor.\n

\n
\n

\n When the gun hits, the duck image falls down by using Shapes.Zoom().  We can give zoom levels from 0.1 to 20 for this operation.  So, be careful not to give smaller value than 0.1.  In following subroutine, the zoom level is reduced little by little until 0.1.\n

\n
\n

\n I found there is\n \n another problem\n \n with Shapes.Zoom() in imported program.  When the zoom level was smaller than 0.7, the program stopped.  At that time, the image of the duck had transparent background.  To avoid this issue, I changed the image to have opaque background.\n

\n
\n
\n
\n
\n \n 56.\n \n \n Sub\n \n \n GameLoop\n \n
\n
\n
\n \n 57.\n \n \n \n \n While\n \n \n x\n \n \n [\n \n \n i\n \n \n ]\n \n \n <\n \n \n gw\n \n
\n
\n
\n \n 58.\n \n \n \n \n Program\n \n \n .\n \n \n Delay\n \n \n (\n \n \n 50\n \n \n )\n \n
\n
\n
\n \n 59.\n \n \n \n \n If\n \n \n mouseDown\n \n \n Then\n \n
\n
\n
\n \n 60.\n \n \n \n \n Sound\n \n \n .\n \n \n PlayClick\n \n \n (\n \n \n )\n \n
\n
\n
\n \n 61.\n \n \n \n \n shoot\n \n \n =\n \n \n shoot\n \n \n +\n \n \n 1\n \n
\n
\n
\n \n 62.\n \n \n \n \n If\n \n \n silverlight\n \n \n Then\n \n
\n
\n
\n \n 63.\n \n \n \n \n shX\n \n \n =\n \n \n x\n \n \n [\n \n \n i\n \n \n ]\n \n
\n
\n
\n \n 64.\n \n \n \n \n shY\n \n \n =\n \n \n y\n \n \n [\n \n \n i\n \n \n ]\n \n
\n
\n
\n \n 65.\n \n \n \n \n iMin\n \n \n =\n \n \n 1\n \n
\n
\n
\n \n 66.\n \n \n \n \n iMax\n \n \n =\n \n \n 10\n \n
\n
\n
\n \n 67.\n \n \n \n \n Shapes_Draw\n \n \n (\n \n \n )\n \n
\n
\n
\n \n 68.\n \n \n \n \n Else\n \n
\n
\n
\n \n 69.\n \n \n \n \n GraphicsWindow\n \n \n .\n \n \n DrawImage\n \n \n (\n \n \n img\n \n \n ,\n \n \n x\n \n \n [\n \n \n i\n \n \n ]\n \n \n ,\n \n \n y\n \n \n [\n \n \n i\n \n \n ]\n \n \n )\n \n
\n
\n
\n \n 70.\n \n \n \n \n EndIf\n \n
\n
\n
\n \n 71.\n \n \n \n \n color\n \n \n =\n \n \n GraphicsWindow\n \n \n .\n \n \n GetPixel\n \n \n (\n \n \n dx\n \n \n ,\n \n \n dy\n \n \n )\n \n
\n
\n
\n \n 72.\n \n \n \n \n GraphicsWindow\n \n \n .\n \n \n PenWidth\n \n \n =\n \n \n 0\n \n
\n
\n
\n \n 73.\n \n \n \n \n GraphicsWindow\n \n \n .\n \n \n BrushColor\n \n \n =\n \n \n bgColor\n \n
\n
\n
\n \n 74.\n \n \n \n \n GraphicsWindow\n \n \n .\n \n \n FillRectangle\n \n \n (\n \n \n x\n \n \n [\n \n \n i\n \n \n ]\n \n \n ,\n \n \n y\n \n \n [\n \n \n i\n \n \n ]\n \n \n ,\n \n \n dw\n \n \n ,\n \n \n dh\n \n \n )\n \n
\n
\n
\n \n 75.\n \n \n \n \n If\n \n \n color\n \n \n <\n \n \n >\n \n \n bgColor\n \n \n Then\n \n
\n
\n
\n \n 76.\n \n \n \n \n hit\n \n \n [\n \n \n i\n \n \n ]\n \n \n =\n \n \n \"True\"\n \n
\n
\n
\n \n 77.\n \n \n \n \n EndIf\n \n
\n
\n
\n \n 78.\n \n \n \n \n mouseDown\n \n \n =\n \n \n \"False\"\n \n
\n
\n
\n \n 79.\n \n \n \n \n EndIf\n \n
\n
\n
\n \n 80.\n \n \n \n \n If\n \n \n hit\n \n \n [\n \n \n i\n \n \n ]\n \n \n Then\n \n
\n
\n
\n \n 81.\n \n \n \n \n If\n \n \n 0\n \n \n <\n \n \n a\n \n \n [\n \n \n i\n \n \n ]\n \n \n Then\n \n
\n
\n
\n \n 82.\n \n \n \n \n a\n \n \n [\n \n \n i\n \n \n ]\n \n \n =\n \n \n a\n \n \n [\n \n \n i\n \n \n ]\n \n \n -\n \n \n 5\n \n
\n
\n
\n \n 83.\n \n \n \n \n cos\n \n \n =\n \n \n Math\n \n \n .\n \n \n Round\n \n \n (\n \n \n Math\n \n \n .\n \n \n Sin\n \n \n (\n \n \n Math\n \n \n .\n \n \n GetRadians\n \n \n (\n \n \n a\n \n \n [\n \n \n i\n \n \n ]\n \n \n )\n \n \n )\n \n \n *\n \n \n 100\n \n \n )\n \n \n /\n \n \n 100\n \n
\n
\n
\n \n 84.\n \n \n \n \n Shapes\n \n \n .\n \n \n Zoom\n \n \n (\n \n \n duck\n \n \n [\n \n \n i\n \n \n ]\n \n \n ,\n \n \n 1\n \n \n ,\n \n \n Math\n \n \n .\n \n \n Max\n \n \n (\n \n \n cos\n \n \n ,\n \n \n 0.1\n \n \n )\n \n \n )\n \n
\n
\n
\n \n 85.\n \n \n \n \n deltaY\n \n \n =\n \n \n yRS\n \n \n -\n \n \n yRS\n \n \n *\n \n \n cos\n \n
\n
\n
\n \n 86.\n \n \n \n \n y\n \n \n [\n \n \n i\n \n \n ]\n \n \n =\n \n \n yDuck\n \n \n +\n \n \n deltaY\n \n
\n
\n
\n \n 87.\n \n \n \n \n EndIf\n \n
\n
\n
\n \n 88.\n \n \n \n \n EndIf\n \n
\n
\n
\n \n 89.\n \n \n \n \n x\n \n \n [\n \n \n i\n \n \n ]\n \n \n =\n \n \n x\n \n \n [\n \n \n i\n \n \n ]\n \n \n +\n \n \n 4\n \n
\n
\n
\n \n 90.\n \n \n \n \n Shapes\n \n \n .\n \n \n Move\n \n \n (\n \n \n duck\n \n \n [\n \n \n i\n \n \n ]\n \n \n ,\n \n \n x\n \n \n [\n \n \n i\n \n \n ]\n \n \n ,\n \n \n y\n \n \n [\n \n \n i\n \n \n ]\n \n \n )\n \n
\n
\n
\n \n 91.\n \n \n \n \n EndWhile\n \n
\n
\n
\n \n 92.\n \n \n EndSub\n \n
\n
\n
\n
\n

\n Mouse Event Handler (on Click)\n

\n
\n

\n This subroutine sets a flag mouseDown and saves the co-ordinate of the mouse.  This co-ordinate is used to check that the gun hits the duck in GameLoop().\n

\n
\n
\n
\n
\n \n 93.\n \n \n Sub\n \n \n OnMouseDown\n \n
\n
\n
\n \n 94.\n \n \n \n \n mouseDown\n \n \n =\n \n \n \"True\"\n \n
\n
\n
\n \n 95.\n \n \n \n \n dx\n \n \n =\n \n \n GraphicsWindow\n \n \n .\n \n \n MouseX\n \n
\n
\n
\n \n 96.\n \n \n \n \n dy\n \n \n =\n \n \n GraphicsWindow\n \n \n .\n \n \n MouseY\n \n
\n
\n
\n \n 97.\n \n \n EndSub\n \n
\n
\n
\n
\n

\n Mouse Event Handler (on Move)\n

\n
\n

\n This subroutine moves the sighter depending on the mouse moving.  The mouse pointer (the arrow mark) is hided when the mouse is in the window, and is showed when the mouse is out of the window.\n

\n
\n
\n
\n
\n \n 98.\n \n \n Sub\n \n \n OnMouseMove\n \n
\n
\n
\n \n 99.\n \n \n \n \n mx\n \n \n =\n \n \n GraphicsWindow\n \n \n .\n \n \n MouseX\n \n
\n
\n
\n \n 100.\n \n \n \n \n my\n \n \n =\n \n \n GraphicsWindow\n \n \n .\n \n \n MouseY\n \n
\n
\n
\n \n 101.\n \n \n \n \n If\n \n \n 0\n \n \n <\n \n \n =\n \n \n mx\n \n \n And\n \n \n mx\n \n \n <\n \n \n gw\n \n \n And\n \n \n 0\n \n \n <\n \n \n =\n \n \n my\n \n \n And\n \n \n my\n \n \n <\n \n \n gh\n \n \n Then\n \n
\n
\n
\n \n 102.\n \n \n \n \n Mouse\n \n \n .\n \n \n HideCursor\n \n \n (\n \n \n )\n \n
\n
\n
\n \n 103.\n \n \n \n \n Shapes\n \n \n .\n \n \n Move\n \n \n (\n \n \n sighter\n \n \n ,\n \n \n mx\n \n \n -\n \n \n 40\n \n \n ,\n \n \n my\n \n \n -\n \n \n 40\n \n \n )\n \n
\n
\n
\n \n 104.\n \n \n \n \n Else\n \n
\n
\n
\n \n 105.\n \n \n \n \n Mouse\n \n \n .\n \n \n ShowCursor\n \n \n (\n \n \n )\n \n
\n
\n
\n \n 106.\n \n \n \n \n EndIf\n \n
\n
\n
\n \n 107.\n \n \n EndSub\n \n
\n
\n
\n
\n

\n Opening\n

\n
\n

\n This subroutine shows the game title and images of a duck and a sighter.  Originally these images were combination of shapes created with Shapes editor.  But to make the motion of the images smoother, I converted these shapes data to .png files.  The detail about how to convert shapes drawings created by Shapes editor to .png files is described\n \n here\n \n .\n

\n
\n

\n For following two reasons, I used both the image and shapes of the duck.  One is for it's eye blink.  The other is to avoid the GetPixel issue in browser described above (Main Loop).\n

\n
\n
\n
\n
\n \n 108.\n \n \n Sub\n \n \n Opening\n \n
\n
\n
\n \n 109.\n \n \n \n \n bgColor\n \n \n =\n \n \n \"#8B0000\"\n \n \n ' DarkRed\n \n
\n
\n
\n \n 110.\n \n \n \n \n stColor\n \n \n =\n \n \n \"#990000\"\n \n \n ' for stair\n \n
\n
\n
\n \n 111.\n \n \n \n \n GraphicsWindow\n \n \n .\n \n \n BackgroundColor\n \n \n =\n \n \n bgColor\n \n
\n
\n
\n \n 112.\n \n \n \n \n gw\n \n \n =\n \n \n 598\n \n
\n
\n
\n \n 113.\n \n \n \n \n gh\n \n \n =\n \n \n 428\n \n
\n
\n
\n \n 114.\n \n \n \n \n GraphicsWindow\n \n \n .\n \n \n Width\n \n \n =\n \n \n gw\n \n
\n
\n
\n \n 115.\n \n \n \n \n GraphicsWindow\n \n \n .\n \n \n Height\n \n \n =\n \n \n gh\n \n
\n
\n
\n \n 116.\n \n \n \n \n GraphicsWindow\n \n \n .\n \n \n PenWidth\n \n \n =\n \n \n 0\n \n
\n
\n
\n \n 117.\n \n \n \n \n GraphicsWindow\n \n \n .\n \n \n BrushColor\n \n \n =\n \n \n bgColor\n \n
\n
\n
\n \n 118.\n \n \n \n \n GraphicsWindow\n \n \n .\n \n \n FillRectangle\n \n \n (\n \n \n 0\n \n \n ,\n \n \n 0\n \n \n ,\n \n \n gw\n \n \n ,\n \n \n gh\n \n \n )\n \n
\n
\n
\n \n 119.\n \n \n \n \n ' add duck image\n \n
\n
\n
\n \n 120.\n \n \n \n \n path\n \n \n =\n \n \n \"http://gallery.technet.microsoft.com/site/view/file/119954/1/Duck2.png\"\n \n
\n
\n
\n \n 121.\n \n \n \n \n img\n \n \n =\n \n \n ImageList\n \n \n .\n \n \n LoadImage\n \n \n (\n \n \n path\n \n \n )\n \n
\n
\n
\n \n 122.\n \n \n \n \n If\n \n \n silverlight\n \n \n Then\n \n
\n
\n
\n \n 123.\n \n \n \n \n dw\n \n \n =\n \n \n 246\n \n \n +\n \n \n 1\n \n
\n
\n
\n \n 124.\n \n \n \n \n dh\n \n \n =\n \n \n 192\n \n \n +\n \n \n 2\n \n
\n
\n
\n \n 125.\n \n \n \n \n Else\n \n
\n
\n
\n \n 126.\n \n \n \n \n dw\n \n \n =\n \n \n ImageList\n \n \n .\n \n \n GetWidthOfImage\n \n \n (\n \n \n img\n \n \n )\n \n
\n
\n
\n \n 127.\n \n \n \n \n dh\n \n \n =\n \n \n ImageList\n \n \n .\n \n \n GetHeightOfImage\n \n \n (\n \n \n img\n \n \n )\n \n
\n
\n
\n \n 128.\n \n \n \n \n EndIf\n \n
\n
\n
\n \n 129.\n \n \n \n \n duck\n \n \n [\n \n \n 1\n \n \n ]\n \n \n =\n \n \n Shapes\n \n \n .\n \n \n AddImage\n \n \n (\n \n \n img\n \n \n )\n \n
\n
\n
\n \n 130.\n \n \n \n \n Shapes\n \n \n .\n \n \n Move\n \n \n (\n \n \n duck\n \n \n [\n \n \n 1\n \n \n ]\n \n \n ,\n \n \n 194\n \n \n ,\n \n \n 150\n \n \n )\n \n
\n
\n
\n \n 131.\n \n \n \n \n Shapes\n \n \n .\n \n \n HideShape\n \n \n (\n \n \n duck\n \n \n [\n \n \n 1\n \n \n ]\n \n \n )\n \n
\n
\n
\n \n 132.\n \n \n \n \n ' add stair\n \n
\n
\n
\n \n 133.\n \n \n \n \n GraphicsWindow\n \n \n .\n \n \n BrushColor\n \n \n =\n \n \n stColor\n \n
\n
\n
\n \n 134.\n \n \n \n \n GraphicsWindow\n \n \n .\n \n \n PenWidth\n \n \n =\n \n \n 0\n \n
\n
\n
\n \n 135.\n \n \n \n \n stair\n \n \n =\n \n \n Shapes\n \n \n .\n \n \n AddRectangle\n \n \n (\n \n \n gw\n \n \n ,\n \n \n gh\n \n \n -\n \n \n yStair\n \n \n )\n \n
\n
\n
\n \n 136.\n \n \n \n \n yStair\n \n \n =\n \n \n Math\n \n \n .\n \n \n Round\n \n \n (\n \n \n gh\n \n \n *\n \n \n 2\n \n \n /\n \n \n 3\n \n \n )\n \n
\n
\n
\n \n 137.\n \n \n \n \n Shapes\n \n \n .\n \n \n Move\n \n \n (\n \n \n stair\n \n \n ,\n \n \n 0\n \n \n ,\n \n \n yStair\n \n \n )\n \n
\n
\n
\n \n 138.\n \n \n \n \n Shapes\n \n \n .\n \n \n HideShape\n \n \n (\n \n \n stair\n \n \n )\n \n
\n
\n
\n \n 139.\n \n \n \n \n ' initialize shapes\n \n
\n
\n
\n \n 140.\n \n \n \n \n GraphicsWindow\n \n \n .\n \n \n FontName\n \n \n =\n \n \n \"Trebuchet MS\"\n \n
\n
\n
\n \n 141.\n \n \n \n \n GraphicsWindow\n \n \n .\n \n \n FontSize\n \n \n =\n \n \n 50\n \n
\n
\n
\n \n 142.\n \n \n \n \n GraphicsWindow\n \n \n .\n \n \n BrushColor\n \n \n =\n \n \n \"White\"\n \n
\n
\n
\n \n 143.\n \n \n \n \n title\n \n \n =\n \n \n Shapes\n \n \n .\n \n \n AddText\n \n \n (\n \n \n \"DuckShoot\"\n \n \n )\n \n
\n
\n
\n \n 144.\n \n \n \n \n Shapes\n \n \n .\n \n \n Move\n \n \n (\n \n \n title\n \n \n ,\n \n \n 170\n \n \n ,\n \n \n 60\n \n \n )\n \n
\n
\n
\n \n 145.\n \n \n \n \n Shapes_Init\n \n \n (\n \n \n )\n \n
\n
\n
\n \n 146.\n \n \n \n \n ' add shapes\n \n
\n
\n
\n \n 147.\n \n \n \n \n scale\n \n \n =\n \n \n 1\n \n
\n
\n
\n \n 148.\n \n \n \n \n angle\n \n \n =\n \n \n 0\n \n
\n
\n
\n \n 149.\n \n \n \n \n iMin\n \n \n =\n \n \n 1\n \n
\n
\n
\n \n 150.\n \n \n \n \n iMax\n \n \n =\n \n \n 10\n \n
\n
\n
\n \n 151.\n \n \n \n \n Shapes_Add\n \n \n (\n \n \n )\n \n
\n
\n
\n \n 152.\n \n \n \n \n ' add sighter image\n \n
\n
\n
\n \n 153.\n \n \n \n \n path\n \n \n =\n \n \n \"http://gallery.technet.microsoft.com/site/view/file/119955/1/Sighter.png\"\n \n
\n
\n
\n \n 154.\n \n \n \n \n sighter\n \n \n =\n \n \n Shapes\n \n \n .\n \n \n AddImage\n \n \n (\n \n \n path\n \n \n )\n \n
\n
\n
\n \n 155.\n \n \n \n \n Shapes\n \n \n .\n \n \n Move\n \n \n (\n \n \n sighter\n \n \n ,\n \n \n 250\n \n \n ,\n \n \n 200\n \n \n )\n \n
\n
\n
\n \n 156.\n \n \n \n \n ' Blink start\n \n
\n
\n
\n \n 157.\n \n \n \n \n wait\n \n \n =\n \n \n \"True\"\n \n
\n
\n
\n \n 158.\n \n \n \n \n ems\n \n \n =\n \n \n Clock\n \n \n .\n \n \n ElapsedMilliseconds\n \n
\n
\n
\n \n 159.\n \n \n \n \n While\n \n \n wait\n \n
\n
\n
\n \n 160.\n \n \n \n \n Program\n \n \n .\n \n \n Delay\n \n \n (\n \n \n 1000\n \n \n )\n \n
\n
\n
\n \n 161.\n \n \n \n \n x\n \n \n =\n \n \n 250\n \n \n +\n \n \n (\n \n \n Math\n \n \n .\n \n \n GetRandomNumber\n \n \n (\n \n \n 50\n \n \n )\n \n \n -\n \n \n 25\n \n \n )\n \n
\n
\n
\n \n 162.\n \n \n \n \n y\n \n \n =\n \n \n 200\n \n \n +\n \n \n (\n \n \n Math\n \n \n .\n \n \n GetRandomNumber\n \n \n (\n \n \n 50\n \n \n )\n \n \n -\n \n \n 25\n \n \n )\n \n
\n
\n
\n \n 163.\n \n \n \n \n Shapes\n \n \n .\n \n \n Move\n \n \n (\n \n \n sighter\n \n \n ,\n \n \n x\n \n \n ,\n \n \n y\n \n \n )\n \n
\n
\n
\n \n 164.\n \n \n \n \n Program\n \n \n .\n \n \n Delay\n \n \n (\n \n \n 100\n \n \n )\n \n
\n
\n
\n \n 165.\n \n \n \n \n Shapes\n \n \n .\n \n \n HideShape\n \n \n (\n \n \n shape\n \n \n [\n \n \n 4\n \n \n ]\n \n \n [\n \n \n \"obj\"\n \n \n ]\n \n \n )\n \n
\n
\n
\n \n 166.\n \n \n \n \n Program\n \n \n .\n \n \n Delay\n \n \n (\n \n \n 100\n \n \n )\n \n
\n
\n
\n \n 167.\n \n \n \n \n Shapes\n \n \n .\n \n \n ShowShape\n \n \n (\n \n \n shape\n \n \n [\n \n \n 4\n \n \n ]\n \n \n [\n \n \n \"obj\"\n \n \n ]\n \n \n )\n \n
\n
\n
\n \n 168.\n \n \n \n \n If\n \n \n 5000\n \n \n <\n \n \n Clock\n \n \n .\n \n \n ElapsedMilliseconds\n \n \n -\n \n \n ems\n \n \n Then\n \n
\n
\n
\n \n 169.\n \n \n \n \n wait\n \n \n =\n \n \n \"False\"\n \n
\n
\n
\n \n 170.\n \n \n \n \n EndIf\n \n
\n
\n
\n \n 171.\n \n \n \n \n EndWhile\n \n
\n
\n
\n \n 172.\n \n \n \n \n Shapes\n \n \n .\n \n \n ShowShape\n \n \n (\n \n \n stair\n \n \n )\n \n
\n
\n
\n \n 173.\n \n \n \n \n iMin\n \n \n =\n \n \n 1\n \n
\n
\n
\n \n 174.\n \n \n \n \n iMax\n \n \n =\n \n \n 10\n \n
\n
\n
\n \n 175.\n \n \n \n \n Shapes_Remove\n \n \n (\n \n \n )\n \n
\n
\n
\n \n 176.\n \n \n \n \n Shapes\n \n \n .\n \n \n Remove\n \n \n (\n \n \n title\n \n \n )\n \n
\n
\n
\n \n 177.\n \n \n EndSub\n \n
\n
\n
\n
\n

\n Drawing Shapes\n

\n
\n

\n I wrote this subroutine for checking whether the gun shoot hit the duck or not.  This subroutine is used only for this purpose so far.  But for the future, I wrote this to be as general-purpose as possible.  And it has still restrictions as follows.\n

\n
\n \n
\n

\n This routine is called only when the program is run in browser.\n

\n
\n
\n
\n
\n \n 178.\n \n \n Sub\n \n \n Shapes_Draw\n \n
\n
\n
\n \n 179.\n \n \n \n \n ' Shapes | draw shapes\n \n
\n
\n
\n \n 180.\n \n \n \n \n ' param iMin, iMax - shape indices to add\n \n
\n
\n
\n \n 181.\n \n \n \n \n ' param shape - array of shapes\n \n
\n
\n
\n \n 182.\n \n \n \n \n ' param scale - 1 if same scale\n \n
\n
\n
\n \n 183.\n \n \n \n \n ' TODO to draw border line for rectangle, triangle and ellipse\n \n
\n
\n
\n \n 184.\n \n \n \n \n ' TODO to rotate rectangle and ellipse (text?)\n \n
\n
\n
\n \n 185.\n \n \n \n \n Stack\n \n \n .\n \n \n PushValue\n \n \n (\n \n \n \"local\"\n \n \n ,\n \n \n x\n \n \n )\n \n
\n
\n
\n \n 186.\n \n \n \n \n Stack\n \n \n .\n \n \n PushValue\n \n \n (\n \n \n \"local\"\n \n \n ,\n \n \n y\n \n \n )\n \n
\n
\n
\n \n 187.\n \n \n \n \n Stack\n \n \n .\n \n \n PushValue\n \n \n (\n \n \n \"local\"\n \n \n ,\n \n \n i\n \n \n )\n \n
\n
\n
\n \n 188.\n \n \n \n \n s\n \n \n =\n \n \n scale\n \n
\n
\n
\n \n 189.\n \n \n \n \n For\n \n \n i\n \n \n =\n \n \n iMin\n \n \n To\n \n \n iMax\n \n
\n
\n
\n \n 190.\n \n \n \n \n If\n \n \n shape\n \n \n [\n \n \n i\n \n \n ]\n \n \n [\n \n \n \"pw\"\n \n \n ]\n \n \n >\n \n \n 0\n \n \n Then\n \n
\n
\n
\n \n 191.\n \n \n \n \n GraphicsWindow\n \n \n .\n \n \n PenColor\n \n \n =\n \n \n shape\n \n \n [\n \n \n i\n \n \n ]\n \n \n [\n \n \n \"pc\"\n \n \n ]\n \n
\n
\n
\n \n 192.\n \n \n \n \n EndIf\n \n
\n
\n
\n \n 193.\n \n \n \n \n If\n \n \n Text\n \n \n .\n \n \n IsSubText\n \n \n (\n \n \n \"rect|ell|tri|text\"\n \n \n ,\n \n \n shape\n \n \n [\n \n \n i\n \n \n ]\n \n \n [\n \n \n \"func\"\n \n \n ]\n \n \n )\n \n \n Then\n \n
\n
\n
\n \n 194.\n \n \n \n \n GraphicsWindow\n \n \n .\n \n \n BrushColor\n \n \n =\n \n \n shape\n \n \n [\n \n \n i\n \n \n ]\n \n \n [\n \n \n \"bc\"\n \n \n ]\n \n
\n
\n
\n \n 195.\n \n \n \n \n EndIf\n \n
\n
\n
\n \n 196.\n \n \n \n \n x\n \n \n =\n \n \n shX\n \n \n +\n \n \n shape\n \n \n [\n \n \n i\n \n \n ]\n \n \n [\n \n \n \"x\"\n \n \n ]\n \n \n *\n \n \n s\n \n
\n
\n
\n \n 197.\n \n \n \n \n y\n \n \n =\n \n \n shY\n \n \n +\n \n \n shape\n \n \n [\n \n \n i\n \n \n ]\n \n \n [\n \n \n \"y\"\n \n \n ]\n \n \n *\n \n \n s\n \n
\n
\n
\n \n 198.\n \n \n \n \n If\n \n \n shape\n \n \n [\n \n \n i\n \n \n ]\n \n \n [\n \n \n \"func\"\n \n \n ]\n \n \n =\n \n \n \"rect\"\n \n \n Then\n \n
\n
\n
\n \n 199.\n \n \n \n \n GraphicsWindow\n \n \n .\n \n \n FillRectangle\n \n \n (\n \n \n x\n \n \n ,\n \n \n y\n \n \n ,\n \n \n shape\n \n \n [\n \n \n i\n \n \n ]\n \n \n [\n \n \n \"width\"\n \n \n ]\n \n \n *\n \n \n s\n \n \n ,\n \n \n shape\n \n \n [\n \n \n i\n \n \n ]\n \n \n [\n \n \n \"height\"\n \n \n ]\n \n \n *\n \n \n s\n \n \n )\n \n
\n
\n
\n \n 200.\n \n \n \n \n ElseIf\n \n \n shape\n \n \n [\n \n \n i\n \n \n ]\n \n \n [\n \n \n \"func\"\n \n \n ]\n \n \n =\n \n \n \"ell\"\n \n \n Then\n \n
\n
\n
\n \n 201.\n \n \n \n \n GraphicsWindow\n \n \n .\n \n \n FillEllipse\n \n \n (\n \n \n x\n \n \n ,\n \n \n y\n \n \n ,\n \n \n shape\n \n \n [\n \n \n i\n \n \n ]\n \n \n [\n \n \n \"width\"\n \n \n ]\n \n \n *\n \n \n s\n \n \n ,\n \n \n shape\n \n \n [\n \n \n i\n \n \n ]\n \n \n [\n \n \n \"height\"\n \n \n ]\n \n \n *\n \n \n s\n \n \n )\n \n
\n
\n
\n \n 202.\n \n \n \n \n ElseIf\n \n \n shape\n \n \n [\n \n \n i\n \n \n ]\n \n \n [\n \n \n \"func\"\n \n \n ]\n \n \n =\n \n \n \"tri\"\n \n \n Then\n \n
\n
\n
\n \n 203.\n \n \n \n \n x\n \n \n [\n \n \n 1\n \n \n ]\n \n \n =\n \n \n shX\n \n \n +\n \n \n shape\n \n \n [\n \n \n i\n \n \n ]\n \n \n [\n \n \n \"x\"\n \n \n ]\n \n \n *\n \n \n s\n \n \n +\n \n \n shape\n \n \n [\n \n \n i\n \n \n ]\n \n \n [\n \n \n \"x1\"\n \n \n ]\n \n \n *\n \n \n s\n \n
\n
\n
\n \n 204.\n \n \n \n \n y\n \n \n [\n \n \n 1\n \n \n ]\n \n \n =\n \n \n shY\n \n \n +\n \n \n shape\n \n \n [\n \n \n i\n \n \n ]\n \n \n [\n \n \n \"y\"\n \n \n ]\n \n \n *\n \n \n s\n \n \n +\n \n \n shape\n \n \n [\n \n \n i\n \n \n ]\n \n \n [\n \n \n \"y1\"\n \n \n ]\n \n \n *\n \n \n s\n \n
\n
\n
\n \n 205.\n \n \n \n \n x\n \n \n [\n \n \n 2\n \n \n ]\n \n \n =\n \n \n shX\n \n \n +\n \n \n shape\n \n \n [\n \n \n i\n \n \n ]\n \n \n [\n \n \n \"x\"\n \n \n ]\n \n \n *\n \n \n s\n \n \n +\n \n \n shape\n \n \n [\n \n \n i\n \n \n ]\n \n \n [\n \n \n \"x2\"\n \n \n ]\n \n \n *\n \n \n s\n \n
\n
\n
\n \n 206.\n \n \n \n \n y\n \n \n [\n \n \n 2\n \n \n ]\n \n \n =\n \n \n shY\n \n \n +\n \n \n shape\n \n \n [\n \n \n i\n \n \n ]\n \n \n [\n \n \n \"y\"\n \n \n ]\n \n \n *\n \n \n s\n \n \n +\n \n \n shape\n \n \n [\n \n \n i\n \n \n ]\n \n \n [\n \n \n \"y2\"\n \n \n ]\n \n \n *\n \n \n s\n \n
\n
\n
\n \n 207.\n \n \n \n \n x\n \n \n [\n \n \n 3\n \n \n ]\n \n \n =\n \n \n shX\n \n \n +\n \n \n shape\n \n \n [\n \n \n i\n \n \n ]\n \n \n [\n \n \n \"x\"\n \n \n ]\n \n \n *\n \n \n s\n \n \n +\n \n \n shape\n \n \n [\n \n \n i\n \n \n ]\n \n \n [\n \n \n \"x3\"\n \n \n ]\n \n \n *\n \n \n s\n \n
\n
\n
\n \n 208.\n \n \n \n \n y\n \n \n [\n \n \n 3\n \n \n ]\n \n \n =\n \n \n shY\n \n \n +\n \n \n shape\n \n \n [\n \n \n i\n \n \n ]\n \n \n [\n \n \n \"y\"\n \n \n ]\n \n \n *\n \n \n s\n \n \n +\n \n \n shape\n \n \n [\n \n \n i\n \n \n ]\n \n \n [\n \n \n \"y3\"\n \n \n ]\n \n \n *\n \n \n s\n \n
\n
\n
\n \n 209.\n \n \n \n \n angle\n \n \n =\n \n \n shape\n \n \n [\n \n \n i\n \n \n ]\n \n \n [\n \n \n \"angle\"\n \n \n ]\n \n
\n
\n
\n \n 210.\n \n \n \n \n If\n \n \n angle\n \n \n <\n \n \n >\n \n \n 0\n \n \n Then\n \n
\n
\n
\n \n 211.\n \n \n \n \n n\n \n \n =\n \n \n 3\n \n
\n
\n
\n \n 212.\n \n \n \n \n ox\n \n \n =\n \n \n (\n \n \n x\n \n \n [\n \n \n 2\n \n \n ]\n \n \n +\n \n \n x\n \n \n [\n \n \n 3\n \n \n ]\n \n \n )\n \n \n /\n \n \n 2\n \n
\n
\n
\n \n 213.\n \n \n \n \n oy\n \n \n =\n \n \n (\n \n \n y\n \n \n [\n \n \n 1\n \n \n ]\n \n \n +\n \n \n y\n \n \n [\n \n \n 2\n \n \n ]\n \n \n )\n \n \n /\n \n \n 2\n \n
\n
\n
\n \n 214.\n \n \n \n \n Shapes_RotatePolyline\n \n \n (\n \n \n )\n \n
\n
\n
\n \n 215.\n \n \n \n \n EndIf\n \n
\n
\n
\n \n 216.\n \n \n \n \n GraphicsWindow\n \n \n .\n \n \n FillTriangle\n \n \n (\n \n \n x\n \n \n [\n \n \n 1\n \n \n ]\n \n \n ,\n \n \n y\n \n \n [\n \n \n 1\n \n \n ]\n \n \n ,\n \n \n x\n \n \n [\n \n \n 2\n \n \n ]\n \n \n ,\n \n \n y\n \n \n [\n \n \n 2\n \n \n ]\n \n \n ,\n \n \n x\n \n \n [\n \n \n 3\n \n \n ]\n \n \n ,\n \n \n y\n \n \n [\n \n \n 3\n \n \n ]\n \n \n )\n \n
\n
\n
\n \n 217.\n \n \n \n \n ElseIf\n \n \n shape\n \n \n [\n \n \n i\n \n \n ]\n \n \n [\n \n \n \"func\"\n \n \n ]\n \n \n =\n \n \n \"line\"\n \n \n Then\n \n
\n
\n
\n \n 218.\n \n \n \n \n x\n \n \n [\n \n \n 1\n \n \n ]\n \n \n =\n \n \n shX\n \n \n +\n \n \n shape\n \n \n [\n \n \n i\n \n \n ]\n \n \n [\n \n \n \"x\"\n \n \n ]\n \n \n *\n \n \n s\n \n \n +\n \n \n shape\n \n \n [\n \n \n i\n \n \n ]\n \n \n [\n \n \n \"x1\"\n \n \n ]\n \n \n *\n \n \n s\n \n
\n
\n
\n \n 219.\n \n \n \n \n y\n \n \n [\n \n \n 1\n \n \n ]\n \n \n =\n \n \n shY\n \n \n +\n \n \n shape\n \n \n [\n \n \n i\n \n \n ]\n \n \n [\n \n \n \"y\"\n \n \n ]\n \n \n *\n \n \n s\n \n \n +\n \n \n shape\n \n \n [\n \n \n i\n \n \n ]\n \n \n [\n \n \n \"y1\"\n \n \n ]\n \n \n *\n \n \n s\n \n
\n
\n
\n \n 220.\n \n \n \n \n x\n \n \n [\n \n \n 2\n \n \n ]\n \n \n =\n \n \n shX\n \n \n +\n \n \n shape\n \n \n [\n \n \n i\n \n \n ]\n \n \n [\n \n \n \"x\"\n \n \n ]\n \n \n *\n \n \n s\n \n \n +\n \n \n shape\n \n \n [\n \n \n i\n \n \n ]\n \n \n [\n \n \n \"x2\"\n \n \n ]\n \n \n *\n \n \n s\n \n
\n
\n
\n \n 221.\n \n \n \n \n y\n \n \n [\n \n \n 2\n \n \n ]\n \n \n =\n \n \n shY\n \n \n +\n \n \n shape\n \n \n [\n \n \n i\n \n \n ]\n \n \n [\n \n \n \"y\"\n \n \n ]\n \n \n *\n \n \n s\n \n \n +\n \n \n shape\n \n \n [\n \n \n i\n \n \n ]\n \n \n [\n \n \n \"y2\"\n \n \n ]\n \n \n *\n \n \n s\n \n
\n
\n
\n \n 222.\n \n \n \n \n If\n \n \n angle\n \n \n <\n \n \n >\n \n \n 0\n \n \n Then\n \n
\n
\n
\n \n 223.\n \n \n \n \n n\n \n \n =\n \n \n 3\n \n
\n
\n
\n \n 224.\n \n \n \n \n ox\n \n \n =\n \n \n (\n \n \n x\n \n \n [\n \n \n 2\n \n \n ]\n \n \n +\n \n \n x\n \n \n [\n \n \n 3\n \n \n ]\n \n \n )\n \n \n /\n \n \n 2\n \n
\n
\n
\n \n 225.\n \n \n \n \n oy\n \n \n =\n \n \n (\n \n \n y\n \n \n [\n \n \n 1\n \n \n ]\n \n \n +\n \n \n y\n \n \n [\n \n \n 2\n \n \n ]\n \n \n )\n \n \n /\n \n \n 2\n \n
\n
\n
\n \n 226.\n \n \n \n \n Shapes_RotatePolyline\n \n \n (\n \n \n )\n \n
\n
\n
\n \n 227.\n \n \n \n \n EndIf\n \n
\n
\n
\n \n 228.\n \n \n \n \n GraphicsWindow\n \n \n .\n \n \n DrawLine\n \n \n (\n \n \n x\n \n \n [\n \n \n 1\n \n \n ]\n \n \n ,\n \n \n y\n \n \n [\n \n \n 1\n \n \n ]\n \n \n ,\n \n \n x\n \n \n [\n \n \n 2\n \n \n ]\n \n \n ,\n \n \n y\n \n \n [\n \n \n 2\n \n \n ]\n \n \n )\n \n
\n
\n
\n \n 229.\n \n \n \n \n ElseIf\n \n \n shape\n \n \n [\n \n \n i\n \n \n ]\n \n \n [\n \n \n \"func\"\n \n \n ]\n \n \n =\n \n \n \"text\"\n \n \n Then\n \n
\n
\n
\n \n 230.\n \n \n \n \n If\n \n \n silverlight\n \n \n Then\n \n
\n
\n
\n \n 231.\n \n \n \n \n fs\n \n \n =\n \n \n Math\n \n \n .\n \n \n Floor\n \n \n (\n \n \n shape\n \n \n [\n \n \n i\n \n \n ]\n \n \n [\n \n \n \"fs\"\n \n \n ]\n \n \n *\n \n \n 0.9\n \n \n )\n \n
\n
\n
\n \n 232.\n \n \n \n \n Else\n \n
\n
\n
\n \n 233.\n \n \n \n \n fs\n \n \n =\n \n \n shape\n \n \n [\n \n \n i\n \n \n ]\n \n \n [\n \n \n \"fs\"\n \n \n ]\n \n
\n
\n
\n \n 234.\n \n \n \n \n EndIf\n \n
\n
\n
\n \n 235.\n \n \n \n \n GraphicsWindow\n \n \n .\n \n \n FontSize\n \n \n =\n \n \n fs\n \n \n *\n \n \n s\n \n
\n
\n
\n \n 236.\n \n \n \n \n GraphicsWindow\n \n \n .\n \n \n FontName\n \n \n =\n \n \n shape\n \n \n [\n \n \n i\n \n \n ]\n \n \n [\n \n \n \"fn\"\n \n \n ]\n \n
\n
\n
\n \n 237.\n \n \n \n \n GraphicsWindow\n \n \n .\n \n \n DrawText\n \n \n (\n \n \n x\n \n \n ,\n \n \n y\n \n \n ,\n \n \n shape\n \n \n [\n \n \n i\n \n \n ]\n \n \n [\n \n \n \"text\"\n \n \n ]\n \n \n )\n \n
\n
\n
\n \n 238.\n \n \n \n \n EndIf\n \n
\n
\n
\n \n 239.\n \n \n \n \n EndFor\n \n
\n
\n
\n \n 240.\n \n \n \n \n i\n \n \n =\n \n \n Stack\n \n \n .\n \n \n PopValue\n \n \n (\n \n \n \"local\"\n \n \n )\n \n
\n
\n
\n \n 241.\n \n \n \n \n y\n \n \n =\n \n \n Stack\n \n \n .\n \n \n PopValue\n \n \n (\n \n \n \"local\"\n \n \n )\n \n
\n
\n
\n \n 242.\n \n \n \n \n x\n \n \n =\n \n \n Stack\n \n \n .\n \n \n PopValue\n \n \n (\n \n \n \"local\"\n \n \n )\n \n
\n
\n
\n \n 243.\n \n \n EndSub\n \n
\n
\n
\n
\n

\n Polyline Rotation\n

\n
\n

\n This subroutine is written for rotating vertices of a triangle.  But this subroutine supports more vertices as a polyline or a polygon for general-purpose.\n

\n
\n
\n
\n
\n \n 244.\n \n \n Sub\n \n \n Shapes_RotatePolyline\n \n
\n
\n
\n \n 245.\n \n \n \n \n ' Shapes | rotate polyline\n \n
\n
\n
\n \n 246.\n \n \n \n \n ' param n - number of points\n \n
\n
\n
\n \n 247.\n \n \n \n \n ' param x, y - array of x and y co-ordinates\n \n
\n
\n
\n \n 248.\n \n \n \n \n ' param ox, oy, - center of rotation\n \n
\n
\n
\n \n 249.\n \n \n \n \n ' param angle - angle of rotation\n \n
\n
\n
\n \n 250.\n \n \n \n \n Stack\n \n \n .\n \n \n PushValue\n \n \n (\n \n \n \"local\"\n \n \n ,\n \n \n i\n \n \n )\n \n
\n
\n
\n \n 251.\n \n \n \n \n _a\n \n \n =\n \n \n Math\n \n \n .\n \n \n GetRadians\n \n \n (\n \n \n angle\n \n \n )\n \n
\n
\n
\n \n 252.\n \n \n \n \n For\n \n \n i\n \n \n =\n \n \n 1\n \n \n To\n \n \n n\n \n
\n
\n
\n \n 253.\n \n \n \n \n xi\n \n \n =\n \n \n (\n \n \n x\n \n \n [\n \n \n i\n \n \n ]\n \n \n -\n \n \n ox\n \n \n )\n \n \n *\n \n \n Math\n \n \n .\n \n \n Cos\n \n \n (\n \n \n _a\n \n \n )\n \n \n +\n \n \n (\n \n \n y\n \n \n [\n \n \n i\n \n \n ]\n \n \n -\n \n \n oy\n \n \n )\n \n \n *\n \n \n Math\n \n \n .\n \n \n Sin\n \n \n (\n \n \n _a\n \n \n )\n \n
\n
\n
\n \n 254.\n \n \n \n \n yi\n \n \n =\n \n \n -\n \n \n (\n \n \n x\n \n \n [\n \n \n i\n \n \n ]\n \n \n -\n \n \n ox\n \n \n )\n \n \n *\n \n \n Math\n \n \n .\n \n \n Sin\n \n \n (\n \n \n _a\n \n \n )\n \n \n +\n \n \n (\n \n \n y\n \n \n [\n \n \n i\n \n \n ]\n \n \n -\n \n \n oy\n \n \n )\n \n \n *\n \n \n Math\n \n \n .\n \n \n Cos\n \n \n (\n \n \n _a\n \n \n )\n \n
\n
\n
\n \n 255.\n \n \n \n \n x\n \n \n [\n \n \n i\n \n \n ]\n \n \n =\n \n \n xi\n \n \n +\n \n \n ox\n \n
\n
\n
\n \n 256.\n \n \n \n \n y\n \n \n [\n \n \n i\n \n \n ]\n \n \n =\n \n \n yi\n \n \n +\n \n \n oy\n \n
\n
\n
\n \n 257.\n \n \n \n \n EndFor\n \n
\n
\n
\n \n 258.\n \n \n \n \n i\n \n \n =\n \n \n Stack\n \n \n .\n \n \n PopValue\n \n \n (\n \n \n \"local\"\n \n \n )\n \n
\n
\n
\n \n 259.\n \n \n EndSub\n \n
\n
\n
\n
\n

\n Auto Generated Code\n

\n
\n

\n And this program also have following subroutines.  These subroutines are generated by Shapes editor 1.5b.  So I skip to show these codes.  But I listed up brief description for these.  There are other subroutines generated by Shapes.  But I deleted because they are not called in this program.\n

\n
\n \n
\n

\n As duck shooting game, increasing ducks will make this game more fun.  Would you like to challenge?\n

\n \n","body@stringLength":"88011","rawBody":"\n \n \n First published on MSDN on Aug 18, 2014\n \n
\n

\n \n Authored by Nonki Takahashi\n \n

\n
\n

\n In\n \n Challenge of the Month - August 2013\n \n , there were following two challenges.\n

\n
\n

\n \n Game Challenge\n \n

\n
\n

\n Write a DuckShoot game.\n
\n \n \n

\n
\n

\n \n Interface Challenge\n \n

\n
\n

\n Write a fancy Game Opening screen for DuckShoot game - see above.\n

\n
\n

\n At that time, I tried only opening.  Today, I will introduce new DuckShoot game as Program ID\n \n TLR995-2\n \n .\n

\n
\n

\n \n

\n
\n

\n This program has 425 lines.  But there are 166 lines that automatically generated by Shapes editor.  So actual coded lines are 259.\n

\n
\n

\n Main\n

\n
\n

\n I added shooting part.  But only one duck comes.  Because I thought the code becomes complex and worse readable if ducks increases.\n

\n
\n
\n
\n
\n \n 1.\n \n \n ' DuckShoot 0.31b\n \n
\n
\n
\n \n 2.\n \n \n ' Copyright (c) 2013-2014 Nonki Takahashi. The MIT License.\n \n
\n
\n
\n \n 3.\n \n \n '\n \n
\n
\n
\n \n 4.\n \n \n ' History:\n \n
\n
\n
\n \n 5.\n \n \n ' 0.31b 2014-08-01 Sorted subroutines. (TLR995-2)\n \n
\n
\n
\n \n 6.\n \n \n ' 0.3b 2014-07-26 Supported in remote. (TLR995-1)\n \n
\n
\n
\n \n 7.\n \n \n ' 0.2b 2014-07-13 Created a core of shooting. (TLR995-0)\n \n
\n
\n
\n \n 8.\n \n \n ' 0.1a 2013-08-03 Created as DuckShoot opening. (TLR995)\n \n
\n
\n
\n \n 9.\n \n \n ' 0.0 2013-08-03 14:38:49 Shapes generated by Shapes 1.5b.\n \n
\n
\n
\n \n 10.\n \n \n '\n \n
\n
\n
\n \n 11.\n \n \n GraphicsWindow\n \n \n .\n \n \n Title\n \n \n =\n \n \n \"DuckShoot 0.31b\"\n \n
\n
\n
\n \n 12.\n \n \n SB_Workaround\n \n \n (\n \n \n )\n \n
\n
\n
\n \n 13.\n \n \n Opening\n \n \n (\n \n \n )\n \n
\n
\n
\n \n 14.\n \n \n GameInit\n \n \n (\n \n \n )\n \n
\n
\n
\n \n 15.\n \n \n GameLoop\n \n \n (\n \n \n )\n \n
\n
\n
\n \n 16.\n \n \n Ending\n \n \n (\n \n \n )\n \n
\n
\n
\n
\n

\n Ending\n

\n
\n

\n This subroutine calculates score from a number of shoot and a number of hit.\n

\n
\n
\n
\n
\n \n 17.\n \n \n Sub\n \n \n Ending\n \n
\n
\n
\n \n 18.\n \n \n \n \n Shapes\n \n \n .\n \n \n Remove\n \n \n (\n \n \n stair\n \n \n )\n \n
\n
\n
\n \n 19.\n \n \n \n \n If\n \n \n hit\n \n \n [\n \n \n i\n \n \n ]\n \n \n Then\n \n
\n
\n
\n \n 20.\n \n \n \n \n point\n \n \n =\n \n \n 1\n \n
\n
\n
\n \n 21.\n \n \n \n \n Else\n \n
\n
\n
\n \n 22.\n \n \n \n \n point\n \n \n =\n \n \n 0\n \n
\n
\n
\n \n 23.\n \n \n \n \n EndIf\n \n
\n
\n
\n \n 24.\n \n \n \n \n score\n \n \n =\n \n \n point\n \n \n *\n \n \n 110\n \n \n -\n \n \n shoot\n \n \n *\n \n \n 10\n \n
\n
\n
\n \n 25.\n \n \n \n \n GraphicsWindow\n \n \n .\n \n \n BrushColor\n \n \n =\n \n \n \"White\"\n \n
\n
\n
\n \n 26.\n \n \n \n \n GraphicsWindow\n \n \n .\n \n \n FontSize\n \n \n =\n \n \n 40\n \n
\n
\n
\n \n 27.\n \n \n \n \n GraphicsWindow\n \n \n .\n \n \n DrawText\n \n \n (\n \n \n 170\n \n \n ,\n \n \n 180\n \n \n ,\n \n \n \"SCORE \"\n \n \n +\n \n \n score\n \n \n )\n \n
\n
\n
\n \n 28.\n \n \n \n \n Program\n \n \n .\n \n \n Delay\n \n \n (\n \n \n 500\n \n \n )\n \n
\n
\n
\n \n 29.\n \n \n \n \n GraphicsWindow\n \n \n .\n \n \n DrawText\n \n \n (\n \n \n 170\n \n \n ,\n \n \n 230\n \n \n ,\n \n \n \"SHOOT \"\n \n \n +\n \n \n shoot\n \n \n )\n \n
\n
\n
\n \n 30.\n \n \n \n \n Program\n \n \n .\n \n \n Delay\n \n \n (\n \n \n 500\n \n \n )\n \n
\n
\n
\n \n 31.\n \n \n \n \n GraphicsWindow\n \n \n .\n \n \n DrawText\n \n \n (\n \n \n 170\n \n \n ,\n \n \n 280\n \n \n ,\n \n \n \"HIT \"\n \n \n +\n \n \n point\n \n \n )\n \n
\n
\n
\n \n 32.\n \n \n \n \n Program\n \n \n .\n \n \n Delay\n \n \n (\n \n \n 2000\n \n \n )\n \n
\n
\n
\n \n 33.\n \n \n \n \n GraphicsWindow\n \n \n .\n \n \n FontSize\n \n \n =\n \n \n 50\n \n
\n
\n
\n \n 34.\n \n \n \n \n GraphicsWindow\n \n \n .\n \n \n DrawText\n \n \n (\n \n \n 170\n \n \n ,\n \n \n 80\n \n \n ,\n \n \n \"GAME OVER\"\n \n \n )\n \n
\n
\n
\n \n 35.\n \n \n EndSub\n \n
\n
\n
\n
\n

\n Initialization\n

\n
\n

\n At this point there is one duck.  But for the future, arrays are used instead of single variables for the duck.  I decided to use mouse for the operation of the gun, so events for mouse click and move are initialized here.\n

\n
\n
\n
\n
\n \n 36.\n \n \n Sub\n \n \n GameInit\n \n
\n
\n
\n \n 37.\n \n \n \n \n ' Game start\n \n
\n
\n
\n \n 38.\n \n \n \n \n Shapes\n \n \n .\n \n \n ShowShape\n \n \n (\n \n \n duck\n \n \n [\n \n \n 1\n \n \n ]\n \n \n )\n \n
\n
\n
\n \n 39.\n \n \n \n \n mouseDown\n \n \n =\n \n \n \"False\"\n \n
\n
\n
\n \n 40.\n \n \n \n \n GraphicsWindow\n \n \n .\n \n \n MouseDown\n \n \n =\n \n \n OnMouseDown\n \n
\n
\n
\n \n 41.\n \n \n \n \n GraphicsWindow\n \n \n .\n \n \n MouseMove\n \n \n =\n \n \n OnMouseMove\n \n
\n
\n
\n \n 42.\n \n \n \n \n Shapes\n \n \n .\n \n \n Animate\n \n \n (\n \n \n duck\n \n \n [\n \n \n 1\n \n \n ]\n \n \n ,\n \n \n gw\n \n \n ,\n \n \n 150\n \n \n ,\n \n \n 3000\n \n \n )\n \n
\n
\n
\n \n 43.\n \n \n \n \n Program\n \n \n .\n \n \n Delay\n \n \n (\n \n \n 3000\n \n \n )\n \n
\n
\n
\n \n 44.\n \n \n \n \n i\n \n \n =\n \n \n 1\n \n
\n
\n
\n \n 45.\n \n \n \n \n hit\n \n \n [\n \n \n i\n \n \n ]\n \n \n =\n \n \n \"False\"\n \n
\n
\n
\n \n 46.\n \n \n \n \n a\n \n \n [\n \n \n i\n \n \n ]\n \n \n =\n \n \n 90\n \n
\n
\n
\n \n 47.\n \n \n \n \n x\n \n \n [\n \n \n i\n \n \n ]\n \n \n =\n \n \n -\n \n \n dw\n \n
\n
\n
\n \n 48.\n \n \n \n \n yDuck\n \n \n =\n \n \n 150\n \n
\n
\n
\n \n 49.\n \n \n \n \n y\n \n \n [\n \n \n i\n \n \n ]\n \n \n =\n \n \n yDuck\n \n
\n
\n
\n \n 50.\n \n \n \n \n Shapes\n \n \n .\n \n \n Move\n \n \n (\n \n \n duck\n \n \n [\n \n \n i\n \n \n ]\n \n \n ,\n \n \n x\n \n \n [\n \n \n i\n \n \n ]\n \n \n ,\n \n \n y\n \n \n [\n \n \n i\n \n \n ]\n \n \n )\n \n
\n
\n
\n \n 51.\n \n \n \n \n GraphicsWindow\n \n \n .\n \n \n PenWidth\n \n \n =\n \n \n 0\n \n
\n
\n
\n \n 52.\n \n \n \n \n GraphicsWindow\n \n \n .\n \n \n BrushColor\n \n \n =\n \n \n bgColor\n \n
\n
\n
\n \n 53.\n \n \n \n \n yRS\n \n \n =\n \n \n yStair\n \n \n -\n \n \n (\n \n \n yDuck\n \n \n +\n \n \n dh\n \n \n /\n \n \n 2\n \n \n )\n \n
\n
\n
\n \n 54.\n \n \n \n \n shoot\n \n \n =\n \n \n 0\n \n
\n
\n
\n \n 55.\n \n \n EndSub\n \n
\n
\n
\n
\n

\n Main Loop\n

\n
\n

\n Last week obstacles are moved in the timer event handler.  This time, a duck is moved 4 dots rightward in main loop.\n

\n
\n

\n When a player shoots the gun, another duck is drawn under the moving Shapes duck to check hitting.  If the target is an ellipse or a rectangle, the hit checking can be calculated from the co-ordinate.  But the duck shape is a little difficult for the calculation.  So, I used GraphicsWindow.GetPixel() and check the color is the background color or not.\n

\n
\n

\n There is a problem on a browser at GetPixel.  A browser hangs up and returns no response at GraphicsWindow.GetPixel() after GraphicsWindow.DrawImage().  Program imported into IDE doesn't  have this problem.  To avoid this problem, I changed this program not to use DrawImage() but to use FillRectangle(), FillTriangle() and FillEllipse() with shape data created by Shapes editor.  This workaround works well because the duck drawing was made with Shapes editor.\n

\n
\n

\n When the gun hits, the duck image falls down by using Shapes.Zoom().  We can give zoom levels from 0.1 to 20 for this operation.  So, be careful not to give smaller value than 0.1.  In following subroutine, the zoom level is reduced little by little until 0.1.\n

\n
\n

\n I found there is\n \n another problem\n \n with Shapes.Zoom() in imported program.  When the zoom level was smaller than 0.7, the program stopped.  At that time, the image of the duck had transparent background.  To avoid this issue, I changed the image to have opaque background.\n

\n
\n
\n
\n
\n \n 56.\n \n \n Sub\n \n \n GameLoop\n \n
\n
\n
\n \n 57.\n \n \n \n \n While\n \n \n x\n \n \n [\n \n \n i\n \n \n ]\n \n \n <\n \n \n gw\n \n
\n
\n
\n \n 58.\n \n \n \n \n Program\n \n \n .\n \n \n Delay\n \n \n (\n \n \n 50\n \n \n )\n \n
\n
\n
\n \n 59.\n \n \n \n \n If\n \n \n mouseDown\n \n \n Then\n \n
\n
\n
\n \n 60.\n \n \n \n \n Sound\n \n \n .\n \n \n PlayClick\n \n \n (\n \n \n )\n \n
\n
\n
\n \n 61.\n \n \n \n \n shoot\n \n \n =\n \n \n shoot\n \n \n +\n \n \n 1\n \n
\n
\n
\n \n 62.\n \n \n \n \n If\n \n \n silverlight\n \n \n Then\n \n
\n
\n
\n \n 63.\n \n \n \n \n shX\n \n \n =\n \n \n x\n \n \n [\n \n \n i\n \n \n ]\n \n
\n
\n
\n \n 64.\n \n \n \n \n shY\n \n \n =\n \n \n y\n \n \n [\n \n \n i\n \n \n ]\n \n
\n
\n
\n \n 65.\n \n \n \n \n iMin\n \n \n =\n \n \n 1\n \n
\n
\n
\n \n 66.\n \n \n \n \n iMax\n \n \n =\n \n \n 10\n \n
\n
\n
\n \n 67.\n \n \n \n \n Shapes_Draw\n \n \n (\n \n \n )\n \n
\n
\n
\n \n 68.\n \n \n \n \n Else\n \n
\n
\n
\n \n 69.\n \n \n \n \n GraphicsWindow\n \n \n .\n \n \n DrawImage\n \n \n (\n \n \n img\n \n \n ,\n \n \n x\n \n \n [\n \n \n i\n \n \n ]\n \n \n ,\n \n \n y\n \n \n [\n \n \n i\n \n \n ]\n \n \n )\n \n
\n
\n
\n \n 70.\n \n \n \n \n EndIf\n \n
\n
\n
\n \n 71.\n \n \n \n \n color\n \n \n =\n \n \n GraphicsWindow\n \n \n .\n \n \n GetPixel\n \n \n (\n \n \n dx\n \n \n ,\n \n \n dy\n \n \n )\n \n
\n
\n
\n \n 72.\n \n \n \n \n GraphicsWindow\n \n \n .\n \n \n PenWidth\n \n \n =\n \n \n 0\n \n
\n
\n
\n \n 73.\n \n \n \n \n GraphicsWindow\n \n \n .\n \n \n BrushColor\n \n \n =\n \n \n bgColor\n \n
\n
\n
\n \n 74.\n \n \n \n \n GraphicsWindow\n \n \n .\n \n \n FillRectangle\n \n \n (\n \n \n x\n \n \n [\n \n \n i\n \n \n ]\n \n \n ,\n \n \n y\n \n \n [\n \n \n i\n \n \n ]\n \n \n ,\n \n \n dw\n \n \n ,\n \n \n dh\n \n \n )\n \n
\n
\n
\n \n 75.\n \n \n \n \n If\n \n \n color\n \n \n <\n \n \n >\n \n \n bgColor\n \n \n Then\n \n
\n
\n
\n \n 76.\n \n \n \n \n hit\n \n \n [\n \n \n i\n \n \n ]\n \n \n =\n \n \n \"True\"\n \n
\n
\n
\n \n 77.\n \n \n \n \n EndIf\n \n
\n
\n
\n \n 78.\n \n \n \n \n mouseDown\n \n \n =\n \n \n \"False\"\n \n
\n
\n
\n \n 79.\n \n \n \n \n EndIf\n \n
\n
\n
\n \n 80.\n \n \n \n \n If\n \n \n hit\n \n \n [\n \n \n i\n \n \n ]\n \n \n Then\n \n
\n
\n
\n \n 81.\n \n \n \n \n If\n \n \n 0\n \n \n <\n \n \n a\n \n \n [\n \n \n i\n \n \n ]\n \n \n Then\n \n
\n
\n
\n \n 82.\n \n \n \n \n a\n \n \n [\n \n \n i\n \n \n ]\n \n \n =\n \n \n a\n \n \n [\n \n \n i\n \n \n ]\n \n \n -\n \n \n 5\n \n
\n
\n
\n \n 83.\n \n \n \n \n cos\n \n \n =\n \n \n Math\n \n \n .\n \n \n Round\n \n \n (\n \n \n Math\n \n \n .\n \n \n Sin\n \n \n (\n \n \n Math\n \n \n .\n \n \n GetRadians\n \n \n (\n \n \n a\n \n \n [\n \n \n i\n \n \n ]\n \n \n )\n \n \n )\n \n \n *\n \n \n 100\n \n \n )\n \n \n /\n \n \n 100\n \n
\n
\n
\n \n 84.\n \n \n \n \n Shapes\n \n \n .\n \n \n Zoom\n \n \n (\n \n \n duck\n \n \n [\n \n \n i\n \n \n ]\n \n \n ,\n \n \n 1\n \n \n ,\n \n \n Math\n \n \n .\n \n \n Max\n \n \n (\n \n \n cos\n \n \n ,\n \n \n 0.1\n \n \n )\n \n \n )\n \n
\n
\n
\n \n 85.\n \n \n \n \n deltaY\n \n \n =\n \n \n yRS\n \n \n -\n \n \n yRS\n \n \n *\n \n \n cos\n \n
\n
\n
\n \n 86.\n \n \n \n \n y\n \n \n [\n \n \n i\n \n \n ]\n \n \n =\n \n \n yDuck\n \n \n +\n \n \n deltaY\n \n
\n
\n
\n \n 87.\n \n \n \n \n EndIf\n \n
\n
\n
\n \n 88.\n \n \n \n \n EndIf\n \n
\n
\n
\n \n 89.\n \n \n \n \n x\n \n \n [\n \n \n i\n \n \n ]\n \n \n =\n \n \n x\n \n \n [\n \n \n i\n \n \n ]\n \n \n +\n \n \n 4\n \n
\n
\n
\n \n 90.\n \n \n \n \n Shapes\n \n \n .\n \n \n Move\n \n \n (\n \n \n duck\n \n \n [\n \n \n i\n \n \n ]\n \n \n ,\n \n \n x\n \n \n [\n \n \n i\n \n \n ]\n \n \n ,\n \n \n y\n \n \n [\n \n \n i\n \n \n ]\n \n \n )\n \n
\n
\n
\n \n 91.\n \n \n \n \n EndWhile\n \n
\n
\n
\n \n 92.\n \n \n EndSub\n \n
\n
\n
\n
\n

\n Mouse Event Handler (on Click)\n

\n
\n

\n This subroutine sets a flag mouseDown and saves the co-ordinate of the mouse.  This co-ordinate is used to check that the gun hits the duck in GameLoop().\n

\n
\n
\n
\n
\n \n 93.\n \n \n Sub\n \n \n OnMouseDown\n \n
\n
\n
\n \n 94.\n \n \n \n \n mouseDown\n \n \n =\n \n \n \"True\"\n \n
\n
\n
\n \n 95.\n \n \n \n \n dx\n \n \n =\n \n \n GraphicsWindow\n \n \n .\n \n \n MouseX\n \n
\n
\n
\n \n 96.\n \n \n \n \n dy\n \n \n =\n \n \n GraphicsWindow\n \n \n .\n \n \n MouseY\n \n
\n
\n
\n \n 97.\n \n \n EndSub\n \n
\n
\n
\n
\n

\n Mouse Event Handler (on Move)\n

\n
\n

\n This subroutine moves the sighter depending on the mouse moving.  The mouse pointer (the arrow mark) is hided when the mouse is in the window, and is showed when the mouse is out of the window.\n

\n
\n
\n
\n
\n \n 98.\n \n \n Sub\n \n \n OnMouseMove\n \n
\n
\n
\n \n 99.\n \n \n \n \n mx\n \n \n =\n \n \n GraphicsWindow\n \n \n .\n \n \n MouseX\n \n
\n
\n
\n \n 100.\n \n \n \n \n my\n \n \n =\n \n \n GraphicsWindow\n \n \n .\n \n \n MouseY\n \n
\n
\n
\n \n 101.\n \n \n \n \n If\n \n \n 0\n \n \n <\n \n \n =\n \n \n mx\n \n \n And\n \n \n mx\n \n \n <\n \n \n gw\n \n \n And\n \n \n 0\n \n \n <\n \n \n =\n \n \n my\n \n \n And\n \n \n my\n \n \n <\n \n \n gh\n \n \n Then\n \n
\n
\n
\n \n 102.\n \n \n \n \n Mouse\n \n \n .\n \n \n HideCursor\n \n \n (\n \n \n )\n \n
\n
\n
\n \n 103.\n \n \n \n \n Shapes\n \n \n .\n \n \n Move\n \n \n (\n \n \n sighter\n \n \n ,\n \n \n mx\n \n \n -\n \n \n 40\n \n \n ,\n \n \n my\n \n \n -\n \n \n 40\n \n \n )\n \n
\n
\n
\n \n 104.\n \n \n \n \n Else\n \n
\n
\n
\n \n 105.\n \n \n \n \n Mouse\n \n \n .\n \n \n ShowCursor\n \n \n (\n \n \n )\n \n
\n
\n
\n \n 106.\n \n \n \n \n EndIf\n \n
\n
\n
\n \n 107.\n \n \n EndSub\n \n
\n
\n
\n
\n

\n Opening\n

\n
\n

\n This subroutine shows the game title and images of a duck and a sighter.  Originally these images were combination of shapes created with Shapes editor.  But to make the motion of the images smoother, I converted these shapes data to .png files.  The detail about how to convert shapes drawings created by Shapes editor to .png files is described\n \n here\n \n .\n

\n
\n

\n For following two reasons, I used both the image and shapes of the duck.  One is for it's eye blink.  The other is to avoid the GetPixel issue in browser described above (Main Loop).\n

\n
\n
\n
\n
\n \n 108.\n \n \n Sub\n \n \n Opening\n \n
\n
\n
\n \n 109.\n \n \n \n \n bgColor\n \n \n =\n \n \n \"#8B0000\"\n \n \n ' DarkRed\n \n
\n
\n
\n \n 110.\n \n \n \n \n stColor\n \n \n =\n \n \n \"#990000\"\n \n \n ' for stair\n \n
\n
\n
\n \n 111.\n \n \n \n \n GraphicsWindow\n \n \n .\n \n \n BackgroundColor\n \n \n =\n \n \n bgColor\n \n
\n
\n
\n \n 112.\n \n \n \n \n gw\n \n \n =\n \n \n 598\n \n
\n
\n
\n \n 113.\n \n \n \n \n gh\n \n \n =\n \n \n 428\n \n
\n
\n
\n \n 114.\n \n \n \n \n GraphicsWindow\n \n \n .\n \n \n Width\n \n \n =\n \n \n gw\n \n
\n
\n
\n \n 115.\n \n \n \n \n GraphicsWindow\n \n \n .\n \n \n Height\n \n \n =\n \n \n gh\n \n
\n
\n
\n \n 116.\n \n \n \n \n GraphicsWindow\n \n \n .\n \n \n PenWidth\n \n \n =\n \n \n 0\n \n
\n
\n
\n \n 117.\n \n \n \n \n GraphicsWindow\n \n \n .\n \n \n BrushColor\n \n \n =\n \n \n bgColor\n \n
\n
\n
\n \n 118.\n \n \n \n \n GraphicsWindow\n \n \n .\n \n \n FillRectangle\n \n \n (\n \n \n 0\n \n \n ,\n \n \n 0\n \n \n ,\n \n \n gw\n \n \n ,\n \n \n gh\n \n \n )\n \n
\n
\n
\n \n 119.\n \n \n \n \n ' add duck image\n \n
\n
\n
\n \n 120.\n \n \n \n \n path\n \n \n =\n \n \n \"http://gallery.technet.microsoft.com/site/view/file/119954/1/Duck2.png\"\n \n
\n
\n
\n \n 121.\n \n \n \n \n img\n \n \n =\n \n \n ImageList\n \n \n .\n \n \n LoadImage\n \n \n (\n \n \n path\n \n \n )\n \n
\n
\n
\n \n 122.\n \n \n \n \n If\n \n \n silverlight\n \n \n Then\n \n
\n
\n
\n \n 123.\n \n \n \n \n dw\n \n \n =\n \n \n 246\n \n \n +\n \n \n 1\n \n
\n
\n
\n \n 124.\n \n \n \n \n dh\n \n \n =\n \n \n 192\n \n \n +\n \n \n 2\n \n
\n
\n
\n \n 125.\n \n \n \n \n Else\n \n
\n
\n
\n \n 126.\n \n \n \n \n dw\n \n \n =\n \n \n ImageList\n \n \n .\n \n \n GetWidthOfImage\n \n \n (\n \n \n img\n \n \n )\n \n
\n
\n
\n \n 127.\n \n \n \n \n dh\n \n \n =\n \n \n ImageList\n \n \n .\n \n \n GetHeightOfImage\n \n \n (\n \n \n img\n \n \n )\n \n
\n
\n
\n \n 128.\n \n \n \n \n EndIf\n \n
\n
\n
\n \n 129.\n \n \n \n \n duck\n \n \n [\n \n \n 1\n \n \n ]\n \n \n =\n \n \n Shapes\n \n \n .\n \n \n AddImage\n \n \n (\n \n \n img\n \n \n )\n \n
\n
\n
\n \n 130.\n \n \n \n \n Shapes\n \n \n .\n \n \n Move\n \n \n (\n \n \n duck\n \n \n [\n \n \n 1\n \n \n ]\n \n \n ,\n \n \n 194\n \n \n ,\n \n \n 150\n \n \n )\n \n
\n
\n
\n \n 131.\n \n \n \n \n Shapes\n \n \n .\n \n \n HideShape\n \n \n (\n \n \n duck\n \n \n [\n \n \n 1\n \n \n ]\n \n \n )\n \n
\n
\n
\n \n 132.\n \n \n \n \n ' add stair\n \n
\n
\n
\n \n 133.\n \n \n \n \n GraphicsWindow\n \n \n .\n \n \n BrushColor\n \n \n =\n \n \n stColor\n \n
\n
\n
\n \n 134.\n \n \n \n \n GraphicsWindow\n \n \n .\n \n \n PenWidth\n \n \n =\n \n \n 0\n \n
\n
\n
\n \n 135.\n \n \n \n \n stair\n \n \n =\n \n \n Shapes\n \n \n .\n \n \n AddRectangle\n \n \n (\n \n \n gw\n \n \n ,\n \n \n gh\n \n \n -\n \n \n yStair\n \n \n )\n \n
\n
\n
\n \n 136.\n \n \n \n \n yStair\n \n \n =\n \n \n Math\n \n \n .\n \n \n Round\n \n \n (\n \n \n gh\n \n \n *\n \n \n 2\n \n \n /\n \n \n 3\n \n \n )\n \n
\n
\n
\n \n 137.\n \n \n \n \n Shapes\n \n \n .\n \n \n Move\n \n \n (\n \n \n stair\n \n \n ,\n \n \n 0\n \n \n ,\n \n \n yStair\n \n \n )\n \n
\n
\n
\n \n 138.\n \n \n \n \n Shapes\n \n \n .\n \n \n HideShape\n \n \n (\n \n \n stair\n \n \n )\n \n
\n
\n
\n \n 139.\n \n \n \n \n ' initialize shapes\n \n
\n
\n
\n \n 140.\n \n \n \n \n GraphicsWindow\n \n \n .\n \n \n FontName\n \n \n =\n \n \n \"Trebuchet MS\"\n \n
\n
\n
\n \n 141.\n \n \n \n \n GraphicsWindow\n \n \n .\n \n \n FontSize\n \n \n =\n \n \n 50\n \n
\n
\n
\n \n 142.\n \n \n \n \n GraphicsWindow\n \n \n .\n \n \n BrushColor\n \n \n =\n \n \n \"White\"\n \n
\n
\n
\n \n 143.\n \n \n \n \n title\n \n \n =\n \n \n Shapes\n \n \n .\n \n \n AddText\n \n \n (\n \n \n \"DuckShoot\"\n \n \n )\n \n
\n
\n
\n \n 144.\n \n \n \n \n Shapes\n \n \n .\n \n \n Move\n \n \n (\n \n \n title\n \n \n ,\n \n \n 170\n \n \n ,\n \n \n 60\n \n \n )\n \n
\n
\n
\n \n 145.\n \n \n \n \n Shapes_Init\n \n \n (\n \n \n )\n \n
\n
\n
\n \n 146.\n \n \n \n \n ' add shapes\n \n
\n
\n
\n \n 147.\n \n \n \n \n scale\n \n \n =\n \n \n 1\n \n
\n
\n
\n \n 148.\n \n \n \n \n angle\n \n \n =\n \n \n 0\n \n
\n
\n
\n \n 149.\n \n \n \n \n iMin\n \n \n =\n \n \n 1\n \n
\n
\n
\n \n 150.\n \n \n \n \n iMax\n \n \n =\n \n \n 10\n \n
\n
\n
\n \n 151.\n \n \n \n \n Shapes_Add\n \n \n (\n \n \n )\n \n
\n
\n
\n \n 152.\n \n \n \n \n ' add sighter image\n \n
\n
\n
\n \n 153.\n \n \n \n \n path\n \n \n =\n \n \n \"http://gallery.technet.microsoft.com/site/view/file/119955/1/Sighter.png\"\n \n
\n
\n
\n \n 154.\n \n \n \n \n sighter\n \n \n =\n \n \n Shapes\n \n \n .\n \n \n AddImage\n \n \n (\n \n \n path\n \n \n )\n \n
\n
\n
\n \n 155.\n \n \n \n \n Shapes\n \n \n .\n \n \n Move\n \n \n (\n \n \n sighter\n \n \n ,\n \n \n 250\n \n \n ,\n \n \n 200\n \n \n )\n \n
\n
\n
\n \n 156.\n \n \n \n \n ' Blink start\n \n
\n
\n
\n \n 157.\n \n \n \n \n wait\n \n \n =\n \n \n \"True\"\n \n
\n
\n
\n \n 158.\n \n \n \n \n ems\n \n \n =\n \n \n Clock\n \n \n .\n \n \n ElapsedMilliseconds\n \n
\n
\n
\n \n 159.\n \n \n \n \n While\n \n \n wait\n \n
\n
\n
\n \n 160.\n \n \n \n \n Program\n \n \n .\n \n \n Delay\n \n \n (\n \n \n 1000\n \n \n )\n \n
\n
\n
\n \n 161.\n \n \n \n \n x\n \n \n =\n \n \n 250\n \n \n +\n \n \n (\n \n \n Math\n \n \n .\n \n \n GetRandomNumber\n \n \n (\n \n \n 50\n \n \n )\n \n \n -\n \n \n 25\n \n \n )\n \n
\n
\n
\n \n 162.\n \n \n \n \n y\n \n \n =\n \n \n 200\n \n \n +\n \n \n (\n \n \n Math\n \n \n .\n \n \n GetRandomNumber\n \n \n (\n \n \n 50\n \n \n )\n \n \n -\n \n \n 25\n \n \n )\n \n
\n
\n
\n \n 163.\n \n \n \n \n Shapes\n \n \n .\n \n \n Move\n \n \n (\n \n \n sighter\n \n \n ,\n \n \n x\n \n \n ,\n \n \n y\n \n \n )\n \n
\n
\n
\n \n 164.\n \n \n \n \n Program\n \n \n .\n \n \n Delay\n \n \n (\n \n \n 100\n \n \n )\n \n
\n
\n
\n \n 165.\n \n \n \n \n Shapes\n \n \n .\n \n \n HideShape\n \n \n (\n \n \n shape\n \n \n [\n \n \n 4\n \n \n ]\n \n \n [\n \n \n \"obj\"\n \n \n ]\n \n \n )\n \n
\n
\n
\n \n 166.\n \n \n \n \n Program\n \n \n .\n \n \n Delay\n \n \n (\n \n \n 100\n \n \n )\n \n
\n
\n
\n \n 167.\n \n \n \n \n Shapes\n \n \n .\n \n \n ShowShape\n \n \n (\n \n \n shape\n \n \n [\n \n \n 4\n \n \n ]\n \n \n [\n \n \n \"obj\"\n \n \n ]\n \n \n )\n \n
\n
\n
\n \n 168.\n \n \n \n \n If\n \n \n 5000\n \n \n <\n \n \n Clock\n \n \n .\n \n \n ElapsedMilliseconds\n \n \n -\n \n \n ems\n \n \n Then\n \n
\n
\n
\n \n 169.\n \n \n \n \n wait\n \n \n =\n \n \n \"False\"\n \n
\n
\n
\n \n 170.\n \n \n \n \n EndIf\n \n
\n
\n
\n \n 171.\n \n \n \n \n EndWhile\n \n
\n
\n
\n \n 172.\n \n \n \n \n Shapes\n \n \n .\n \n \n ShowShape\n \n \n (\n \n \n stair\n \n \n )\n \n
\n
\n
\n \n 173.\n \n \n \n \n iMin\n \n \n =\n \n \n 1\n \n
\n
\n
\n \n 174.\n \n \n \n \n iMax\n \n \n =\n \n \n 10\n \n
\n
\n
\n \n 175.\n \n \n \n \n Shapes_Remove\n \n \n (\n \n \n )\n \n
\n
\n
\n \n 176.\n \n \n \n \n Shapes\n \n \n .\n \n \n Remove\n \n \n (\n \n \n title\n \n \n )\n \n
\n
\n
\n \n 177.\n \n \n EndSub\n \n
\n
\n
\n
\n

\n Drawing Shapes\n

\n
\n

\n I wrote this subroutine for checking whether the gun shoot hit the duck or not.  This subroutine is used only for this purpose so far.  But for the future, I wrote this to be as general-purpose as possible.  And it has still restrictions as follows.\n

\n
\n \n
\n

\n This routine is called only when the program is run in browser.\n

\n
\n
\n
\n
\n \n 178.\n \n \n Sub\n \n \n Shapes_Draw\n \n
\n
\n
\n \n 179.\n \n \n \n \n ' Shapes | draw shapes\n \n
\n
\n
\n \n 180.\n \n \n \n \n ' param iMin, iMax - shape indices to add\n \n
\n
\n
\n \n 181.\n \n \n \n \n ' param shape - array of shapes\n \n
\n
\n
\n \n 182.\n \n \n \n \n ' param scale - 1 if same scale\n \n
\n
\n
\n \n 183.\n \n \n \n \n ' TODO to draw border line for rectangle, triangle and ellipse\n \n
\n
\n
\n \n 184.\n \n \n \n \n ' TODO to rotate rectangle and ellipse (text?)\n \n
\n
\n
\n \n 185.\n \n \n \n \n Stack\n \n \n .\n \n \n PushValue\n \n \n (\n \n \n \"local\"\n \n \n ,\n \n \n x\n \n \n )\n \n
\n
\n
\n \n 186.\n \n \n \n \n Stack\n \n \n .\n \n \n PushValue\n \n \n (\n \n \n \"local\"\n \n \n ,\n \n \n y\n \n \n )\n \n
\n
\n
\n \n 187.\n \n \n \n \n Stack\n \n \n .\n \n \n PushValue\n \n \n (\n \n \n \"local\"\n \n \n ,\n \n \n i\n \n \n )\n \n
\n
\n
\n \n 188.\n \n \n \n \n s\n \n \n =\n \n \n scale\n \n
\n
\n
\n \n 189.\n \n \n \n \n For\n \n \n i\n \n \n =\n \n \n iMin\n \n \n To\n \n \n iMax\n \n
\n
\n
\n \n 190.\n \n \n \n \n If\n \n \n shape\n \n \n [\n \n \n i\n \n \n ]\n \n \n [\n \n \n \"pw\"\n \n \n ]\n \n \n >\n \n \n 0\n \n \n Then\n \n
\n
\n
\n \n 191.\n \n \n \n \n GraphicsWindow\n \n \n .\n \n \n PenColor\n \n \n =\n \n \n shape\n \n \n [\n \n \n i\n \n \n ]\n \n \n [\n \n \n \"pc\"\n \n \n ]\n \n
\n
\n
\n \n 192.\n \n \n \n \n EndIf\n \n
\n
\n
\n \n 193.\n \n \n \n \n If\n \n \n Text\n \n \n .\n \n \n IsSubText\n \n \n (\n \n \n \"rect|ell|tri|text\"\n \n \n ,\n \n \n shape\n \n \n [\n \n \n i\n \n \n ]\n \n \n [\n \n \n \"func\"\n \n \n ]\n \n \n )\n \n \n Then\n \n
\n
\n
\n \n 194.\n \n \n \n \n GraphicsWindow\n \n \n .\n \n \n BrushColor\n \n \n =\n \n \n shape\n \n \n [\n \n \n i\n \n \n ]\n \n \n [\n \n \n \"bc\"\n \n \n ]\n \n
\n
\n
\n \n 195.\n \n \n \n \n EndIf\n \n
\n
\n
\n \n 196.\n \n \n \n \n x\n \n \n =\n \n \n shX\n \n \n +\n \n \n shape\n \n \n [\n \n \n i\n \n \n ]\n \n \n [\n \n \n \"x\"\n \n \n ]\n \n \n *\n \n \n s\n \n
\n
\n
\n \n 197.\n \n \n \n \n y\n \n \n =\n \n \n shY\n \n \n +\n \n \n shape\n \n \n [\n \n \n i\n \n \n ]\n \n \n [\n \n \n \"y\"\n \n \n ]\n \n \n *\n \n \n s\n \n
\n
\n
\n \n 198.\n \n \n \n \n If\n \n \n shape\n \n \n [\n \n \n i\n \n \n ]\n \n \n [\n \n \n \"func\"\n \n \n ]\n \n \n =\n \n \n \"rect\"\n \n \n Then\n \n
\n
\n
\n \n 199.\n \n \n \n \n GraphicsWindow\n \n \n .\n \n \n FillRectangle\n \n \n (\n \n \n x\n \n \n ,\n \n \n y\n \n \n ,\n \n \n shape\n \n \n [\n \n \n i\n \n \n ]\n \n \n [\n \n \n \"width\"\n \n \n ]\n \n \n *\n \n \n s\n \n \n ,\n \n \n shape\n \n \n [\n \n \n i\n \n \n ]\n \n \n [\n \n \n \"height\"\n \n \n ]\n \n \n *\n \n \n s\n \n \n )\n \n
\n
\n
\n \n 200.\n \n \n \n \n ElseIf\n \n \n shape\n \n \n [\n \n \n i\n \n \n ]\n \n \n [\n \n \n \"func\"\n \n \n ]\n \n \n =\n \n \n \"ell\"\n \n \n Then\n \n
\n
\n
\n \n 201.\n \n \n \n \n GraphicsWindow\n \n \n .\n \n \n FillEllipse\n \n \n (\n \n \n x\n \n \n ,\n \n \n y\n \n \n ,\n \n \n shape\n \n \n [\n \n \n i\n \n \n ]\n \n \n [\n \n \n \"width\"\n \n \n ]\n \n \n *\n \n \n s\n \n \n ,\n \n \n shape\n \n \n [\n \n \n i\n \n \n ]\n \n \n [\n \n \n \"height\"\n \n \n ]\n \n \n *\n \n \n s\n \n \n )\n \n
\n
\n
\n \n 202.\n \n \n \n \n ElseIf\n \n \n shape\n \n \n [\n \n \n i\n \n \n ]\n \n \n [\n \n \n \"func\"\n \n \n ]\n \n \n =\n \n \n \"tri\"\n \n \n Then\n \n
\n
\n
\n \n 203.\n \n \n \n \n x\n \n \n [\n \n \n 1\n \n \n ]\n \n \n =\n \n \n shX\n \n \n +\n \n \n shape\n \n \n [\n \n \n i\n \n \n ]\n \n \n [\n \n \n \"x\"\n \n \n ]\n \n \n *\n \n \n s\n \n \n +\n \n \n shape\n \n \n [\n \n \n i\n \n \n ]\n \n \n [\n \n \n \"x1\"\n \n \n ]\n \n \n *\n \n \n s\n \n
\n
\n
\n \n 204.\n \n \n \n \n y\n \n \n [\n \n \n 1\n \n \n ]\n \n \n =\n \n \n shY\n \n \n +\n \n \n shape\n \n \n [\n \n \n i\n \n \n ]\n \n \n [\n \n \n \"y\"\n \n \n ]\n \n \n *\n \n \n s\n \n \n +\n \n \n shape\n \n \n [\n \n \n i\n \n \n ]\n \n \n [\n \n \n \"y1\"\n \n \n ]\n \n \n *\n \n \n s\n \n
\n
\n
\n \n 205.\n \n \n \n \n x\n \n \n [\n \n \n 2\n \n \n ]\n \n \n =\n \n \n shX\n \n \n +\n \n \n shape\n \n \n [\n \n \n i\n \n \n ]\n \n \n [\n \n \n \"x\"\n \n \n ]\n \n \n *\n \n \n s\n \n \n +\n \n \n shape\n \n \n [\n \n \n i\n \n \n ]\n \n \n [\n \n \n \"x2\"\n \n \n ]\n \n \n *\n \n \n s\n \n
\n
\n
\n \n 206.\n \n \n \n \n y\n \n \n [\n \n \n 2\n \n \n ]\n \n \n =\n \n \n shY\n \n \n +\n \n \n shape\n \n \n [\n \n \n i\n \n \n ]\n \n \n [\n \n \n \"y\"\n \n \n ]\n \n \n *\n \n \n s\n \n \n +\n \n \n shape\n \n \n [\n \n \n i\n \n \n ]\n \n \n [\n \n \n \"y2\"\n \n \n ]\n \n \n *\n \n \n s\n \n
\n
\n
\n \n 207.\n \n \n \n \n x\n \n \n [\n \n \n 3\n \n \n ]\n \n \n =\n \n \n shX\n \n \n +\n \n \n shape\n \n \n [\n \n \n i\n \n \n ]\n \n \n [\n \n \n \"x\"\n \n \n ]\n \n \n *\n \n \n s\n \n \n +\n \n \n shape\n \n \n [\n \n \n i\n \n \n ]\n \n \n [\n \n \n \"x3\"\n \n \n ]\n \n \n *\n \n \n s\n \n
\n
\n
\n \n 208.\n \n \n \n \n y\n \n \n [\n \n \n 3\n \n \n ]\n \n \n =\n \n \n shY\n \n \n +\n \n \n shape\n \n \n [\n \n \n i\n \n \n ]\n \n \n [\n \n \n \"y\"\n \n \n ]\n \n \n *\n \n \n s\n \n \n +\n \n \n shape\n \n \n [\n \n \n i\n \n \n ]\n \n \n [\n \n \n \"y3\"\n \n \n ]\n \n \n *\n \n \n s\n \n
\n
\n
\n \n 209.\n \n \n \n \n angle\n \n \n =\n \n \n shape\n \n \n [\n \n \n i\n \n \n ]\n \n \n [\n \n \n \"angle\"\n \n \n ]\n \n
\n
\n
\n \n 210.\n \n \n \n \n If\n \n \n angle\n \n \n <\n \n \n >\n \n \n 0\n \n \n Then\n \n
\n
\n
\n \n 211.\n \n \n \n \n n\n \n \n =\n \n \n 3\n \n
\n
\n
\n \n 212.\n \n \n \n \n ox\n \n \n =\n \n \n (\n \n \n x\n \n \n [\n \n \n 2\n \n \n ]\n \n \n +\n \n \n x\n \n \n [\n \n \n 3\n \n \n ]\n \n \n )\n \n \n /\n \n \n 2\n \n
\n
\n
\n \n 213.\n \n \n \n \n oy\n \n \n =\n \n \n (\n \n \n y\n \n \n [\n \n \n 1\n \n \n ]\n \n \n +\n \n \n y\n \n \n [\n \n \n 2\n \n \n ]\n \n \n )\n \n \n /\n \n \n 2\n \n
\n
\n
\n \n 214.\n \n \n \n \n Shapes_RotatePolyline\n \n \n (\n \n \n )\n \n
\n
\n
\n \n 215.\n \n \n \n \n EndIf\n \n
\n
\n
\n \n 216.\n \n \n \n \n GraphicsWindow\n \n \n .\n \n \n FillTriangle\n \n \n (\n \n \n x\n \n \n [\n \n \n 1\n \n \n ]\n \n \n ,\n \n \n y\n \n \n [\n \n \n 1\n \n \n ]\n \n \n ,\n \n \n x\n \n \n [\n \n \n 2\n \n \n ]\n \n \n ,\n \n \n y\n \n \n [\n \n \n 2\n \n \n ]\n \n \n ,\n \n \n x\n \n \n [\n \n \n 3\n \n \n ]\n \n \n ,\n \n \n y\n \n \n [\n \n \n 3\n \n \n ]\n \n \n )\n \n
\n
\n
\n \n 217.\n \n \n \n \n ElseIf\n \n \n shape\n \n \n [\n \n \n i\n \n \n ]\n \n \n [\n \n \n \"func\"\n \n \n ]\n \n \n =\n \n \n \"line\"\n \n \n Then\n \n
\n
\n
\n \n 218.\n \n \n \n \n x\n \n \n [\n \n \n 1\n \n \n ]\n \n \n =\n \n \n shX\n \n \n +\n \n \n shape\n \n \n [\n \n \n i\n \n \n ]\n \n \n [\n \n \n \"x\"\n \n \n ]\n \n \n *\n \n \n s\n \n \n +\n \n \n shape\n \n \n [\n \n \n i\n \n \n ]\n \n \n [\n \n \n \"x1\"\n \n \n ]\n \n \n *\n \n \n s\n \n
\n
\n
\n \n 219.\n \n \n \n \n y\n \n \n [\n \n \n 1\n \n \n ]\n \n \n =\n \n \n shY\n \n \n +\n \n \n shape\n \n \n [\n \n \n i\n \n \n ]\n \n \n [\n \n \n \"y\"\n \n \n ]\n \n \n *\n \n \n s\n \n \n +\n \n \n shape\n \n \n [\n \n \n i\n \n \n ]\n \n \n [\n \n \n \"y1\"\n \n \n ]\n \n \n *\n \n \n s\n \n
\n
\n
\n \n 220.\n \n \n \n \n x\n \n \n [\n \n \n 2\n \n \n ]\n \n \n =\n \n \n shX\n \n \n +\n \n \n shape\n \n \n [\n \n \n i\n \n \n ]\n \n \n [\n \n \n \"x\"\n \n \n ]\n \n \n *\n \n \n s\n \n \n +\n \n \n shape\n \n \n [\n \n \n i\n \n \n ]\n \n \n [\n \n \n \"x2\"\n \n \n ]\n \n \n *\n \n \n s\n \n
\n
\n
\n \n 221.\n \n \n \n \n y\n \n \n [\n \n \n 2\n \n \n ]\n \n \n =\n \n \n shY\n \n \n +\n \n \n shape\n \n \n [\n \n \n i\n \n \n ]\n \n \n [\n \n \n \"y\"\n \n \n ]\n \n \n *\n \n \n s\n \n \n +\n \n \n shape\n \n \n [\n \n \n i\n \n \n ]\n \n \n [\n \n \n \"y2\"\n \n \n ]\n \n \n *\n \n \n s\n \n
\n
\n
\n \n 222.\n \n \n \n \n If\n \n \n angle\n \n \n <\n \n \n >\n \n \n 0\n \n \n Then\n \n
\n
\n
\n \n 223.\n \n \n \n \n n\n \n \n =\n \n \n 3\n \n
\n
\n
\n \n 224.\n \n \n \n \n ox\n \n \n =\n \n \n (\n \n \n x\n \n \n [\n \n \n 2\n \n \n ]\n \n \n +\n \n \n x\n \n \n [\n \n \n 3\n \n \n ]\n \n \n )\n \n \n /\n \n \n 2\n \n
\n
\n
\n \n 225.\n \n \n \n \n oy\n \n \n =\n \n \n (\n \n \n y\n \n \n [\n \n \n 1\n \n \n ]\n \n \n +\n \n \n y\n \n \n [\n \n \n 2\n \n \n ]\n \n \n )\n \n \n /\n \n \n 2\n \n
\n
\n
\n \n 226.\n \n \n \n \n Shapes_RotatePolyline\n \n \n (\n \n \n )\n \n
\n
\n
\n \n 227.\n \n \n \n \n EndIf\n \n
\n
\n
\n \n 228.\n \n \n \n \n GraphicsWindow\n \n \n .\n \n \n DrawLine\n \n \n (\n \n \n x\n \n \n [\n \n \n 1\n \n \n ]\n \n \n ,\n \n \n y\n \n \n [\n \n \n 1\n \n \n ]\n \n \n ,\n \n \n x\n \n \n [\n \n \n 2\n \n \n ]\n \n \n ,\n \n \n y\n \n \n [\n \n \n 2\n \n \n ]\n \n \n )\n \n
\n
\n
\n \n 229.\n \n \n \n \n ElseIf\n \n \n shape\n \n \n [\n \n \n i\n \n \n ]\n \n \n [\n \n \n \"func\"\n \n \n ]\n \n \n =\n \n \n \"text\"\n \n \n Then\n \n
\n
\n
\n \n 230.\n \n \n \n \n If\n \n \n silverlight\n \n \n Then\n \n
\n
\n
\n \n 231.\n \n \n \n \n fs\n \n \n =\n \n \n Math\n \n \n .\n \n \n Floor\n \n \n (\n \n \n shape\n \n \n [\n \n \n i\n \n \n ]\n \n \n [\n \n \n \"fs\"\n \n \n ]\n \n \n *\n \n \n 0.9\n \n \n )\n \n
\n
\n
\n \n 232.\n \n \n \n \n Else\n \n
\n
\n
\n \n 233.\n \n \n \n \n fs\n \n \n =\n \n \n shape\n \n \n [\n \n \n i\n \n \n ]\n \n \n [\n \n \n \"fs\"\n \n \n ]\n \n
\n
\n
\n \n 234.\n \n \n \n \n EndIf\n \n
\n
\n
\n \n 235.\n \n \n \n \n GraphicsWindow\n \n \n .\n \n \n FontSize\n \n \n =\n \n \n fs\n \n \n *\n \n \n s\n \n
\n
\n
\n \n 236.\n \n \n \n \n GraphicsWindow\n \n \n .\n \n \n FontName\n \n \n =\n \n \n shape\n \n \n [\n \n \n i\n \n \n ]\n \n \n [\n \n \n \"fn\"\n \n \n ]\n \n
\n
\n
\n \n 237.\n \n \n \n \n GraphicsWindow\n \n \n .\n \n \n DrawText\n \n \n (\n \n \n x\n \n \n ,\n \n \n y\n \n \n ,\n \n \n shape\n \n \n [\n \n \n i\n \n \n ]\n \n \n [\n \n \n \"text\"\n \n \n ]\n \n \n )\n \n
\n
\n
\n \n 238.\n \n \n \n \n EndIf\n \n
\n
\n
\n \n 239.\n \n \n \n \n EndFor\n \n
\n
\n
\n \n 240.\n \n \n \n \n i\n \n \n =\n \n \n Stack\n \n \n .\n \n \n PopValue\n \n \n (\n \n \n \"local\"\n \n \n )\n \n
\n
\n
\n \n 241.\n \n \n \n \n y\n \n \n =\n \n \n Stack\n \n \n .\n \n \n PopValue\n \n \n (\n \n \n \"local\"\n \n \n )\n \n
\n
\n
\n \n 242.\n \n \n \n \n x\n \n \n =\n \n \n Stack\n \n \n .\n \n \n PopValue\n \n \n (\n \n \n \"local\"\n \n \n )\n \n
\n
\n
\n \n 243.\n \n \n EndSub\n \n
\n
\n
\n
\n

\n Polyline Rotation\n

\n
\n

\n This subroutine is written for rotating vertices of a triangle.  But this subroutine supports more vertices as a polyline or a polygon for general-purpose.\n

\n
\n
\n
\n
\n \n 244.\n \n \n Sub\n \n \n Shapes_RotatePolyline\n \n
\n
\n
\n \n 245.\n \n \n \n \n ' Shapes | rotate polyline\n \n
\n
\n
\n \n 246.\n \n \n \n \n ' param n - number of points\n \n
\n
\n
\n \n 247.\n \n \n \n \n ' param x, y - array of x and y co-ordinates\n \n
\n
\n
\n \n 248.\n \n \n \n \n ' param ox, oy, - center of rotation\n \n
\n
\n
\n \n 249.\n \n \n \n \n ' param angle - angle of rotation\n \n
\n
\n
\n \n 250.\n \n \n \n \n Stack\n \n \n .\n \n \n PushValue\n \n \n (\n \n \n \"local\"\n \n \n ,\n \n \n i\n \n \n )\n \n
\n
\n
\n \n 251.\n \n \n \n \n _a\n \n \n =\n \n \n Math\n \n \n .\n \n \n GetRadians\n \n \n (\n \n \n angle\n \n \n )\n \n
\n
\n
\n \n 252.\n \n \n \n \n For\n \n \n i\n \n \n =\n \n \n 1\n \n \n To\n \n \n n\n \n
\n
\n
\n \n 253.\n \n \n \n \n xi\n \n \n =\n \n \n (\n \n \n x\n \n \n [\n \n \n i\n \n \n ]\n \n \n -\n \n \n ox\n \n \n )\n \n \n *\n \n \n Math\n \n \n .\n \n \n Cos\n \n \n (\n \n \n _a\n \n \n )\n \n \n +\n \n \n (\n \n \n y\n \n \n [\n \n \n i\n \n \n ]\n \n \n -\n \n \n oy\n \n \n )\n \n \n *\n \n \n Math\n \n \n .\n \n \n Sin\n \n \n (\n \n \n _a\n \n \n )\n \n
\n
\n
\n \n 254.\n \n \n \n \n yi\n \n \n =\n \n \n -\n \n \n (\n \n \n x\n \n \n [\n \n \n i\n \n \n ]\n \n \n -\n \n \n ox\n \n \n )\n \n \n *\n \n \n Math\n \n \n .\n \n \n Sin\n \n \n (\n \n \n _a\n \n \n )\n \n \n +\n \n \n (\n \n \n y\n \n \n [\n \n \n i\n \n \n ]\n \n \n -\n \n \n oy\n \n \n )\n \n \n *\n \n \n Math\n \n \n .\n \n \n Cos\n \n \n (\n \n \n _a\n \n \n )\n \n
\n
\n
\n \n 255.\n \n \n \n \n x\n \n \n [\n \n \n i\n \n \n ]\n \n \n =\n \n \n xi\n \n \n +\n \n \n ox\n \n
\n
\n
\n \n 256.\n \n \n \n \n y\n \n \n [\n \n \n i\n \n \n ]\n \n \n =\n \n \n yi\n \n \n +\n \n \n oy\n \n
\n
\n
\n \n 257.\n \n \n \n \n EndFor\n \n
\n
\n
\n \n 258.\n \n \n \n \n i\n \n \n =\n \n \n Stack\n \n \n .\n \n \n PopValue\n \n \n (\n \n \n \"local\"\n \n \n )\n \n
\n
\n
\n \n 259.\n \n \n EndSub\n \n
\n
\n
\n
\n

\n Auto Generated Code\n

\n
\n

\n And this program also have following subroutines.  These subroutines are generated by Shapes editor 1.5b.  So I skip to show these codes.  But I listed up brief description for these.  There are other subroutines generated by Shapes.  But I deleted because they are not called in this program.\n

\n
\n \n
\n

\n As duck shooting game, increasing ducks will make this game more fun.  Would you like to challenge?\n

\n \n","kudosSumWeight":0,"postTime":"2019-02-12T15:21:24.846-08:00","images":{"__typename":"AssociatedImageConnection","edges":[{"__typename":"AssociatedImageEdge","cursor":"MjUuMXwyLjF8b3wyNXxfTlZffDE","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS0zMzY4MjQtNzM4ODBpNjQ0NDMyNjA3MDNBNEEyQQ?revision=1\"}"}}],"totalCount":1,"pageInfo":{"__typename":"PageInfo","hasNextPage":false,"endCursor":null,"hasPreviousPage":false,"startCursor":null}},"attachments":{"__typename":"AttachmentConnection","pageInfo":{"__typename":"PageInfo","hasNextPage":false,"endCursor":null,"hasPreviousPage":false,"startCursor":null},"edges":[]},"tags":{"__typename":"TagConnection","pageInfo":{"__typename":"PageInfo","hasNextPage":false,"endCursor":null,"hasPreviousPage":false,"startCursor":null},"edges":[]},"timeToRead":9,"rawTeaser":"First published on MSDN on Aug 18, 2014 Authored by Nonki TakahashiIn Challenge of the Month - August 2013, there were following two challenges.","introduction":"","coverImage":null,"coverImageProperties":{"__typename":"CoverImageProperties","style":"STANDARD","titlePosition":"BOTTOM","altText":""},"currentRevision":{"__ref":"Revision:revision:336824_1"},"latestVersion":{"__typename":"FriendlyVersion","major":"1","minor":"0"},"metrics":{"__typename":"MessageMetrics","views":1709},"visibilityScope":"PUBLIC","canonicalUrl":null,"seoTitle":null,"seoDescription":null,"placeholder":false,"originalMessageForPlaceholder":null,"contributors":{"__typename":"UserConnection","edges":[]},"nonCoAuthorContributors":{"__typename":"UserConnection","edges":[]},"coAuthors":{"__typename":"UserConnection","edges":[]},"blogMessagePolicies":{"__typename":"BlogMessagePolicies","canDoAuthoringActionsOnBlog":{"__typename":"PolicyResult","failureReason":{"__typename":"FailureReason","message":"error.lithium.policies.blog.action_can_do_authoring_action.accessDenied","key":"error.lithium.policies.blog.action_can_do_authoring_action.accessDenied","args":[]}}},"archivalData":null,"replies":{"__typename":"MessageConnection","edges":[],"pageInfo":{"__typename":"PageInfo","hasNextPage":false,"endCursor":null,"hasPreviousPage":false,"startCursor":null}},"customFields":[],"revisions({\"constraints\":{\"isPublished\":{\"eq\":true}},\"first\":1})":{"__typename":"RevisionConnection","totalCount":1}},"Conversation:conversation:336824":{"__typename":"Conversation","id":"conversation:336824","solved":false,"topic":{"__ref":"BlogTopicMessage:message:336824"},"lastPostingActivityTime":"2019-02-12T15:21:24.846-08:00","lastPostTime":"2019-02-12T15:21:24.846-08:00","unreadReplyCount":0,"isSubscribed":false},"ModerationData:moderation_data:336824":{"__typename":"ModerationData","id":"moderation_data:336824","status":"APPROVED","rejectReason":null,"isReportedAbuse":false,"rejectUser":null,"rejectTime":null,"rejectActorType":null},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS0zMzY4MjQtNzM4ODBpNjQ0NDMyNjA3MDNBNEEyQQ?revision=1\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS0zMzY4MjQtNzM4ODBpNjQ0NDMyNjA3MDNBNEEyQQ?revision=1","title":"","associationType":"BODY","width":614,"height":467,"altText":null},"Revision:revision:336824_1":{"__typename":"Revision","id":"revision:336824_1","lastEditTime":"2019-02-12T15:21:24.846-08:00"},"CachedAsset:theme:customTheme1-1743058944822":{"__typename":"CachedAsset","id":"theme:customTheme1-1743058944822","value":{"id":"customTheme1","animation":{"fast":"150ms","normal":"250ms","slow":"500ms","slowest":"750ms","function":"cubic-bezier(0.07, 0.91, 0.51, 1)","__typename":"AnimationThemeSettings"},"avatar":{"borderRadius":"50%","collections":["default"],"__typename":"AvatarThemeSettings"},"basics":{"browserIcon":{"imageAssetName":"favicon-1730836283320.png","imageLastModified":"1730836286415","__typename":"ThemeAsset"},"customerLogo":{"imageAssetName":"favicon-1730836271365.png","imageLastModified":"1730836274203","__typename":"ThemeAsset"},"maximumWidthOfPageContent":"1300px","oneColumnNarrowWidth":"800px","gridGutterWidthMd":"30px","gridGutterWidthXs":"10px","pageWidthStyle":"WIDTH_OF_BROWSER","__typename":"BasicsThemeSettings"},"buttons":{"borderRadiusSm":"3px","borderRadius":"3px","borderRadiusLg":"5px","paddingY":"5px","paddingYLg":"7px","paddingYHero":"var(--lia-bs-btn-padding-y-lg)","paddingX":"12px","paddingXLg":"16px","paddingXHero":"60px","fontStyle":"NORMAL","fontWeight":"700","textTransform":"NONE","disabledOpacity":0.5,"primaryTextColor":"var(--lia-bs-white)","primaryTextHoverColor":"var(--lia-bs-white)","primaryTextActiveColor":"var(--lia-bs-white)","primaryBgColor":"var(--lia-bs-primary)","primaryBgHoverColor":"hsl(var(--lia-bs-primary-h), var(--lia-bs-primary-s), calc(var(--lia-bs-primary-l) * 0.85))","primaryBgActiveColor":"hsl(var(--lia-bs-primary-h), var(--lia-bs-primary-s), calc(var(--lia-bs-primary-l) * 0.7))","primaryBorder":"1px solid transparent","primaryBorderHover":"1px solid transparent","primaryBorderActive":"1px solid transparent","primaryBorderFocus":"1px solid var(--lia-bs-white)","primaryBoxShadowFocus":"0 0 0 1px var(--lia-bs-primary), 0 0 0 4px hsla(var(--lia-bs-primary-h), var(--lia-bs-primary-s), var(--lia-bs-primary-l), 0.2)","secondaryTextColor":"var(--lia-bs-gray-900)","secondaryTextHoverColor":"hsl(var(--lia-bs-gray-900-h), var(--lia-bs-gray-900-s), calc(var(--lia-bs-gray-900-l) * 0.95))","secondaryTextActiveColor":"hsl(var(--lia-bs-gray-900-h), var(--lia-bs-gray-900-s), calc(var(--lia-bs-gray-900-l) * 0.9))","secondaryBgColor":"var(--lia-bs-gray-200)","secondaryBgHoverColor":"hsl(var(--lia-bs-gray-200-h), var(--lia-bs-gray-200-s), calc(var(--lia-bs-gray-200-l) * 0.96))","secondaryBgActiveColor":"hsl(var(--lia-bs-gray-200-h), var(--lia-bs-gray-200-s), calc(var(--lia-bs-gray-200-l) * 0.92))","secondaryBorder":"1px solid transparent","secondaryBorderHover":"1px solid transparent","secondaryBorderActive":"1px solid transparent","secondaryBorderFocus":"1px solid transparent","secondaryBoxShadowFocus":"0 0 0 1px var(--lia-bs-primary), 0 0 0 4px hsla(var(--lia-bs-primary-h), var(--lia-bs-primary-s), var(--lia-bs-primary-l), 0.2)","tertiaryTextColor":"var(--lia-bs-gray-900)","tertiaryTextHoverColor":"hsl(var(--lia-bs-gray-900-h), var(--lia-bs-gray-900-s), calc(var(--lia-bs-gray-900-l) * 0.95))","tertiaryTextActiveColor":"hsl(var(--lia-bs-gray-900-h), var(--lia-bs-gray-900-s), calc(var(--lia-bs-gray-900-l) * 0.9))","tertiaryBgColor":"transparent","tertiaryBgHoverColor":"transparent","tertiaryBgActiveColor":"hsla(var(--lia-bs-black-h), var(--lia-bs-black-s), var(--lia-bs-black-l), 0.04)","tertiaryBorder":"1px solid transparent","tertiaryBorderHover":"1px solid hsla(var(--lia-bs-black-h), var(--lia-bs-black-s), var(--lia-bs-black-l), 0.08)","tertiaryBorderActive":"1px solid transparent","tertiaryBorderFocus":"1px solid transparent","tertiaryBoxShadowFocus":"0 0 0 1px var(--lia-bs-primary), 0 0 0 4px hsla(var(--lia-bs-primary-h), var(--lia-bs-primary-s), var(--lia-bs-primary-l), 0.2)","destructiveTextColor":"var(--lia-bs-danger)","destructiveTextHoverColor":"hsl(var(--lia-bs-danger-h), var(--lia-bs-danger-s), calc(var(--lia-bs-danger-l) * 0.95))","destructiveTextActiveColor":"hsl(var(--lia-bs-danger-h), var(--lia-bs-danger-s), calc(var(--lia-bs-danger-l) * 0.9))","destructiveBgColor":"var(--lia-bs-gray-200)","destructiveBgHoverColor":"hsl(var(--lia-bs-gray-200-h), var(--lia-bs-gray-200-s), calc(var(--lia-bs-gray-200-l) * 0.96))","destructiveBgActiveColor":"hsl(var(--lia-bs-gray-200-h), var(--lia-bs-gray-200-s), calc(var(--lia-bs-gray-200-l) * 0.92))","destructiveBorder":"1px solid transparent","destructiveBorderHover":"1px solid transparent","destructiveBorderActive":"1px solid transparent","destructiveBorderFocus":"1px solid transparent","destructiveBoxShadowFocus":"0 0 0 1px var(--lia-bs-primary), 0 0 0 4px hsla(var(--lia-bs-primary-h), var(--lia-bs-primary-s), var(--lia-bs-primary-l), 0.2)","__typename":"ButtonsThemeSettings"},"border":{"color":"hsla(var(--lia-bs-black-h), var(--lia-bs-black-s), var(--lia-bs-black-l), 0.08)","mainContent":"NONE","sideContent":"LIGHT","radiusSm":"3px","radius":"5px","radiusLg":"9px","radius50":"100vw","__typename":"BorderThemeSettings"},"boxShadow":{"xs":"0 0 0 1px hsla(var(--lia-bs-gray-900-h), var(--lia-bs-gray-900-s), var(--lia-bs-gray-900-l), 0.08), 0 3px 0 -1px hsla(var(--lia-bs-gray-900-h), var(--lia-bs-gray-900-s), var(--lia-bs-gray-900-l), 0.16)","sm":"0 2px 4px hsla(var(--lia-bs-gray-900-h), var(--lia-bs-gray-900-s), var(--lia-bs-gray-900-l), 0.12)","md":"0 5px 15px hsla(var(--lia-bs-gray-900-h), var(--lia-bs-gray-900-s), var(--lia-bs-gray-900-l), 0.3)","lg":"0 10px 30px hsla(var(--lia-bs-gray-900-h), var(--lia-bs-gray-900-s), var(--lia-bs-gray-900-l), 0.3)","__typename":"BoxShadowThemeSettings"},"cards":{"bgColor":"var(--lia-panel-bg-color)","borderRadius":"var(--lia-panel-border-radius)","boxShadow":"var(--lia-box-shadow-xs)","__typename":"CardsThemeSettings"},"chip":{"maxWidth":"300px","height":"30px","__typename":"ChipThemeSettings"},"coreTypes":{"defaultMessageLinkColor":"var(--lia-bs-link-color)","defaultMessageLinkDecoration":"none","defaultMessageLinkFontStyle":"NORMAL","defaultMessageLinkFontWeight":"400","defaultMessageFontStyle":"NORMAL","defaultMessageFontWeight":"400","forumColor":"#4099E2","forumFontFamily":"var(--lia-bs-font-family-base)","forumFontWeight":"var(--lia-default-message-font-weight)","forumLineHeight":"var(--lia-bs-line-height-base)","forumFontStyle":"var(--lia-default-message-font-style)","forumMessageLinkColor":"var(--lia-default-message-link-color)","forumMessageLinkDecoration":"var(--lia-default-message-link-decoration)","forumMessageLinkFontStyle":"var(--lia-default-message-link-font-style)","forumMessageLinkFontWeight":"var(--lia-default-message-link-font-weight)","forumSolvedColor":"#148563","blogColor":"#1CBAA0","blogFontFamily":"var(--lia-bs-font-family-base)","blogFontWeight":"var(--lia-default-message-font-weight)","blogLineHeight":"1.75","blogFontStyle":"var(--lia-default-message-font-style)","blogMessageLinkColor":"var(--lia-default-message-link-color)","blogMessageLinkDecoration":"var(--lia-default-message-link-decoration)","blogMessageLinkFontStyle":"var(--lia-default-message-link-font-style)","blogMessageLinkFontWeight":"var(--lia-default-message-link-font-weight)","tkbColor":"#4C6B90","tkbFontFamily":"var(--lia-bs-font-family-base)","tkbFontWeight":"var(--lia-default-message-font-weight)","tkbLineHeight":"1.75","tkbFontStyle":"var(--lia-default-message-font-style)","tkbMessageLinkColor":"var(--lia-default-message-link-color)","tkbMessageLinkDecoration":"var(--lia-default-message-link-decoration)","tkbMessageLinkFontStyle":"var(--lia-default-message-link-font-style)","tkbMessageLinkFontWeight":"var(--lia-default-message-link-font-weight)","qandaColor":"#4099E2","qandaFontFamily":"var(--lia-bs-font-family-base)","qandaFontWeight":"var(--lia-default-message-font-weight)","qandaLineHeight":"var(--lia-bs-line-height-base)","qandaFontStyle":"var(--lia-default-message-link-font-style)","qandaMessageLinkColor":"var(--lia-default-message-link-color)","qandaMessageLinkDecoration":"var(--lia-default-message-link-decoration)","qandaMessageLinkFontStyle":"var(--lia-default-message-link-font-style)","qandaMessageLinkFontWeight":"var(--lia-default-message-link-font-weight)","qandaSolvedColor":"#3FA023","ideaColor":"#FF8000","ideaFontFamily":"var(--lia-bs-font-family-base)","ideaFontWeight":"var(--lia-default-message-font-weight)","ideaLineHeight":"var(--lia-bs-line-height-base)","ideaFontStyle":"var(--lia-default-message-font-style)","ideaMessageLinkColor":"var(--lia-default-message-link-color)","ideaMessageLinkDecoration":"var(--lia-default-message-link-decoration)","ideaMessageLinkFontStyle":"var(--lia-default-message-link-font-style)","ideaMessageLinkFontWeight":"var(--lia-default-message-link-font-weight)","contestColor":"#FCC845","contestFontFamily":"var(--lia-bs-font-family-base)","contestFontWeight":"var(--lia-default-message-font-weight)","contestLineHeight":"var(--lia-bs-line-height-base)","contestFontStyle":"var(--lia-default-message-link-font-style)","contestMessageLinkColor":"var(--lia-default-message-link-color)","contestMessageLinkDecoration":"var(--lia-default-message-link-decoration)","contestMessageLinkFontStyle":"ITALIC","contestMessageLinkFontWeight":"var(--lia-default-message-link-font-weight)","occasionColor":"#D13A1F","occasionFontFamily":"var(--lia-bs-font-family-base)","occasionFontWeight":"var(--lia-default-message-font-weight)","occasionLineHeight":"var(--lia-bs-line-height-base)","occasionFontStyle":"var(--lia-default-message-font-style)","occasionMessageLinkColor":"var(--lia-default-message-link-color)","occasionMessageLinkDecoration":"var(--lia-default-message-link-decoration)","occasionMessageLinkFontStyle":"var(--lia-default-message-link-font-style)","occasionMessageLinkFontWeight":"var(--lia-default-message-link-font-weight)","grouphubColor":"#333333","categoryColor":"#949494","communityColor":"#FFFFFF","productColor":"#949494","__typename":"CoreTypesThemeSettings"},"colors":{"black":"#000000","white":"#FFFFFF","gray100":"#F7F7F7","gray200":"#F7F7F7","gray300":"#E8E8E8","gray400":"#D9D9D9","gray500":"#CCCCCC","gray600":"#717171","gray700":"#707070","gray800":"#545454","gray900":"#333333","dark":"#545454","light":"#F7F7F7","primary":"#0069D4","secondary":"#333333","bodyText":"#333333","bodyBg":"#FFFFFF","info":"#409AE2","success":"#41C5AE","warning":"#FCC844","danger":"#BC341B","alertSystem":"#FF6600","textMuted":"#707070","highlight":"#FFFCAD","outline":"var(--lia-bs-primary)","custom":["#D3F5A4","#243A5E"],"__typename":"ColorsThemeSettings"},"divider":{"size":"3px","marginLeft":"4px","marginRight":"4px","borderRadius":"50%","bgColor":"var(--lia-bs-gray-600)","bgColorActive":"var(--lia-bs-gray-600)","__typename":"DividerThemeSettings"},"dropdown":{"fontSize":"var(--lia-bs-font-size-sm)","borderColor":"var(--lia-bs-border-color)","borderRadius":"var(--lia-bs-border-radius-sm)","dividerBg":"var(--lia-bs-gray-300)","itemPaddingY":"5px","itemPaddingX":"20px","headerColor":"var(--lia-bs-gray-700)","__typename":"DropdownThemeSettings"},"email":{"link":{"color":"#0069D4","hoverColor":"#0061c2","decoration":"none","hoverDecoration":"underline","__typename":"EmailLinkSettings"},"border":{"color":"#e4e4e4","__typename":"EmailBorderSettings"},"buttons":{"borderRadiusLg":"5px","paddingXLg":"16px","paddingYLg":"7px","fontWeight":"700","primaryTextColor":"#ffffff","primaryTextHoverColor":"#ffffff","primaryBgColor":"#0069D4","primaryBgHoverColor":"#005cb8","primaryBorder":"1px solid transparent","primaryBorderHover":"1px solid transparent","__typename":"EmailButtonsSettings"},"panel":{"borderRadius":"5px","borderColor":"#e4e4e4","__typename":"EmailPanelSettings"},"__typename":"EmailThemeSettings"},"emoji":{"skinToneDefault":"#ffcd43","skinToneLight":"#fae3c5","skinToneMediumLight":"#e2cfa5","skinToneMedium":"#daa478","skinToneMediumDark":"#a78058","skinToneDark":"#5e4d43","__typename":"EmojiThemeSettings"},"heading":{"color":"var(--lia-bs-body-color)","fontFamily":"Segoe UI","fontStyle":"NORMAL","fontWeight":"400","h1FontSize":"34px","h2FontSize":"32px","h3FontSize":"28px","h4FontSize":"24px","h5FontSize":"20px","h6FontSize":"16px","lineHeight":"1.3","subHeaderFontSize":"11px","subHeaderFontWeight":"500","h1LetterSpacing":"normal","h2LetterSpacing":"normal","h3LetterSpacing":"normal","h4LetterSpacing":"normal","h5LetterSpacing":"normal","h6LetterSpacing":"normal","subHeaderLetterSpacing":"2px","h1FontWeight":"var(--lia-bs-headings-font-weight)","h2FontWeight":"var(--lia-bs-headings-font-weight)","h3FontWeight":"var(--lia-bs-headings-font-weight)","h4FontWeight":"var(--lia-bs-headings-font-weight)","h5FontWeight":"var(--lia-bs-headings-font-weight)","h6FontWeight":"var(--lia-bs-headings-font-weight)","__typename":"HeadingThemeSettings"},"icons":{"size10":"10px","size12":"12px","size14":"14px","size16":"16px","size20":"20px","size24":"24px","size30":"30px","size40":"40px","size50":"50px","size60":"60px","size80":"80px","size120":"120px","size160":"160px","__typename":"IconsThemeSettings"},"imagePreview":{"bgColor":"var(--lia-bs-gray-900)","titleColor":"var(--lia-bs-white)","controlColor":"var(--lia-bs-white)","controlBgColor":"var(--lia-bs-gray-800)","__typename":"ImagePreviewThemeSettings"},"input":{"borderColor":"var(--lia-bs-gray-600)","disabledColor":"var(--lia-bs-gray-600)","focusBorderColor":"var(--lia-bs-primary)","labelMarginBottom":"10px","btnFontSize":"var(--lia-bs-font-size-sm)","focusBoxShadow":"0 0 0 3px hsla(var(--lia-bs-primary-h), var(--lia-bs-primary-s), var(--lia-bs-primary-l), 0.2)","checkLabelMarginBottom":"2px","checkboxBorderRadius":"3px","borderRadiusSm":"var(--lia-bs-border-radius-sm)","borderRadius":"var(--lia-bs-border-radius)","borderRadiusLg":"var(--lia-bs-border-radius-lg)","formTextMarginTop":"4px","textAreaBorderRadius":"var(--lia-bs-border-radius)","activeFillColor":"var(--lia-bs-primary)","__typename":"InputThemeSettings"},"loading":{"dotDarkColor":"hsla(var(--lia-bs-black-h), var(--lia-bs-black-s), var(--lia-bs-black-l), 0.2)","dotLightColor":"hsla(var(--lia-bs-white-h), var(--lia-bs-white-s), var(--lia-bs-white-l), 0.5)","barDarkColor":"hsla(var(--lia-bs-black-h), var(--lia-bs-black-s), var(--lia-bs-black-l), 0.06)","barLightColor":"hsla(var(--lia-bs-white-h), var(--lia-bs-white-s), var(--lia-bs-white-l), 0.4)","__typename":"LoadingThemeSettings"},"link":{"color":"var(--lia-bs-primary)","hoverColor":"hsl(var(--lia-bs-primary-h), var(--lia-bs-primary-s), calc(var(--lia-bs-primary-l) - 10%))","decoration":"none","hoverDecoration":"underline","__typename":"LinkThemeSettings"},"listGroup":{"itemPaddingY":"15px","itemPaddingX":"15px","borderColor":"var(--lia-bs-gray-300)","__typename":"ListGroupThemeSettings"},"modal":{"contentTextColor":"var(--lia-bs-body-color)","contentBg":"var(--lia-bs-white)","backgroundBg":"var(--lia-bs-black)","smSize":"440px","mdSize":"760px","lgSize":"1080px","backdropOpacity":0.3,"contentBoxShadowXs":"var(--lia-bs-box-shadow-sm)","contentBoxShadow":"var(--lia-bs-box-shadow)","headerFontWeight":"700","__typename":"ModalThemeSettings"},"navbar":{"position":"FIXED","background":{"attachment":null,"clip":null,"color":"var(--lia-bs-white)","imageAssetName":"","imageLastModified":"0","origin":null,"position":"CENTER_CENTER","repeat":"NO_REPEAT","size":"COVER","__typename":"BackgroundProps"},"backgroundOpacity":0.8,"paddingTop":"15px","paddingBottom":"15px","borderBottom":"1px solid var(--lia-bs-border-color)","boxShadow":"var(--lia-bs-box-shadow-sm)","brandMarginRight":"30px","brandMarginRightSm":"10px","brandLogoHeight":"30px","linkGap":"10px","linkJustifyContent":"flex-start","linkPaddingY":"5px","linkPaddingX":"10px","linkDropdownPaddingY":"9px","linkDropdownPaddingX":"var(--lia-nav-link-px)","linkColor":"var(--lia-bs-body-color)","linkHoverColor":"var(--lia-bs-primary)","linkFontSize":"var(--lia-bs-font-size-sm)","linkFontStyle":"NORMAL","linkFontWeight":"400","linkTextTransform":"NONE","linkLetterSpacing":"normal","linkBorderRadius":"var(--lia-bs-border-radius-sm)","linkBgColor":"transparent","linkBgHoverColor":"transparent","linkBorder":"none","linkBorderHover":"none","linkBoxShadow":"none","linkBoxShadowHover":"none","linkTextBorderBottom":"none","linkTextBorderBottomHover":"none","dropdownPaddingTop":"10px","dropdownPaddingBottom":"15px","dropdownPaddingX":"10px","dropdownMenuOffset":"2px","dropdownDividerMarginTop":"10px","dropdownDividerMarginBottom":"10px","dropdownBorderColor":"hsla(var(--lia-bs-black-h), var(--lia-bs-black-s), var(--lia-bs-black-l), 0.08)","controllerBgHoverColor":"hsla(var(--lia-bs-black-h), var(--lia-bs-black-s), var(--lia-bs-black-l), 0.1)","controllerIconColor":"var(--lia-bs-body-color)","controllerIconHoverColor":"var(--lia-bs-body-color)","controllerTextColor":"var(--lia-nav-controller-icon-color)","controllerTextHoverColor":"var(--lia-nav-controller-icon-hover-color)","controllerHighlightColor":"hsla(30, 100%, 50%)","controllerHighlightTextColor":"var(--lia-yiq-light)","controllerBorderRadius":"var(--lia-border-radius-50)","hamburgerColor":"var(--lia-nav-controller-icon-color)","hamburgerHoverColor":"var(--lia-nav-controller-icon-color)","hamburgerBgColor":"transparent","hamburgerBgHoverColor":"transparent","hamburgerBorder":"none","hamburgerBorderHover":"none","collapseMenuMarginLeft":"20px","collapseMenuDividerBg":"var(--lia-nav-link-color)","collapseMenuDividerOpacity":0.16,"__typename":"NavbarThemeSettings"},"pager":{"textColor":"var(--lia-bs-link-color)","textFontWeight":"var(--lia-font-weight-md)","textFontSize":"var(--lia-bs-font-size-sm)","__typename":"PagerThemeSettings"},"panel":{"bgColor":"var(--lia-bs-white)","borderRadius":"var(--lia-bs-border-radius)","borderColor":"var(--lia-bs-border-color)","boxShadow":"none","__typename":"PanelThemeSettings"},"popover":{"arrowHeight":"8px","arrowWidth":"16px","maxWidth":"300px","minWidth":"100px","headerBg":"var(--lia-bs-white)","borderColor":"var(--lia-bs-border-color)","borderRadius":"var(--lia-bs-border-radius)","boxShadow":"0 0.5rem 1rem hsla(var(--lia-bs-black-h), var(--lia-bs-black-s), var(--lia-bs-black-l), 0.15)","__typename":"PopoverThemeSettings"},"prism":{"color":"#000000","bgColor":"#f5f2f0","fontFamily":"var(--font-family-monospace)","fontSize":"var(--lia-bs-font-size-base)","fontWeightBold":"var(--lia-bs-font-weight-bold)","fontStyleItalic":"italic","tabSize":2,"highlightColor":"#b3d4fc","commentColor":"#62707e","punctuationColor":"#6f6f6f","namespaceOpacity":"0.7","propColor":"#990055","selectorColor":"#517a00","operatorColor":"#906736","operatorBgColor":"hsla(0, 0%, 100%, 0.5)","keywordColor":"#0076a9","functionColor":"#d3284b","variableColor":"#c14700","__typename":"PrismThemeSettings"},"rte":{"bgColor":"var(--lia-bs-white)","borderRadius":"var(--lia-panel-border-radius)","boxShadow":" var(--lia-panel-box-shadow)","customColor1":"#bfedd2","customColor2":"#fbeeb8","customColor3":"#f8cac6","customColor4":"#eccafa","customColor5":"#c2e0f4","customColor6":"#2dc26b","customColor7":"#f1c40f","customColor8":"#e03e2d","customColor9":"#b96ad9","customColor10":"#3598db","customColor11":"#169179","customColor12":"#e67e23","customColor13":"#ba372a","customColor14":"#843fa1","customColor15":"#236fa1","customColor16":"#ecf0f1","customColor17":"#ced4d9","customColor18":"#95a5a6","customColor19":"#7e8c8d","customColor20":"#34495e","customColor21":"#000000","customColor22":"#ffffff","defaultMessageHeaderMarginTop":"40px","defaultMessageHeaderMarginBottom":"20px","defaultMessageItemMarginTop":"0","defaultMessageItemMarginBottom":"10px","diffAddedColor":"hsla(170, 53%, 51%, 0.4)","diffChangedColor":"hsla(43, 97%, 63%, 0.4)","diffNoneColor":"hsla(0, 0%, 80%, 0.4)","diffRemovedColor":"hsla(9, 74%, 47%, 0.4)","specialMessageHeaderMarginTop":"40px","specialMessageHeaderMarginBottom":"20px","specialMessageItemMarginTop":"0","specialMessageItemMarginBottom":"10px","__typename":"RteThemeSettings"},"tags":{"bgColor":"var(--lia-bs-gray-200)","bgHoverColor":"var(--lia-bs-gray-400)","borderRadius":"var(--lia-bs-border-radius-sm)","color":"var(--lia-bs-body-color)","hoverColor":"var(--lia-bs-body-color)","fontWeight":"var(--lia-font-weight-md)","fontSize":"var(--lia-font-size-xxs)","textTransform":"UPPERCASE","letterSpacing":"0.5px","__typename":"TagsThemeSettings"},"toasts":{"borderRadius":"var(--lia-bs-border-radius)","paddingX":"12px","__typename":"ToastsThemeSettings"},"typography":{"fontFamilyBase":"Segoe UI","fontStyleBase":"NORMAL","fontWeightBase":"400","fontWeightLight":"300","fontWeightNormal":"400","fontWeightMd":"500","fontWeightBold":"700","letterSpacingSm":"normal","letterSpacingXs":"normal","lineHeightBase":"1.5","fontSizeBase":"16px","fontSizeXxs":"11px","fontSizeXs":"12px","fontSizeSm":"14px","fontSizeLg":"20px","fontSizeXl":"24px","smallFontSize":"14px","customFonts":[{"source":"SERVER","name":"Segoe UI","styles":[{"style":"NORMAL","weight":"400","__typename":"FontStyleData"},{"style":"NORMAL","weight":"300","__typename":"FontStyleData"},{"style":"NORMAL","weight":"600","__typename":"FontStyleData"},{"style":"NORMAL","weight":"700","__typename":"FontStyleData"},{"style":"ITALIC","weight":"400","__typename":"FontStyleData"}],"assetNames":["SegoeUI-normal-400.woff2","SegoeUI-normal-300.woff2","SegoeUI-normal-600.woff2","SegoeUI-normal-700.woff2","SegoeUI-italic-400.woff2"],"__typename":"CustomFont"},{"source":"SERVER","name":"MWF Fluent Icons","styles":[{"style":"NORMAL","weight":"400","__typename":"FontStyleData"}],"assetNames":["MWFFluentIcons-normal-400.woff2"],"__typename":"CustomFont"}],"__typename":"TypographyThemeSettings"},"unstyledListItem":{"marginBottomSm":"5px","marginBottomMd":"10px","marginBottomLg":"15px","marginBottomXl":"20px","marginBottomXxl":"25px","__typename":"UnstyledListItemThemeSettings"},"yiq":{"light":"#ffffff","dark":"#000000","__typename":"YiqThemeSettings"},"colorLightness":{"primaryDark":0.36,"primaryLight":0.74,"primaryLighter":0.89,"primaryLightest":0.95,"infoDark":0.39,"infoLight":0.72,"infoLighter":0.85,"infoLightest":0.93,"successDark":0.24,"successLight":0.62,"successLighter":0.8,"successLightest":0.91,"warningDark":0.39,"warningLight":0.68,"warningLighter":0.84,"warningLightest":0.93,"dangerDark":0.41,"dangerLight":0.72,"dangerLighter":0.89,"dangerLightest":0.95,"__typename":"ColorLightnessThemeSettings"},"localOverride":false,"__typename":"Theme"},"localOverride":false},"CachedAsset:text:en_US-components/common/EmailVerification-1743151752863":{"__typename":"CachedAsset","id":"text:en_US-components/common/EmailVerification-1743151752863","value":{"email.verification.title":"Email Verification Required","email.verification.message.update.email":"To participate in the community, you must first verify your email address. The verification email was sent to {email}. To change your email, visit My Settings.","email.verification.message.resend.email":"To participate in the community, you must first verify your email address. The verification email was sent to {email}. Resend email."},"localOverride":false},"CachedAsset:text:en_US-shared/client/components/common/Loading/LoadingDot-1743151752863":{"__typename":"CachedAsset","id":"text:en_US-shared/client/components/common/Loading/LoadingDot-1743151752863","value":{"title":"Loading..."},"localOverride":false},"CachedAsset:quilt:o365.prod:pages/blogs/BlogMessagePage:board:SmallBasic-1743151744593":{"__typename":"CachedAsset","id":"quilt:o365.prod:pages/blogs/BlogMessagePage:board:SmallBasic-1743151744593","value":{"id":"BlogMessagePage","container":{"id":"Common","headerProps":{"backgroundImageProps":null,"backgroundColor":null,"addComponents":null,"removeComponents":["community.widget.bannerWidget"],"componentOrder":null,"__typename":"QuiltContainerSectionProps"},"headerComponentProps":{"community.widget.breadcrumbWidget":{"disableLastCrumbForDesktop":false}},"footerProps":null,"footerComponentProps":null,"items":[{"id":"blog-article","layout":"ONE_COLUMN","bgColor":null,"showTitle":null,"showDescription":null,"textPosition":null,"textColor":null,"sectionEditLevel":"LOCKED","bgImage":null,"disableSpacing":null,"edgeToEdgeDisplay":null,"fullHeight":null,"showBorder":null,"__typename":"OneColumnQuiltSection","columnMap":{"main":[{"id":"blogs.widget.blogArticleWidget","className":"lia-blog-container","props":null,"__typename":"QuiltComponent"}],"__typename":"OneSectionColumns"}},{"id":"section-1729184836777","layout":"MAIN_SIDE","bgColor":"transparent","showTitle":false,"showDescription":false,"textPosition":"CENTER","textColor":"var(--lia-bs-body-color)","sectionEditLevel":null,"bgImage":null,"disableSpacing":null,"edgeToEdgeDisplay":null,"fullHeight":null,"showBorder":null,"__typename":"MainSideQuiltSection","columnMap":{"main":[],"side":[{"id":"custom.widget.Social_Sharing","className":null,"props":{"widgetVisibility":"signedInOrAnonymous","useTitle":true,"useBackground":true,"title":"Share","lazyLoad":false},"__typename":"QuiltComponent"}],"__typename":"MainSideSectionColumns"}}],"__typename":"QuiltContainer"},"__typename":"Quilt","localOverride":false},"localOverride":false},"CachedAsset:text:en_US-pages/blogs/BlogMessagePage-1743151752863":{"__typename":"CachedAsset","id":"text:en_US-pages/blogs/BlogMessagePage-1743151752863","value":{"title":"{contextMessageSubject} | {communityTitle}","errorMissing":"This blog post cannot be found","name":"Blog Message Page","section.blog-article.title":"Blog Post","archivedMessageTitle":"This Content Has Been Archived","section.section-1729184836777.title":"","section.section-1729184836777.description":"","section.CncIde.title":"Blog Post","section.tifEmD.description":"","section.tifEmD.title":""},"localOverride":false},"CachedAsset:quiltWrapper:o365.prod:Common:1743058764602":{"__typename":"CachedAsset","id":"quiltWrapper:o365.prod:Common:1743058764602","value":{"id":"Common","header":{"backgroundImageProps":{"assetName":null,"backgroundSize":"COVER","backgroundRepeat":"NO_REPEAT","backgroundPosition":"CENTER_CENTER","lastModified":null,"__typename":"BackgroundImageProps"},"backgroundColor":"transparent","items":[{"id":"community.widget.navbarWidget","props":{"showUserName":true,"showRegisterLink":true,"useIconLanguagePicker":true,"useLabelLanguagePicker":true,"className":"QuiltComponent_lia-component-edit-mode__0nCcm","links":{"sideLinks":[],"mainLinks":[{"children":[],"linkType":"INTERNAL","id":"gxcuf89792","params":{},"routeName":"CommunityPage"},{"children":[],"linkType":"EXTERNAL","id":"external-link","url":"/Directory","target":"SELF"},{"children":[{"linkType":"INTERNAL","id":"microsoft365","params":{"categoryId":"microsoft365"},"routeName":"CategoryPage"},{"linkType":"INTERNAL","id":"microsoft-teams","params":{"categoryId":"MicrosoftTeams"},"routeName":"CategoryPage"},{"linkType":"INTERNAL","id":"windows","params":{"categoryId":"Windows"},"routeName":"CategoryPage"},{"linkType":"INTERNAL","id":"microsoft-securityand-compliance","params":{"categoryId":"microsoft-security"},"routeName":"CategoryPage"},{"linkType":"INTERNAL","id":"outlook","params":{"categoryId":"Outlook"},"routeName":"CategoryPage"},{"linkType":"INTERNAL","id":"planner","params":{"categoryId":"Planner"},"routeName":"CategoryPage"},{"linkType":"INTERNAL","id":"windows-server","params":{"categoryId":"Windows-Server"},"routeName":"CategoryPage"},{"linkType":"INTERNAL","id":"azure","params":{"categoryId":"Azure"},"routeName":"CategoryPage"},{"linkType":"INTERNAL","id":"exchange","params":{"categoryId":"Exchange"},"routeName":"CategoryPage"},{"linkType":"INTERNAL","id":"microsoft-endpoint-manager","params":{"categoryId":"microsoft-endpoint-manager"},"routeName":"CategoryPage"},{"linkType":"INTERNAL","id":"s-q-l-server","params":{"categoryId":"SQL-Server"},"routeName":"CategoryPage"},{"linkType":"EXTERNAL","id":"external-link-2","url":"/Directory","target":"SELF"}],"linkType":"EXTERNAL","id":"communities","url":"/","target":"BLANK"},{"children":[{"linkType":"INTERNAL","id":"education-sector","params":{"categoryId":"EducationSector"},"routeName":"CategoryPage"},{"linkType":"INTERNAL","id":"a-i","params":{"categoryId":"AI"},"routeName":"CategoryPage"},{"linkType":"INTERNAL","id":"i-t-ops-talk","params":{"categoryId":"ITOpsTalk"},"routeName":"CategoryPage"},{"linkType":"INTERNAL","id":"partner-community","params":{"categoryId":"PartnerCommunity"},"routeName":"CategoryPage"},{"linkType":"INTERNAL","id":"microsoft-mechanics","params":{"categoryId":"MicrosoftMechanics"},"routeName":"CategoryPage"},{"linkType":"INTERNAL","id":"healthcare-and-life-sciences","params":{"categoryId":"HealthcareAndLifeSciences"},"routeName":"CategoryPage"},{"linkType":"INTERNAL","id":"public-sector","params":{"categoryId":"PublicSector"},"routeName":"CategoryPage"},{"linkType":"INTERNAL","id":"io-t","params":{"categoryId":"IoT"},"routeName":"CategoryPage"},{"linkType":"INTERNAL","id":"driving-adoption","params":{"categoryId":"DrivingAdoption"},"routeName":"CategoryPage"},{"linkType":"INTERNAL","id":"s-m-b","params":{"categoryId":"SMB"},"routeName":"CategoryPage"},{"linkType":"INTERNAL","id":"startupsat-microsoft","params":{"categoryId":"StartupsatMicrosoft"},"routeName":"CategoryPage"},{"linkType":"EXTERNAL","id":"external-link-1","url":"/Directory","target":"SELF"}],"linkType":"EXTERNAL","id":"communities-1","url":"/","target":"SELF"},{"children":[],"linkType":"EXTERNAL","id":"external","url":"/Blogs","target":"SELF"},{"children":[],"linkType":"EXTERNAL","id":"external-1","url":"/Events","target":"SELF"},{"children":[{"linkType":"INTERNAL","id":"microsoft-learn-1","params":{"categoryId":"MicrosoftLearn"},"routeName":"CategoryPage"},{"linkType":"INTERNAL","id":"microsoft-learn-blog","params":{"boardId":"MicrosoftLearnBlog","categoryId":"MicrosoftLearn"},"routeName":"BlogBoardPage"},{"linkType":"EXTERNAL","id":"external-10","url":"https://learningroomdirectory.microsoft.com/","target":"BLANK"},{"linkType":"EXTERNAL","id":"external-3","url":"https://docs.microsoft.com/learn/dynamics365/?WT.mc_id=techcom_header-webpage-m365","target":"BLANK"},{"linkType":"EXTERNAL","id":"external-4","url":"https://docs.microsoft.com/learn/m365/?wt.mc_id=techcom_header-webpage-m365","target":"BLANK"},{"linkType":"EXTERNAL","id":"external-5","url":"https://docs.microsoft.com/learn/topics/sci/?wt.mc_id=techcom_header-webpage-m365","target":"BLANK"},{"linkType":"EXTERNAL","id":"external-6","url":"https://docs.microsoft.com/learn/powerplatform/?wt.mc_id=techcom_header-webpage-powerplatform","target":"BLANK"},{"linkType":"EXTERNAL","id":"external-7","url":"https://docs.microsoft.com/learn/github/?wt.mc_id=techcom_header-webpage-github","target":"BLANK"},{"linkType":"EXTERNAL","id":"external-8","url":"https://docs.microsoft.com/learn/teams/?wt.mc_id=techcom_header-webpage-teams","target":"BLANK"},{"linkType":"EXTERNAL","id":"external-9","url":"https://docs.microsoft.com/learn/dotnet/?wt.mc_id=techcom_header-webpage-dotnet","target":"BLANK"},{"linkType":"EXTERNAL","id":"external-2","url":"https://docs.microsoft.com/learn/azure/?WT.mc_id=techcom_header-webpage-m365","target":"BLANK"}],"linkType":"INTERNAL","id":"microsoft-learn","params":{"categoryId":"MicrosoftLearn"},"routeName":"CategoryPage"},{"children":[],"linkType":"INTERNAL","id":"community-info-center","params":{"categoryId":"Community-Info-Center"},"routeName":"CategoryPage"}]},"style":{"boxShadow":"var(--lia-bs-box-shadow-sm)","controllerHighlightColor":"hsla(30, 100%, 50%)","linkFontWeight":"400","dropdownDividerMarginBottom":"10px","hamburgerBorderHover":"none","linkBoxShadowHover":"none","linkFontSize":"14px","backgroundOpacity":0.8,"controllerBorderRadius":"var(--lia-border-radius-50)","hamburgerBgColor":"transparent","hamburgerColor":"var(--lia-nav-controller-icon-color)","linkTextBorderBottom":"none","brandLogoHeight":"30px","linkBgHoverColor":"transparent","linkLetterSpacing":"normal","collapseMenuDividerOpacity":0.16,"dropdownPaddingBottom":"15px","paddingBottom":"15px","dropdownMenuOffset":"2px","hamburgerBgHoverColor":"transparent","borderBottom":"1px solid var(--lia-bs-border-color)","hamburgerBorder":"none","dropdownPaddingX":"10px","brandMarginRightSm":"10px","linkBoxShadow":"none","collapseMenuDividerBg":"var(--lia-nav-link-color)","linkColor":"var(--lia-bs-body-color)","linkJustifyContent":"flex-start","dropdownPaddingTop":"10px","controllerHighlightTextColor":"var(--lia-yiq-dark)","controllerTextColor":"var(--lia-nav-controller-icon-color)","background":{"imageAssetName":"","color":"var(--lia-bs-white)","size":"COVER","repeat":"NO_REPEAT","position":"CENTER_CENTER","imageLastModified":""},"linkBorderRadius":"var(--lia-bs-border-radius-sm)","linkHoverColor":"var(--lia-bs-body-color)","position":"FIXED","linkBorder":"none","linkTextBorderBottomHover":"2px solid var(--lia-bs-body-color)","brandMarginRight":"30px","hamburgerHoverColor":"var(--lia-nav-controller-icon-color)","linkBorderHover":"none","collapseMenuMarginLeft":"20px","linkFontStyle":"NORMAL","controllerTextHoverColor":"var(--lia-nav-controller-icon-hover-color)","linkPaddingX":"10px","linkPaddingY":"5px","paddingTop":"15px","linkTextTransform":"NONE","dropdownBorderColor":"hsla(var(--lia-bs-black-h), var(--lia-bs-black-s), var(--lia-bs-black-l), 0.08)","controllerBgHoverColor":"hsla(var(--lia-bs-black-h), var(--lia-bs-black-s), var(--lia-bs-black-l), 0.1)","linkBgColor":"transparent","linkDropdownPaddingX":"var(--lia-nav-link-px)","linkDropdownPaddingY":"9px","controllerIconColor":"var(--lia-bs-body-color)","dropdownDividerMarginTop":"10px","linkGap":"10px","controllerIconHoverColor":"var(--lia-bs-body-color)"},"showSearchIcon":false,"languagePickerStyle":"iconAndLabel"},"__typename":"QuiltComponent"},{"id":"community.widget.breadcrumbWidget","props":{"backgroundColor":"transparent","linkHighlightColor":"var(--lia-bs-primary)","visualEffects":{"showBottomBorder":true},"linkTextColor":"var(--lia-bs-gray-700)"},"__typename":"QuiltComponent"},{"id":"custom.widget.community_banner","props":{"widgetVisibility":"signedInOrAnonymous","useTitle":true,"usePageWidth":false,"useBackground":false,"title":"","lazyLoad":false},"__typename":"QuiltComponent"},{"id":"custom.widget.HeroBanner","props":{"widgetVisibility":"signedInOrAnonymous","usePageWidth":false,"useTitle":true,"cMax_items":3,"useBackground":false,"title":"","lazyLoad":false,"widgetChooser":"custom.widget.HeroBanner"},"__typename":"QuiltComponent"}],"__typename":"QuiltWrapperSection"},"footer":{"backgroundImageProps":{"assetName":null,"backgroundSize":"COVER","backgroundRepeat":"NO_REPEAT","backgroundPosition":"CENTER_CENTER","lastModified":null,"__typename":"BackgroundImageProps"},"backgroundColor":"transparent","items":[{"id":"custom.widget.MicrosoftFooter","props":{"widgetVisibility":"signedInOrAnonymous","useTitle":true,"useBackground":false,"title":"","lazyLoad":false},"__typename":"QuiltComponent"}],"__typename":"QuiltWrapperSection"},"__typename":"QuiltWrapper","localOverride":false},"localOverride":false},"CachedAsset:text:en_US-components/common/ActionFeedback-1743151752863":{"__typename":"CachedAsset","id":"text:en_US-components/common/ActionFeedback-1743151752863","value":{"joinedGroupHub.title":"Welcome","joinedGroupHub.message":"You are now a member of this group and are subscribed to updates.","groupHubInviteNotFound.title":"Invitation Not Found","groupHubInviteNotFound.message":"Sorry, we could not find your invitation to the group. The owner may have canceled the invite.","groupHubNotFound.title":"Group Not Found","groupHubNotFound.message":"The grouphub you tried to join does not exist. It may have been deleted.","existingGroupHubMember.title":"Already Joined","existingGroupHubMember.message":"You are already a member of this group.","accountLocked.title":"Account Locked","accountLocked.message":"Your account has been locked due to multiple failed attempts. Try again in {lockoutTime} minutes.","editedGroupHub.title":"Changes Saved","editedGroupHub.message":"Your group has been updated.","leftGroupHub.title":"Goodbye","leftGroupHub.message":"You are no longer a member of this group and will not receive future updates.","deletedGroupHub.title":"Deleted","deletedGroupHub.message":"The group has been deleted.","groupHubCreated.title":"Group Created","groupHubCreated.message":"{groupHubName} is ready to use","accountClosed.title":"Account Closed","accountClosed.message":"The account has been closed and you will now be redirected to the homepage","resetTokenExpired.title":"Reset Password Link has Expired","resetTokenExpired.message":"Try resetting your password again","invalidUrl.title":"Invalid URL","invalidUrl.message":"The URL you're using is not recognized. Verify your URL and try again.","accountClosedForUser.title":"Account Closed","accountClosedForUser.message":"{userName}'s account is closed","inviteTokenInvalid.title":"Invitation Invalid","inviteTokenInvalid.message":"Your invitation to the community has been canceled or expired.","inviteTokenError.title":"Invitation Verification Failed","inviteTokenError.message":"The url you are utilizing is not recognized. Verify your URL and try again","pageNotFound.title":"Access Denied","pageNotFound.message":"You do not have access to this area of the community or it doesn't exist","eventAttending.title":"Responded as Attending","eventAttending.message":"You'll be notified when there's new activity and reminded as the event approaches","eventInterested.title":"Responded as Interested","eventInterested.message":"You'll be notified when there's new activity and reminded as the event approaches","eventNotFound.title":"Event Not Found","eventNotFound.message":"The event you tried to respond to does not exist.","redirectToRelatedPage.title":"Showing Related Content","redirectToRelatedPageForBaseUsers.title":"Showing Related Content","redirectToRelatedPageForBaseUsers.message":"The content you are trying to access is archived","redirectToRelatedPage.message":"The content you are trying to access is archived","relatedUrl.archivalLink.flyoutMessage":"The content you are trying to access is archived View Archived Content"},"localOverride":false},"CachedAsset:component:custom.widget.community_banner-en-1743058979722":{"__typename":"CachedAsset","id":"component:custom.widget.community_banner-en-1743058979722","value":{"component":{"id":"custom.widget.community_banner","template":{"id":"community_banner","markupLanguage":"HANDLEBARS","style":".community-banner {\n a.top-bar.btn {\n top: 0px;\n width: 100%;\n z-index: 999;\n text-align: center;\n left: 0px;\n background: #0068b8;\n color: white;\n padding: 10px 0px;\n display:block;\n box-shadow:none !important;\n border: none !important;\n border-radius: none !important;\n margin: 0px !important;\n font-size:14px;\n }\n}","texts":null,"defaults":{"config":{"applicablePages":[],"description":"community announcement text","fetchedContent":null,"__typename":"ComponentConfiguration"},"props":[],"__typename":"ComponentProperties"},"components":[{"id":"custom.widget.community_banner","form":null,"config":null,"props":[],"__typename":"Component"}],"grouping":"CUSTOM","__typename":"ComponentTemplate"},"properties":{"config":{"applicablePages":[],"description":"community announcement text","fetchedContent":null,"__typename":"ComponentConfiguration"},"props":[],"__typename":"ComponentProperties"},"form":null,"__typename":"Component","localOverride":false},"globalCss":{"css":".custom_widget_community_banner_community-banner_1a5zb_1 {\n a.custom_widget_community_banner_top-bar_1a5zb_2.custom_widget_community_banner_btn_1a5zb_2 {\n top: 0;\n width: 100%;\n z-index: 999;\n text-align: center;\n left: 0;\n background: #0068b8;\n color: white;\n padding: 0.625rem 0;\n display:block;\n box-shadow:none !important;\n border: none !important;\n border-radius: none !important;\n margin: 0 !important;\n font-size:0.875rem;\n }\n}","tokens":{"community-banner":"custom_widget_community_banner_community-banner_1a5zb_1","top-bar":"custom_widget_community_banner_top-bar_1a5zb_2","btn":"custom_widget_community_banner_btn_1a5zb_2"}},"form":null},"localOverride":false},"CachedAsset:component:custom.widget.HeroBanner-en-1743058979722":{"__typename":"CachedAsset","id":"component:custom.widget.HeroBanner-en-1743058979722","value":{"component":{"id":"custom.widget.HeroBanner","template":{"id":"HeroBanner","markupLanguage":"REACT","style":null,"texts":{"searchPlaceholderText":"Search this community","followActionText":"Follow","unfollowActionText":"Following","searchOnHoverText":"Please enter your search term(s) and then press return key to complete a search."},"defaults":{"config":{"applicablePages":[],"description":null,"fetchedContent":null,"__typename":"ComponentConfiguration"},"props":[{"id":"max_items","dataType":"NUMBER","list":false,"defaultValue":"3","label":"Max Items","description":"The maximum number of items to display in the carousel","possibleValues":null,"control":"INPUT","__typename":"PropDefinition"}],"__typename":"ComponentProperties"},"components":[{"id":"custom.widget.HeroBanner","form":{"fields":[{"id":"widgetChooser","validation":null,"noValidation":null,"dataType":"STRING","list":null,"control":null,"defaultValue":null,"label":null,"description":null,"possibleValues":null,"__typename":"FormField"},{"id":"title","validation":null,"noValidation":null,"dataType":"STRING","list":null,"control":null,"defaultValue":null,"label":null,"description":null,"possibleValues":null,"__typename":"FormField"},{"id":"useTitle","validation":null,"noValidation":null,"dataType":"BOOLEAN","list":null,"control":null,"defaultValue":null,"label":null,"description":null,"possibleValues":null,"__typename":"FormField"},{"id":"useBackground","validation":null,"noValidation":null,"dataType":"BOOLEAN","list":null,"control":null,"defaultValue":null,"label":null,"description":null,"possibleValues":null,"__typename":"FormField"},{"id":"widgetVisibility","validation":null,"noValidation":null,"dataType":"STRING","list":null,"control":null,"defaultValue":null,"label":null,"description":null,"possibleValues":null,"__typename":"FormField"},{"id":"moreOptions","validation":null,"noValidation":null,"dataType":"STRING","list":null,"control":null,"defaultValue":null,"label":null,"description":null,"possibleValues":null,"__typename":"FormField"},{"id":"cMax_items","validation":null,"noValidation":null,"dataType":"NUMBER","list":false,"control":"INPUT","defaultValue":"3","label":"Max Items","description":"The maximum number of items to display in the carousel","possibleValues":null,"__typename":"FormField"}],"layout":{"rows":[{"id":"widgetChooserGroup","type":"fieldset","as":null,"items":[{"id":"widgetChooser","className":null,"__typename":"FormFieldRef"}],"props":null,"legend":null,"description":null,"className":null,"viewVariant":null,"toggleState":null,"__typename":"FormFieldset"},{"id":"titleGroup","type":"fieldset","as":null,"items":[{"id":"title","className":null,"__typename":"FormFieldRef"},{"id":"useTitle","className":null,"__typename":"FormFieldRef"}],"props":null,"legend":null,"description":null,"className":null,"viewVariant":null,"toggleState":null,"__typename":"FormFieldset"},{"id":"useBackground","type":"fieldset","as":null,"items":[{"id":"useBackground","className":null,"__typename":"FormFieldRef"}],"props":null,"legend":null,"description":null,"className":null,"viewVariant":null,"toggleState":null,"__typename":"FormFieldset"},{"id":"widgetVisibility","type":"fieldset","as":null,"items":[{"id":"widgetVisibility","className":null,"__typename":"FormFieldRef"}],"props":null,"legend":null,"description":null,"className":null,"viewVariant":null,"toggleState":null,"__typename":"FormFieldset"},{"id":"moreOptionsGroup","type":"fieldset","as":null,"items":[{"id":"moreOptions","className":null,"__typename":"FormFieldRef"}],"props":null,"legend":null,"description":null,"className":null,"viewVariant":null,"toggleState":null,"__typename":"FormFieldset"},{"id":"componentPropsGroup","type":"fieldset","as":null,"items":[{"id":"cMax_items","className":null,"__typename":"FormFieldRef"}],"props":null,"legend":null,"description":null,"className":null,"viewVariant":null,"toggleState":null,"__typename":"FormFieldset"}],"actionButtons":null,"className":"custom_widget_HeroBanner_form","formGroupFieldSeparator":"divider","__typename":"FormLayout"},"__typename":"Form"},"config":null,"props":[],"__typename":"Component"}],"grouping":"CUSTOM","__typename":"ComponentTemplate"},"properties":{"config":{"applicablePages":[],"description":null,"fetchedContent":null,"__typename":"ComponentConfiguration"},"props":[{"id":"max_items","dataType":"NUMBER","list":false,"defaultValue":"3","label":"Max Items","description":"The maximum number of items to display in the carousel","possibleValues":null,"control":"INPUT","__typename":"PropDefinition"}],"__typename":"ComponentProperties"},"form":{"fields":[{"id":"widgetChooser","validation":null,"noValidation":null,"dataType":"STRING","list":null,"control":null,"defaultValue":null,"label":null,"description":null,"possibleValues":null,"__typename":"FormField"},{"id":"title","validation":null,"noValidation":null,"dataType":"STRING","list":null,"control":null,"defaultValue":null,"label":null,"description":null,"possibleValues":null,"__typename":"FormField"},{"id":"useTitle","validation":null,"noValidation":null,"dataType":"BOOLEAN","list":null,"control":null,"defaultValue":null,"label":null,"description":null,"possibleValues":null,"__typename":"FormField"},{"id":"useBackground","validation":null,"noValidation":null,"dataType":"BOOLEAN","list":null,"control":null,"defaultValue":null,"label":null,"description":null,"possibleValues":null,"__typename":"FormField"},{"id":"widgetVisibility","validation":null,"noValidation":null,"dataType":"STRING","list":null,"control":null,"defaultValue":null,"label":null,"description":null,"possibleValues":null,"__typename":"FormField"},{"id":"moreOptions","validation":null,"noValidation":null,"dataType":"STRING","list":null,"control":null,"defaultValue":null,"label":null,"description":null,"possibleValues":null,"__typename":"FormField"},{"id":"cMax_items","validation":null,"noValidation":null,"dataType":"NUMBER","list":false,"control":"INPUT","defaultValue":"3","label":"Max Items","description":"The maximum number of items to display in the carousel","possibleValues":null,"__typename":"FormField"}],"layout":{"rows":[{"id":"widgetChooserGroup","type":"fieldset","as":null,"items":[{"id":"widgetChooser","className":null,"__typename":"FormFieldRef"}],"props":null,"legend":null,"description":null,"className":null,"viewVariant":null,"toggleState":null,"__typename":"FormFieldset"},{"id":"titleGroup","type":"fieldset","as":null,"items":[{"id":"title","className":null,"__typename":"FormFieldRef"},{"id":"useTitle","className":null,"__typename":"FormFieldRef"}],"props":null,"legend":null,"description":null,"className":null,"viewVariant":null,"toggleState":null,"__typename":"FormFieldset"},{"id":"useBackground","type":"fieldset","as":null,"items":[{"id":"useBackground","className":null,"__typename":"FormFieldRef"}],"props":null,"legend":null,"description":null,"className":null,"viewVariant":null,"toggleState":null,"__typename":"FormFieldset"},{"id":"widgetVisibility","type":"fieldset","as":null,"items":[{"id":"widgetVisibility","className":null,"__typename":"FormFieldRef"}],"props":null,"legend":null,"description":null,"className":null,"viewVariant":null,"toggleState":null,"__typename":"FormFieldset"},{"id":"moreOptionsGroup","type":"fieldset","as":null,"items":[{"id":"moreOptions","className":null,"__typename":"FormFieldRef"}],"props":null,"legend":null,"description":null,"className":null,"viewVariant":null,"toggleState":null,"__typename":"FormFieldset"},{"id":"componentPropsGroup","type":"fieldset","as":null,"items":[{"id":"cMax_items","className":null,"__typename":"FormFieldRef"}],"props":null,"legend":null,"description":null,"className":null,"viewVariant":null,"toggleState":null,"__typename":"FormFieldset"}],"actionButtons":null,"className":"custom_widget_HeroBanner_form","formGroupFieldSeparator":"divider","__typename":"FormLayout"},"__typename":"Form"},"__typename":"Component","localOverride":false},"globalCss":null,"form":{"fields":[{"id":"widgetChooser","validation":null,"noValidation":null,"dataType":"STRING","list":null,"control":null,"defaultValue":null,"label":null,"description":null,"possibleValues":null,"__typename":"FormField"},{"id":"title","validation":null,"noValidation":null,"dataType":"STRING","list":null,"control":null,"defaultValue":null,"label":null,"description":null,"possibleValues":null,"__typename":"FormField"},{"id":"useTitle","validation":null,"noValidation":null,"dataType":"BOOLEAN","list":null,"control":null,"defaultValue":null,"label":null,"description":null,"possibleValues":null,"__typename":"FormField"},{"id":"useBackground","validation":null,"noValidation":null,"dataType":"BOOLEAN","list":null,"control":null,"defaultValue":null,"label":null,"description":null,"possibleValues":null,"__typename":"FormField"},{"id":"widgetVisibility","validation":null,"noValidation":null,"dataType":"STRING","list":null,"control":null,"defaultValue":null,"label":null,"description":null,"possibleValues":null,"__typename":"FormField"},{"id":"moreOptions","validation":null,"noValidation":null,"dataType":"STRING","list":null,"control":null,"defaultValue":null,"label":null,"description":null,"possibleValues":null,"__typename":"FormField"},{"id":"cMax_items","validation":null,"noValidation":null,"dataType":"NUMBER","list":false,"control":"INPUT","defaultValue":"3","label":"Max Items","description":"The maximum number of items to display in the carousel","possibleValues":null,"__typename":"FormField"}],"layout":{"rows":[{"id":"widgetChooserGroup","type":"fieldset","as":null,"items":[{"id":"widgetChooser","className":null,"__typename":"FormFieldRef"}],"props":null,"legend":null,"description":null,"className":null,"viewVariant":null,"toggleState":null,"__typename":"FormFieldset"},{"id":"titleGroup","type":"fieldset","as":null,"items":[{"id":"title","className":null,"__typename":"FormFieldRef"},{"id":"useTitle","className":null,"__typename":"FormFieldRef"}],"props":null,"legend":null,"description":null,"className":null,"viewVariant":null,"toggleState":null,"__typename":"FormFieldset"},{"id":"useBackground","type":"fieldset","as":null,"items":[{"id":"useBackground","className":null,"__typename":"FormFieldRef"}],"props":null,"legend":null,"description":null,"className":null,"viewVariant":null,"toggleState":null,"__typename":"FormFieldset"},{"id":"widgetVisibility","type":"fieldset","as":null,"items":[{"id":"widgetVisibility","className":null,"__typename":"FormFieldRef"}],"props":null,"legend":null,"description":null,"className":null,"viewVariant":null,"toggleState":null,"__typename":"FormFieldset"},{"id":"moreOptionsGroup","type":"fieldset","as":null,"items":[{"id":"moreOptions","className":null,"__typename":"FormFieldRef"}],"props":null,"legend":null,"description":null,"className":null,"viewVariant":null,"toggleState":null,"__typename":"FormFieldset"},{"id":"componentPropsGroup","type":"fieldset","as":null,"items":[{"id":"cMax_items","className":null,"__typename":"FormFieldRef"}],"props":null,"legend":null,"description":null,"className":null,"viewVariant":null,"toggleState":null,"__typename":"FormFieldset"}],"actionButtons":null,"className":"custom_widget_HeroBanner_form","formGroupFieldSeparator":"divider","__typename":"FormLayout"},"__typename":"Form"}},"localOverride":false},"CachedAsset:component:custom.widget.Social_Sharing-en-1743058979722":{"__typename":"CachedAsset","id":"component:custom.widget.Social_Sharing-en-1743058979722","value":{"component":{"id":"custom.widget.Social_Sharing","template":{"id":"Social_Sharing","markupLanguage":"HANDLEBARS","style":".social-share {\n .sharing-options {\n position: relative;\n margin: 0;\n padding: 0;\n line-height: 10px;\n display: flex;\n justify-content: left;\n gap: 5px;\n list-style-type: none;\n li {\n text-align: left;\n a {\n min-width: 30px;\n min-height: 30px;\n display: block;\n padding: 1px;\n .social-share-linkedin {\n img {\n background-color: rgb(0, 119, 181);\n }\n }\n .social-share-facebook {\n img {\n background-color: rgb(59, 89, 152);\n }\n }\n .social-share-x {\n img {\n background-color: rgb(0, 0, 0);\n }\n }\n .social-share-rss {\n img {\n background-color: rgb(0, 0, 0);\n }\n }\n .social-share-reddit {\n img {\n background-color: rgb(255, 69, 0);\n }\n }\n .social-share-email {\n img {\n background-color: rgb(132, 132, 132);\n }\n }\n }\n a {\n img {\n height: 2rem;\n }\n }\n }\n }\n}\n","texts":null,"defaults":{"config":{"applicablePages":[],"description":"Adds buttons to share to various social media websites","fetchedContent":null,"__typename":"ComponentConfiguration"},"props":[],"__typename":"ComponentProperties"},"components":[{"id":"custom.widget.Social_Sharing","form":null,"config":null,"props":[],"__typename":"Component"}],"grouping":"CUSTOM","__typename":"ComponentTemplate"},"properties":{"config":{"applicablePages":[],"description":"Adds buttons to share to various social media websites","fetchedContent":null,"__typename":"ComponentConfiguration"},"props":[],"__typename":"ComponentProperties"},"form":null,"__typename":"Component","localOverride":false},"globalCss":{"css":".custom_widget_Social_Sharing_social-share_c7xxz_1 {\n .custom_widget_Social_Sharing_sharing-options_c7xxz_2 {\n position: relative;\n margin: 0;\n padding: 0;\n line-height: 0.625rem;\n display: flex;\n justify-content: left;\n gap: 0.3125rem;\n list-style-type: none;\n li {\n text-align: left;\n a {\n min-width: 1.875rem;\n min-height: 1.875rem;\n display: block;\n padding: 0.0625rem;\n .custom_widget_Social_Sharing_social-share-linkedin_c7xxz_18 {\n img {\n background-color: rgb(0, 119, 181);\n }\n }\n .custom_widget_Social_Sharing_social-share-facebook_c7xxz_23 {\n img {\n background-color: rgb(59, 89, 152);\n }\n }\n .custom_widget_Social_Sharing_social-share-x_c7xxz_28 {\n img {\n background-color: rgb(0, 0, 0);\n }\n }\n .custom_widget_Social_Sharing_social-share-rss_c7xxz_33 {\n img {\n background-color: rgb(0, 0, 0);\n }\n }\n .custom_widget_Social_Sharing_social-share-reddit_c7xxz_38 {\n img {\n background-color: rgb(255, 69, 0);\n }\n }\n .custom_widget_Social_Sharing_social-share-email_c7xxz_43 {\n img {\n background-color: rgb(132, 132, 132);\n }\n }\n }\n a {\n img {\n height: 2rem;\n }\n }\n }\n }\n}\n","tokens":{"social-share":"custom_widget_Social_Sharing_social-share_c7xxz_1","sharing-options":"custom_widget_Social_Sharing_sharing-options_c7xxz_2","social-share-linkedin":"custom_widget_Social_Sharing_social-share-linkedin_c7xxz_18","social-share-facebook":"custom_widget_Social_Sharing_social-share-facebook_c7xxz_23","social-share-x":"custom_widget_Social_Sharing_social-share-x_c7xxz_28","social-share-rss":"custom_widget_Social_Sharing_social-share-rss_c7xxz_33","social-share-reddit":"custom_widget_Social_Sharing_social-share-reddit_c7xxz_38","social-share-email":"custom_widget_Social_Sharing_social-share-email_c7xxz_43"}},"form":null},"localOverride":false},"CachedAsset:component:custom.widget.MicrosoftFooter-en-1743058979722":{"__typename":"CachedAsset","id":"component:custom.widget.MicrosoftFooter-en-1743058979722","value":{"component":{"id":"custom.widget.MicrosoftFooter","template":{"id":"MicrosoftFooter","markupLanguage":"HANDLEBARS","style":".context-uhf {\n min-width: 280px;\n font-size: 15px;\n box-sizing: border-box;\n -ms-text-size-adjust: 100%;\n -webkit-text-size-adjust: 100%;\n & *,\n & *:before,\n & *:after {\n box-sizing: inherit;\n }\n a.c-uhff-link {\n color: #616161;\n word-break: break-word;\n text-decoration: none;\n }\n &a:link,\n &a:focus,\n &a:hover,\n &a:active,\n &a:visited {\n text-decoration: none;\n color: inherit;\n }\n & div {\n font-family: 'Segoe UI', SegoeUI, 'Helvetica Neue', Helvetica, Arial, sans-serif;\n }\n}\n.c-uhff {\n background: #f2f2f2;\n margin: -1.5625;\n width: auto;\n height: auto;\n}\n.c-uhff-nav {\n margin: 0 auto;\n max-width: calc(1600px + 10%);\n padding: 0 5%;\n box-sizing: inherit;\n &:before,\n &:after {\n content: ' ';\n display: table;\n clear: left;\n }\n @media only screen and (max-width: 1083px) {\n padding-left: 12px;\n }\n .c-heading-4 {\n color: #616161;\n word-break: break-word;\n font-size: 15px;\n line-height: 20px;\n padding: 36px 0 4px;\n font-weight: 600;\n }\n .c-uhff-nav-row {\n .c-uhff-nav-group {\n display: block;\n float: left;\n min-height: 1px;\n vertical-align: text-top;\n padding: 0 12px;\n width: 100%;\n zoom: 1;\n &:first-child {\n padding-left: 0;\n @media only screen and (max-width: 1083px) {\n padding-left: 12px;\n }\n }\n @media only screen and (min-width: 540px) and (max-width: 1082px) {\n width: 33.33333%;\n }\n @media only screen and (min-width: 1083px) {\n width: 16.6666666667%;\n }\n ul.c-list.f-bare {\n font-size: 11px;\n line-height: 16px;\n margin-top: 0;\n margin-bottom: 0;\n padding-left: 0;\n list-style-type: none;\n li {\n word-break: break-word;\n padding: 8px 0;\n margin: 0;\n }\n }\n }\n }\n}\n.c-uhff-base {\n background: #f2f2f2;\n margin: 0 auto;\n max-width: calc(1600px + 10%);\n padding: 30px 5% 16px;\n &:before,\n &:after {\n content: ' ';\n display: table;\n }\n &:after {\n clear: both;\n }\n a.c-uhff-ccpa {\n font-size: 11px;\n line-height: 16px;\n float: left;\n margin: 3px 0;\n }\n a.c-uhff-ccpa:hover {\n text-decoration: underline;\n }\n ul.c-list {\n font-size: 11px;\n line-height: 16px;\n float: right;\n margin: 3px 0;\n color: #616161;\n li {\n padding: 0 24px 4px 0;\n display: inline-block;\n }\n }\n .c-list.f-bare {\n padding-left: 0;\n list-style-type: none;\n }\n @media only screen and (max-width: 1083px) {\n display: flex;\n flex-wrap: wrap;\n padding: 30px 24px 16px;\n }\n}\n","texts":{"New tab":"What's New","New 1":"Surface Laptop Studio 2","New 2":"Surface Laptop Go 3","New 3":"Surface Pro 9","New 4":"Surface Laptop 5","New 5":"Surface Studio 2+","New 6":"Copilot in Windows","New 7":"Microsoft 365","New 8":"Windows 11 apps","Store tab":"Microsoft Store","Store 1":"Account Profile","Store 2":"Download Center","Store 3":"Microsoft Store Support","Store 4":"Returns","Store 5":"Order tracking","Store 6":"Certified Refurbished","Store 7":"Microsoft Store Promise","Store 8":"Flexible Payments","Education tab":"Education","Edu 1":"Microsoft in education","Edu 2":"Devices for education","Edu 3":"Microsoft Teams for Education","Edu 4":"Microsoft 365 Education","Edu 5":"How to buy for your school","Edu 6":"Educator Training and development","Edu 7":"Deals for students and parents","Edu 8":"Azure for students","Business tab":"Business","Bus 1":"Microsoft Cloud","Bus 2":"Microsoft Security","Bus 3":"Dynamics 365","Bus 4":"Microsoft 365","Bus 5":"Microsoft Power Platform","Bus 6":"Microsoft Teams","Bus 7":"Microsoft Industry","Bus 8":"Small Business","Developer tab":"Developer & IT","Dev 1":"Azure","Dev 2":"Developer Center","Dev 3":"Documentation","Dev 4":"Microsoft Learn","Dev 5":"Microsoft Tech Community","Dev 6":"Azure Marketplace","Dev 7":"AppSource","Dev 8":"Visual Studio","Company tab":"Company","Com 1":"Careers","Com 2":"About Microsoft","Com 3":"Company News","Com 4":"Privacy at Microsoft","Com 5":"Investors","Com 6":"Diversity and inclusion","Com 7":"Accessiblity","Com 8":"Sustainibility"},"defaults":{"config":{"applicablePages":[],"description":"The Microsoft Footer","fetchedContent":null,"__typename":"ComponentConfiguration"},"props":[],"__typename":"ComponentProperties"},"components":[{"id":"custom.widget.MicrosoftFooter","form":null,"config":null,"props":[],"__typename":"Component"}],"grouping":"CUSTOM","__typename":"ComponentTemplate"},"properties":{"config":{"applicablePages":[],"description":"The Microsoft Footer","fetchedContent":null,"__typename":"ComponentConfiguration"},"props":[],"__typename":"ComponentProperties"},"form":null,"__typename":"Component","localOverride":false},"globalCss":{"css":".custom_widget_MicrosoftFooter_context-uhf_f95yq_1 {\n min-width: 17.5rem;\n font-size: 0.9375rem;\n box-sizing: border-box;\n -ms-text-size-adjust: 100%;\n -webkit-text-size-adjust: 100%;\n & *,\n & *:before,\n & *:after {\n box-sizing: inherit;\n }\n a.custom_widget_MicrosoftFooter_c-uhff-link_f95yq_12 {\n color: #616161;\n word-break: break-word;\n text-decoration: none;\n }\n &a:link,\n &a:focus,\n &a:hover,\n &a:active,\n &a:visited {\n text-decoration: none;\n color: inherit;\n }\n & div {\n font-family: 'Segoe UI', SegoeUI, 'Helvetica Neue', Helvetica, Arial, sans-serif;\n }\n}\n.custom_widget_MicrosoftFooter_c-uhff_f95yq_12 {\n background: #f2f2f2;\n margin: -1.5625;\n width: auto;\n height: auto;\n}\n.custom_widget_MicrosoftFooter_c-uhff-nav_f95yq_35 {\n margin: 0 auto;\n max-width: calc(100rem + 10%);\n padding: 0 5%;\n box-sizing: inherit;\n &:before,\n &:after {\n content: ' ';\n display: table;\n clear: left;\n }\n @media only screen and (max-width: 1083px) {\n padding-left: 0.75rem;\n }\n .custom_widget_MicrosoftFooter_c-heading-4_f95yq_49 {\n color: #616161;\n word-break: break-word;\n font-size: 0.9375rem;\n line-height: 1.25rem;\n padding: 2.25rem 0 0.25rem;\n font-weight: 600;\n }\n .custom_widget_MicrosoftFooter_c-uhff-nav-row_f95yq_57 {\n .custom_widget_MicrosoftFooter_c-uhff-nav-group_f95yq_58 {\n display: block;\n float: left;\n min-height: 0.0625rem;\n vertical-align: text-top;\n padding: 0 0.75rem;\n width: 100%;\n zoom: 1;\n &:first-child {\n padding-left: 0;\n @media only screen and (max-width: 1083px) {\n padding-left: 0.75rem;\n }\n }\n @media only screen and (min-width: 540px) and (max-width: 1082px) {\n width: 33.33333%;\n }\n @media only screen and (min-width: 1083px) {\n width: 16.6666666667%;\n }\n ul.custom_widget_MicrosoftFooter_c-list_f95yq_78.custom_widget_MicrosoftFooter_f-bare_f95yq_78 {\n font-size: 0.6875rem;\n line-height: 1rem;\n margin-top: 0;\n margin-bottom: 0;\n padding-left: 0;\n list-style-type: none;\n li {\n word-break: break-word;\n padding: 0.5rem 0;\n margin: 0;\n }\n }\n }\n }\n}\n.custom_widget_MicrosoftFooter_c-uhff-base_f95yq_94 {\n background: #f2f2f2;\n margin: 0 auto;\n max-width: calc(100rem + 10%);\n padding: 1.875rem 5% 1rem;\n &:before,\n &:after {\n content: ' ';\n display: table;\n }\n &:after {\n clear: both;\n }\n a.custom_widget_MicrosoftFooter_c-uhff-ccpa_f95yq_107 {\n font-size: 0.6875rem;\n line-height: 1rem;\n float: left;\n margin: 0.1875rem 0;\n }\n a.custom_widget_MicrosoftFooter_c-uhff-ccpa_f95yq_107:hover {\n text-decoration: underline;\n }\n ul.custom_widget_MicrosoftFooter_c-list_f95yq_78 {\n font-size: 0.6875rem;\n line-height: 1rem;\n float: right;\n margin: 0.1875rem 0;\n color: #616161;\n li {\n padding: 0 1.5rem 0.25rem 0;\n display: inline-block;\n }\n }\n .custom_widget_MicrosoftFooter_c-list_f95yq_78.custom_widget_MicrosoftFooter_f-bare_f95yq_78 {\n padding-left: 0;\n list-style-type: none;\n }\n @media only screen and (max-width: 1083px) {\n display: flex;\n flex-wrap: wrap;\n padding: 1.875rem 1.5rem 1rem;\n }\n}\n","tokens":{"context-uhf":"custom_widget_MicrosoftFooter_context-uhf_f95yq_1","c-uhff-link":"custom_widget_MicrosoftFooter_c-uhff-link_f95yq_12","c-uhff":"custom_widget_MicrosoftFooter_c-uhff_f95yq_12","c-uhff-nav":"custom_widget_MicrosoftFooter_c-uhff-nav_f95yq_35","c-heading-4":"custom_widget_MicrosoftFooter_c-heading-4_f95yq_49","c-uhff-nav-row":"custom_widget_MicrosoftFooter_c-uhff-nav-row_f95yq_57","c-uhff-nav-group":"custom_widget_MicrosoftFooter_c-uhff-nav-group_f95yq_58","c-list":"custom_widget_MicrosoftFooter_c-list_f95yq_78","f-bare":"custom_widget_MicrosoftFooter_f-bare_f95yq_78","c-uhff-base":"custom_widget_MicrosoftFooter_c-uhff-base_f95yq_94","c-uhff-ccpa":"custom_widget_MicrosoftFooter_c-uhff-ccpa_f95yq_107"}},"form":null},"localOverride":false},"CachedAsset:text:en_US-components/community/Breadcrumb-1743151752863":{"__typename":"CachedAsset","id":"text:en_US-components/community/Breadcrumb-1743151752863","value":{"navLabel":"Breadcrumbs","dropdown":"Additional parent page navigation"},"localOverride":false},"CachedAsset:text:en_US-components/messages/MessageBanner-1743151752863":{"__typename":"CachedAsset","id":"text:en_US-components/messages/MessageBanner-1743151752863","value":{"messageMarkedAsSpam":"This post has been marked as spam","messageMarkedAsSpam@board:TKB":"This article has been marked as spam","messageMarkedAsSpam@board:BLOG":"This post has been marked as spam","messageMarkedAsSpam@board:FORUM":"This discussion has been marked as spam","messageMarkedAsSpam@board:OCCASION":"This event has been marked as spam","messageMarkedAsSpam@board:IDEA":"This idea has been marked as spam","manageSpam":"Manage Spam","messageMarkedAsAbuse":"This post has been marked as abuse","messageMarkedAsAbuse@board:TKB":"This article has been marked as abuse","messageMarkedAsAbuse@board:BLOG":"This post has been marked as abuse","messageMarkedAsAbuse@board:FORUM":"This discussion has been marked as abuse","messageMarkedAsAbuse@board:OCCASION":"This event has been marked as abuse","messageMarkedAsAbuse@board:IDEA":"This idea has been marked as abuse","preModCommentAuthorText":"This comment will be published as soon as it is approved","preModCommentModeratorText":"This comment is awaiting moderation","messageMarkedAsOther":"This post has been rejected due to other reasons","messageMarkedAsOther@board:TKB":"This article has been rejected due to other reasons","messageMarkedAsOther@board:BLOG":"This post has been rejected due to other reasons","messageMarkedAsOther@board:FORUM":"This discussion has been rejected due to other reasons","messageMarkedAsOther@board:OCCASION":"This event has been rejected due to other reasons","messageMarkedAsOther@board:IDEA":"This idea has been rejected due to other reasons","messageArchived":"This post was archived on {date}","relatedUrl":"View Related Content","relatedContentText":"Showing related content","archivedContentLink":"View Archived Content"},"localOverride":false},"Category:category:Exchange":{"__typename":"Category","id":"category:Exchange","categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Category:category:Planner":{"__typename":"Category","id":"category:Planner","categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Category:category:Outlook":{"__typename":"Category","id":"category:Outlook","categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Category:category:Community-Info-Center":{"__typename":"Category","id":"category:Community-Info-Center","categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Category:category:DrivingAdoption":{"__typename":"Category","id":"category:DrivingAdoption","categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Category:category:Azure":{"__typename":"Category","id":"category:Azure","categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Category:category:Windows-Server":{"__typename":"Category","id":"category:Windows-Server","categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Category:category:SQL-Server":{"__typename":"Category","id":"category:SQL-Server","categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Category:category:MicrosoftTeams":{"__typename":"Category","id":"category:MicrosoftTeams","categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Category:category:PublicSector":{"__typename":"Category","id":"category:PublicSector","categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Category:category:microsoft365":{"__typename":"Category","id":"category:microsoft365","categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Category:category:IoT":{"__typename":"Category","id":"category:IoT","categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Category:category:HealthcareAndLifeSciences":{"__typename":"Category","id":"category:HealthcareAndLifeSciences","categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Category:category:SMB":{"__typename":"Category","id":"category:SMB","categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Category:category:ITOpsTalk":{"__typename":"Category","id":"category:ITOpsTalk","categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Category:category:microsoft-endpoint-manager":{"__typename":"Category","id":"category:microsoft-endpoint-manager","categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Category:category:MicrosoftLearn":{"__typename":"Category","id":"category:MicrosoftLearn","categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Blog:board:MicrosoftLearnBlog":{"__typename":"Blog","id":"board:MicrosoftLearnBlog","blogPolicies":{"__typename":"BlogPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}},"boardPolicies":{"__typename":"BoardPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Category:category:AI":{"__typename":"Category","id":"category:AI","categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Category:category:MicrosoftMechanics":{"__typename":"Category","id":"category:MicrosoftMechanics","categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Category:category:StartupsatMicrosoft":{"__typename":"Category","id":"category:StartupsatMicrosoft","categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Category:category:PartnerCommunity":{"__typename":"Category","id":"category:PartnerCommunity","categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Category:category:Windows":{"__typename":"Category","id":"category:Windows","categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Category:category:microsoft-security":{"__typename":"Category","id":"category:microsoft-security","categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"QueryVariables:TopicReplyList:message:336824:1":{"__typename":"QueryVariables","id":"TopicReplyList:message:336824:1","value":{"id":"message:336824","first":10,"sorts":{"postTime":{"direction":"DESC"}},"repliesFirst":3,"repliesFirstDepthThree":1,"repliesSorts":{"postTime":{"direction":"DESC"}},"useAvatar":true,"useAuthorLogin":true,"useAuthorRank":true,"useBody":true,"useKudosCount":true,"useTimeToRead":false,"useMedia":false,"useReadOnlyIcon":false,"useRepliesCount":true,"useSearchSnippet":false,"useAcceptedSolutionButton":false,"useSolvedBadge":false,"useAttachments":false,"attachmentsFirst":5,"useTags":true,"useNodeAncestors":false,"useUserHoverCard":false,"useNodeHoverCard":false,"useModerationStatus":true,"usePreviewSubjectModal":false,"useMessageStatus":true}},"ROOT_MUTATION":{"__typename":"Mutation"},"CachedAsset:text:en_US-components/community/Navbar-1743151752863":{"__typename":"CachedAsset","id":"text:en_US-components/community/Navbar-1743151752863","value":{"community":"Community Home","inbox":"Inbox","manageContent":"Manage Content","tos":"Terms of Service","forgotPassword":"Forgot Password","themeEditor":"Theme Editor","edit":"Edit Navigation Bar","skipContent":"Skip to content","gxcuf89792":"Tech Community","external-1":"Events","s-m-b":"Small and Medium Businesses","windows-server":"Windows Server","education-sector":"Education Sector","driving-adoption":"Driving Adoption","microsoft-learn":"Microsoft Learn","s-q-l-server":"SQL Server","partner-community":"Microsoft Partner Community","microsoft365":"Microsoft 365","external-9":".NET","external-8":"Teams","external-7":"Github","products-services":"Products","external-6":"Power Platform","communities-1":"Topics","external-5":"Microsoft Security","planner":"Planner","external-4":"Microsoft 365","external-3":"Dynamics 365","azure":"Azure","healthcare-and-life-sciences":"Healthcare and Life Sciences","external-2":"Azure","microsoft-mechanics":"Microsoft Mechanics","microsoft-learn-1":"Community","external-10":"Learning Room Directory","microsoft-learn-blog":"Blog","windows":"Windows","i-t-ops-talk":"ITOps Talk","external-link-1":"View All","microsoft-securityand-compliance":"Microsoft Security","public-sector":"Public Sector","community-info-center":"Lounge","external-link-2":"View All","microsoft-teams":"Microsoft Teams","external":"Blogs","microsoft-endpoint-manager":"Microsoft Intune and Configuration Manager","startupsat-microsoft":"Startups at Microsoft","exchange":"Exchange","a-i":"AI and Machine Learning","io-t":"Internet of Things (IoT)","outlook":"Outlook","external-link":"Community Hubs","communities":"Products"},"localOverride":false},"CachedAsset:text:en_US-components/community/NavbarHamburgerDropdown-1743151752863":{"__typename":"CachedAsset","id":"text:en_US-components/community/NavbarHamburgerDropdown-1743151752863","value":{"hamburgerLabel":"Side Menu"},"localOverride":false},"CachedAsset:text:en_US-components/community/BrandLogo-1743151752863":{"__typename":"CachedAsset","id":"text:en_US-components/community/BrandLogo-1743151752863","value":{"logoAlt":"Khoros","themeLogoAlt":"Brand Logo"},"localOverride":false},"CachedAsset:text:en_US-components/community/NavbarTextLinks-1743151752863":{"__typename":"CachedAsset","id":"text:en_US-components/community/NavbarTextLinks-1743151752863","value":{"more":"More"},"localOverride":false},"CachedAsset:text:en_US-components/authentication/AuthenticationLink-1743151752863":{"__typename":"CachedAsset","id":"text:en_US-components/authentication/AuthenticationLink-1743151752863","value":{"title.login":"Sign In","title.registration":"Register","title.forgotPassword":"Forgot Password","title.multiAuthLogin":"Sign In"},"localOverride":false},"CachedAsset:text:en_US-components/nodes/NodeLink-1743151752863":{"__typename":"CachedAsset","id":"text:en_US-components/nodes/NodeLink-1743151752863","value":{"place":"Place {name}"},"localOverride":false},"CachedAsset:text:en_US-components/messages/MessageView/MessageViewStandard-1743151752863":{"__typename":"CachedAsset","id":"text:en_US-components/messages/MessageView/MessageViewStandard-1743151752863","value":{"anonymous":"Anonymous","author":"{messageAuthorLogin}","authorBy":"{messageAuthorLogin}","board":"{messageBoardTitle}","replyToUser":" to {parentAuthor}","showMoreReplies":"Show More","replyText":"Reply","repliesText":"Replies","markedAsSolved":"Marked as Solved","movedMessagePlaceholder.BLOG":"{count, plural, =0 {This comment has been} other {These comments have been} }","movedMessagePlaceholder.TKB":"{count, plural, =0 {This comment has been} other {These comments have been} }","movedMessagePlaceholder.FORUM":"{count, plural, =0 {This reply has been} other {These replies have been} }","movedMessagePlaceholder.IDEA":"{count, plural, =0 {This comment has been} other {These comments have been} }","movedMessagePlaceholder.OCCASION":"{count, plural, =0 {This comment has been} other {These comments have been} }","movedMessagePlaceholderUrlText":"moved.","messageStatus":"Status: ","statusChanged":"Status changed: {previousStatus} to {currentStatus}","statusAdded":"Status added: {status}","statusRemoved":"Status removed: {status}","labelExpand":"expand replies","labelCollapse":"collapse replies","unhelpfulReason.reason1":"Content is outdated","unhelpfulReason.reason2":"Article is missing information","unhelpfulReason.reason3":"Content is for a different Product","unhelpfulReason.reason4":"Doesn't match what I was searching for"},"localOverride":false},"CachedAsset:text:en_US-components/messages/ThreadedReplyList-1743151752863":{"__typename":"CachedAsset","id":"text:en_US-components/messages/ThreadedReplyList-1743151752863","value":{"title":"{count, plural, one{# Reply} other{# Replies}}","title@board:BLOG":"{count, plural, one{# Comment} other{# Comments}}","title@board:TKB":"{count, plural, one{# Comment} other{# Comments}}","title@board:IDEA":"{count, plural, one{# Comment} other{# Comments}}","title@board:OCCASION":"{count, plural, one{# Comment} other{# Comments}}","noRepliesTitle":"No Replies","noRepliesTitle@board:BLOG":"No Comments","noRepliesTitle@board:TKB":"No Comments","noRepliesTitle@board:IDEA":"No Comments","noRepliesTitle@board:OCCASION":"No Comments","noRepliesDescription":"Be the first to reply","noRepliesDescription@board:BLOG":"Be the first to comment","noRepliesDescription@board:TKB":"Be the first to comment","noRepliesDescription@board:IDEA":"Be the first to comment","noRepliesDescription@board:OCCASION":"Be the first to comment","messageReadOnlyAlert:BLOG":"Comments have been turned off for this post","messageReadOnlyAlert:TKB":"Comments have been turned off for this article","messageReadOnlyAlert:IDEA":"Comments have been turned off for this idea","messageReadOnlyAlert:FORUM":"Replies have been turned off for this discussion","messageReadOnlyAlert:OCCASION":"Comments have been turned off for this event"},"localOverride":false},"CachedAsset:text:en_US-components/messages/MessageReplyCallToAction-1743151752863":{"__typename":"CachedAsset","id":"text:en_US-components/messages/MessageReplyCallToAction-1743151752863","value":{"leaveReply":"Leave a reply...","leaveReply@board:BLOG@message:root":"Leave a comment...","leaveReply@board:TKB@message:root":"Leave a comment...","leaveReply@board:IDEA@message:root":"Leave a comment...","leaveReply@board:OCCASION@message:root":"Leave a comment...","repliesTurnedOff.FORUM":"Replies are turned off for this topic","repliesTurnedOff.BLOG":"Comments are turned off for this topic","repliesTurnedOff.TKB":"Comments are turned off for this topic","repliesTurnedOff.IDEA":"Comments are turned off for this topic","repliesTurnedOff.OCCASION":"Comments are turned off for this topic","infoText":"Stop poking me!"},"localOverride":false},"CachedAsset:text:en_US-components/community/NavbarDropdownToggle-1743151752863":{"__typename":"CachedAsset","id":"text:en_US-components/community/NavbarDropdownToggle-1743151752863","value":{"ariaLabelClosed":"Press the down arrow to open the menu"},"localOverride":false},"CachedAsset:text:en_US-shared/client/components/common/QueryHandler-1743151752863":{"__typename":"CachedAsset","id":"text:en_US-shared/client/components/common/QueryHandler-1743151752863","value":{"title":"Query Handler"},"localOverride":false},"CachedAsset:text:en_US-components/messages/MessageCoverImage-1743151752863":{"__typename":"CachedAsset","id":"text:en_US-components/messages/MessageCoverImage-1743151752863","value":{"coverImageTitle":"Cover Image"},"localOverride":false},"CachedAsset:text:en_US-shared/client/components/nodes/NodeTitle-1743151752863":{"__typename":"CachedAsset","id":"text:en_US-shared/client/components/nodes/NodeTitle-1743151752863","value":{"nodeTitle":"{nodeTitle, select, community {Community} other {{nodeTitle}}} "},"localOverride":false},"CachedAsset:text:en_US-components/messages/MessageTimeToRead-1743151752863":{"__typename":"CachedAsset","id":"text:en_US-components/messages/MessageTimeToRead-1743151752863","value":{"minReadText":"{min} MIN READ"},"localOverride":false},"CachedAsset:text:en_US-components/messages/MessageSubject-1743151752863":{"__typename":"CachedAsset","id":"text:en_US-components/messages/MessageSubject-1743151752863","value":{"noSubject":"(no subject)"},"localOverride":false},"CachedAsset:text:en_US-components/users/UserLink-1743151752863":{"__typename":"CachedAsset","id":"text:en_US-components/users/UserLink-1743151752863","value":{"authorName":"View Profile: {author}","anonymous":"Anonymous"},"localOverride":false},"CachedAsset:text:en_US-shared/client/components/users/UserRank-1743151752863":{"__typename":"CachedAsset","id":"text:en_US-shared/client/components/users/UserRank-1743151752863","value":{"rankName":"{rankName}","userRank":"Author rank {rankName}"},"localOverride":false},"CachedAsset:text:en_US-components/messages/MessageTime-1743151752863":{"__typename":"CachedAsset","id":"text:en_US-components/messages/MessageTime-1743151752863","value":{"postTime":"Published: {time}","lastPublishTime":"Last Update: {time}","conversation.lastPostingActivityTime":"Last posting activity time: {time}","conversation.lastPostTime":"Last post time: {time}","moderationData.rejectTime":"Rejected time: {time}"},"localOverride":false},"CachedAsset:text:en_US-components/messages/MessageBody-1743151752863":{"__typename":"CachedAsset","id":"text:en_US-components/messages/MessageBody-1743151752863","value":{"showMessageBody":"Show More","mentionsErrorTitle":"{mentionsType, select, board {Board} user {User} message {Message} other {}} No Longer Available","mentionsErrorMessage":"The {mentionsType} you are trying to view has been removed from the community.","videoProcessing":"Video is being processed. Please try again in a few minutes.","bannerTitle":"Video provider requires cookies to play the video. Accept to continue or {url} it directly on the provider's site.","buttonTitle":"Accept","urlText":"watch"},"localOverride":false},"CachedAsset:text:en_US-components/messages/MessageCustomFields-1743151752863":{"__typename":"CachedAsset","id":"text:en_US-components/messages/MessageCustomFields-1743151752863","value":{"CustomField.default.label":"Value of {name}"},"localOverride":false},"CachedAsset:text:en_US-components/messages/MessageRevision-1743151752863":{"__typename":"CachedAsset","id":"text:en_US-components/messages/MessageRevision-1743151752863","value":{"lastUpdatedDatePublished":"{publishCount, plural, one{Published} other{Updated}} {date}","lastUpdatedDateDraft":"Created {date}","version":"Version {major}.{minor}"},"localOverride":false},"CachedAsset:text:en_US-components/messages/MessageReplyButton-1743151752863":{"__typename":"CachedAsset","id":"text:en_US-components/messages/MessageReplyButton-1743151752863","value":{"repliesCount":"{count}","title":"Reply","title@board:BLOG@message:root":"Comment","title@board:TKB@message:root":"Comment","title@board:IDEA@message:root":"Comment","title@board:OCCASION@message:root":"Comment"},"localOverride":false},"CachedAsset:text:en_US-components/messages/MessageAuthorBio-1743151752863":{"__typename":"CachedAsset","id":"text:en_US-components/messages/MessageAuthorBio-1743151752863","value":{"sendMessage":"Send Message","actionMessage":"Follow this blog board to get notified when there's new activity","coAuthor":"CO-PUBLISHER","contributor":"CONTRIBUTOR","userProfile":"View Profile","iconlink":"Go to {name} {type}"},"localOverride":false},"CachedAsset:text:en_US-shared/client/components/users/UserAvatar-1743151752863":{"__typename":"CachedAsset","id":"text:en_US-shared/client/components/users/UserAvatar-1743151752863","value":{"altText":"{login}'s avatar","altTextGeneric":"User's avatar"},"localOverride":false},"CachedAsset:text:en_US-shared/client/components/ranks/UserRankLabel-1743151752863":{"__typename":"CachedAsset","id":"text:en_US-shared/client/components/ranks/UserRankLabel-1743151752863","value":{"altTitle":"Icon for {rankName} rank"},"localOverride":false},"CachedAsset:text:en_US-components/users/UserRegistrationDate-1743151752863":{"__typename":"CachedAsset","id":"text:en_US-components/users/UserRegistrationDate-1743151752863","value":{"noPrefix":"{date}","withPrefix":"Joined {date}"},"localOverride":false},"CachedAsset:text:en_US-shared/client/components/nodes/NodeAvatar-1743151752863":{"__typename":"CachedAsset","id":"text:en_US-shared/client/components/nodes/NodeAvatar-1743151752863","value":{"altTitle":"Node avatar for {nodeTitle}"},"localOverride":false},"CachedAsset:text:en_US-shared/client/components/nodes/NodeDescription-1743151752863":{"__typename":"CachedAsset","id":"text:en_US-shared/client/components/nodes/NodeDescription-1743151752863","value":{"description":"{description}"},"localOverride":false},"CachedAsset:text:en_US-shared/client/components/nodes/NodeIcon-1743151752863":{"__typename":"CachedAsset","id":"text:en_US-shared/client/components/nodes/NodeIcon-1743151752863","value":{"contentType":"Content Type {style, select, FORUM {Forum} BLOG {Blog} TKB {Knowledge Base} IDEA {Ideas} OCCASION {Events} other {}} icon"},"localOverride":false}}}},"page":"/blogs/BlogMessagePage/BlogMessagePage","query":{"boardId":"smallbasic","messageSubject":"small-basic-game-programming---shooting-game","messageId":"336824"},"buildId":"HEhyUrv5OXNBIbfCLaOrw","runtimeConfig":{"buildInformationVisible":false,"logLevelApp":"info","logLevelMetrics":"info","openTelemetryClientEnabled":false,"openTelemetryConfigName":"o365","openTelemetryServiceVersion":"25.1.0","openTelemetryUniverse":"prod","openTelemetryCollector":"http://localhost:4318","openTelemetryRouteChangeAllowedTime":"5000","apolloDevToolsEnabled":false,"inboxMuteWipFeatureEnabled":false},"isFallback":false,"isExperimentalCompile":false,"dynamicIds":["./components/community/Navbar/NavbarWidget.tsx","./components/community/Breadcrumb/BreadcrumbWidget.tsx","./components/customComponent/CustomComponent/CustomComponent.tsx","./components/blogs/BlogArticleWidget/BlogArticleWidget.tsx","./components/external/components/ExternalComponent.tsx","./components/messages/MessageView/MessageViewStandard/MessageViewStandard.tsx","./components/messages/ThreadedReplyList/ThreadedReplyList.tsx"],"appGip":true,"scriptLoader":[{"id":"analytics","src":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/pagescripts/1730819800000/analytics.js?page.id=BlogMessagePage&entity.id=board%3Asmallbasic&entity.id=message%3A336824","strategy":"afterInteractive"}]}