Microsoft Small Basic

Program Listing:
Embed this in your website
' 3-D Dice
' Version 0.1
' Copyright © 2016 Nonki Takahashi. The MIT License.

title = "3-D Dice 0.1 - Hit any key to continue."
GraphicsWindow.Title = title
Init()
While "True"
  eye = Math.GetRandomNumber(6)
  a1 = face[eye]["a"]
  eye = Math.GetRandomNumber(6)
  a2 = face[eye]["a"]
  For k = 200 To 0 Step -5
    GraphicsWindow.Clear()
    a = (k + a1)
    b = 2 * (k + a1)
    c = -(k + a1)
    ox = gw / 2 - scale * 2
    DrawDice()
    a = (k + a2)
    b = 2 * (k + a2)
    c = -(k + a2)
    ox = gw / 2 + scale * 2
    DrawDice()
    Program.Delay(30)
  EndFor
  keyDown = "False"
  While Not[keyDown]
    Program.Delay(100)
  EndWhile
EndWhile
Sub Init
  Not = "False=True;True=False;"
  gw = 598
  gh = 428
  GraphicsWindow.Width = gw
  GraphicsWindow.Height = gh
  ox = gw / 2
  oy = gh / 2
  scale = 20
  pw = 3
  GraphicsWindow.PenWidth = pw
  ' vertices - coordinates
  v[1] = "x=-1;y=-1;z=-1;"
  v[2] = "x=-1;y=-1;z=1;"
  v[3] = "x=-1;y=1;z=-1;"
  v[4] = "x=-1;y=1;z=1;"
  v[5] = "x=1;y=-1;z=-1;"
  v[6] = "x=1;y=-1;z=1;"
  v[7] = "x=1;y=1;z=-1;"
  v[8] = "x=1;y=1;z=1;"
  ' faces - set of edges and angle to appear
  face[1] = "1=24;2=48;3=86;4=62;x=0;y=0;z=1;a=0;"
  face[2] = "1=34;2=48;3=78;4=37;x=0;y=1;z=0;a=270;"
  face[3] = "1=56;2=86;3=78;4=75;x=1;y=0;z=0;a=135;"
  face[4] = "1=12;2=24;3=34;4=13;x=-1;y=0;z=0;a=225;"
  face[5] = "1=12;2=62;3=56;4=51;x=0;y=-1;z=0;a=90;"
  face[6] = "1=13;2=37;3=75;4=51;x=0;y=0;z=-1;a=180;"
  ' dots - coordinates and colors
  d[1][1] = "x=0;y=0;z=1;f=1;color=Red;"
  d[2][1] = "x=-0.5;y=1;z=0.5;"
  d[2][2] = "x=0.5;y=1;z=-0.5;"
  d[3][1] = "x=1;y=-0.5;z=0.5;"
  d[3][2] = "x=1;y=0;z=0;"
  d[3][3] = "x=1;y=0.5;z=-0.5;"
  d[4][1] = "x=-1;y=-0.5;z=-0.5;"
  d[4][2] = "x=-1;y=-0.5;z=0.5;"
  d[4][3] = "x=-1;y=0.5;z=-0.5;"
  d[4][4] = "x=-1;y=0.5;z=0.5;"
  d[5][1] = "x=-0.5;y=-1;z=-0.5;"
  d[5][2] = "x=-0.5;y=-1;z=0.5;"
  d[5][3] = "x=0;y=-1;z=0;"
  d[5][4] = "x=0.5;y=-1;z=-0.5;"
  d[5][5] = "x=0.5;y=-1;z=0.5;"
  d[6][1] = "x=-0.5;y=-0.5;z=-1;"
  d[6][2] = "x=-0.5;y=0;z=-1;"
  d[6][3] = "x=-0.5;y=0.5;z=-1;"
  d[6][4] = "x=0.5;y=-0.5;z=-1;"
  d[6][5] = "x=0.5;y=0;z=-1;"
  d[6][6] = "x=0.5;y=0.5;z=-1;"
  GraphicsWindow.KeyDown = OnKeyDown
EndSub
Sub OnKeyDown
  keyDown = "True"
EndSub
Sub DrawDice
  GraphicsWindow.PenColor = "LightGray"
  edge = ""
  f = ""
  For j = 1 To 6
    x = face[j]["x"]
    y = face[j]["y"]
    z = face[j]["z"]
    Mapping()
    If "1E-5" < z Then
      For i = 1 To j
        GraphicsWindow.BrushColor = d[j][i]["color"]
        x = d[j][i]["x"]
        y = d[j][i]["y"]
        z = d[j][i]["z"]
        Mapping()
        GraphicsWindow.FillEllipse(x - pw / 2, y - pw / 2 , pw, pw)
      EndFor
      n = 4
      For i = 1 To 4
        ' edges
        edge[face[j][i]] = 1
      EndFor
    EndIf
    n = Array.GetItemCount(edge)
    iEdge = Array.GetAllIndices(edge)
    For i = 1 To n
      v1 = Text.GetSubText(iEdge[i], 1, 1)
      v2 = Text.GetSubText(iEdge[i], 2, 1)
      x = v[v1]["x"]
      y = v[v1]["y"]
      z = v[v1]["z"]
      Mapping()
      x1 = x
      y1 = y
      x = v[v2]["x"]
      y = v[v2]["y"]
      z = v[v2]["z"]
      Mapping()
      x2 = x
      y2 = y
      GraphicsWindow.DrawLine(x1, y1, x2, y2)
    EndFor
  EndFor
EndSub
Sub Mapping
  ' param x, y, z - point to map
  ' param a - angle around x axis
  ' param b - angle around y axis
  ' param c - angle around z axis
  _a = Math.GetRadians(a)
  _y = y
  _z = z
  y = Math.Cos(_a) * _y - Math.Sin(_a) * _z
  z = Math.Sin(_a) * _y + Math.Cos(_a) * _z
  _b = Math.GetRadians(b)
  _z = z
  _x = x
  z = Math.Cos(_b) * _z - Math.Sin(_b) * _x
  x = Math.Sin(_b) * _z + Math.Cos(_b) * _x
  _c = Math.GetRadians(c)
  _x = x
  _y = y
  x = Math.Cos(_c) * _x - Math.Sin(_c) * _y
  y = Math.Sin(_c) * _x + Math.Cos(_c) * _y
  x = ox + x * scale
  y = oy - y * scale
EndSub
Copyright (c) Microsoft Corporation. All rights reserved.