ObjectDumperãã©ãã»ã©åªããŠããŠããè³ãããŒãšå€ã®ãã¢ã®éã§ãã©ããããŒããäœæããããšã¯å°é£ã§ãã ãããã£ãŠãã¢ãã«ã®ã°ã©ãã£ã«ã«ãªè¡šçŸãäœæããå¿ èŠããããŸãã ããã¯è¿ãå°æ¥ã«è¡ãããšã§ãã
GUIããã2ã€ã®ããšãå¿ èŠã§ãã 1ã€ã¯ãäœæãããäžçã®ãªããžã§ã¯ãããŠã£ã³ããŠã§è¡šç€ºããŠããã®ããããã£ã確èªããæ©äŒã§ãã 2çªç®ã¯ããããã®ãªããžã§ã¯ãã«äœçšããããããã£ãå€æŽããæ©èœã§ãã ããŸããŸãçç©ã®ã¢ãã«ããåãèœåãå¿ èŠãšãããŸãããåšå²ã®ãªããžã§ã¯ãã®ããããã£ããæãããããšãã§ãããããã®ããããã£ãå€æŽããã¢ã¯ã·ã§ã³ãå®è¡ã§ããå¿ èŠããããŸãã
ã€ãŸããã°ã©ãã£ã«ã«ã€ã³ã¿ãŒãã§ã€ã¹ã®äœæã¯ãçç©ã®ã¢ããªã³ã°ã«äŒŒãŠããŸãã ãããŠãããã¯åã«äŒŒãŠããã ãã§ã¯ãããŸãã-åãã¯ã©ã¹ãšååã䜿çšãããŸãã ããã説æããæãç°¡åãªæ¹æ³ã¯ã次ã®ãã£ãŒãã䜿çšããããšã§ãã

