โก Helps: "..., grant me the serenity to accept the things I cannot change, the courage to change the things I can, and the wisdom to know the difference."
As a beginner who wants to write a spirograph program I want to draw a wheel-shape that is transparent, such that the user can see the Spirograph plot which is drawn behind the wheel.
Solution: Windows Colors provide a fourth alpha channel value, which is made for this.
As a C# beginner I want to a Turtle command that makes it possible for a user to input a text. I need this for my first computer game I want to code with woopec
Solution
Implement something like the textinput and numinput functions in python-turtle
As a programmer who wants to draw a spirograph I use two "turtles": One draws the spirograph plot, the second is the sprirograph-wheel. These two wheels must be in sync.
Solution: New Method Turtle.WaitForCompletedMovementOf(otherTurtle)
User Story: As a programmer, I would like the Woopec WPF window to be placed in the same position during debugging as it was during the previous debugging so that I can easily see WPF window and VS debugger side by side.
As a programming-beginner it is sometimes hard for me to work with the default coordinate system, where the point 0,0 is in the middle of the screen. Therefore: As a programming-beginner I want to specify the coordinates of the corners of the screen.
Solution: Implement something like python's turtle.setworldcoordinates
If the user has written a woopec-program and tries to debug it, the behaviour is not as excpected. For Instance:
Program has one line of code turte.Forward(100)
The user puts a breakpoint on this line, starts the debugger, the debugger stops at the breakpoint, the user executes debug-step over.
The user expects to see the turtle moving 100 pixels
But nothing happens.
The reason for this: The movement is implemented with an WPF-animation, which runs in a second thread. Because of debugging this second thread is stopped and the animation is not started.
Solution
In Debug-mode: Start two processes:
One process executes the turtle commands and can debugged by the user. (This process only uses .NET 6)
In background start a second process, that draws the woopec-commands on screen. (This process uses WPF).
As a turtle-developer I want to use turtle commands to create a new shape. For instance: I would like to draw a hexagon with turtle commands. Then I want to transform this hexagon into a shape. And after that I want to create a new "turtle", that has this hexagon shape.
Solution: New methods similar to python-turtle BeginPoly, EndPoly.
Woopec.core: Contains all Turtle-Commands, is written with .NET 6, therefore usable on Windows, Linux, Max.
Woopec.wpf: This is the viewer-part of woopec that show the turtle-graphics. Woopec.Wpf is implemented with WPF. Therefore it is only usable an Windows Computers.
Because of this, at the moment Woopec is only usable on Windows-Computers.
Solution Ideas
AvaloniaUI
Blazor
JavaScript and SignalR
Important use cases
The example Woopec.Core.Examples.FeaturesDemo.Run(); contains many features of Woopec. If this example behaves on Linux and MacOS in the same way as it behaves on Windows with WPF (TurtleWpf), a great deal has been achieved.
To make debugging of Woopec programs easier for novice programmers, there is a little magic for this. Details can be found in file .\TurtleCore\InternalDocumentation\003_TwoProcessesForBetterDebugging.md. It is important that this also works on MaxOS and Linux.
As a turtle-user I want to use the acutal turtle as a "stamp" which stamps the acutal shape of the turtle on the screen. For instance: The turtle has a hexgon-shape. I can move the turtle to a point on screen and stamp the hexagon to this point on screen.
Solution: Methods similar to python turtle's Stamp and ClearStamp methods