source: 2011/24/Heksa/FysiikkaMagneetti/Peli.cs @ 2013

Revision 2013, 2.2 KB checked in by tojukarp, 8 years ago (diff)

Magneetti Coulombin lailla

Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Effects;
7using Jypeli.Widgets;
8
9public class Peli : PhysicsGame
10{
11    PhysicsObject magneetti;
12    PhysicsObject rautapallo;
13
14    // Sähkövaraukset (coulombeja)
15    double MagneettiVaraus = -6.0;
16    double RautapalloVaraus = 0.2;
17
18    // Vakiot: tyhjiön permittiivisyys ja Coulombin lain kerroin
19    const double perm0 = 8.854e-12;
20    const double CoulombKerroin = 1 / ( 4 * Math.PI * perm0 );
21
22    public override void Begin()
23    {
24        TeeReunat();
25
26        magneetti = new PhysicsObject( 50, 50, Shape.Rectangle );
27        magneetti.Mass = Double.PositiveInfinity;
28        magneetti.X = -300;
29        magneetti.CanRotate = false;
30        magneetti.CollisionIgnoreGroup = 1;
31        Add( magneetti );
32
33        rautapallo = new PhysicsObject( 60, 60, Shape.Circle );
34        rautapallo.Color = Color.LightGray;
35        rautapallo.Mass = 500;
36        rautapallo.X = 300;
37        Add( rautapallo );
38
39        Timer magneettiAjastin = new Timer();
40        magneettiAjastin.Interval = 0.01;
41        magneettiAjastin.Trigger += new Timer.TriggerHandler( KaytaMagneettia );
42        magneettiAjastin.Start();
43
44        Mouse.ListenMovement( 0.01, SiirraMagneettia, null );
45    }
46
47    void TeeReunat()
48    {
49        PhysicsObject vasen = Level.CreateLeftBorder();
50        vasen.CollisionIgnoreGroup = 1;
51        PhysicsObject oikea = Level.CreateRightBorder();
52        oikea.CollisionIgnoreGroup = 1;
53        PhysicsObject yla = Level.CreateTopBorder();
54        yla.CollisionIgnoreGroup = 1;
55        PhysicsObject ala = Level.CreateBottomBorder();
56        ala.CollisionIgnoreGroup = 1;
57    }
58
59    void SiirraMagneettia( AnalogState siirto )
60    {
61        magneetti.Position += siirto.MouseMovement;
62    }
63
64    void KaytaMagneettia( Timer sender )
65    {
66        Vector d = rautapallo.Position - magneetti.Position;
67
68        if ( d == Vector.Zero )
69            return;
70
71        double voima = CoulombKerroin * MagneettiVaraus * RautapalloVaraus / Math.Pow( d.Magnitude, 2 );
72        rautapallo.Push( voima * d.Normalize() );
73    }
74}
Note: See TracBrowser for help on using the repository browser.