ç¢å°ã¯ãæ å ±ã移åããŠããæ¹åã瀺ããŸãã æåã®éšåã§è¿°ã¹ãããã«ãæ å ±ã¯èŒªã«ãªã£ãŠããŸãã ãªãã¬ãŒã¿ãŒãšè³ã¯äºãã«çžäºäœçšããŸãã ããã«ãããäžçã®ç¶æ ïŒããããã£ïŒãšè³ïŒã¡ã¢ãªïŒãå€åããŸãã
ãã®å Žåã®ã¢ã¯ã·ã§ã³ãšã»ã³ãµãŒã¯ããã®çžäºäœçšã®ã¡ãã£ãšãŒã¿ãŒãã¡ãã£ãšãŒã¿ãŒã§ãã 圌ãã®äž»ãªä»äºã¯ãæ å ±ãäžæ¹ãç解ã§ãã圢åŒããä»æ¹ãç解ã§ãã圢åŒã«å€æããããšã§ãã ãªãã¬ãŒã¿ãŒã«ãšã£ãŠã¯ããããã¯ããããã£ã®ã»ããã§ãããè³ã«ãšã£ãŠã¯å€ã®é åã§ãã
ã¢ã¯ã·ã§ã³ãã»ã³ãµãŒãããã³è³ã¯ã1ã€ã®æ¬è³ªã§ããã身äœã§ãã Alan.Platformã§ã¯ãçç©ã¯ã¯ã©ã¹-ã¯ã©ã€ã¢ã³ãã³ã³ããŒãã³ãã®æŽŸçç©ãšããŠå®è£ ãããŸãã ããã«ãäžé£ã®ã»ã³ãµãŒãã¢ã¯ã·ã§ã³ãããã³è³ãå«ããæ©èœãè¿œå ãããŸããã
ãããã£ãŠãã·ã¹ãã ã®å Žåãã€ã³ã¿ãŒãã§ã€ã¹ã¯éåžžã®çç©ã§ãããç¹å®ã®åœ¢ç¶ãäœçœ®ãããã³ã¢ãã«ãªããžã§ã¯ããæã€ãã®ä»ã®ããããã£ãæã£ãŠããŸãã 圌èªèº«ããããã®ãªããžã§ã¯ãã®1ã€ã§ãã ãããŠãç§ãã¡ã¯çããç®ãã§åœŒãèŠãããšãã§ãã圌ã®ãæãã§ã·ã¹ãã ãšå¯Ÿè©±ããããšãã§ããŸãã
ã ãããç§ãã¡ã®äœã¯ã©ã®éšåã§æ§æãããŸããïŒ ä»¥åã«äœæãããCellBoardãªãã¬ãŒã¿ãŒã«æ¥ç¶ããããã§ãã«ãŒã®äœçœ®ã確èªãããã®æ å ±ããŠã£ã³ããŠã§ã®è¡šç€ºã«é©ãããã®ã«å€æã§ããã»ã³ãµãŒã1ã€å¿ èŠã§ãã ãã©ãããã©ãŒã äžã®ãã§ãã«ãŒã移åããã¢ã¯ã·ã§ã³ã1ã€å¿ èŠã§ãã ãããŠæåŸã«ãããããã¹ãŠã管çããè³ãå¿ èŠã§ãã 圌ã¯ãã§ãã«ãŒãæç»ãããŠãŒã¶ãŒã¢ã¯ã·ã§ã³ãåŠçããããã«æ³šæãããããŸãã
ããªãè€éã«èãããŸãããé©åãªè³ã¯ãã§ã«Alan.Platformã«ãããŸãã WPFã䜿çšããŠãªããžã§ã¯ããã¬ã³ããªã³ã°ããŸãã ããã«ãããèªäœã¯FrameworkElementããç¶æ¿ãããããããŠã£ã³ããŠã«çŽæ¥é 眮ã§ããŸãã
ãã¥ãŒããªã¢ã«[ãããŒã2ã]
çè«ã身ã«ä»ããã°ãå®çšçãªéšåã«ã¹ã ãŒãºã«é²ãããšãã§ããŸãã Platform.Explorerããã³ElementsLibSampleãããžã§ã¯ããAlan.Platformãã以åã«äœæãããœãªã¥ãŒã·ã§ã³ã«ã³ããŒããŸãã Platform.Explorerãããã©ã«ãã§èµ·åãããããžã§ã¯ãã«ããŠãCellBoardãå«ãèŠçŽ ã®ä»¥åã«äœæãããã©ã€ãã©ãªãžã®ãªã³ã¯ãè¿œå ããŸãã
ã»ã³ãµãŒããå§ããŸãããã æ°ããUISensorã¯ã©ã¹ãèŠçŽ ã©ã€ãã©ãªã«è¿œå ããŸãã
AssociatedOperatorã¯ãã»ã³ãµãŒãæäœã§ãããªãã¬ãŒã¿ãŒã瀺ããŸãã æŒç®åã¿ã€ãã®ãã«ããŒã ãã³ã³ã¹ãã©ã¯ã¿ãŒã«æž¡ãããŸãã åã»ã³ãµãŒãšã¢ã¯ã·ã§ã³ã«ã¯ãã®å±æ§ãå¿ èŠã§ããusing System;
using System.Collections. Generic ;
using Platform.Core.Concrete;
using Platform.Core.Elements;
namespace Checkers
{
[AssociatedOperator( "Checkers.CellBoard" )]
[ChannelsCount(300)]
public class UISensor : Sensor
{
public override void Update( IEnumerable <PropertySet> elements)
{
throw new NotImplementedException();
}
public override void Transmit()
{
throw new NotImplementedException();
}
}
}
éåžžã®ç¶æ³ã§ã¯ãChannelsCountã¯è³ã«éä¿¡ãããå€ã®æ°ã瀺ããŸãã ããããã€ã³ã¿ãŒãã§ã€ã¹ã®é è³ã¯ããŸãäžè¬çã§ã¯ãªããå€ãåãå ¥ããŸããã å±æ§ããå°ãªããšãããã€ãã®å©ç¹ãçµãããã«ãã¹ã±ãŒã«ãã³ã³ã¹ãã©ã¯ã¿ãŒã«è»¢éãããŸããã æ £äŸã«ããããã¹ãŠã®ããããã£å€ã®ç¯å²ã¯0ã1ã§ãããããã£ãŠãåžæŸæš¡æ§ã®ããŒãã®ãµã€ãºã¯1x1ã§ãã ã¹ã±ãŒã«ã䜿çšãããšããŠã£ã³ããŠã§ã¬ã³ããªã³ã°ãããšãã®ããŒãã®ãµã€ãºã¯300x300åäœã«ãªããŸãã
次ã«ãæœè±¡ã¡ãœããã®å®è£ ããããŸãã Updateã¡ãœããã¯æœè±¡Mediatorã¯ã©ã¹ã§å®£èšãããããããSensorãšActionãç¶æ¿ãããŸãã ãèŠéããå®çŸããã®ã«åœ¹ç«ã¡ãŸãã ã»ã³ãµãŒã®å Žåãããããã£ã衚瀺ã§ãããªããžã§ã¯ãã®ã»ããã§ãã ã¢ã¯ã·ã§ã³ã®å Žåãããããã£ãå€æŽã§ãããªããžã§ã¯ãã®ã»ããã ãããã®ãªããžã§ã¯ãã¯ãVisibleElementsä¿è·ãã£ãŒã«ãã«ä¿åãããŸãã ãã¹ãŠã®ãªããžã§ã¯ãã衚瀺ããå¿ èŠããããããUpdateã¡ãœããã®å®è£ ã¯æ¬¡ã®åœ¢åŒãåããŸãã
ãã®ã¡ãœããã¯ãèŠéãå€åãããã³ã«ãã€ãŸããªããžã§ã¯ãã®1ã€ã移åãããã³ã«ããŸãããã°ã©ã ã®éå§çŽåŸã«ãªãã¬ãŒã¿ãŒã«ãã£ãŠåŒã³åºãããŸãã ãªãã¬ãŒã¿ãŒãæã£ãŠãããã¹ãŠã®ããããã£ã®ã»ããã¯ã¡ãœããã«æž¡ããããããã»ã³ãµãŒã¯ããããããèŠãããã®ãéžæããŸããpublic override void Update( IEnumerable <PropertySet> elements)
{
this .VisibleElements = elements;
}
Transmitã¡ãœããã¯ãSensorã¯ã©ã¹ã§å®£èšãããŠããŸãã ãã®ã¿ã¹ã¯ã¯ããªããžã§ã¯ãã®ããããã£ã«é¢ããæ å ±ãè³ã«éä¿¡ããããšã§ããã以åã¯ãããè³ãç解ã§ãã圢åŒã«å€æããŠããŸããã ãã®ã¡ãœããã¯ãããããã£å€ãå€æŽããããšãã«ãªãã¬ãŒã¿ãŒã«ãã£ãŠåŒã³åºãããŸãã ãããã£ãŠãè³ã¯åžžã«äžçã®ç¶æ ã«é¢ããææ°æ å ±ãæã£ãŠããŸãã
ç§ãã¡ã®è³ã¯ããªããžã§ã¯ãã®æç»æ¹æ³ã«é¢ããæ å ±ãåãåãããšãæåŸ ããŠããŸãã ãã®ã¡ã«ããºã ã¯ãDrawingVisualã®åçŽãªã©ãããŒã§ããRenderInstructionsã䜿çšããŸãã åœä»€ãåãåã3ã€ã®æ¹æ³ãè³ã§å®çŸ©ãããŠããŸãã
Idã¯ãåœä»€ã瀺ãããŠããã³ã³ããŒãã³ãã®èå¥åã§ãã è³ã§ã¯ãRenderInstructionsãªããžã§ã¯ããåIDã«é¢é£ä»ããããŠããŸãã ãããã®ã¡ãœããã®ãããããåŒã³åºãããšã«ããããã®ãªããžã§ã¯ãã®ããããã£ãå€æŽããåæç»ããŸãã ãããè¡ãã«ã¯ã察å¿ããDrawingVisualãªããžã§ã¯ãã®RenderOpenïŒïŒã¡ãœãããRenderInstructionså ã§åŒã³åºãããŸãã ãªããžã§ã¯ããã¬ã³ããªã³ã°ããããã®æ°ããã³ã³ããã¹ããäœæããããã®åŸãWPFããŠã£ã³ããŠã®ã³ã³ãã³ãã®æŽæ°ãåŠçããŸããpublic void SetShape( int id, Shapes shape, double height, double width);
public void SetBrush( int id, Brush brush);
public void SetTransform( int id, Transform transform);
ãã ããããã¯ãã¹ãŠéèŠã§ã¯ãããŸããã äž»ãªããšã¯ã3ã€ã®ã¡ãœããã®ãããããåŒã³åºããåŸãããã«ç»é¢ã«çµæã衚瀺ãããããšãç解ããããšã§ãã
åŒæ°ã䜿çšãããšããã¹ãŠãæ確ã«ãªããŸãã Shapesã¯åæåã§ããããããŸã§ã®ãšãããæ¥åãšé·æ¹åœ¢ã®2ã€ã®å³åœ¢ã®ã¿ãå«ãŸããŠããŸãã ãµã€ãºããããå¡ãã€ã¶ãããããŸããã座æšèªäœã¯ãããŸããã ãã§ãã«ãŒã®ç§»åããšã«DrawingContextãéãããéãããããããªãã§ãããã ãããã£ãŠã移åã¯TranslateTransformã䜿çšããŠå®è£ ãããŸãã æåã¯ããã¹ãŠã®ãã§ãã«ãŒã®äžå¿ã¯ãå®å ã§ãããŒããã£ã¹ãããããã€ã³ãïŒ0,0ïŒã«ãããŸãã ç»é¢äžã§ãã§ãã«ãŒã移åããã«ã¯ã察å¿ããTranslateTransformãªããžã§ã¯ãã®Xããã³Yããããã£ã®å€ãå€æŽããã ãã§ãã ãããã®ããããã£ã¯DependencyPropertyã§ãããããã¢ãã¡ãŒã·ã§ã³ã䜿çšããŠå€æŽã§ããŸãã
ã¬ã³ããªã³ã°ãç解ããããã§ããã®å®è£ ã«é²ãããšãã§ããŸãã Transmitã¡ãœããã§ã¯ãTranslateTransformããããã£ãå€æŽããå¿ èŠããããŸãã ãã ããããããå€æŽããåã«ããã®å€æãRenderInstructionsã«è¿œå ããå¿ èŠããããŸãã ããã§ãä»ã®ãã¹ãŠã®æ瀺ãè¿œå ããå¿ èŠããããŸãã ããã¯ãããã°ã©ã ã®éå§åŸã«äžåºŠè¡ãå¿ èŠããããŸãã
ããã«æãé©åãªå Žæã¯ããã¹ãŠã®èŠçŽ ãå®è£ ããIConnectableã€ã³ã¿ãŒãã§ã€ã¹ã§å®£èšãããConnectToã¡ãœããã§ãã ããã°ã©ã ã®éå§çŽåŸã«åŒã³åºãããèŠçŽ ãæ¥ç¶ããã®ã«åœ¹ç«ã¡ãŸãã ãããã£ãŠãåæåããã®ã«é©ããå Žæã§ãã
PresentationCoreãPresentationFrameworkãWindowsBaseãElementsLibSampleãããžã§ã¯ããžã®ãªã³ã¯ãèŠçŽ ã©ã€ãã©ãªã«è¿œå ããŸãã
ããã§ãç»é¢ã«å€§äºãªåã衚瀺ãããŸãã Platform.Explorerã¯ãã¢ãã«æ§æãworld.xmlãã¡ã€ã«ã«ä¿åããŸãã éããŠããã®å 容ã次ã®ãã®ã«çœ®ãæããŸããBaseUIBrain brain;
int scale;
public override void ConnectTo(Component parent)
{
base .ConnectTo(parent);
this .brain = this .ConnectedBrain as BaseUIBrain;
this .scale = Sensor.GetChannelsCount( this .GetType());
this .brain.Scale = scale; // .
var checkerBrush = Brushes.BurlyWood;
double diameter = 0.12 * scale; // .
// Update ,
// VisibleElements .
foreach ( var checker in this .VisibleElements)
{
// .
double x = checker[ "X" ].Value * scale;
double y = checker[ "Y" ].Value * scale;
var translate = new TranslateTransform(x, y);
brain.SetShape(checker.Id, Shapes.Ellipse, diameter, diameter);
brain.SetBrush(checker.Id, checkerBrush);
brain.SetTransform(checker.Id, translate);
}
}
ãããã£ãŠã3ã€ã®ãã§ãã«ãŒãäœæããŸããããã®ãã¡ã®1ã€ã¯ããã£ã€ã³ã¿ãŒãã§ã€ã¹ã§ãã ããã§å®è¡ã§ããŸãã çµæã¯æ¬¡ã®ãšããã§ãã<? xml version ="1.0" ? >
< component xmlns ="http://alan.codeplex.com/constructor/world" >
< operator name ="Checkers.CellBoard" />
< component >
< propertySet name ="Checker" operator ="Checkers.CellBoard" >
< property name ="X" value ="0.0625" />
< property name ="Y" value ="0.6875" />
</ propertySet >
</ component >
< component >
< propertySet name ="Checker" operator ="Checkers.CellBoard" >
< property name ="X" value ="0.0625" />
< property name ="Y" value ="0.9375" />
</ propertySet >
</ component >
< client >
< propertySet name ="Checker" operator ="Checkers.CellBoard" >
< property name ="X" value ="0.1875" />
< property name ="Y" value ="0.8125" />
</ propertySet >
< sensor name ="Checkers.UISensor" />
< brain name ="ElementsLibSample.UIElements.BaseUIBrain" />
</ client >
</ component >

