Реализовать процедуры 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

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 3.8 из 5
Похожие ответы