ãããŠãŸã ã²ãŒã ã§ãïŒ
ã¿ãªããããã«ã¡ã¯ïŒ è«äºã«ã€ããŠã®ç§ãã¡ã®ç©èªãæçµæ®µéã«è¿ã¥ããŠããã®ã§ãããªãããããèªãã§ããŠããããã§ãã
åã®èšäºã§ã³ãŒãã¹ã±ãããäœæããæ°æ¥åŸã«ïŒçµéšè±å¯ãªããã°ã©ããŒã®ã¢ããã€ã¹ã®ãããã§ïŒå®å
šã«æžãçŽãããã³ãŒãã説æä»ãã§äžãã衚瀺ããæºåãã§ããŸããã
å®æããã³ãŒãã¯ãç§ã®ãªããžããªããèšäºã®æåŸã«ããŠã³ããŒãã§ããŸãïŒåŸ
ã¡ãããªãå ŽåïŒã
æåããå§ããŸããããæåã®ãªããžã§ã¯ããåæããŸã
ããã§ã¯ãã¢ããªã±ãŒã·ã§ã³ã§äœãèµ·ãããããããŠããŒãïŒãã¡ããã³ãŒãïŒã§äœãèµ·ããããåæããŸãã
1çªç®ããã¡ãããå£ïŒå£ïŒ
2çªç®ã«ããããã¯ç§ãã¡ã®ãã¬ãŒã€ãŒïŒãã¬ãŒã€ãŒïŒã§ãã
3çªç®ãã·ã§ã«ïŒã·ã§ããïŒ
åé¡ãçºçããŸããããããã©ã®ããã«äœç³»åããé£æºãããã
ã·ã¹ãã ãäœæã§ããã®ã¯äœã§ããïŒ ãã¡ãããæ§é ã§ãããã©ã®æ§é ã«ããã©ã¡ãŒã¿ãå¿
èŠã§ãã 次ã«ãæåã®ãªããžã§ã¯ããäœæããŸã-ãããã¯åº§æšã§ãã 䟿å©ãªè¡šç€ºã®ããã«ã次ã®ã¯ã©ã¹ã䜿çšããŸãã
// public class Position { // public int X { get; set; } public int Y { get; set; } public Position(int x, int y) { X = x; Y = y; } }
2çªç®ã®ãã©ã¡ãŒã¿ãŒã¯èå¥çªå·ã§ããããã¯ãæ§é ã®åèŠçŽ ãç°ãªãå¿
èŠããããããæ§é ã®ããããïŒå
éšïŒã«IDãã£ãŒã«ããããããã§ãã
ãã®ã¯ã©ã¹ã«åºã¥ããŠæ§é ã®äœæãå§ããŸãããã
次ã«ãæ§é ãšãã®çžäºäœçšã«ã€ããŠèª¬æããŸãã
ãã¬ãŒã€ãŒã®æ§é ïŒPlayerStateïŒ
ãããã¯èšå€§ãªæ°ã®ã¡ãœãããæã¡ãéåžžã«éèŠã§ãïŒä»ã®äººãã¢ãã«ããã¬ã€ããŠç§»åããŸããïŒïŒã®ã§ãããããåå¥ã«éžã³ãŸããã
ãã£ãŒã«ããããããããŠã以äžã§èª¬æãéå§ããŸãã
private int ID { get; set; } private Position Position { get; set; } private Position LastPosition { get; set; } private int[] Collider_X { get; set; }// private int[] Collider_Y { get; set; } private int hp { get; set; } // static int dir;
ID-ç§ã¯ãã§ã«ããã説æããããšãã§ããŸãã
äœçœ®ã¯åãååã®ã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ã§ãããLastPositionã¯åã®äœçœ®ã§ã
ã³ã©ã€ããŒã¯ã³ã©ã€ããŒïŒããªãã®å¥åº·ã«åœ±é¿ãäžãããã€ã³ãïŒ
Playersæ§é ã«ã¯ãæ§é ã®ã€ã³ã¹ã¿ã³ã¹ãåŠçãã/ãµãŒããŒã«éä¿¡ããã€ã³ã¹ã¿ã³ã¹ãæºåããã¡ãœãããå«ãŸããŠããå¿
èŠããããŸãããããã®ã¿ã¹ã¯ã§ã¯ã次ã®ã¡ãœããã䜿çšããŸãã
public static void hp_minus(PlayerState player, int hp) public static void NewPosition(PlayerState player, int X, int Y) private static bool ForExeption(Position startPosition) public static ShotState CreateShot(PlayerState player, int dir_player, int damage) public static void WriteToLastPosition(PlayerState player, string TEXT)
1ã€ç®ã®æ¹æ³ã¯ããã¬ãŒã€ãŒããäžå®éã®ãã«ã¹ãååŸããæ¹æ³ã§ãã
2çªç®ã®æ¹æ³ã¯ããã¬ãŒã€ãŒã«æ°ããäœçœ®ãå²ãåœãŠãããã«å¿
èŠã§ãã
ã¿ã³ã¯ãäœæãããšãã«ãšã©ãŒãçºçããªãããã«ãã³ã³ã¹ãã©ã¯ã¿ã§3çªç®ã䜿çšããŸãã
4çªç®ã¯ã·ã§ãããçºå°ããŸãïŒã€ãŸããæŠè»ãã匟䞞ãçºå°ããŸãïŒã
5çªç®ã¯ãã¬ãŒã€ãŒã®åã®äœçœ®ã«ããã¹ããå°å·ããå¿
èŠããããŸãïŒConsole.ClearïŒïŒãåŒã³åºããŠã³ã³ãœãŒã«ç»é¢ã®ãã¹ãŠã®ãã¬ãŒã ãæŽæ°ããªãã§ãã ããïŒã
ããã§ãã¡ãœããããšã«åå¥ã«ãã€ãŸããã³ãŒããåæããŸãã
1çªç®ïŒ
/// <summary> /// /// </summary> /// <param name="player"></param> /// <param name="hp"> </param> public static void hp_minus(PlayerState player, int hp) { player.hp -= hp; }
ããã§èª¬æããããšã¯ããŸããªããšæããŸãããã®æŒç®åã¬ã³ãŒãã¯ãããšå®å
šã«åçã§ãã
player.hp = player.hp - hp;
ãã®ã¡ãœããã®æ®ãã¯è¿œå ãããŸããã
2çªç®ïŒ
/// <summary> /// /// </summary> /// <param name="player"></param> /// <param name="X"> X</param> /// <param name="Y"> Y</param> public static void NewPosition(PlayerState player, int X, int Y) { if ((X > 0 && X < Width) && (Y > 0 && Y < Height)) { player.LastPosition = player.Position; player.Position.X = X; player.Position.Y = Y; player.Collider_X = new int[3]; player.Collider_Y = new int[3]; player.Collider_Y[0] = Y; player.Collider_Y[1] = Y + 1; player.Collider_Y[2] = Y + 2; player.Collider_X[0] = X; player.Collider_X[1] = X + 1; player.Collider_X[2] = X + 2; } }
ããã§æ¡ä»¶ãçµã¿åãããŠãå¥ã®ãã¬ã€ã€ãŒïŒã³ã³ãœãŒã«ã§çªç¶ã©ã°ãçºçããïŒã競æå Žãé¢ããããšãã§ããªãããã«ããŸãã ã¡ãªã¿ã«ã䜿çšãããã£ãŒã«ãïŒé«ããšå¹
ïŒã¯ããã£ãŒã«ãã®å¢çïŒé«ããšå¹
ïŒã瀺ããŸãã
3çªç®ïŒ
private static bool ForExeption(Position startPosition) { if (startPosition.X > 0 && startPosition.Y > 0) return true; return false; }
ããã§ã¯ã座æšã競æå Žã®ãµã€ãºããå°ããããããšã¯ã§ããŸããã
ã¡ãªã¿ã«ãã³ã³ãœãŒã«ã§ã¯ã座æšç³»ã¯å·Šäžé
ïŒãã€ã³ã0; 0ïŒããå§ãŸããxã§80ãyã§80ã«å¶éïŒèšå®å¯èœïŒããããŸãã xã80ã«éãããšã¯ã©ãã·ã¥ãïŒã€ãŸããã¢ããªã±ãŒã·ã§ã³ãå£ããŸãïŒã80ãyã«ãªããšããã£ãŒã«ãã®ãµã€ãºãåçŽã«å¢å ããŸãïŒã³ã³ãœãŒã«ãã¯ãªãã¯ããŠããããã£ãéžæãããšããããã®å¶éãæ§æã§ããŸãïŒã
5æ¥ïŒ
public static void WriteToLastPosition(PlayerState player, string TEXT) { Console.CursorLeft = player.LastPosition.X; Console.CursorTop = player.LastPosition.Y; Console.Write(TEXT); }
ããã§ã¯ãããã¹ããåã®äœçœ®ã«å°å·ããŸãïŒãã€ã³ãããŸãïŒã
ã·ã§ã«ã®æ§é ããŸã çºè¡šããŠããªãããã4çªç®ã®æ¹æ³ã¯ãããŸããã
圌女ã®è©±ãããŸãããã
ã·ã§ã«æ§é ïŒShotStateïŒ
ãã®æ§é ã¯ãã·ã§ã«ã®åããèšè¿°ããã·ã§ã«ã®ãã¹ããå¿ãããïŒãã€ã³ãããïŒå¿
èŠããããŸãã
åçºå°äœã«ã¯ãæ¹åãåæäœçœ®ãããã³æå·ãå¿
èŠã§ãã
ããªãã¡ ãã®ãã£ãŒã«ãã¯æ¬¡ã®ãšããã§ãã
private Position Shot_position { get; set; } private int dir { get; set; } private int ID_Player { get; set; } private int damage { get; set; } private List<int> x_way { get; set; } private List<int> y_way { get; set; }
äœçœ®ã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ã¯çºå°ç©ã®çŸåšã®äœçœ®ãdirã¯çºå°ç©ã®åãã®æ¹åãID_Playerã¯çºå°ç©ãçºå°ãããã¬ã€ã€ãŒã®IDãæå·ã¯ãã®çºå°ç©ã®æå·ãx_wayã¯Xã®åããy_wayã¯Yã®çºå°ç©ã®åãã§ãã
ããã«ãã¹ãŠã®ã¡ãœãããšãã£ãŒã«ãããããŸãïŒä»¥äžã®èª¬æïŒ
/// <summary> /// ( ) /// </summary> /// <param name="shot"></param> public static void ForgetTheWay(ShotState shot) { int[] x = ShotState.x_way_array(shot); int[] y = ShotState.y_way_array(shot); switch (shot.dir) { case 0: { for (int i = 0; i < x.Length - 1; i++) { Console.CursorTop = y[0]; Console.CursorLeft = x[i]; Console.Write("0"); } } break; case 90: { for (int i = 0; i < y.Length - 1; i++) { Console.CursorLeft = x[0]; Console.CursorTop = y[i]; Console.Write("0"); } } break; case 180: { for (int i = 0; i < x.Length - 1; i++) { Console.CursorLeft = x[i]; Console.CursorTop = y[0]; Console.Write("0"); } } break; case 270: { for (int i = 0; i < y.Length - 1; i++) { Console.CursorTop = y[i]; Console.CursorLeft = x[0]; Console.Write("0"); } } break; } } /// <summary> /// /// </summary> /// <param name="positionShot"> </param> /// <param name="dir_"> </param> /// <param name="ID_Player"> </param> /// <param name="dam"> </param> public ShotState(Position positionShot, int dir_, int ID_Player_, int dam) { Shot_position = positionShot; dir = dir_; ID_Player = ID_Player_; damage = dam; x_way = new List<int>(); y_way = new List<int>(); x_way.Add(Shot_position.X); y_way.Add(Shot_position.Y); } public static string To_string(ShotState shot) { return shot.ID_Player.ToString() + ":" + shot.Shot_position.X + ":" + shot.Shot_position.Y + ":" + shot.dir + ":" + shot.damage; } private Position Shot_position { get; set; } private int dir { get; set; } private int ID_Player { get; set; } private int damage { get; set; } private List<int> x_way { get; set; } private List<int> y_way { get; set; } private static int[] x_way_array(ShotState shot) { return shot.x_way.ToArray(); } private static int[] y_way_array(ShotState shot) { return shot.y_way.ToArray(); } public static void NewPosition(ShotState shot, int X, int Y) { shot.Shot_position.X = X; shot.Shot_position.Y = Y; shot.x_way.Add(shot.Shot_position.X); shot.y_way.Add(shot.Shot_position.Y); } public static void WriteShot(ShotState shot) { Console.CursorLeft = shot.Shot_position.X; Console.CursorTop = shot.Shot_position.Y; Console.Write("0"); } public static void Position_plus_plus(ShotState shot) { switch (shot.dir) { case 0: { shot.Shot_position.X += 1; } break; case 90: { shot.Shot_position.Y += 1; } break; case 180: { shot.Shot_position.X -= 1; } break; case 270: { shot.Shot_position.Y -= 1; } break; } Console.ForegroundColor = ConsoleColor.White; Console.CursorLeft = shot.Shot_position.X; Console.CursorTop = shot.Shot_position.Y; Console.Write("0"); shot.x_way.Add(shot.Shot_position.X); shot.y_way.Add(shot.Shot_position.Y); } public static Position ReturnShotPosition(ShotState shot) { return shot.Shot_position; } public static int ReturnDamage(ShotState shot) { return shot.damage; }
æåã®æ¹æ³-ãã®ãã¹ãæã€ã³ã¬ã¯ã·ã§ã³ã䜿çšããŠãã³ã³ãœãŒã«å
ã®ãã¹ãå¿ããŸãïŒã€ãŸãããã€ã³ãããŸãïŒã
次ã¯ã³ã³ã¹ãã©ã¯ã¿ãŒïŒã€ãŸããæ§é äœã®ã€ã³ã¹ã¿ã³ã¹ãæ§æããã¡ã€ã³ã¡ãœããïŒã§ãã
3çªç®ã®æ¹æ³-ãã¹ãŠã®æ
å ±ãããã¹ã圢åŒã§è¡šç€ºããéä¿¡æã«ã®ã¿äœ¿çšãããŸã
ãµãŒããŒã«ã
ããã«ã¡ãœããã¯ãå°æ¥ã®äœ¿çšã®ããã«ããã€ãã®ãã£ãŒã«ããå°å·/è¿ããŸãã
æ§é ãWallïŒWallStateïŒã
ãã®æ§é ã®ãã¹ãŠã®ãã£ãŒã«ããšãå£ãè¡šçŸããå£ãæå·ãããæ¹æ³ã
ãã®ãã£ãŒã«ããšã¡ãœããã¯æ¬¡ã®ãšããã§ãã
private Position Wall_block { get; set; } private int HP { get; set; } private static void hp_minus(WallState wall ,int damage) { wall.HP -= damage; } /// <summary> /// /// </summary> /// <param name="bloc"> </param> /// <param name="hp"></param> public WallState(Position bloc, int hp) { Wall_block = bloc; HP = hp; } public static bool Return_hit_or_not(Position pos, int damage) { if (pos.X <= 0 || pos.Y <= 0 || pos.X >= Width || pos.Y >= Height) { return true; } // // // for (int i = 0; i < Walls.Count; i++) { if ((Walls[i].Wall_block.X == pos.X) && (Walls[i].Wall_block.Y == pos.Y)) { WallState.hp_minus(Walls[i], damage); if (Walls[i].HP <= 0) { Console.CursorLeft = pos.X; Console.CursorTop = pos.Y; Console.ForegroundColor = ConsoleColor.Black; Walls.RemoveAt(i); Console.Write("0"); Console.ForegroundColor = ConsoleColor.White; } return true; } } return false; }
ã ããããã«ã ç¹å®ã®çµæãèŠçŽããããã
ãªã 'Return_hit_or_not'ã¡ãœãããå¿
èŠãªã®ã§ããïŒ åº§æšããªããžã§ã¯ãã«è§Šãããã©ãããè¿ããããã«ãã¡ãŒãžãäžããŸãã 'CreateShot'ã¡ãœããã¯ãã³ã³ã¹ãã©ã¯ã¿ãŒããã·ã§ã«ãäœæããŸãã
æ§é ççžäºäœçš
ã¡ã€ã³ã¹ã¬ããã«ã¯2ã€ã®äžŠåã¹ã¬ããïŒã¿ã¹ã¯ïŒãããããããã«åºã¥ããŠæ§ç¯ããŸãã
Task tasc = new Task(() => { Event_listener(); }); Task task = new Task(() => { To_key(); }); tasc.Start(); task.Start(); Task.WaitAll(task, tasc);
ã©ããªæµãïŒ æåã¯ãµãŒããŒããããŒã¿ãåä¿¡ããŠââåŠçãã2çªç®ã¯ãµãŒããŒã«ããŒã¿ãéä¿¡ããŸãã
ãã®ããããµãŒããŒããªãã¹ã³ïŒã€ãŸãããµãŒããŒããããŒã¿ãåä¿¡ïŒããåä¿¡ããããŒã¿ãåŠçããéä¿¡ãããããŒã¿ã«å¯ŸããŠæäœãå®è¡ããå¿
èŠããããŸãã
ãããžã§ã¯ãã®ãµãŒããŒããåä¿¡ããããŒã¿ã¯ãã¹ãŠãåŒæ°ïŒã€ãã³ãåãªã©ïŒããïŒãèšå·ã§åºåãããã€ãã³ããªããžã§ã¯ãã§ããã€ãŸããåºåã§ã¯æ¬¡ã®ã¹ããŒã ããããŸããEventNameïŒArg1ïŒArg2ïŒArg3ïŒ... ArgN
ãããã£ãŠã2ã€ã®ã¿ã€ãã®ã€ãã³ãïŒãããã¯äžèŠã«ãªã£ãããïŒãšããããžã§ã¯ãã®æ§é èŠçŽ ãšã®çžäºäœçšãã€ãŸãã¿ã³ã¯ã®åããšäœæ+çºå°ç©ã®åãããããŸãã
ããããç§ãã¡ã¯ãŸã äœãåŠçããã®ãã§ã¯ãªãããã®ããŒã¿ãåä¿¡ããæ¹æ³ãç¥ããªãã®ã§ãæãçŸãããµã€ãã«ç§»åãïŒèšäºã®äžéšã«ãããªã³ã¯ïŒããããã¯ãŒã¯ãšãœã±ããïŒUDPãå¿
èŠã§ãïŒã«ã€ããŠèªã¿ãã³ãŒããååŸããŠèªåã§ããçŽããŸãïŒå¿ããªãã§ãã ããïŒèããã«ã³ããŒããã®ã§ã¯ãªãããã®ãµã€ãã®æ
å ±ã詳ãã調ã¹ãå¿
èŠããããŸãïŒãåºåã¯æ¬¡ã®ã³ãŒãã§ãïŒ
static void Event_listener() { // UdpClient UdpClient receivingUdpClient = new UdpClient(localPort); IPEndPoint RemoteIpEndPoint = null; try { /*th - ( )*/ while (th) { // byte[] receiveBytes = receivingUdpClient.Receive(ref RemoteIpEndPoint); // string returnData = Encoding.UTF8.GetString(receiveBytes); //TYPEEVENT:ARG // string[] data = returnData.Split(':').ToArray<string>(); // Task t = new Task(() =>{ Event_work(data); }); t.Start(); // } } catch (Exception ex) { Console.Clear(); Console.WriteLine(" : " + ex.ToString() + "\n " + ex.Message); th = false;// - } }
ããã§ã¯ãäžã§è¿°ã¹ãããšãæ£ç¢ºã«å®è¡ããå®å
šã«æºåãããã³ãŒãããããŸããã€ãŸããããSplitïŒ:)ãã¡ãœããã§ããã¹ããæååã®é
åã«åå²ããããToArrayïŒïŒãã¡ãœããã§ãã®é
åããããŒã¿ãå€æ°ã«åéããŸãããã®åŸãæ°ããã¹ã¬ããïŒéåæãã€ãŸãããã®ã¡ãœããã§ã®ã¿ã¹ã¯ã®å®è¡ã«é¢ä¿ãªãå®è¡ãããïŒãšãMainãã¡ãœãããäœæããèšè¿°ããŠéå§ããŸãïŒã.StartïŒïŒãã¡ãœããã䜿çšïŒã
ã³ãŒãä»ãã®ç»å圢åŒã®å°ããªèª¬æïŒãã®ã¢ã€ãã¢ããã¹ãããããã«ãã®ã³ãŒãã䜿çšããŸããïŒããã®ã³ãŒãã¯ãããžã§ã¯ããšã¯é¢ä¿ãªãããã®ã³ãŒãããã¹ããïŒåæ§ã«ïŒã1ã€ã®éåžžã«éèŠãªã¿ã¹ã¯ã解決ããããã«äœæãããŸããïŒã³ãŒãã¯åºæ¬çã«ã¡ãœããã§ããã ãã¿ãã¬ïŒã¯ãïŒ
static void Main(string[] args) { //int id = 0; //Task tasc = new Task(() => { SetBrightness(); }); //Task task = new Task(() => { SetBrightness(); }); //tasc.Start(); //task.Start(); //Task.WaitAll(task, tasc); for (int i = 0; i < 5; i++) { Task tasc = new Task(() => { SetBrightness(); }); tasc.Start(); //Thread.Sleep(5); } Console.WriteLine("It's end"); Console.Read(); } public static void SetBrightness() { for (int i = 0; i < 7; i++) { int id = i; switch (id) { case 1: { Console.ForegroundColor = ConsoleColor.White; } break; case 2: { Console.ForegroundColor = ConsoleColor.Yellow; } break; case 3: { Console.ForegroundColor = ConsoleColor.Cyan; } break; case 4: { Console.ForegroundColor = ConsoleColor.Magenta; } break; case 5: { Console.ForegroundColor = ConsoleColor.Green; } break; case 6: { Console.ForegroundColor = ConsoleColor.Blue; } break; } Console.WriteLine(""); } }
ãããŠã圌ã®äœåã¯æ¬¡ã®ãšããã§ãã

å®è¡äžã®4ã€ã®ã¹ã¬ããïŒãã®ãã¡ã®1ã€ã¯ã»ãŒä»äºãçµããŠããŸãïŒïŒ

ã¹ããªãŒã ã«ãã£ãŠå®è¡ãããã¡ãœããã«ããã«ããŸãã¯ããã移åããŸãã
static void Event_work(string[] Event) { // EventType // ( ) // , ( ) int ID = int.Parse(Event[1]), X = int.Parse(Event[2]), Y = int.Parse(Event[3]), DIR = int.Parse(Event[4]); switch (Event[0]) { case "movetank": { Print_tanks(ID, X, Y, DIR); } break; case "createshot": { ShotState shot = new ShotState(new Position(X, Y), DIR, ID, int.Parse(Event[4])); MoveShot(shot); } break; default: { return; } break; } }
ã€ãã³ãã®ã¿ã€ãããmovetankãã®å ŽåããWallsããšãTankãã®èŠçŽ ã®ã¿ãçžäºäœçšããŸãã
ãã ããã€ãã³ãã¿ã€ãããcreateshotãã®å Žåããã¹ãŠãæåéãçžäºäœçšããŸãã
ã·ã§ãããå£ã«è§Šããå Žå-ããã圌女ã®äœåã奪ããã·ã§ããããã¬ã€ã€ãŒã«è§Šããå Žå-ãããŠã·ã§ãããé£ã³å»ã£ãå Žåã圌ã¯åœŒã®äœåãåããŸãã-ãããŠããã¯æ¶ããŠã¯ãªã¢ãããŸããã
å¥ã®ã€ãã³ããããå Žåã¯ããã®ã¡ãœãããçµäºããŸãããã¹ãŠãã·ã³ãã«ã«æããŸãã
ãããããã¹ãŠãããã»ã©åçŽã§ã¯ãªãã®ã§ãåŒã³åºãããã¡ãœãããããæ·±ããããæ£ç¢ºã«æãäžãããšããžã¥ãŒã¹èªäœãå§ãŸããŸãã
ãããã®ã¡ãœããã®ååããã1ã€ç®ã¯æŠè»ã®åããã€ãŸãã³ã©ã€ããŒã®æç»ãšç§»åã§ããã2ã€ç®ã¯ã·ã§ããã®äœæãšçºå°ã§ããããšã¯æããã§ãã
ã¿ã³ã¯ãåŒãæ¹æ³ïŒ
static void Print_tanks(int id, int x, int y, int dir) { PlayerState player = Players[id]; Console.ForegroundColor = ConsoleColor.Black; PlayerState.WriteToLastPosition(player, "000\n000\n000"); switch (id) { case 0: { Console.ForegroundColor = ConsoleColor.White; } break; case 1: { Console.ForegroundColor = ConsoleColor.Yellow; } break; case 2: { Console.ForegroundColor = ConsoleColor.Cyan; } break; case 3: { Console.ForegroundColor = ConsoleColor.Magenta; } break; case 4: { Console.ForegroundColor = ConsoleColor.Green; } break; case 5: { Console.ForegroundColor = ConsoleColor.Blue; } break; } PlayerState.NewPosition(player, x, y); switch (dir) { case 270: case 90: { Console.CursorLeft = x; Console.CursorTop = y; Console.Write("0 0\n000\n0 0"); } break; case 180: case 0: { Console.CursorLeft = x; Console.CursorTop = y; Console.Write("000\n 0 \n000"); } break; } }
ãããŠæåŸã®æ¹æ³ïŒçºå°äœçšïŒäœæããŠç§»åïŒïŒïŒ
private static void MoveShot(ShotState shot) { ShotState Shot = shot; while ((!PlayerState.Return_hit_or_not(ShotState.ReturnShotPosition(Shot), ShotState.ReturnDamage(Shot))) && (!WallState.Return_hit_or_not(ShotState.ReturnShotPosition(Shot), ShotState.ReturnDamage(Shot)))) {
ãããã€ãã³ãã®åä¿¡ãšåŠçã®ãã¹ãŠã§ãã次ã«ãäœæïŒãµãŒããŒãžã®ã€ãã³ãã®äœæãšéä¿¡ã®æ¹æ³ïŒã«é²ã¿ãŸãããã
ã€ãã³ããäœæããŸãïŒTo_keyïŒïŒïŒ
ã€ãã³ããäœæãã座æšãå€æŽããããããã¹ãŠãµãŒããŒã«éä¿¡ããã¡ãœããå
šäœã次ã«ç€ºããŸãïŒä»¥äžã®èª¬æïŒã
static void To_key() { // PlayerState MyTank = Players[MY_ID]; System.Threading.Timer time = new System.Threading.Timer(new TimerCallback(from_to_key), null, 0, 10); while (true) { Console.CursorTop = 90; Console.CursorLeft = 90; switch (Console.ReadKey().Key) { case ConsoleKey.Escape: { time.Dispose(); th = false; break; } break; // case ConsoleKey.Spacebar: { if (for_shot) { //"createshot" var shot = PlayerState.CreateShot(Players[MY_ID], PlayerState.NewPosition_X(MyTank, '\0'), 3); MessageToServer("createshot:" + PlayerState.To_string(MyTank) + ":3");// - 3 var thr = new Task(() => { MoveShot(shot); }); for_key = false;// for_shot = false;// } } break; case ConsoleKey.LeftArrow: { if (for_key) { PlayerState.NewPosition_X(MyTank, '-'); MessageToServer("movetank:" + PlayerState.To_string(MyTank)); for_key = false; } } break; case ConsoleKey.UpArrow: { if (for_key) { PlayerState.NewPosition_Y(MyTank, '-'); MessageToServer("movetank:" + PlayerState.To_string(MyTank)); for_key = false; } } break; case ConsoleKey.RightArrow: { if (for_key) { PlayerState.NewPosition_X(MyTank, '+'); MessageToServer("movetank:" + PlayerState.To_string(MyTank)); for_key = false; } } break; case ConsoleKey.DownArrow: { if (for_key) { PlayerState.NewPosition_Y(MyTank, '+'); MessageToServer("movetank:" + PlayerState.To_string(MyTank)); for_key = false; } } break; case ConsoleKey.PrintScreen: { } break; case ConsoleKey.A: { if (for_key) { PlayerState.NewPosition_X(MyTank, '-'); MessageToServer("movetank:" + PlayerState.To_string(MyTank)); for_key = false; } } break; case ConsoleKey.D: { if (for_key) { PlayerState.NewPosition_X(MyTank, '+'); MessageToServer("movetank:" + PlayerState.To_string(MyTank)); for_key = false; } } break; // case ConsoleKey.E: { if (for_shot) { for_key = false; for_shot = false; } } break; // , case ConsoleKey.Q: break; case ConsoleKey.S: { if (for_key) { PlayerState.NewPosition_Y(MyTank, '+'); MessageToServer("movetank:" + PlayerState.To_string(MyTank)); for_key = false; } } break; case ConsoleKey.W: { if (for_key) { PlayerState.NewPosition_Y(MyTank, '-'); MessageToServer("movetank:" + PlayerState.To_string(MyTank)); for_key = false; } } break; case ConsoleKey.NumPad2: { if (for_key) { PlayerState.NewPosition_Y(MyTank, '+'); MessageToServer("movetank:" + PlayerState.To_string(MyTank)); for_key = false; } } break; case ConsoleKey.NumPad4: { if (for_key) { PlayerState.NewPosition_X(MyTank, '-'); MessageToServer(PlayerState.To_string(MyTank)); } } break; case ConsoleKey.NumPad6: { if (for_key) { PlayerState.NewPosition_X(MyTank, '+'); MessageToServer("movetank:" + PlayerState.To_string(MyTank)); for_key = false; } } break; // case ConsoleKey.NumPad7: { if (for_shot) { for_key = false; for_shot = false; } } break; case ConsoleKey.NumPad8: { if (for_key) { PlayerState.NewPosition_Y(MyTank, '-'); MessageToServer("movetank:" + PlayerState.To_string(MyTank)); for_key = false; } } break; // case ConsoleKey.NumPad9: break; default: break; } } }
ããã§ã¯ãåããMessageToServerãã¡ãœããã䜿çšããŸãããã®ç®çã¯ãããŒã¿ããµãŒããŒã«éä¿¡ããããšã§ãã
ãããŠãã¡ãœãã 'NewPosition_Y'ããã³ 'NewPosition_X'ã¯ãæŠè»ã«æ°ããäœçœ®ãå²ãåœãŠãŸãã
ïŒå Žå-䜿çšãããããŒãç§ã¯äž»ã«ç¢å°ãšã¹ããŒã¹ããŒã䜿çšããŸã-ããªãã¯ããªãèªèº«ã®ãªãã·ã§ã³ãéžæãã 'ãSpase'ã±ãŒã¹ããããªãã«æé©ãªãªãã·ã§ã³ã«ã³ãŒããã³ããŒïŒããŒã¹ãããããšãã§ããŸãïŒãŸãã¯èªåã§æžããŠãã ããïŒããŒãæå®ããŠãã ããïŒïŒ
ãããŠãããã¯ã¯ã©ã€ã¢ã³ããµãŒããŒã€ãã³ãã®çžäºäœçšããã®æåŸã®ã¡ãœããã§ããããµãŒããŒèªäœã«éä¿¡ããŸãïŒ
static void MessageToServer(string data) { /* */ // UdpClient UdpClient sender = new UdpClient(); // endPoint IPEndPoint endPoint = new IPEndPoint(remoteIPAddress, remotePort); try { // byte[] bytes = Encoding.UTF8.GetBytes(data); // sender.Send(bytes, bytes.Length, endPoint); } catch (Exception ex) { Console.WriteLine(" : " + ex.ToString() + "\n " + ex.Message); th = false; } finally { // sender.Close(); } }
ä»æãéèŠãªããšã¯ãåããšã·ã§ããããªããŒãããããšã§ãïŒåããŒããšããŠåãããªããŒãããä»ã®ãã·ã³ã§åŠçããããã®çãããŠã³ã¿ã€ã ïŒã
ããã¯ã 'To_keyïŒïŒ'ã¡ãœããã®ã¿ã€ããŒããŸã㯠'System.Threading.Timer time = new System.Threading.TimerïŒfrom_to_keyïŒïŒãnullã0ã10ïŒ;'ã«ãã£ãŠè¡ãããŸãã
ãã®ã³ãŒãè¡ã§ã¯ãæ°ããã¿ã€ããŒãäœæããå¶åŸ¡ã¡ãœããïŒãfrom_to_keyïŒïŒãïŒãå²ãåœãŠããnullããäœãæž¡ããªãããšã瀺ããŸããã¿ã€ããŒã0ãã®ã«ãŠã³ããå§ãŸãæéïŒãŒãããªç§ïŒ1000ããªç§ïŒããªç§ïŒïŒ- 1sïŒç§ïŒïŒããã³ã¡ãœããåŒã³åºãééïŒããªç§ïŒã¯ '10'ã§ãïŒã¡ãªã¿ã«ã 'To_keyïŒïŒ'ã¡ãœããã¯å®å
šã«ãªããŒãããããã«æ§æãããŠããŸãïŒããã¯ãããã°ã©ã ã¯ã©ã¹ã®ãã£ãŒã«ãã«é¢é£ä»ããããŠããå Žåã®æ¡ä»¶ã§è¡šãããŸãïŒïŒã
ãã®ã¡ãœããã¯æ¬¡ã®ããã«ãªããŸãã
private static void from_to_key(object ob) { for_key = true; cooldown--; if (cooldown <= 0) { for_shot = true; cooldown = 10; } }
ãã¯ãŒã«ããŠã³ãã¯ãªããŒãïŒã·ã§ããïŒã§ãã
ããã§ãããã®ãããžã§ã¯ãã®ã»ãšãã©ã®èŠçŽ ã¯ãã£ãŒã«ãã§ãã
private static IPAddress remoteIPAddress;// private static int remotePort;// private static int localPort = 1011;// static List<PlayerState> Players = new List<PlayerState>();// static List<WallState> Walls = new List<WallState>();// //-------------------------------- static string host = "localhost"; //-------------------------------- /* */ static int Width;/* */ static int Height; static bool for_key = false; static bool for_shot = false; static int cooldown = 10; static int MY_ID = 0; static bool th = true;//
æåŸã«çµãã
ããã§tankãããžã§ã¯ãã®ã³ãŒãã®èª¬æã¯çµäºã§ãããµãŒããŒïŒå£ãæŠè»ïŒãã¬ã€ã€ãŒïŒïŒããã®ããŒã¿ã®ããŒããããã³ç§ãã¡ã®æŠè»ãžã®åº§æšã®å²ãåœãŠãé€ããŠãã»ãŒãã¹ãŠãå®è£
ã§ããŸããã ããã«ã€ããŠã¯ã次ã®èšäºã§å¯ŸåŠããŸãã次ã®èšäºã§ã¯ããã§ã«ãµãŒããŒã«ã€ããŠè§ŠããŸãã
èšäºã«èšèŒãããŠãããªã³ã¯ïŒ
ç§ã®ãªããžããªãã®ã³ãŒããæžããŠæ°ããããšãæããŠãããã¯ãŒã«ãªããã°ã©ããŒïŒ
Habra-Mikhail ã
norver ã
ãã®èšäºãèªãã§ãããŠããããšããç§ãããªãã®æèŠã«äœããã®åœ¢ã§ééã£ãŠãããªã-ã³ã¡ã³ãã«æžããŠãã ããããããŠç§ãã¡ã¯äžç·ã«ãããå€ããŸãã
ãŸãããããžã§ã¯ããšã³ãŒãã®äž¡æ¹ã®æ¹åã«ã€ããŠè°è«ããŠãããããã³ã¡ã³ãã«ã泚æããŠãã ããã æ¬ã®ç¿»èš³ãæäŒãããå Žåã¯ãã¡ãã»ãŒãžãŸãã¯ã¡ãŒã«ã§ç§ã«ã¡ãŒã«ããŠãã ããïŒkoito_tyan@mail.ruã
ã²ãŒã ãå§ããŸãããïŒ