Реализовать процедуры Forward, Left, Right, PenUp, PenDown - VBA
Формулировка задачи:
Представим себе что в центре экрана сидит жучок, который может перемещаться по прямой на указанное расстояние, и перемещаться налево и направо. У жучка есть перо которое может оставлять след, повторяющий движения жучка. Если перо опущено след остаётся, если перо поднято следа нет. Итак, жучок может выполнять следущие приказы: Forward-переместиться на заданое расстояние; Left-повернуть налево на заданный угол; Right-повернуть направо на заданый угол; PenUp-поднять перо ; PenDown-опустить перо. Реализовать процедуры Forward, Left, Right, PenUp, PenDown. Процедуры должны взаимодействовать через глобальные переменные xPos, yPos-координаты жучка на экране; Pen-признак , говорящий о том поднято перо или опущенно; Angle--угол, который образует текущее направление перемещения жучка с осью абцисс. С помощью перечисленных процедур получить на экране фигуру составленную из 15 квадратов(см. рис.)
Решение задачи: «Реализовать процедуры Forward, Left, Right, PenUp, PenDown»
textual
Листинг программы
Option Explicit Private Type POINTAPI X As Long Y As Long End Type Private Declare Function FindWindow _ Lib "user32.dll" Alias "FindWindowA" ( _ ByVal lpClassName As String, _ ByVal lpWindowName As String) As Long Private Declare Function GetDC _ Lib "user32.dll" (ByVal hWnd As Long) As Long Private Declare Function CreatePen _ Lib "gdi32.dll" ( _ ByVal nPenStyle As Long, _ ByVal nWidth As Long, _ ByVal crColor As Long) As Long Private Declare Function SelectObject _ Lib "gdi32.dll" ( _ ByVal hDC As Long, _ ByVal hObject As Long) As Long Private Declare Function GetCursorPos _ Lib "user32.dll" (lpPoint As POINTAPI) As Long Private Declare Function SetCursorPos _ Lib "user32.dll" (ByVal X As Long, _ ByVal Y As Long) As Long Private Declare Function ScreenToClient _ Lib "user32.dll" ( _ ByVal hWnd As Long, _ lpPoint As POINTAPI) As Long Private Declare Function LineTo _ Lib "gdi32.dll" ( _ ByVal hDC As Long, _ ByVal X As Long, _ ByVal Y As Long) As Long Private Declare Function MoveToEx _ Lib "gdi32.dll" ( _ ByVal hDC As Long, _ ByVal X As Long, _ ByVal Y As Long, _ lpPoint As POINTAPI) As Long Private Declare Function ReleaseDC _ Lib "user32.dll" ( _ ByVal hWnd As Long, _ ByVal hDC As Long) As Long Private Declare Function DeleteObject _ Lib "gdi32.dll" (ByVal hObject As Long) As Long Private hWnd As Long Private hDC As Long Private hPen As Long Private hOldPen As Long Private iPoint As POINTAPI Public xPos As Long Public yPos As Long Public Pen As Boolean Public Angle As Double Private Sub Class_Initialize() xPos = 0 yPos = 0 Pen = False Angle = 0 End Sub Public Property Set OutputForm(frm As MSForms.UserForm) hWnd = FindWindow("ThunderDFrame", frm.Caption) hDC = GetDC(hWnd) hPen = CreatePen(1, 2, vbRed) SelectObject hDC, hPen Call MoveToEx(hDC, xPos, yPos, iPoint) End Property Public Sub Forward(Value As Long) xPos = xPos + CLng(Value * Cos(Angle)) yPos = yPos - CLng(Value * Sin(Angle)) If Pen Then Call LineTo(hDC, xPos, yPos) Else Call MoveToEx(hDC, xPos, xPos, iPoint) End If End Sub Public Sub Left(Value As Double) Angle = Angle + Value End Sub Public Sub Right(Value As Double) Angle = Angle - Value End Sub Public Sub PenDown() Pen = True End Sub Public Sub PenUp() Pen = False End Sub Private Sub Class_Terminate() 'ReleaseDC hWnd, hDC DeleteObject hPen End Sub
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д