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

Revision 9289, 3.5 KB checked in by mianhayr, 2 years ago (diff)

Square omaan luokkaan, osaa kasvaa, pienentyä, poistua ja luoda uusia mutta vähän miten sattuu

Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4
5public class Sq : PhysicsGame
6{
7    //List<Vector> ps, crc;
8    //int initsqmag = 50, initsqdist = 2; //killSwitch = 1;
9    //double rad = 50, radc = 0.01;
10
11    List<Square> sqs = new List<Square>();
12
13    public override void Begin()
14    {
15        Level.Width = Level.Height = Window.Width = Window.Height = 800;
16        Mouse.IsCursorVisible = true;
17        Level.Background.Color = Color.Black;
18
19        sqs.Add(new Square(100, 5));
20        //crc = CreateCircle(rad, pts);
21    }   
22
23    // r = radius, n = number of pts
24    List<Vector> CreateCircle(double r, double n)
25    {
26        List<Vector> crc = new List<Vector>();
27        for (int i = 0; i <= n; i++)
28            crc.Add(new Vector(Math.Sin(i) * r, Math.Cos(i) * r));
29        return crc;
30    }
31
32    void Rotate(List<Vector> vs, bool reverse = false)
33    {
34        double d = Time.SinceLastUpdate.TotalSeconds;
35        if (reverse) d = -d;
36        for (int i = 0; i < vs.Count; i++)
37            vs[i] = new Vector(vs[i].X * Math.Cos(-d) - vs[i].Y * Math.Sin(-d),
38                               vs[i].X * Math.Sin(-d) + vs[i].Y * Math.Cos(-d));
39    }
40
41    protected override void Paint(Canvas c)
42    {
43        c.BrushColor = Color.Red;
44
45        // checks if squeeze direction should be reversed
46        // merging this into the above loop will fuck everything up
47        // also tries to create new squares
48        for (int i = 0; i < sqs.Count; i++)
49        {
50            for (int j = 0; j < sqs[i].Count; j++)
51                if (sqs[i][j].Magnitude < sqs[i].minmag)
52                {
53                    Square newsq = new Square(sqs[i].Count - 1, sqs[i].dist + 1);
54                    //newsq.mag = sqs[i][j].Magnitude;
55                    sqs.Add(newsq);
56                    sqs.Remove(sqs[i]);
57                    //sqs[i].magc = -sqs[i].magc;
58                    break;
59                }
60                else if (sqs[i][j].Magnitude > sqs[i].maxmag)
61                {
62                    sqs[i].magc = -sqs[i].magc;
63                    break;
64                }
65        }
66
67        // draws and squeezes the square
68        foreach (Square sq in sqs)
69            for (int i = 0; i < sq.Count; i++)
70            {
71                c.DrawLine(sq[i % sq.Count], sq[(i + sq.Count / 4) % sq.Count]);
72                sq[i] = Vector.FromLengthAndAngle(sq[i].Magnitude + sq.magc, sq[i].Angle);                     
73            }
74
75       
76           
77        c.BrushColor = Color.Blue;
78
79        // draws and squeezes the circle
80        //for (int i = 0; i < crc.Count; i++)
81        //{
82        //    c.DrawLine(crc[i % crc.Count], crc[(i + 2) % crc.Count]);
83        //    crc[i] = new Vector(Math.Sin(i) * rad, Math.Cos(i) * rad);
84        //    if (rad < minrad || rad > maxrad) radc = -radc;
85        //    rad -= radc;
86        //}
87
88        foreach (List<Vector> ps in sqs) Rotate(ps);/* Rotate(crc, true);*/
89
90        base.Paint(c);
91    }
92}
93
94class Square : List<Vector>
95{
96    public double dist = 5, mag = 100, minmag = 5, maxmag = 300, magc = 2;
97
98    public Square(double s, double d)
99    {
100        for (double i = -s; i <= s; i += d) Add(new Vector(-s, i));
101        for (double i = -s; i <= s; i += d) Add(new Vector(i, s));
102        for (double i = s; i >= -s; i -= d) Add(new Vector(s, i));
103        for (double i = s; i >= -s; i -= d) Add(new Vector(i, -s));
104        mag = s; dist = d; minmag = 5; maxmag = mag * 2;
105    }
106}
Note: See TracBrowser for help on using the repository browser.