Make(cnet) ver(4.05 build 186) Add(EntryPoint,2953706,21,91) { Width=600 Height=486 Name="form" Point(doText) link(onCreate,16691314:Init,[(110,97)(110,132)]) link(onError,8850550:doShow,[]) } Add(ChildPanel,14881735,21,133) { link(onStart,6209797:doStart,[]) link(onPause,6209797:doStop,[]) link(onAdd,11434816:doEvent1,[(108,153)(108,146)]) } BEGIN_SDK Add(EditMultiEx,7262842,21,21) { EventCount=#7:onStart|7:onPause|5:onAdd| Width=377 Height=235 } Add(Panel,11208121,42,35) { Left=410 Top=5 Width=175 Height=440 Anchor=11 BorderStyle=2 Point(onPaint) } Add(Button,484349,112,119) { Left=50 Top=75 Text="Start" Point(onClick) Point(doText) Point(doFocus) link(onClick,1567760:doOperation,[]) } Add(Math,1567760,154,119) { OpType=8 Op2=Integer(1) TypeOp1=2 TypeOp2=2 Default=Integer(0) link(onResult,2128002:doValue,[]) link(Op1,10683832:Var1,[(160,107)(197,107)(197,165)]) } Add(IndexToChannel,13333430,252,119) { link(Index,10683832:Var3,[(258,107)(247,107)(247,165)]) link(onEvent1,3181886:doEvent1,[(292,125)(292,111)]) link(onEvent2,15277018:doEvent1,[]) } Add(Hub,3181886,301,105) { link(onEvent1,7262842:onStart,[(357,111)(357,27)]) link(onEvent2,2232366:doData,[(332,118)(332,174)]) } Add(DoData,2232366,343,168) { Data=String(Pause) link(onEventData,7746402:doWork2,[]) } Add(DoData,8437551,343,210) { Data=String(Start) link(onEventData,7746402:doWork3,[(387,216)]) } Add(Hub,15277018,301,126) { link(onEvent1,7262842:onPause,[(365,132)(365,34)]) link(onEvent2,8437551:doData,[(328,139)(328,216)]) } Add(HubEx,7746402,383,168) { Angle=3 link(onEvent,484349:doText,[(387,157)(102,157)(102,125)]) } Add(Memory,2128002,210,119) { Default=Integer(1) link(onData,13333430:doEvent,[]) } Add(Button,12784538,308,35) { Left=50 Top=30 Text="Add" Point(onClick) link(onClick,7262842:onAdd,[]) } Add(GetDataEx,10683832,210,160) { link(Data,2128002:Value,[]) } END_SDK Add(Timer,6209797,70,133) { Interval=10 link(onTick,16691314:Work,[]) } Add(ChildPanel,16691314,147,126) { } BEGIN_SDK Add(EditMultiEx,15986482,21,21) { WorkCount=#4:Init|4:Work|3:Add| VarCount=#5:Count| Width=601 Height=459 VOffset=49 link(Init,10550807:doData,[(262,76)(262,125)]) link(Work,2732540:doInvalidate,[(31,83)(31,111)]) link(Add,12906805:doEvent1,[(25,90)(25,195)]) link(Count,7562725:Var1,[(27,237)]) } Add(Graphics,10534163,217,112) { @Color=11184895 Name="gr" Point(doClear) } Add(Panel,2732540,42,105) { Left=5 Top=5 Width=390 Height=440 Anchor=15 Name="panel" BorderStyle=2 Point(onMouseMove) Point(onPaint) Point(doInvalidate) Point(Control) link(onPaint,2598157:doGetMethod,[]) } Add(DoData,13494876,175,119) { @Color=11184895 link(onEventData,10534163:doClear,[]) link(Data,10788866:Color,[]) } Add(Color,10788866,175,77) { @Color=11184895 Color=-16777201 } Add(Hub,9625112,140,112) { @Color=11184895 OutCount=4 link(onEvent1,10534163:doGraphics,[]) link(onEvent2,13494876:doData,[]) link(onEvent3,8048431:doCollisions,[(172,132)(172,160)]) link(onEvent4,14206820:doFor,[(161,139)(161,258)]) } Add(FieldRead,15347870,245,364) { @Color=16777130 Name="ClientSize.Width" link(Object,4909091:Var2,[]) } Add(FieldRead,8445518,287,364) { @Color=16777130 Name="ClientSize.Height" link(Object,4909091:Var3,[(293,355)]) } Add(GetDataEx,4909091,245,350) { link(Data,2732540:Control,[(251,319)(55,319)]) } Add(ControlMethods,3401653,329,119) { @Color=11206570 Control="panel" Point(doSetStyle) Point(value) Point(flags) link(flags,4711389:ControlStyles,[]) } Add(ControlStyles,4711389,336,77) { @Color=11206570 ControlStyles=18432 } Add(DoData,10550807,287,119) { @Color=11206570 Data=Integer(1) link(onEventData,3401653:doSetStyle,[]) } Add(Hub,8585494,308,252) { @Color=16755455 OutCount=4 link(onEvent1,4063506:##select,[(499,258)(499,209)]) link(onEvent2,15231199:doData,[]) link(onEvent3,8809309:doFillEllipse2,[(482,272)(482,405)]) link(onEvent4,12768124:doReflections,[(329,279)(329,433)]) } Add(For,14206820,266,252) { @Color=16755455 IncludeEnd=1 Extern=1 link(onEvent,8585494:doEvent1,[]) link(End,7562725:Var2,[]) } Add(Memory,12772618,553,301) { @Color=11206655 Default=Real(10) } Add(GetDataEx,10153638,525,378) { Angle=1 link(Data,10047018:Result,[(559,383)]) } Add(InfoTip,12901135,231,322) { Info=#10:Reflection| Frame=3 Width=155 Height=151 Margin=5 } Add(InfoTip,8341742,231,203) { Info=#11:Enumeration| Frame=3 Width=155 Height=102 Margin=5 } Add(InfoTip,4265200,392,28) { Info=#7:Drawing| Frame=3 Width=218 Height=445 Margin=5 } Add(InfoTip,5739093,266,28) { Info=#15:DoubleBuffering| Frame=3 Width=120 Height=158 Margin=5 } Add(InfoTip,12670051,84,28) { Info=#8:Cleaning| Frame=3 Width=176 Height=158 Margin=5 } Add(Random,10321965,427,56) { @Color=11206655 Constructor=1 Seed=11 link(Max,4695483:Var3,[(440,47)(417,47)(417,411)]) } Add(Random,5383811,469,56) { @Color=11206655 Constructor=1 Seed=63 link(Max,6881604:Var3,[(482,43)(409,43)(409,404)]) } Add(Random,5412147,511,56) { @Color=11206655 Point(NextDouble) } Add(MultiElementEx,4063506,504,196) { @Color=11206655 link(x,10321965:Next,[(510,135)(433,135)]) link(y,5383811:Next,[(517,132)(475,132)]) link(width,11339292:Var2,[]) link(height,11339292:Var3,[(531,187)]) link(color,10074071:Color,[(538,188)(566,188)]) } BEGIN_SDK Add(EditMultiEx,7936073,21,21) { WorkCount=#5:##add|8:##select|0:| VarCount=#5:.Left|4:.Top|6:color1|10:##instance|6:##type|7:##count|6:##list| DataCount=#1:x|1:y|5:width|6:height|5:color| Width=69 Height=60 VOffset=14 HOffset=14 Point(##add) Point(##select) Point(##instance) Point(##type) Point(##count) Point(##list) link(##add,13436424:doConstructor,[]) link(.Left,13436424:x,[]) link(.Top,13436424:y,[]) link(color1,13436424:color,[]) link(##instance,13436424:instance,[]) link(##type,13436424:ClassName,[]) } Add(ClassContainer,13436424,35,35) { link(p1,7936073:x,[]) link(p2,7936073:y,[]) link(p3,7936073:width,[]) link(p4,7936073:height,[]) link(p5,7936073:color,[]) } BEGIN_SDK Add(EditMultiEx,9078725,21,21) { WorkCount=#13:doConstructor| VarCount=#1:x|1:y|5:color|8:instance|9:ClassName| DataCount=#2:p1|2:p2|2:p3|2:p4|2:p5| Width=377 Height=193 VOffset=35 HOffset=77 link(doConstructor,6923762:doConstructor,[]) link(x,16481593:Field,[(104,182)(363,182)]) link(y,10696224:Field,[(111,186)(321,186)]) link(color,3227511:Field,[(118,196)(195,196)]) link(instance,13771157:UserClass,[]) link(ClassName,13771157:ClassName,[]) } Add(UserClass,13771157,112,133) { Using=#14:System.Drawing| ClassName="Ball" AccessModifier=1 } Add(UserConstructor,6923762,98,56) { AccessModifier=1 Params=5 Types=#6:double|6:double|6:double|6:double|5:Color| link(onBody,16036810:doEvent1,[]) link(a1,9078725:p1,[]) link(a2,9078725:p2,[]) link(a3,9078725:p3,[]) link(a4,9078725:p4,[]) link(a5,9078725:p5,[]) } Add(Hub,16036810,147,56) { OutCount=5 link(onEvent1,16481593:doSet,[(342,62)(342,111)]) link(onEvent2,10696224:doSet,[(302,69)(302,118)]) link(onEvent3,5592832:doSet,[(256,76)(256,125)]) link(onEvent4,13546854:doSet,[(216,83)(216,132)]) link(onEvent5,3227511:doSet,[(171,90)(171,139)]) } Add(UserField,16481593,350,105) { Name="X" AccessModifier=1 Type="double" link(Value,6923762:v1,[(356,97)(104,97)]) } Add(UserField,10696224,308,112) { Name="Y" AccessModifier=1 Type="double" link(Value,6923762:v2,[(314,100)(111,100)]) } Add(UserField,5592832,266,119) { Name="dx" AccessModifier=1 Type="double" link(Value,6923762:v3,[(272,103)(118,103)]) } Add(UserField,13546854,224,126) { Name="dy" AccessModifier=1 Type="double" link(Value,6923762:v4,[(230,107)(125,107)]) } Add(UserField,3227511,182,133) { Name="color" AccessModifier=1 Type="Color" link(Value,6923762:v5,[(188,111)(132,111)]) } END_SDK END_SDK Add(PaintEventArgs,2598157,98,112) { @Color=11184895 link(onGraphics,9625112:doEvent1,[]) } Add(Color,10074071,560,147) { @Color=11206655 Point(doFromArgb4) Point(alpha) Point(blue_) Point(green_) Point(red_) Point(onFromArgb) link(alpha,1263831:Var2,[]) link(blue_,6759737:Var2,[]) link(green_,1397804:Var2,[]) link(red_,1397804:Var3,[(587,131)]) } Add(Random,8192191,553,56) { @Color=11206655 Max=255 Point(Next2) } Add(GetDataEx,1263831,560,126) { link(Data,8192191:Next2,[]) } Add(GetDataEx,1397804,574,126) { Angle=3 link(Data,6759737:Var3,[]) } Add(GetDataEx,6759737,567,126) { Angle=3 link(Data,1263831:Var3,[]) } Add(DoData,15231199,518,259) { @Color=11206655 link(onEventData,6450741:doColor,[]) link(Data,4063506:color1,[]) } Add(Hub,12906805,469,189) { @Color=11206655 link(onEvent1,10074071:doFromArgb4,[(497,195)(497,153)]) link(onEvent2,4063506:##add,[]) } Add(FillEllipse,8809309,490,392) { @Color=11206655 Graphics="gr" Brush="br" Point(doFillEllipse2) Point(x) Point(y) Point(width) Point(height) link(x,2260508:Result,[]) link(y,7502398:Result,[]) link(width,10153638:Var1,[(524,383)]) link(height,10153638:Var2,[]) } Add(SolidBrush,6450741,560,259) { @Color=11206655 Name="br" Color=255 Point(.Color) Point(doColor) } Add(Inline,8048431,434,154) { @Hint=#21:Calculates collisions| @Color=11206655 WorkPoints=#12:doCollisions| DataPoints=#4:Data| Code="private void doWork(object data, int index) {\r\n List balls = sys.Data;\r\n // просчитываем соударения шаров\r\n for (int i = 0; i < balls.Count - 1; i++)\r\n {\r\n for (int j = i + 1; j < balls.Count; j++)\r\n {\r\n //расстояние между центрами шаров\r\n double dist = Math.Sqrt(Math.Pow(balls[i].X - balls[j].X, 2.0D) + Math.Pow(balls[i].Y - balls[j].Y, 2.0D));\r\n //если расстояние меньше диаметра, значит есть факт соударения\r\n if (dist < 10)\r\n {\r\n //вспомогательные переменные\r\n double a = balls[i].X - balls[j].X;\r\n double b = balls[i].Y - balls[j].Y;\r\n double p1 = a * b / Math.Pow(dist, 2.0D);\r\n double p2 = Math.Pow(a / dist, 2.0D);\r\n double p3 = Math.Pow(b / dist, 2.0D);\r\n double d1 = balls[i].dy * p1 + balls[i].dx * p2 - balls[j].dy * p1 - balls[j].dx * p2;\r\n double d2 = balls[i].dx * p1 + balls[i].dy * p3 - balls[j].dx * p1 - balls[j].dy * p3;\r\n //меняем значение приращения координаты шаров при движении\r\n balls[i].dx = balls[i].dx - d1;\r\n balls[i].dy = balls[i].dy - d2;\r\n balls[j].dx = balls[j].dx + d1;\r\n balls[j].dy = balls[j].dy + d2;\r\n // при соударении шары всегда "проникают" друг в друга, поэтому раздвигаем их\r\n p3 = (10 - dist) / 2;\r\n p1 = p3 * (a / dist);\r\n p2 = p3 * (b / dist);\r\n balls[i].X = balls[i].X + p1;\r\n balls[i].Y = balls[i].Y + p2;\r\n balls[j].X = balls[j].X - p1;\r\n balls[j].Y = balls[j].Y - p2;\r\n }\r\n }\r\n }\r\n}\r\n" link(Data,10119911:Var3,[(440,147)(426,147)]) } Add(Math,3202041,518,98) { @Color=11206655 OpType=2 Op2=Real(5) link(Op1,5412147:NextDouble,[]) } Add(Convertor,10047018,553,343) { @Color=11206655 Mode=5 link(Data,12772618:Value,[]) } Add(GetDataEx,11339292,518,182) { link(Data,3202041:Result,[]) } Add(Convertor,2260508,504,343) { @Color=11206655 Mode=5 link(Data,4063506:.Left,[]) } Add(Convertor,7502398,511,301) { @Color=11206655 Mode=5 link(Data,4063506:.Top,[]) } Add(Inline,12768124,336,427) { @Hint=#22:Calculates reflections| @Color=16777130 WorkPoints=#13:doReflections| DataPoints=#4:Data|11:ClientSizeW|11:ClientSizeH| Code="private void doWork(object data, int index) {\r\n List balls = sys.Data;\r\n int i = (int)data;\r\n if (balls[i].Y > (sys.ClientSizeH - 10))\r\n {\r\n balls[i].dy = -balls[i].dy;\r\n }\r\n if (balls[i].Y < 0)\r\n {\r\n balls[i].dy = -balls[i].dy;\r\n }\r\n if (balls[i].X > (sys.ClientSizeW - 10))\r\n {\r\n balls[i].dx = -balls[i].dx;\r\n }\r\n else\r\n {\r\n if (balls[i].X < 0)\r\n {\r\n balls[i].dx = -balls[i].dx;\r\n }\r\n }\r\n balls[i].Y = balls[i].dy + balls[i].Y;\r\n balls[i].X = balls[i].dx + balls[i].X;\r\n}\r\n" link(Data,10119911:Var1,[(342,243)]) link(ClientSizeW,4695483:Var2,[]) link(ClientSizeH,6881604:Var2,[]) } Add(GetDataEx,10119911,420,238) { Angle=1 link(Data,4063506:##list,[(552,243)]) } Add(GetDataEx,4695483,343,406) { Angle=3 link(Data,15347870:Result,[(251,411)]) } Add(GetDataEx,6881604,350,399) { Angle=3 link(Data,8445518:Result,[(293,404)]) } Add(GetDataEx,7562725,266,232) { Angle=1 link(Data,4063506:##count,[(545,237)]) } END_SDK Add(MessageBox,8850550,70,98) { } Add(DoData,2044881,147,168) { link(onEventData,2953706:doText,[(190,174)(190,82)(9,82)(9,97)]) link(Data,16691314:Count,[]) } Add(Hub,11434816,119,140) { link(onEvent1,16691314:Add,[]) link(onEvent2,2044881:doData,[(140,153)(140,174)]) }