@shlomil/turtlejs
Version:
A feature-rich JavaScript implementation of turtle graphics inspired by Python's turtle module
172 lines (158 loc) • 5.63 kB
TypeScript
// Type definitions for turtlejs
// Project: https://github.com/shlomil/turtlejs
// Definitions by: Shlomi Loubaton
export interface TurtleOptions {
canvas?: HTMLCanvasElement;
width?: number;
height?: number;
background?: string;
startX?: number;
startY?: number;
startAngle?: number;
speed?: number;
}
export interface ScreenOptions {
canvas?: HTMLCanvasElement;
width?: number;
height?: number;
background?: string;
}
export interface Vector {
x: number;
y: number;
}
export interface Font {
family?: string;
size?: number;
weight?: string;
style?: string;
}
export class Turtle {
constructor(options?: TurtleOptions);
// Movement methods
forward(distance: number): Promise<void>;
fd(distance: number): Promise<void>;
backward(distance: number): Promise<void>;
bk(distance: number): Promise<void>;
back(distance: number): Promise<void>;
right(angle: number): Promise<void>;
rt(angle: number): Promise<void>;
left(angle: number): Promise<void>;
lt(angle: number): Promise<void>;
goto(x: number, y: number): Promise<void>;
setpos(x: number, y: number): Promise<void>;
setposition(x: number, y: number): Promise<void>;
teleport(x: number, y: number): void;
setx(x: number): Promise<void>;
sety(y: number): Promise<void>;
setheading(angle: number): Promise<void>;
seth(angle: number): Promise<void>;
home(): Promise<void>;
circle(radius: number, extent?: number, steps?: number): Promise<void>;
// Pen control
pendown(): void;
pd(): void;
down(): void;
penup(): void;
pu(): void;
up(): void;
pensize(width: number): void;
width(width: number): void;
pencolor(color: string | [number, number, number]): void;
fillcolor(color: string | [number, number, number]): void;
begin_fill(): void;
end_fill(): Promise<void>;
// State methods
hideturtle(): void;
ht(): void;
showturtle(): void;
st(): void;
isvisible(): boolean;
speed(speed: number): void;
// Advanced methods
write(text: string, move?: boolean, align?: string, font?: Font | string): Promise<void>;
dot(size?: number, color?: string | [number, number, number]): Promise<void>;
stamp(): number;
clearstamp(stampId: number): void;
clearstamps(n?: number): void;
undo(): Promise<void>;
// Position and state information
position(): Vector;
pos(): Vector;
xcor(): number;
ycor(): number;
heading(): number;
distance(x: number, y: number): number;
towards(x: number, y: number): number;
}
export class Screen {
constructor(options?: ScreenOptions);
bgcolor(color: string | [number, number, number]): void;
clear(): void;
reset(): void;
getcanvas(): HTMLCanvasElement;
getcontext(): CanvasRenderingContext2D;
onclick(x: number, y: number, func: (x: number, y: number) => void): void;
onkey(func: () => void, key: string): void;
listen(): void;
tracer(n: number): void;
update(): void;
delay(ms: number): void;
bye(): void;
exitonclick(): void;
}
// Global functions
export function createTurtle(options?: TurtleOptions): Turtle;
export function createScreen(options?: ScreenOptions): Screen;
export function export_turtle_globals(): void;
// Global turtle functions
export function forward(distance: number): Promise<void>;
export function fd(distance: number): Promise<void>;
export function backward(distance: number): Promise<void>;
export function bk(distance: number): Promise<void>;
export function back(distance: number): Promise<void>;
export function right(angle: number): Promise<void>;
export function rt(angle: number): Promise<void>;
export function left(angle: number): Promise<void>;
export function lt(angle: number): Promise<void>;
export function goto(x: number, y: number): Promise<void>;
export function setpos(x: number, y: number): Promise<void>;
export function setposition(x: number, y: number): Promise<void>;
export function teleport(x: number, y: number): void;
export function setx(x: number): Promise<void>;
export function sety(y: number): Promise<void>;
export function setheading(angle: number): Promise<void>;
export function seth(angle: number): Promise<void>;
export function home(): Promise<void>;
export function circle(radius: number, extent?: number, steps?: number): Promise<void>;
export function pendown(): void;
export function pd(): void;
export function down(): void;
export function penup(): void;
export function pu(): void;
export function up(): void;
export function pensize(width: number): void;
export function width(width: number): void;
export function pencolor(color: string | [number, number, number]): void;
export function fillcolor(color: string | [number, number, number]): void;
export function begin_fill(): void;
export function end_fill(): Promise<void>;
export function hideturtle(): void;
export function ht(): void;
export function showturtle(): void;
export function st(): void;
export function isvisible(): boolean;
export function speed(speed: number): void;
export function write(text: string, move?: boolean, align?: string, font?: Font | string): Promise<void>;
export function dot(size?: number, color?: string | [number, number, number]): Promise<void>;
export function stamp(): number;
export function clearstamp(stampId: number): void;
export function clearstamps(n?: number): void;
export function undo(): Promise<void>;
export function position(): Vector;
export function pos(): Vector;
export function xcor(): number;
export function ycor(): number;
export function heading(): number;
export function distance(x: number, y: number): number;
export function towards(x: number, y: number): number;