BaseUIBrainã¯ãªããžã§ã¯ãéžæããµããŒãããŸãã ãã§ãã«ãŒã®ãããããã¯ãªãã¯ãããšãäžã«ãã®ãã¹ãŠã®ããããã£ã®å€ã衚瀺ãããŸãïŒå€ã¯äžžããããŸãïŒã XAMLãšworld.xmlãå°ã調æŽããããšã§ã次ã®çµæãåŸãããšãã§ããŸãã

ã ãããã»ã³ãµãŒã¯ãè³ã§ãã ã¢ã¯ã·ã§ã³ã¯æ®ããŸãã æ°ããMoveCheckerã¯ã©ã¹ãèŠçŽ ã©ã€ãã©ãªã«è¿œå ããŸãã
Actionã¯ã©ã¹ã¯Sensorã«éåžžã«äŒŒãŠããŸãããTransmitã¡ãœããã®ä»£ããã«ãDoActionããããŸããããã¯ãè³ããdoubleå€ã®é åãåãåããŸãã ã»ã³ãµãŒããªããžã§ã¯ãã®ããããã£ãååŸãããããããããŒã¿ã»ãããäœæããå Žåãã¢ã¯ã·ã§ã³ã«ã¯éã®åé¡ããããŸããããŒã¿ã»ããã䜿çšããŠãå¿ èŠãªãªããžã§ã¯ããèŠã€ããããããã£ãå€æŽããå¿ èŠããããŸããusing System;
using System.Linq;
using System.Collections. Generic ;
using Platform.Core.Concrete;
namespace Checkers
{
[AssociatedOperator( "Checkers.CellBoard" )]
[ChannelsCount(3)]
public class MoveChecker : Platform.Core.Elements.Action
{
public override void Update( IEnumerable <PropertySet> elements)
{
this .VisibleElements = elements;
}
public override void DoAction( params double [] args)
{
throw new NotImplementedException();
}
}
}
ç§ãã¡ã®è¡åã«ã¯3ã€ã®è°è«ã§ååã§ãã æåã«ç§»åããå¿ èŠããããã§ãã«ãŒã®IDãããã2çªç®ã«ãXã座æšãå€æŽããå¿ èŠãããå€ã3çªç®ã«ãYã座æšãå€æŽããå¿ èŠãããå€ããããŸãã
ããããã£ã®å€æŽãæ åœããAlan.Platformã®éšåã¯ããã©ãããã©ãŒã ã®å éšæéã«å¯æ¥ã«é¢é£ããŠããŸãããããã«ã€ããŠã¯ãŸã èšåããŠããŸããã å éšæéã¯å¯ŸçãšããŠå®è£ ãããŸãã æé管çã»ã³ã¿ãŒã¯ãéçãªPlatform.Core.Concrete.Timeã¯ã©ã¹ã§ãã
ã¢ã€ãã¢ã¯ãç¶æ ãæéã«äŸåããå¯èœæ§ã®ãããªããžã§ã¯ãããããšããããšã§ãã ãããã®ãªããžã§ã¯ãã¯ãTimeã¯ã©ã¹ã«ç»é²ãããŸãã 次ã«ããŠãŒã¶ãŒãTime.TickïŒïŒã¡ãœãããåŒã³åºããšãç»é²ãããŠãããã¹ãŠã®ãªããžã§ã¯ãã§åæ§ã®ã¡ãœãããåŒã³åºãããŸãã éçºè ã¯ãã®ã¡ãœããããªãŒããŒã©ã€ãã§ããŸãã ãããã®ãªããžã§ã¯ãã¯TimeObjectãšåŒã°ããPropertySetã¯ãã®1ã€ã§ãã
PropertySetã䜿çšãããšãããããã£ã®å€æŽã次ã®ããã«èšç»ã§ããŸãã
ããã§ãticksã¯å€ãããããã£ã«è¿œå ããããã®ç®çãã®æ°ã§ãããdeltaã¯ãã®å€ã§ãã äŸïŒpropertySet[ "PropertyName" ][ticks] = delta;
ãã®è¡ã¯ã次ã®ã¡ãžã£ãŒã§ãYãããããã£ã«0.125ãè¿œå ããããšãæå³ããŸãã å€æŽãèšç»ã§ããã¡ãžã£ãŒã®æå°æ°ã¯1ãæ倧ã¯10ã§ãïŒçŸæç¹ã§ã¯ïŒã ã€ãŸããå€ãå³åº§ã«å€æŽããããšã¯ã§ããŸãããchecker[ "Y" ][1] = 0.125;
æ°ããããããã£å€ã§ã¯ãªããã«ã¿ã䜿çšãããçç±ã¯ç°¡åã§ã-ãµã€ã¯ã«ããšã«è€æ°ã®ãã«ã¿ãã¹ã±ãžã¥ãŒã«ã§ããŸãã ãããŠãããããé©çšãããé åºã«é¢ä¿ãªããæçµçµæã¯åããŸãŸã§ãïŒç®è¡ã®åçŽãªèŠåïŒã
ããã§ãDoActionã®å®è£ ãéå§ã§ããŸãã
ããã§ãã¢ã¯ã·ã§ã³ã®æºåãæŽããworld.xmlã«è¿œå ã§ããŸããpublic override void DoAction( params double [] args)
{
var checker = this .VisibleElements.First(x => x.Id == args[0]);
checker[ "X" ][1] = args[1];
checker[ "Y" ][1] = args[2];
}
ä»ããPlatform.Explorerãèµ·åããå ŽåãDoActionã¡ãœããã¯ã©ããããåŒã³åºãããªããããå€æŽã¯è¡šç€ºãããŸããã ãã®èª€è§£ãä¿®æ£ããŸãã ãããè¡ãã«ã¯ã以å䜿çšããBaseUIBrainãã掟çããæ°ããUIBrainã¯ã©ã¹ãèŠçŽ ã©ã€ãã©ãªã«è¿œå ããŸãã...
</ propertySet >
< action name ="Checkers.MoveChecker" />
< sensor name ="Checkers.UISensor" />
< brain name ="ElementsLibSample.UIElements.BaseUIBrain" />
</ client >
...
UIBrainã¯ããŠãŒã¶ãŒã¢ã¯ã·ã§ã³ã«å¿ããŠå¿ èŠãªãã©ã¡ãŒã¿ãŒã䜿çšããŠDoActionã¡ãœãããåŒã³åºãå¿ èŠããããŸãã ããããã³ã°ã¢ããããæãç°¡åãªæ¹æ³ã¯ãKeyDownã€ãã³ã-ããŒããŒãã®ããŒãæŒãããšã§ãã ãŸãããã®ã€ãã³ãã®ãã³ãã©ãŒãè¿œå ããŸãã ããã¯ãConnectToã¡ãœããã§å®è¡ã§ããŸããusing ElementsLibSample.UIElements;
namespace Checkers
{
public class UIBrain : BaseUIBrain
{
}
}
ãã®ããªãããŒãªConnectToã¡ãœããã¯ãIConnectableã§ã¯ãªãBaseUIBrainã§å®çŸ©ãããŠããŸãã BaseUIBrainã«ã¯2ã€ã®èŠªããããŸãã 1ã€ã¯äžçã¢ãã«ããªãŒã®ã¯ã©ã€ã¢ã³ãã§ããããã1ã€ã¯WPFäžçã®å¢çç·ã§ãã äœããã®æ¹æ³ã§ããã®ã¡ãœããã§UIBrainã®åæåãè¡ãããšãã§ããŸããpublic override void ConnectTo(Decorator parent)
{
base .ConnectTo(parent);
this .KeyDown += UIBrain_KeyDown;
}
UIBrain_KeyDownãã³ãã©ãŒã¯éåžžã«åçŽã§ãã
ãŸãããã§ãã«ãŒã匷調衚瀺ãããŠãããã©ããã確èªããŸãã ãã®å ŽåãselectedIdã«ã¯ãã®ã€ã³ããã¯ã¹ãå«ãŸããŸãã 次ã«ãã¢ã¯ã·ã§ã³ãèŠã€ããŸãã 次ã«ãã©ã®ããŒãæŒãããããåæããŸãã ãQãã®å Žå-éžæãããã§ãã«ãŒãäžäžã«ç§»åãããWãã®å Žå-äžäžããSã-äžäžããAã-äžäžã«ç§»åããŸãã ãã®åŸã1å°ç¯ãã«ãŠã³ãããŸããvoid UIBrain_KeyDown( object sender, KeyEventArgs e)
{
if ( this .selectedId != 0)
{
var moveChecker = this .actions[ "Checkers.MoveChecker" ];
switch (e.Key)
{
case Key.Q:
moveChecker.DoAction(selectedId, -0.125, -0.125);
break ;
case Key.W:
moveChecker.DoAction(selectedId, 0.125, -0.125);
break ;
case Key.S:
moveChecker.DoAction(selectedId, 0.125, 0.125);
break ;
case Key.A:
moveChecker.DoAction(selectedId, -0.125, 0.125);
break ;
}
Time.Tick();
OnChanged(selectedId);
}
}
Tickã¡ãœããã¯ããã¹ãŠã®ãµãã¹ã¯ã©ã€ããŒããã®ã€ãã³ããåŠçããå Žåã«ã®ã¿å¶åŸ¡ãè¿ããŸãã ã€ãŸãã次ã®ã¡ãžã£ãŒã§èšç»ãããŠããããããã£ã®å€æŽãé©çšãããŸãã æåŸã«ãOnChangedã¡ãœãããåŒã³åºããããŠã£ã³ããŠã®äžéšã«ããããããã£æ å ±ãæŽæ°ãããŸãã ã¡ãžã£ãŒã¯ãããããã®ããŒãæŒããšã«ãŠã³ããããŸãã
UIBrainã®æºåãã§ããŸããã BaseUIBrainã®ä»£ããã«world.xmlã§æå®ããã ãã§ãå®è¡ã§ããŸã... CellBoard.ValidatePropertySetã®å®è£ ãå¿ãããããèµ·åã«å€±æããŸãã ãã®ã¡ãœããã¯ãã»ããå ã®ããããã£å€ãå€æŽããçŽåŸã«åŒã³åºãããŸãã ãã®äžã§äžçã®æ³åãå®çŸããŸãã Operatorã¯ã©ã¹ã§ã®åœŒã®å®£èšã¯æ¬¡ã®ããã«ãªããŸãã
å¯äžã®ãã©ã¡ãŒã¿ãŒã¯ãæ°ããç¶æ ã確èªããŠçµæãè¿ãå¿ èŠãããããããã£ã®ã»ããã§ã-ãã®æ¡ä»¶ã¯æå¹ã§ããïŒ ããã§ãªãå Žåã以åã®ç¶æ ãžã®ããŒã«ããã¯ãçºçããŸããã€ãŸããããããã£ã«å¯Ÿããèšç»ãããå€æŽã¯é©çšãããŸããã ãã©ããã«ã¯ããªãã®æ°ã®æ³åŸããããããä»ã®ãšããã¯ããreturn trueãã¹ã¿ãã代ããã«çœ®ããããã°ã©ã ãå床å®è¡ããŠã¿ãŠãã ãã...public abstract bool ValidatePropertySet(PropertySet ps);
UISensor.Transmitãå®è£ ããã®ãå¿ãããããåèµ·åã¯æåããŸããã ããã§ãTranslateTransformãªããžã§ã¯ãã®ããããã£ãå€æŽããå¿ èŠããããŸãã
ããŠãä»ã§ã¯ééããªãéå§ãããŸãïŒ ããªãŒãããã¯ããŠã[å®è¡... UrrraaïŒ]ãã¯ãªãã¯ããŸãã ãã¹ãŠã®ãã§ãã«ãŒãåãè²ã§ãããšããäºå®ã«æ··ä¹±ããŠããªãå Žåã¯ã1ã€ãŸãã¯2ã€ã®ãããªã¢ããã¬ã€ã§ããŸããpublic override void Transmit()
{
foreach ( var element in VisibleElements)
{
var translate = brain.GetTransform<TranslateTransform>(
element.Id);
translate.X = element[ "X" ].Value * scale;
translate.Y = element[ "Y" ].Value * scale;
}
}

