source: 2017/30/MikkoH/Sq/Sq/Sq/Sq.cs @ 9286

Revision 9286, 2.3 KB checked in by mianhayr, 23 months ago (diff)
Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4
5public class Sq : PhysicsGame
6{
7    List<Vector> ps, crc;
8    double rad = 50, radc = 0.01, mag = 4;
9
10    public override void Begin()
11    {
12        Window.Width = 1200; Window.Height = 800;
13        Mouse.IsCursorVisible = true;
14        Level.Background.Color = Color.Black;
15
16        ps = CreateSquare(100, 10);
17        crc = CreateCircle(50, 150);
18    }   
19
20    // s = length of side, d = distance between pts
21    List<Vector> CreateSquare(int s, int d)
22    {
23        List<Vector> sq = new List<Vector>();
24        for (int i = -s; i <= s; i += d) sq.Add(new Vector(-s, i));
25        for (int i = -s; i <= s; i += d) sq.Add(new Vector(i, s));
26        for (int i = s; i >= -s; i -= d) sq.Add(new Vector(s, i));
27        for (int i = s; i >= -s; i -= d) sq.Add(new Vector(i, -s));
28        return sq;
29    }
30
31    // r = radius, n = number of pts
32    List<Vector> CreateCircle(int r, int n)
33    {
34        List<Vector> crc = new List<Vector>();
35        for (int i = 0; i <= n; i++)
36            crc.Add(new Vector(Math.Sin(i) * r, Math.Cos(i) * r));
37        return crc;
38    }
39
40    void Rotate(List<Vector> vs, bool reverse = false)
41    {
42        double d = Time.SinceLastUpdate.TotalSeconds;
43        if (reverse) d = -d;
44        for (int i = 0; i < vs.Count; i++)
45            vs[i] = new Vector(vs[i].X * Math.Cos(-d) - vs[i].Y * Math.Sin(-d),
46                               vs[i].X * Math.Sin(-d) + vs[i].Y * Math.Cos(-d));
47    }
48
49    protected override void Paint(Canvas c)
50    {
51        c.BrushColor = Color.Red;
52
53        for (int i = 0; i < ps.Count; i++)
54        {
55            c.DrawLine(ps[i % ps.Count], ps[(i + ps.Count / 4) % ps.Count]);
56            ps[i] = Vector.FromLengthAndAngle(ps[i].Magnitude + mag, ps[i].Angle);
57            if (ps[i].Magnitude < 1 || ps[i].Magnitude > 300)
58                mag = -mag;
59        }
60
61        c.BrushColor = Color.Blue;
62
63        for (int i = 0; i < crc.Count; i++)
64        {
65            c.DrawLine(crc[i % crc.Count], crc[(i + 2) % crc.Count]);
66            crc[i] = new Vector(Math.Sin(i) * rad, Math.Cos(i) * rad);
67            if (rad < 1 || rad > 100) radc = -radc;
68            rad -= radc;
69        }
70
71        Rotate(ps); Rotate(crc, true);
72
73        base.Paint(c);
74    }
75}
Note: See TracBrowser for help on using the repository browser.