クラシック F-1 レーシングカーを描くに当たり、 ドライバーが細かいのでまず先にドライバーを作りました。 その後、そのドライバーのコードをクラシック F-1 レーシングカーのコードに埋め込みました。
Small Basic オンラインで実行したスクリーンショットを2つ以下に示します。
DrawDriver というサブルーチンが本体ですが、パラメーターとして中心の座標 (xo, yo) とドライバーヘルメットのサイズ size を渡しています。サブルーチンの中の座標、 サイズはこれらのパラメーターを元に計算しています。
' F-1 Driver ' Version 0.1.0 ' Copyright © 2020 Nonki Takahshi. The MIT License. ' Last update 2020-08-23 DrawGrid() xo = 300 yo = 200 size = 200 DrawDriver() Sub DrawDriver ' helmet GraphicsWindow.BrushColor = "Gold" GraphicsWindow.FillEllipse(xo - size / 2, yo - size / 2, size, size) GraphicsWindow.BrushColor = "DarkGreen" GraphicsWindow.FillEllipse(xo - size * 0.4, yo + size / 2, size * 0.8, size) GraphicsWindow.FillRectangle(xo - size * 0.4, yo + size, size * 0.8, size / 2) GraphicsWindow.BrushColor = "Peru" ' nose x1 = xo - size * 0.5 y1 = yo GraphicsWindow.FillRectangle(x1, y1, size * 0.2, size * 0.2) x2 = xo - size * 0.6 y2 = yo + size * 0.25 x3 = xo - size * 0.4 y3 = y2 ' face GraphicsWindow.FillTriangle(x1, y1, x2, y2, x3, y3) x = xo - size * 0.5 y = yo width = size * 0.2 height = size * 0.5 GraphicsWindow.FillEllipse(x, y, width, height) x = xo - size * 0.4 width = size * 0.4 GraphicsWindow.FillRectangle(x, y, width, height) ' helmet (side) GraphicsWindow.BrushColor = "Gold" GraphicsWindow.FillEllipse(xo - size * 0.2, yo - size / 2, size * 0.4, size) ' helmet peak GraphicsWindow.BrushColor = "Yellow" x1 = xo - size * 0.45 y1 = yo - size * 0.2 x2 = xo - size * 0.7 y2 = yo x3 = xo - size * 0.1 y3 = yo GraphicsWindow.FillTriangle(x1, y1, x2, y2, x3, y3) EndSub Sub DrawGrid gw = GraphicsWindow.Width gh = GraphicsWindow.Height fn = GraphicsWindow.FontName If (fn = "Tahoma") Or (fn = "Segoe UI") Then c10 = "#33000000" c100 = "#66000000" Else ' for SBO c10 = "#00000033" c100 = "#00000066" EndIf For x = 0 To gw Step 10 If Math.Remainder(x, 100) = 0 Then GraphicsWindow.PenColor = c100 Else GraphicsWindow.PenColor = c10 EndIf GraphicsWindow.DrawLine(x, 0, x, gh) EndFor For y = 0 To gh Step 10 If Math.Remainder(y, 100) = 0 Then GraphicsWindow.PenColor = c100 Else GraphicsWindow.PenColor = c10 EndIf GraphicsWindow.DrawLine(0, y, gw, y) EndFor EndSub
上記の DrawDriver を組み込んでレーシングカー全体を描画しています。
' Classic F-1 ' Version 0.1.0 ' Copyright © 2020 Nonki Takahshi. The MIT License. ' Last update 2020-08-23 DrawGrid() ' ground GraphicsWindow.BrushColor = "Gray" GraphicsWindow.FillRectangle(0, 400, gw, gh - 400) ' driver xo = 380 yo = 280 size = 50 DrawDriver() ' cockpit GraphicsWindow.PenColor = "Silver" GraphicsWindow.PenWidth = 20 GraphicsWIndow.DrawLine(490, 320, 580, 310) GraphicsWindow.BrushColor = "DarkGreen" x1 = 290 y1 = 310 x2 = 330 y2 = 290 x3 = 340 y3 = 310 GraphicsWindow.FillTriangle(x1, y1, x2, y2, x3, y3) GraphicsWindow.BrushColor = "Black" x = 410 y = 260 width = 20 height = 40 GraphicsWindow.FillEllipse(x, y, width, height) GraphicsWindow.FillEllipse(x, y + height, width, height) GraphicsWindow.BrushColor = "Silver" x = 420 y = 255 width = 10 GraphicsWindow.FillEllipse(x, y, width, width) y = 260 height = 60 GraphicsWindow.FillRectangle(x, y, width, height) GraphicsWindow.BrushColor = "DarkGreen" x = 440 y = 270 width = 60 height = 100 GraphicsWindow.FillEllipse(x, y, width, height) x1 = 430 y1 = 260 x2 = 430 y2 = 350 x3 = 470 y3 = 270 GraphicsWindow.FillTriangle(x1, y1, x2, y2, x3, y3) ' body GraphicsWindow.BrushColor = "DarkGreen" x = 50 y = 310 width = 480 height = 80 GraphicsWindow.FillEllipse(x, y, width, height) x = x + width / 2 width = 150 GraphicsWindow.FillRectangle(x, y, width, height) x = 340 y = 310 width = 200 GraphicsWindow.FillEllipse(x, y, width, height) ' tire xo = 200 yo = 350 size = 100 DrawTire() xo = 500 DrawTire() ' number xo = 370 yo = 345 size = 70 DrawNumber() Sub DrawDriver ' helmet GraphicsWindow.BrushColor = "Gold" GraphicsWindow.FillEllipse(xo - size / 2, yo - size / 2, size, size) GraphicsWindow.BrushColor = "DarkGreen" GraphicsWindow.FillEllipse(xo - size * 0.4, yo + size / 2, size * 0.8, size) GraphicsWindow.FillRectangle(xo - size * 0.4, yo + size, size * 0.8, size / 2) GraphicsWindow.BrushColor = "Peru" ' nose x1 = xo - size * 0.5 y1 = yo GraphicsWindow.FillRectangle(x1, y1, size * 0.2, size * 0.2) x2 = xo - size * 0.6 y2 = yo + size * 0.25 x3 = xo - size * 0.4 y3 = y2 ' face GraphicsWindow.FillTriangle(x1, y1, x2, y2, x3, y3) x = xo - size * 0.5 y = yo width = size * 0.2 height = size * 0.5 GraphicsWindow.FillEllipse(x, y, width, height) x = xo - size * 0.4 width = size * 0.4 GraphicsWindow.FillRectangle(x, y, width, height) ' helmet (side) GraphicsWindow.BrushColor = "Gold" GraphicsWindow.FillEllipse(xo - size * 0.2, yo - size / 2, size * 0.4, size) ' helmet peak GraphicsWindow.BrushColor = "Yellow" x1 = xo - size * 0.45 y1 = yo - size * 0.2 x2 = xo - size * 0.7 y2 = yo x3 = xo - size * 0.1 y3 = yo GraphicsWindow.FillTriangle(x1, y1, x2, y2, x3, y3) EndSub Sub DrawGrid gw = GraphicsWindow.Width gh = GraphicsWindow.Height fn = GraphicsWindow.FontName If (fn = "Tahoma") Or (fn = "Segoe UI") Then c10 = "#33000000" c100 = "#66000000" Else ' for SBO c10 = "#00000033" c100 = "#00000066" EndIf For x = 0 To gw Step 10 If Math.Remainder(x, 100) = 0 Then GraphicsWindow.PenColor = c100 Else GraphicsWindow.PenColor = c10 EndIf GraphicsWindow.DrawLine(x, 0, x, gh) EndFor For y = 0 To gh Step 10 If Math.Remainder(y, 100) = 0 Then GraphicsWindow.PenColor = c100 Else GraphicsWindow.PenColor = c10 EndIf GraphicsWindow.DrawLine(0, y, gw, y) EndFor EndSub Sub DrawNumber GraphicsWindow.BrushColor = "White" GraphicsWindow.FillEllipse(xo - size / 2, yo - size / 2, size, size) _size = size * 0.8 GraphicsWindow.FontSize = _size GraphicsWindow.BrushColor = "Black" GraphicsWindow.DrawText(xo - _size * 0.3, yo - size / 2, "8") EndSub Sub DrawTire GraphicsWindow.BrushColor = "#222222" GraphicsWindow.FillEllipse(xo - size / 2, yo - size / 2, size, size) _size = size * 0.5 GraphicsWindow.BrushColor = "Gold" GraphicsWindow.FillEllipse(xo - _size / 2, yo - _size / 2, _size, _size) GraphicsWindow.PenWidth = size * 0.1 GraphicsWindow.PenColor = "Silver" GraphicsWindow.DrawEllipse(xo - _size / 2, yo - _size / 2, _size, _size) EndSub