ããã€ãã®æ°ãããããã¯ãã³ã³ã»ãããããã°ã©ãã³ã°ããŒã«ãæ±ãããšã«æ±ºããããšããããããŸããç§ã¯ã€ã³ã¿ãŒãããäžã®ããŸããŸãªãµã€ãã§æ¬¡ã
ãšèšäºãèªã¿ãŸããã ãŸãããããã¯ãè€éãªå Žåããããã®èšäºãèªãã§ç解ã«äžæ©è¿ã¥ããªããããããŸããã ãããŠãçªç¶ãæŽå¯ãäžãããã¹ãŠã®ããºã«ããŸãšããããèšäºããããŸãã ãã®ãããªèšäºãä»ã®èšäºãšåºå¥ãããã®ãå€æããããšã¯å°é£ã§ãã æ£ããéžæãããåèªãæé©ãªãã¬ãŒã³ããŒã·ã§ã³ããžãã¯ããŸãã¯ããé¢é£æ§ã®é«ãäŸã ç§ã®èšäºãCïŒã®æ°ããåèªãŸãã¯æé«ã®æè²èšäºã§ãããšå€æãããµãã¯ããŸããã ãããããããã誰ãã«ãšã£ãŠã¯ãè°è«ãããæŠå¿µãç解ããèšæ¶ããæ£ããé©çšãå§ããããšãã§ãããã®ã«ãªãã§ãããã
ãªããžã§ã¯ãæåããã°ã©ãã³ã°èšèªã§ã¯ãã¯ã©ã¹éã®çžäºäœçšãæŽçãã3ã€ã®æ¹æ³ããããŸãã ç¶æ¿ãšã¯ãç¶æ¿ã¯ã©ã¹ã«èŠªã¯ã©ã¹ã®ãã¹ãŠã®ãã£ãŒã«ããšã¡ãœããããããååãšããŠããã€ãã®æ°ããæ©èœãŸãã¯/ããã³ãã£ãŒã«ããè¿œå ãããå Žåã§ãã ç¶æ¿ã¯ãisããšããèšèã§èšè¿°ãããŸãã ä¹çšè»ã¯è»ã§ãã 圌ã圌ã®çžç¶äººã«ãªããªãã°ãããã¯èªç¶ã§ãã
```class Vehicle { bool hasWheels; } class Car : Vehicle { string model = "Porshe"; int numberOfWheels = 4 }```
é¢é£ä»ããšã¯ãããã¯ã©ã¹ããã£ãŒã«ãã®1ã€ãšããŠå¥ã®ã¯ã©ã¹ãå«ãå Žåã§ãã é¢é£ä»ãã¯ããhasããšããèšèã§èª¬æãããŸãã è»ã«ã¯ãšã³ãžã³ããããŸãã 圌ããšã³ãžã³ã®çžç¶äººã«ãªããªãã®ã¯åœç¶ã§ãïŒãã ããç¶æ³ã«ãã£ãŠã¯ãã®ãããªã¢ãŒããã¯ãã£ãå¯èœã§ãïŒã
é¢é£ä»ãã®2ã€ã®ç¹å®ã®ã±ãŒã¹ãåºå¥ãããŸãïŒæ§æãšéçŽã
æ§æãšã¯ããšã³ãžã³ãè»ãšã¯å¥ã«ååšããªãå Žåã§ãã è»ã®äœææã«äœæãããè»ã«ãã£ãŠå®å
šã«å¶åŸ¡ãããŸãã å
žåçãªäŸã§ã¯ããšã³ãžã³ã€ã³ã¹ã¿ã³ã¹ã¯èªåè»ãã¶ã€ããŒã§äœæãããŸãã
``` class Engine { int power; public Engine(int p) { power = p; } } class Car { string model = "Porshe"; Engine engine; public Car() { this.engine = new Engine(360); } } ```
éçŽãšã¯ããšã³ãžã³ã€ã³ã¹ã¿ã³ã¹ãã³ãŒãå
ã®å¥ã®å Žæã§äœæããããã©ã¡ãŒã¿ãŒãšããŠã«ãŒãã¶ã€ããŒã«æž¡ãããå Žåã§ãã
``` class Engine { int power; public Engine(int p) { power = p; } } class Car { string model = "Porshe"; Engine engine; public Car(Engine someEngine) { this.engine = someEngine; } } Engine goodEngine = new Engine(360); Car porshe = new Car(goodEngine); ```
ã¯ã©ã¹éã®çžäºäœçšãæŽçããç¹å®ã®æ¹æ³ã®å©ç¹ã«ã€ããŠã¯è°è«ããããŸãããæœè±¡çãªèŠåã¯ãããŸããã éçºè
ã¯ãåºæ¬ããžãã¯ïŒãisããŸãã¯ãhasãïŒã«åºã¥ããŠäœããã®æ¹æ³ãéžæããŸããããããã®æ¹æ³ãäžããããã³èª²ãå¯èœæ§ãšå¶éãèæ
®ããŸãã ãããã®æ©èœãšå¶éã確èªããããã«ãäŸãäœæããŠã¿ãŸããã ã³ãŒããã³ã³ãã¯ããªãŸãŸã§ããããã«ã·ã³ãã«ã§ããã ãã§ãªãã3ã€ã®ã¡ãœãããã¹ãŠã1ã€ã®ããã°ã©ã å
ã§é©çšã§ããããã«ååã«éçºãããŠããŸãã ãããŠãæãéèŠãªããšã¯ããã®äŸãã§ããã ãæœè±¡çãªãã®ã«ããããšããããšã§ãããã¹ãŠã®ãªããžã§ã¯ããšã€ã³ã¹ã¿ã³ã¹ã¯ç解å¯èœã§ãããå
·äœçãªãã®ã§ãã
ç°¡åãªã²ãŒã ãã¿ã³ã¯ããã«ãæžããŸãããã 2ã€ã®æŠè»ãéãã§ããŸãã 圌ãã¯å¥åº·ããŒãã«èœãšãã人ã亀äºã«æã¡ã倱ããŸãã ã²ãŒã ã«ã¯ããŸããŸãªçš®é¡ã®ã·ã§ã«ãšã¢ãŒããŒããããŸãã ãã¡ãŒãžãäžããããã«ã¯ããŸãæµã®æŠè»ãæ»æãã次ã«æµã®é§ãçªç Žããå¿
èŠããããŸãã ã¢ãŒããŒãç ŽæããŠããªãå Žåãæå·ã¯ãããŸããã ã²ãŒã ã®ããžãã¯ã¯ããç³paperçŽãã®ååã«åºã¥ããŠããŸããã€ãŸããããã¿ã€ãã®é§ã¯ç¹å®ã®ã¿ã€ãã®ã·ã§ã«ã«ã¯ååèæ§ããããŸãããä»ã®ã·ã§ã«ã¯äžååã§ãã ããã«ãé§ããã貫éããã·ã§ã«ã¯å°ããªãé§ããã¡ãŒãžãäžããéã«ãæããèŽåœçãªãã·ã§ã«ã¯é§ã貫éããå¯èœæ§ãäœããªããŸãã
éã®ç°¡åãªã¯ã©ã¹ãäœæããŸãããã å£åŸãšãã¬ã«é·ã®2ã€ã®ãã©ã€ããŒããã£ãŒã«ãããããŸãã ãã¡ãŒãžã¯å£åŸã«äŸåããäžéšã¯è£
ç²ãçªç Žããèœåã«äŸåããŸãã ãã¬ã«é·ãã-粟床ã
``` public class Gun { private int caliber; private int barrelLength; } ```
éã®ã³ã³ã¹ãã©ã¯ã¿ãŒãäœæããŸãã
``` public Gun(int cal, int length) { this.caliber = cal; this.barrelLength = length; } ```
ä»ã®ã¯ã©ã¹ããå£åŸãååŸããããã®ã¡ãœãããäœæããŸãããïŒ
``` public int GetCaliber() { return this.caliber; } ```
ã¿ãŒã²ããããããããããã«ã¯ãã¿ãŒã²ããããããããããšãšã¢ãŒããŒãçªç Žããããšã®2ã€ã®ããšãè¡ãå¿
èŠãããããšãèŠããŠããŸããïŒ ãããã£ãŠãæåã®æ»æã¯éãæ
åœããŸãããããã§ãã ãã®ãããããŒã«å€æ°ã¡ãœããIsOnTargetãäœæããŸããããã¯ãã©ã³ãã å€æ°ïŒãµã€ã³ãïŒãåããçµæãè¿ããŸããããããããã©ããïŒ
``` public bool IsOnTarget(int dice) { return (barrelLength + dice) > 100; } ```
éã®ã¯ã©ã¹å
šäœã¯æ¬¡ã®ãšããã§ãã
``` public class Gun { private int caliber; private int barrelLength; public Gun(int cal, int length) { this.caliber = cal; this.barrelLength = length; } public int GetCaliber() { return this.caliber; } public bool IsOnTarget(int dice) { return (barrelLength + dice) > 100; } } ```
ããã§ã·ã§ã«ãäœæããŸã-ããã¯ç¶æ¿ãé©çšââããæãæãããªã±ãŒã¹ã§ããããã®äžã§ã®éçŽãé©çšå¯èœã§ãã ã·ã§ã«ã«ã¯ç¬èªã®ç¹æ§ããããŸãã äžéšã®ä»®æ³ã·ã§ã«ã¯ååšããŸããã ãããã£ãŠãã¯ã©ã¹ãæœè±¡åããŸãã 圌ãæååãã£ãŒã«ããã¿ã€ããã«ããŸãã
ç ²åŒŸã¯ç ²çšã«äœãããŠããŸãã ç¹å®ã®éã ããå£åŸã®çºå°äœã¯ãå¥ã®å£åŸã®å€§ç ²ãçºå°ããŸããã ãããã£ãŠãçºå°ç©ãã£ãŒã«ããªã³ã¯ãéã®ã€ã³ã¹ã¿ã³ã¹ã«è¿œå ããŸãã ã³ã³ã¹ãã©ã¯ã¿ãäœæããŸãã
``` public abstract class Ammo { Gun gun; public string type; public Ammo(Gun someGun, string type) { gun = someGun; this.type = type; } } ```
ããã§ã¯éèšãé©çšããŸããã ã©ããã«éãäœæãããŸãã 次ã«ãéãžã®ãã€ã³ã¿ãæã€ã·ã§ã«ããã®éçšã«äœæãããŸãã
ç¹å®ã®çš®é¡ã®ã·ã§ã«ã¯ãæœè±¡ã·ã§ã«ã®çžç¶äººã«ãªããŸãã çžç¶äººã¯åã«èŠªã®ã¡ãœãããç¶æ¿ã§ããŸããããªãŒããŒã©ã€ãããããšãã§ããŸããã€ãŸãã芪ã¡ãœãããšã¯ç°ãªãåäœãããŸãã ããããçºå°äœã«ã¯å€ãã®ã¡ãœãããå¿
èŠã§ããããšã¯ç¢ºãã§ãã çºå°ç©ã¯ãã¡ãŒãžãäžããªããã°ãªããŸããã GetDamageã¡ãœããã¯ãåã«3åããå£åŸãè¿ããŸãã äžè¬ã«ãçºå°äœã®æå·ã¯å£åŸã«äŸåããŸãã ãããããã®ã¡ãœããã¯åã¯ã©ã¹ã§åå®çŸ©ãããŸãïŒé§ããã貫éããã·ã§ã«ã¯ãéåžžãé§ãã®ãã¡ãŒãžãå°ãªãããšãèŠããŠãããŠãã ãããåã¯ã©ã¹ã§ã¡ãœãããåå®çŸ©ã§ããããã«ããã«ã¯ãvirtualãšããèšèã䜿çšããŸãã
``` public virtual int GetDamage() { //TO OVERRIDE: add logic of variable damage depending on Ammo type return gun.GetCaliber()*3; } ```
çºå°äœã¯ãé§ã貫éããå¿
èŠããããŸãïŒãŸãã¯å°ãªããšã貫éããããšããŸãïŒã äžè¬çã«ãè£
ç²ã貫éããèœåã¯å£åŸã«ãäŸåããŸãïŒããšãã°ãåæé床ãªã©ã§ãããè€éã«ããããšã¯ãããŸããïŒã ãããã£ãŠãã¡ãœããã¯å£åŸãè¿ããŸãã ã€ãŸãã倧ãŸãã«èšã£ãŠãçºå°äœã¯ãã®å£åŸãšåãåãã®è£
ç²ã貫éã§ããŸãã ãã®ã¡ãœããã¯ãåã¯ã©ã¹ã§ã¯ãªãŒããŒã©ã€ããããŸããã
``` public int GetPenetration() { return gun.GetCaliber(); } ```
ããã«ã䟿å©ãªãããã°ãšã³ã³ãœãŒã«åºåã®æŽçã®ããã«ãToStringã¡ãœãããè¿œå ããããšã¯çã«ããªã£ãŠããŸããããã«ãããåçŽã«ã·ã§ã«ã®çš®é¡ãšå£åŸã確èªã§ããŸãã
``` public override string ToString() { return $" " + type + " " + gun.GetCaliber(); } ```
次ã«ãæœè±¡çãªã·ã§ã«ãç¶æ¿ããããŸããŸãªã¿ã€ãã®ã·ã§ã«ãäœæããŸãïŒé«ççºæ§ã环ç©ããµããã£ãªããŒã é«ççºç©ã¯æ倧ã®ãã¡ãŒãžãäžãã环ç©-å°ãªããæºå£åŸ-ããã«å°ãªãã åã¯ã©ã¹ã«ã¯ãã£ãŒã«ãããªããããŒã¹ã·ã§ã«ã®ã³ã³ã¹ãã©ã¯ã¿ãŒãåŒã³åºããããã«éãšæåååãæž¡ããŸãã GetDamageïŒïŒã¡ãœããã¯åã¯ã©ã¹ã§ãªãŒããŒã©ã€ããããŸããããã©ã«ããšæ¯èŒããŠæå·ãå¢å ãŸãã¯æžå°ãããä¿æ°ãè¿œå ãããŸãã
é«ççºæ§ïŒããã©ã«ãã®æå·ïŒïŒ
``` public class HECartridge : Ammo { public HECartridge(Gun someGun) : base(someGun, "") { } public override int GetDamage() { return (int)(base.GetDamage()); } } ```
环ç©ïŒããã©ã«ãã®ãã¡ãŒãžx 0.6ïŒïŒ
``` public class HEATCartridge : Ammo { public HEATCartridge(Gun someGun) : base(someGun, "") { } public override int GetDamage() { return (int)(base.GetDamage() * 0.6); } } ```
ãµããã£ãªããŒïŒããã©ã«ãã®ãã¡ãŒãžx 0.3ïŒïŒ
``` public class APCartridge : Ammo { public APCartridge(Gun someGun) : base(someGun, "") { } public override int GetDamage() { return (int)(base.GetDamage() * 0.3); } } ```
ãªãŒããŒã©ã€ããããGetDamageã¡ãœããã¯ãåºæ¬ã¯ã©ã¹ã¡ãœãããåŒã³åºãããšã«æ³šæããŠãã ããã ã€ãŸããã¡ãœããããªãŒããŒã©ã€ãããããšã«ãããbaseããŒã¯ãŒãã䜿çšããŠããã©ã«ãã®ã¡ãœããã«ã¢ã¯ã»ã¹ããæ©èœãä¿æãããŸãïŒã
ãã®ãããã·ã§ã«ã«ã¯éçŽïŒåºæ¬ã¯ã©ã¹ã®éïŒãšç¶æ¿ã®äž¡æ¹ã䜿çšããŸããã
次ã«ãæŠè»ã®è£
ç²ãäœæããŸãã ããã§ã¯ç¶æ¿ã®ã¿ãé©çšãããŸãã é§ã«ã¯åãããããŸãã ãããã£ãŠãæœè±¡é§ã¯ã©ã¹ã«ã¯ãåããã£ãŒã«ããšãåã¯ã©ã¹ã®äœææã«å®çŸ©ãããã¿ã€ãæååãã£ãŒã«ãããããŸãã
``` public abstract class Armour { public int thickness; public string type; public Armour(int thickness, string type) { this.thickness = thickness; this.type = type; } } ```
ã²ãŒã å
ã®é§ã¯ãããããå£ããŠãããã©ãããå€æããŸãã ãããã£ãŠãäºçŽã®ã¿ã€ãã«å¿ããŠãåäŒç€Ÿã§åå®çŸ©ãããã¡ãœããã¯1ã€ã ãã«ãªããŸãã
``` public virtual bool IsPenetrated(Ammo projectile) { return projectile.GetDamage() > thickness; } ```
ãããŠãããããå£ããŠãããã©ããã¯ãã©ã®çºå°äœãå°çãããã«ãã£ãŠç°ãªããŸããããã©ã«ãã®å Žåãã©ã®å£åŸã®å Žåã§ãã ãããã£ãŠããã®ã¡ãœããã¯çºå°ç©ã®ã€ã³ã¹ã¿ã³ã¹ãååŸããããŒã«å€ã®çµæïŒç ŽæããŠãããã©ããïŒãè¿ããŸãã ããã€ãã®ã¿ã€ãã®ã¢ãŒããŒ-æœè±¡ã¢ãŒããŒã®çžç¶äººãäœæããŸãããã ã³ãŒãã®çš®é¡ã¯1ã€ã ãã§ããããžãã¯ã¯ã·ã§ã«ãšã»ãŒåãã§ãã åçš®ã®è£
ç²ã¯ãé«ççºæ§ã®ã·ã§ã«ãããä¿æããŸãããäžååã§ã-ãµããã£ãªããŒã ãããã£ãŠãé«ã貫éåãæã€ãµããã£ãªããŒã®çºå°äœãå°çãããšãèšç®ã§ã¯è£
ç²ãèããªããŸãã ãªã©ïŒåã¿ã€ãã®ã¢ãŒããŒã«ã¯ãç¹å®ã®çºå°äœã«å¯Ÿããæµæä¿æ°ã®ç¬èªã®ã»ããããããŸãã
``` public class HArmour : Armour { public HArmour(int thickness) : base(thickness, "") { } public override bool IsPenetrated(Ammo projectile) { if (projectile is HECartridge) { // , return projectile.GetPenetration() > this.thickness * 1.2; } else if (projectile is HEATCartridge) { // , return projectile.GetPenetration() > this.thickness * 1; } else { // , return projectile.GetPenetration() > this.thickness * 0.7; } } } ```
ããã§ã¯ãããªã¢ãŒãã£ãºã ãããããé©ç°ã®1ã€ã䜿çšããŸãã ãã®ã¡ãœããã¯ããããçºå°ç©ãåãå
¥ããŸãã 眲åã¯ãåã¯ã©ã¹ã§ã¯ãªãåºæ¬ã¯ã©ã¹ã瀺ããŸãã ããããã¡ãœããå
ã§ã¯ãã©ã®ãããªçš®é¡ã®ã·ã§ã«ãé£ãã ããã€ãŸãã©ã®ã¿ã€ãããããããŸãã ããã«å¿ããŠããã®ããžãã¯ãŸãã¯ãã®ããžãã¯ãå®è£
ããŸãã ã·ã§ã«ã«ç¶æ¿ãé©çšââãããã·ã§ã«ã®ã¿ã€ãã®3ã€ã®äžæã®ã¯ã©ã¹ãäœæããã ãã®å Žåãã¢ãŒããŒãçªç Žããããã®å¥ã®ãã¹ããæé
ããå¿
èŠããããŸãã ã²ãŒã å
ã®ã·ã§ã«ã®ã¿ã€ããšåæ°ã®ãªãŒããŒããŒãã¡ãœãããèšè¿°ããå°çããã·ã§ã«ã®çš®é¡ã«å¿ããŠãã®ãã¡ã®1ã€ãåŒã³åºãå¿
èŠããããŸãã ãããããªããšã¬ã¬ã³ãã§ããããã®èšäºã®ãããã¯ã«ã¯é¢ä¿ãããŸããã
ããã§ã¿ã³ã¯ãäœæããæºåãã§ããŸããã ã¿ã³ã¯ã«ã¯ç¶æ¿ã¯ãããŸããããæ§æãšéçŽããããŸãã ãã¡ãããæŠè»ã«ã¯ååããããŸãã æŠè»ã«ã¯éããããŸãïŒéåäœïŒã ç§ãã¡ã®ã²ãŒã ã§ã¯ãå移åã®åã«æŠè»ãé§ããå€æŽãã§ãããšä»®å®ããŸã-ããããã®çš®é¡ã®é§ãéžæããŸãã ãã®ãããæŠè»ã«ã¯é§ã®çš®é¡ã®ãªã¹ãããããŸãã æŠè»ã«ã¯åŒŸè¬åº«ããããŸããããã¯ãæŠè»ã®èšèšè
ïŒäœæ²ïŒïŒã§äœæãããç ²åŒŸã§æºããããç ²åŒŸã®ãªã¹ãã§ãã æŠè»ã¯å¥åº·ç¶æ
ã«ãªãïŒåœäžãããšæžå°ããŸãïŒãæŠè»ã«ã¯çŸåšéžæãããŠããé§ãšçŸåšéžæãããŠããçºå°ç©ããããŸãã
``` public class Panzer { private string model; private Gun gun; private List<Armour> armours; private List<Ammo> ammos; private int health; public Ammo LoadedAmmo { get; set; } public Armour SelectedArmour { get; set; } } ```
æŠè»èšèšè
ãå€ããå°ãªããã³ã³ãã¯ãã§ããç¶ããããã«ãé©åãªåãã®3çš®é¡ã®è£
ç²ãè¿œå ãã匟è¬ããã¯ã«3çš®é¡ã®ããããã®ã·ã§ã«ã10åå
å¡«ãã2ã€ã®è£å©çãªãã©ã€ããŒãã¡ãœãããäœæããŸãã
``` private void AddArmours(int armourWidth) { armours.Add(new SArmour(armourWidth)); armours.Add(new HArmour(armourWidth)); armours.Add(new CArmour(armourWidth)); } private void LoadAmmos() { for(int i = 0; i < 10; i++) { ammos.Add(new APCartridge(this.gun)); ammos.Add(new HEATCartridge(this.gun)); ammos.Add(new HECartridge(this.gun)); } } ```
æŠè»èšèšè
ã¯æ¬¡ã®ããã«ãªããŸãã
``` public Panzer(string name, Gun someGun, int armourWidth, int h) { model = name; gun = someGun; health = h; armours = new List<Armour>(); ammos = new List<Ammo>(); AddArmours(armourWidth); LoadAmmos(); LoadedAmmo = null; SelectedArmour = armours[0];
ããã§åã³å€åã®å¯èœæ§ã䜿çšããŠããããšã«æ³šæããŠãã ããã ãªã¹ãã«ã¯AmmoããŒã¿ã¿ã€ãïŒèŠªã·ã§ã«ïŒããããããç§ãã¡ã®åŒŸè¬ã¯ããããã¿ã€ãã®ã·ã§ã«ãä¿æããŸãã ç¶æ¿ããããç¬èªã®çš®é¡ã®ã·ã§ã«ãäœæããå Žåãã·ã§ã«ã®çš®é¡ããšã«åå¥ã®ãªã¹ããäœæããå¿
èŠããããŸãã
æŠè»ã®ãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ã¯ãè£
ç²ã®éžæãéã®è£
å¡«ãå°æã®3ã€ã®æ¹æ³ã§æ§æãããŠããŸãã
ã¢ãŒããŒãéžæïŒ
``` public void SelectArmour(string type) { for (int i = 0; i < armours.Count; i++) { if (armours[i].type == type) { SelectedArmour = armours[i]; break; } } } ```
éãå
é»ããŸãã
``` public void LoadGun(string type) { for(int i = 0; i < ammos.Count; i++) { if(ammos[i].type == type) { LoadedAmmo = ammos[i]; Console.WriteLine("!"); return; } } Console.WriteLine($", , " + type + " !"); } ```
åé ã§è¿°ã¹ãããã«ããã®äŸã§ã¯ãåžžã«å¿µé ã«çœ®ããŠããå¿
èŠã®ããæœè±¡çãªæŠå¿µããé ãé¢ããããšããŸããã ãããã£ãŠãç§ãã¡ãšäžç·ã®çºå°ç©ã®åã€ã³ã¹ã¿ã³ã¹ã¯ãæŠéã®åã«æŠéããã¯ã«å
¥ããããç©ççãªçºå°ç©ãšåãã§ãã ãã®çµæãã·ã§ã«ã¯æãäžé©åãªç¬éã«çµäºããå¯èœæ§ããããŸãïŒ
æ®åœ±ããã«ã¯ïŒ
``` public Ammo Shoot() { if (LoadedAmmo != null) { Ammo firedAmmo = (Ammo)LoadedAmmo.Clone(); ammos.Remove(LoadedAmmo); LoadedAmmo = null; Random rnd = new Random(); int dice = rnd.Next(0, 100); bool hit = this.gun.IsOnTarget(dice); if (this.gun.IsOnTarget(dice)) { Console.WriteLine("!"); return firedAmmo; } else { Console.WriteLine("!"); return null; } } else Console.WriteLine(" "); return null; } ```
ããã§-ãã詳现ã«ã ãŸããéãè£
å¡«ãããŠãããã©ããã確èªãããã§ãã¯ããããŸãã 第äºã«ãé身ããé£ã³åºããç ²åŒŸã¯ãã®æŠè»ã«ã¯ãã¯ãååšãããå€§ç ²ã匟è¬åº«ã«ã¯ãããŸããã ããããç©ççã«ã¯ãŸã ååšããŠããŸã-ããã¯ç®æšã«åãã£ãŠé£ã¶ã ãããŠãããããããšãã¢ãŒããŒã®è²«éåãšã¿ãŒã²ãããžã®ãã¡ãŒãžã®èšç®ã«åå ããŸãã ãããã£ãŠããã®ã·ã§ã«ãæ°ããå€æ°Ammo firedAmmoã«ä¿åããŸãã 次ã®è¡ã§ã¯ããã®çºå°äœã¯ãã®æŠè»ã«ã¯ååšããªããªããããçºå°äœã®åºæ¬ã¯ã©ã¹ã«IClonableã€ã³ã¿ãŒãã§ã€ã¹ã䜿çšããå¿
èŠããããŸãã
``` public abstract class Ammo : ICloneable ```
ãã®ã€ã³ã¿ãŒãã§ã€ã¹ã«ã¯ãCloneïŒïŒã¡ãœããã®å®è£
ãå¿
èŠã§ãã ããã«ãããŸãïŒ
``` public object Clone() { return this.MemberwiseClone(); } ```
ããã§ãã¹ãŠãéåžžã«çŸå®çã«ãªããŸãããã·ã§ãããçºå°ããããšããµã€ã³ããçæãããéã¯IsOnTargetã¡ãœããã§ããããèšç®ããããããããå ŽåãShootã¡ãœããã¯çºå°ç©ã®ã€ã³ã¹ã¿ã³ã¹ãè¿ãããããèŠã€ãããªãå Žåã¯nullãè¿ããŸãã
æŠè»ã®æåŸã®æ¹æ³ã¯ãæµã®ç ²åŒŸãåœäžãããšãã®æåã§ãã
``` public void HandleHit(Ammo projectile) { if (SelectedArmour.IsPenetrated(projectile)) { this.health -= projectile.GetDamage(); } else Console.WriteLine(" ."); } ```
åã³ãã®ãã¹ãŠã®æ å
ã®å€åã ã·ã§ã«ãé£ãã§ããã ã©ãã§ãã éžæãããè£
ç²ãšçºå°äœã®ã¿ã€ãã«åºã¥ããŠãè£
ç²ã¯çªç ŽãããããããŸããã ãã¢ã¹ãããå Žåãç¹å®ã®ã·ã§ã«ã¿ã€ãã®GetDamageïŒïŒã¡ãœãããåŒã³åºãããŸãã
ãã¹ãŠæºåå®äºã§ãã ã³ã³ãœãŒã«ïŒãŸãã¯éã³ã³ãœãŒã«ïŒåºåãèšè¿°ããã ãã§ããŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ãæäŸããããã¬ã€ã€ãŒã®äº€äºã®åããå®è£
ãããŸãã
ãŸãšãããšã ç¶æ¿ãæ§æãããã³éçŽã䜿çšããããã°ã©ã ãäœæããŸããããéããç解ããæãåºããããšãé¡ã£ãŠããŸãã ããªã¢ãŒãã£ãºã ã®å¯èœæ§ãç©æ¥µçã«æŽ»çšããŸããããŸããåã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ã芪ã®ããŒã¿åãæã€ãªã¹ãã«çµåã§ããå ŽåããããŠæ¬¡ã«ã芪ã€ã³ã¹ã¿ã³ã¹ããã©ã¡ãŒã¿ãŒãšããŠååŸããã¡ãœãããäœæããããšã§ããã®äžã§åã®ã¡ãœãããåŒã³åºãããŸã ããã¹ãã®éçšã§ãå¯èœãªä»£æ¿å®è£
-ç¶æ¿ãéçŽã«çœ®ãæãã-ã«ã€ããŠèšåããŸããããæ®éçãªã¬ã·ãã¯ãããŸããã å®è£
ã§ã¯ãç¶æ¿ã«ãããã²ãŒã ã«æ°ãã詳现ãç°¡åã«è¿œå ã§ããŸããã ããšãã°ãæ°ããã¿ã€ãã®çºå°ç©ãè¿œå ããã«ã¯ã次ã®ãã®ã®ã¿ãå¿
èŠã§ãã
- å®éãæ¢åã®åã®1ã€ãã³ããŒããã³ã³ã¹ãã©ã¯ã¿ã«æž¡ãããååãšæååãã£ãŒã«ãã眮ãæããŸãã
- åã¢ãŒããŒã¯ã©ã¹ã«å¥ã®ifãè¿œå ããŸãã
- ãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ã®ã·ã§ã«éžæã¡ãã¥ãŒã«è¿œå ã®é
ç®ãè¿œå ããŸãã
åæ§ã«ãå¥ã®çš®é¡ã®ã¢ãŒããŒãè¿œå ããã«ã¯ããã®ã¿ã€ããèšè¿°ãããŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ã«ã¢ã€ãã ãè¿œå ããã ãã§ãã ä»ã®ã¯ã©ã¹ãŸãã¯ã¡ãœããã®å€æŽã¯å¿
èŠãããŸããã
以äžã«ã¯ã©ã¹ã®å³ã瀺ããŸãã
ã²ãŒã ã®æçµã³ãŒãã§ã¯ãããã¹ãã§äœ¿çšããããã¹ãŠã®ãããžãã¯ãã³ããŒããåå¥ã®éçæ§æã¯ã©ã¹ã«é
眮ãããŸãã ã³ãŒãã®ä»»æã®ãã©ã°ã¡ã³ãããéçã¯ã©ã¹ã®ãããªãã¯ãã£ãŒã«ãã«ã¢ã¯ã»ã¹ã§ãããã®ã€ã³ã¹ã¿ã³ã¹ãäœæããå¿
èŠã¯ãããŸããïŒäžå¯èœã§ãïŒã ããã¯ã©ã®ããã«èŠãããã§ãïŒ
``` public static class Config { public static List<string> ammoTypes = new List<string> { "", "", "" }; public static List<string> armourTypes = new List<string> { "", "", "" }; // - , , public static int _gunTrashold = 100; // public static int _defaultDamage = 3; // public static double _HEDamage = 1.0; public static double _HEATDamage = 0.6; public static double _APDamage = 0.3; // // : // , - 1.2 public static double _HArmour_VS_HE = 1.2; // , - 1.0 public static double _HArmour_VS_HEAT = 1.0; // , - 0.7 public static double _HArmour_VS_AP = 0.7; // // , - 1 public static double _Armour_VS_HE = 1.0; // , - 0.8 public static double _Armour_VS_HEAT = 0.8; // , - 1.2 public static double _Armour_VS_AP = 1.2; // // , - 0.8 public static double _SArmour_VS_HE = 0.8; // , - 1.2 public static double _SArmour_VS_HEAT = 1.2; // , - 1 public static double _SArmour_VS_AP = 1.0; } ```
ãããŠããã®ã¯ã©ã¹ã®ãããã§ãã¯ã©ã¹ãšã¡ãœãããããã«æ·±ãããããšãªããããã§ã®ã¿ãã©ã¡ãŒã¿ãŒãå€æŽããŠãããã«èª¿æŽããããšãã§ããŸãã ããšãã°ããµããã£ãªããŒã®çºå°äœã匷ãããããšãå€æããå ŽåãConfigã®1æ¡ãå€æŽããŸãã
ãã¹ãŠã®ã²ãŒã ã³ãŒãã¯
ããã§èŠãããšãã§ã
ãŸã ã