ãã¡ãããããã€ãã®æ¬ é¥ããããŸãã ããšãã°ãããã¯ããŠã³ãããããŒã¹ãåé€ããããšã¯ã§ããŸããããŠã£ã³ããŠã®å€ã«ç§»åããããšããã§ããŸããã Alan.Platformã§ã¯ããªããžã§ã¯ãã®åé€ãšè¿œå ã¯ãŸã ãµããŒããããŠããŸããã ãã§ãã«ãŒã¯ååŸã«ç§»åã§ããããã«éããããšãã§ããŸãã ååãšããŠãããã¯ä¿®æ£ã§ããŸã-CellBoard.ValidatePropertySetã«é©åãªã³ãŒããè¿œå ããã ãã§ãåæ§ã®ãã§ãã«ãŒç¶æ ãæåŠãããŸãã ãã§ãã«ãŒã«è²ãè¿œå ãããããlady-not ladyãç¶æ ãè¿œå ããããšãã§ããŸãã ããã¯ãã¹ãŠãå¥ã®ãªãã¬ãŒã¿ãŒãè¿œå ããã»ã³ãµãŒãšã¢ã¯ã·ã§ã³ãããã«æ¥ç¶ããããšã§å®è¡ã§ããŸãã
ããã§ãã¥ãŒããªã¢ã«ã¯çµäºã§ãã ãã®äžã§ã24åã®ãã§ãã«ãŒãäœãäžçã®ã¢ãã«ãäœæããŸããããã®ãã¡ã®1ã€ã¯çç©ã€ã³ã¿ãŒãã§ãŒã¹ã§ãã æçµçµæã®ã¢ãŒã«ã€ãã¯ããããããŠã³ããŒãã§ããŸã ã
äžè¬ã«ãã¢ãã«ãWPFã«ãã€ã³ãããå¿ èŠã¯ãããŸããã é¡æšã«ãããçç©ã®åœ¢ã§æ°ããã³ãã³ãã©ã€ã³ã€ã³ã¿ãŒãã§ã€ã¹ãäœæããä»ã®ãã§ãã«ãŒã«è¿œå ããããšã¯éåžžã«å¯èœã§ãã çç©ãã¢ãã«ã«ãŸã£ããè¿œå ããããšã¯ã§ããŸãããããã®ç¶æ ã¯èª°ã«ãèŠããã誰ãå€åããŸããã
æåŸã«ã質åã«çããããšæããŸã-Alan.Platformãšã¯äœã§ããïŒ ããã«ããããµãŒãã¹ã³ãŒãããªããžã§ã¯ãã®äœæãšãªã³ã¯ããªããžã§ã¯ããææ°ã®ç¶æ ã«ä¿ã€ããšãªã©ãå¿ããããšãã§ããŸãã座ã£ãŠã¢ããªã³ã°ãè¡ãããšãã§ããŸãã
PSå®è¡æã«ãªããžã§ã¯ããäœæãããšãããã®ãããªèãæ¹ã¯ãåé·ã§è€éã§äžäŸ¿ã ãšæããããããããŸããã ORMã·ã¹ãã ã§ã®åå²æ¹æ³ãšåæ§ã®ããããã£ãæã€ã匷ãåä»ãããããªããžã§ã¯ããäœæããæ¹ãã¯ããã«ç°¡åã§ç解ããããã§ãããã äžæ¹ã§ã¯ãOOPã®ãã¹ãŠã®é åã䜿çšã§ããããããªããžã§ã¯ãã®äœæãç°¡åã«ãªããŸãã äžæ¹ãããã¯äžçã®æ³åã®åµé ãšè³ãšç©äœãšã®çžäºäœçšãè€éã«ããŸãã
- Reflection APIã䜿çšããŠããã¢ããã°æŒç®åãäœæããããšã¯ã§ããŸããã
- äžçã®æ³åã¯ããªããžã§ã¯ãèªäœã«åã蟌ãŸããå¿ èŠããããŸãã
- ç¶æ¿ããªãŒã¯åžžã«æé·ããŸãã
- åæã¯ããªããžã§ã¯ããäœæããããã»ã¹ãè€éã«ããå¯èœæ§ããããŸãã
- ã»ã³ãµãŒãšã¢ã¯ã·ã§ã³ã®é¡äŒŒäœã¯ããã¹ãŠã®ã¿ã€ãã®ãªããžã§ã¯ããç¥ãããReflection APIã䜿çšããå¿ èŠããããŸãã
ãããžã§ã¯ãã«åå ãããããŸãã¯ãããžã§ã¯ãã䜿çšããŠäœããäœæãããå Žåã¯ãLANã«é£çµ¡ãããããžã£ããŒãããã¯ããŠãã ããã
openminded@xdsl.by