private void Move(moveType type) { Vector3D v = new Vector3D(0, 0, 0); switch (type) { case moveType.xp: v = new Vector3D(step, 0, 0); break; case moveType.xn: v = new Vector3D(-1 * step, 0, 0); break; case moveType.yp: v = new Vector3D(0, step, 0); break; case moveType.yn: v = new Vector3D(0, -1 * step, 0); break; default: break; } for (int i = 0; i < m_PointList.Count; i++) { //m_PointList[i] =m_PointList[i]+ v; m_PointList[i] += v; } eyeshot.Entities.Clear(); CheckInterference(); //eyeshot.Entities.Add(new PointCloud(m_PointList, 5), m_LayerList[m_PointCloudLayer], Color.Red); ShowPoints(m_PointList, Color.Red, true); }
private int evaluate(moveType player, int[] gameMatrix) { moveType opp = (moveType)(-1 * (int)player); int sScore = 0; //state score for (int i = 0; i < 56; i++) { if (gameMatrix[i] == (int)player * 4) { sScore += (int)1e6; } else if (gameMatrix[i] == (int)opp * 4) { sScore -= (int)1e6; } else if (gameMatrix[i] == (int)player * 3) { sScore += (int)1e3; } else if (gameMatrix[i] == (int)opp * 3) { sScore -= (int)1e3; } else if (gameMatrix[i] == (int)player * 2) { sScore += 10; } else if (gameMatrix[i] == (int)opp * 2) { sScore -= 10; } } return(sScore); }
private int findBestMove(moveType player) { int bestCell = -1; int bestVal = (int)-1e9; for (int cell = 0; cell < 32; cell++) { if (visited[cell] == moveType.EMPTY) { visited[cell] = player; for (int i = 0; i < 56; i++) { nextState[i] = gameMatrix[i] + (int)player * a[cell][i]; } int moveVal = minimax(visited, nextState, player, 0, false, (int)-1e9, (int)1e9); //undo the move visited[cell] = moveType.EMPTY; for (int i = 0; i < 56; i++) { nextState[i] = gameMatrix[i]; } if (moveVal > bestVal) { bestVal = moveVal; bestCell = cell; } } } return(bestCell); }
public int computerMove(moveType type, levelType level) { int cnt = 0; for (int i = 0; i < 32; i++) { if (visited[i] != moveType.EMPTY) { cnt++; } } int move = -1; if (level == levelType.EASY) { move = randomMove(); } else if (level == levelType.HARD && cnt >= 20) { move = findBestMove(type); } else { move = mediumMove(type); } visited[move] = type; for (int i = 0; i < 56; i++) { gameMatrix[i] += (int)type * a[move][i]; } return(move); }
public Move(string name, moveType moveType, int damage, int accuracy) { this.name = name; this.moveType = moveType; this.damage = damage; this.accuracy = accuracy; }
public Move(int start, int end, int cube, moveType type) { _startPosition = start; _destination = end; _type = type; _cubeUsed = cube; }
public AttackEffect theEffect; //the effect itself public void copy(BattleMove other) //a copy constructor { this.theType = other.theType; this.moveName = other.moveName; this.movePower = other.movePower; this.moveMpCost = other.moveMpCost; this.moveSpCost = other.moveSpCost; this.theEffect = other.theEffect; }
public string Attack(Wrestler wrestler, Wrestler opponent, moveType moveType) { Random rnd = new Random(); switch (moveType) { case moveType.Punch: this.damage = rnd.Next(5, 11); this.accuracy = rnd.Next(1, 11); if (this.accuracy > 3) { return(wrestler.name + " punches " + opponent.name + " for " + this.damage); } return(wrestler.name + " misses the punch!"); case moveType.Kick: this.damage = rnd.Next(10, 26); this.accuracy = rnd.Next(1, 11); if (this.accuracy > 5) { return(wrestler.name + " kicks " + opponent.name + " for " + this.damage); } return(wrestler.name + " misses the kick!"); case moveType.Grapple: this.damage = rnd.Next(20, 31); this.accuracy = rnd.Next(1, 11); if (this.accuracy > 6) { return(wrestler.name + " gets " + opponent.name + " to the ground and deals " + this.damage); } return(wrestler.name + " misses the grapple!"); case moveType.Toss: this.damage = rnd.Next(25, 41); this.accuracy = rnd.Next(1, 11); if (this.accuracy > 8) { return(wrestler.name + " tosses " + opponent.name + " around and deals " + this.damage); } return(wrestler.name + " misses the toss!"); case moveType.Submission: this.damage = 100; this.accuracy = rnd.Next(1, 11); if (this.accuracy == 10) { return(opponent.name + " taps out!"); } break; default: break; } return("Move not found!"); }
public bool humanMove(moveType type, int cell) { if (visited[cell] != moveType.EMPTY) { return(false); } visited[cell] = type; for (int i = 0; i < 56; i++) { gameMatrix[i] += (int)type * a[cell][i]; } return(true); }
public Sprite MoveIcon(moveType moveType) { if (moveType == moveType.dealDamage) { return(Services.cardList.AttackIntentIcon); } else if (moveType == moveType.GainArmor) { return(Services.cardList.ArmorIntentIcon); } else if (moveType == moveType.Special) { return(Services.cardList.SpecialIntentIcon); } return(null); }
public void AddUndoStep(GameObject card, moveType move, int ups) { if (game_started) { if (undo_list.Count >= maxUndoSteps) { undo_list.RemoveAt(0); } UndoInfo undoInfo = new UndoInfo(); undoInfo.card = card; undoInfo.move = move; undoInfo.undo_previous_score = ups; undo_list.Add(undoInfo); } }
private int evaluate(moveType player, int[] gameMatrix) { moveType opp = (moveType)(-1 * (int)player); for (int i = 0; i < 56; i++) { if (gameMatrix[i] == 4 * (int)player) { return(100); } else if (gameMatrix[i] == 4 * (int)opp) { return(-100); } } return(0); }
public void setMoveType(int x, int y, moveType mt) { moveTiles [x, y] = mt; }
private int minimax(moveType[] visited, int[] gameMatrix, moveType player, int depth, bool isMax, int alpha, int beta) { bool finished = true; for (int i = 0; i < 32; i++) { if (visited[i] == moveType.EMPTY) { finished = false; break; } } if (finished) { int score = evaluate(player, gameMatrix); if (score == 100) { score -= depth; } else if (score == -100) { score += depth; } return(score); } moveType opp = (moveType)(-1 * (int)player); int best = (int)-1e9; if (!isMax) { best = (int)1e9; } for (int cell = 0; cell < 32; cell++) { if (visited[cell] == moveType.EMPTY) { bool exit = false; visited[cell] = player; if (!isMax) { visited[cell] = opp; } for (int i = 0; i < 56; i++) { if (isMax) { gameMatrix[i] += (int)player * a[cell][i]; } else { gameMatrix[i] += (int)opp * a[cell][i]; } } if (isMax) { int value = minimax(visited, gameMatrix, player, depth + 1, false, alpha, beta); best = Math.Max(best, value); alpha = Math.Max(alpha, best); if (beta <= alpha) { exit = true; } } else { int value = minimax(visited, gameMatrix, player, depth + 1, true, alpha, beta); best = Math.Min(best, value); beta = Math.Min(beta, best); if (beta <= alpha) { exit = true; } } //undo the move for (int i = 0; i < 56; i++) { if (isMax) { gameMatrix[i] -= (int)player * a[cell][i]; } else { gameMatrix[i] -= (int)opp * a[cell][i]; } } visited[cell] = moveType.EMPTY; if (exit) { break; } } } return(best); }
private int mediumMove(moveType type) { List <int> optimalPlays = new List <int>(); int mx = (int)-1e9; //maximum score for (int move = 0; move < 32; move++) { if (visited[move] != moveType.EMPTY) { continue; } for (int i = 0; i < 56; i++) { nextState[i] = gameMatrix[i] + (int)type * a[move][i]; } int sScore = 0; //state score moveType oppType = (type == moveType.X) ? moveType.O : moveType.X; for (int i = 0; i < 56; i++) { if (nextState[i] == (int)type * 4) { sScore += (int)1e7; } else if (nextState[i] == (int)oppType * 3) { sScore += (int)-1e5; } else if (nextState[i] == (int)type * 3) { sScore += (int)1e3; } else if (nextState[i] == (int)type * 2) { sScore += 1; } else if (nextState[i] == (int)oppType * 2) { sScore += -1; } } moveType spiralTrap = checkSpiralTrap(); if (spiralTrap == type) { sScore += 10; } else if (spiralTrap == oppType) { sScore += (int)-1e3; } moveType othertrapopponent = checkOtherTraps(move, gameMatrix); moveType othertrap = checkOtherTraps(move, nextState); if (othertrap == type) { sScore += 10; } else if (othertrapopponent == oppType) { sScore += (int)3.6e3; } if (sScore > mx) { mx = sScore; optimalPlays.Clear(); optimalPlays.Add(move); } else if (sScore == mx) { optimalPlays.Add(move); } } int randIdx = new Random().Next(optimalPlays.Count()); int play = optimalPlays[randIdx]; return(play); }
//In: type of unit to be created, owner of created unit //Out: unit of specified details public Unit(unitType type, Player p) { hp = 100; owner = p; t = type; moved = true; acted = true; //switch to set stats based on given type switch (type) { //infantry case unitType.trooper: cost = 100; movementSpeed = 2; armor = 0.3; armorT = armorType.infantry; moveT = moveType.foot; primaryAttack = new Attack(Attack.Name.rifle); //assault rifle secondaryAttack = new Attack(Attack.Name.flameThrower); //flame thrower break; case unitType.demolitionSquad: cost = 200; movementSpeed = 1; armor = 0.35; armorT = armorType.infantry; moveT = moveType.foot; primaryAttack = new Attack(Attack.Name.mortar); //mortar secondaryAttack = new Attack(Attack.Name.bazooka); //bazooka break; case unitType.samTrooper: cost = 200; movementSpeed = 1; armor = 0.3; armorT = armorType.infantry; moveT = moveType.foot; primaryAttack = new Attack(Attack.Name.samLauncher); //sam launcher secondaryAttack = new Attack(Attack.Name.rifle); //rifle break; //Vehicles case unitType.halftrack: cost = 400; movementSpeed = 9; armor = 0.4; armorT = armorType.armor; moveT = moveType.tread; primaryAttack = new Attack(Attack.Name.hmg); //Heavy Machine Gun secondaryAttack = new Attack(Attack.Name.hitNRun); //Hit and Run - no counter attack break; case unitType.flameTank: cost = 500; movementSpeed = 7; armor = 0.45; armorT = armorType.armor; moveT = moveType.tread; primaryAttack = new Attack(Attack.Name.flameThrower); //flame launcher secondaryAttack = new Attack(Attack.Name.lightCannon); //light cannon break; case unitType.heavyTank: cost = 700; movementSpeed = 6; armor = 0.5; armorT = armorType.armor; moveT = moveType.tread; primaryAttack = new Attack(Attack.Name.heavyCannon); //heavy cannon secondaryAttack = new Attack(Attack.Name.lmg); //lmg break; case unitType.flakCannon: cost = 600; movementSpeed = 7; armor = 0.4; armorT = armorType.armor; moveT = moveType.tread; primaryAttack = new Attack(Attack.Name.flakCannon); //flak cannon secondaryAttack = new Attack(Attack.Name.lmg); //lmg break; case unitType.artillery: cost = 700; movementSpeed = 6; armor = 0.4; armorT = armorType.armor; moveT = moveType.tread; primaryAttack = new Attack(Attack.Name.bombardment); //bombardment - AoE secondaryAttack = new Attack(Attack.Name.lmg); //lmg break; //aircraft case unitType.helicopter: cost = 700; movementSpeed = 8; armor = 0.4; armorT = armorType.air; moveT = moveType.air; primaryAttack = new Attack(Attack.Name.RocketPods); //Rocket Pods secondaryAttack = new Attack(Attack.Name.Minigun); //minigun break; //demons case unitType.imp: cost = 100; movementSpeed = 7; armor = 0.3; armorT = armorType.demon; moveT = moveType.foot; primaryAttack = new Attack(Attack.Name.fireball); //fireball secondaryAttack = new Attack(Attack.Name.claws); //claws break; case unitType.harpy: cost = 100; movementSpeed = 7; armor = 0.3; armorT = armorType.air; moveT = moveType.air; primaryAttack = new Attack(Attack.Name.claws); //claws secondaryAttack = new Attack(Attack.Name.skyDive); //sky dive - no counter attack break; case unitType.behemoth: cost = 100; movementSpeed = 6; armor = 0.6; armorT = armorType.demon; moveT = moveType.foot; primaryAttack = new Attack(Attack.Name.demonBlade); //Demonic Blade secondaryAttack = new Attack(Attack.Name.darkPulse); //Dark Pulse - AoE centered on unit break; case unitType.hellCannon: cost = 100; movementSpeed = 5; armor = 0.4; armorT = armorType.demon; moveT = moveType.foot; primaryAttack = new Attack(Attack.Name.siegeCannon); //siege cannon - AoE secondaryAttack = new Attack(Attack.Name.exhaustVent); //exhaust vent break; } movementPoints = movementSpeed; }
private void waitForMessages() { while (peerOn) { if (DateTime.Now > nextPingTime) { for (int i = 0; i < availablePeers.Count; i++) //foreach (peerType p in availablePeers) { peerType p = availablePeers[i]; NetOutgoingMessage ping = peer.CreateMessage(); ping.Write((short)SentDataType.ping); peer.SendUnconnectedMessage(ping, p.address); } lastPingTime = DateTime.Now; nextPingTime = lastPingTime.AddSeconds(1); } for (int i = 0; i < availablePeers.Count; i++) //foreach (peerType p in availablePeers) { peerType p = availablePeers[i]; if (p.lastPing < DateTime.Now.AddSeconds(-2)) { availablePeers.Remove(p); PlayerRemoved(p, EventArgs.Empty); } } NetIncomingMessage msg; while ((msg = peer.ReadMessage()) != null) { switch (msg.MessageType) { case NetIncomingMessageType.VerboseDebugMessage: case NetIncomingMessageType.DebugMessage: case NetIncomingMessageType.WarningMessage: case NetIncomingMessageType.ErrorMessage: Console.WriteLine(msg.ReadString()); break; case NetIncomingMessageType.StatusChanged: // In case status changed // It can be one of these // NetConnectionStatus.Connected; // NetConnectionStatus.Connecting; // NetConnectionStatus.Disconnected; // NetConnectionStatus.Disconnecting; // NetConnectionStatus.None; // NOTE: Disconnecting and Disconnected are not instant unless client is shutdown with disconnect() Console.WriteLine(msg.SenderConnection.ToString() + " status changed. " + (NetConnectionStatus)msg.SenderConnection.Status); if (msg.SenderConnection.Status == NetConnectionStatus.Connected) { if (Connected != null) { foreach (peerType p in availablePeers) { if (p.address.Equals(peer.Connections[0].RemoteEndPoint)) { clientName = p.name; } } Connected(msg, EventArgs.Empty); } } if (msg.SenderConnection.Status == NetConnectionStatus.Disconnected) { if (Disconnected != null) { Disconnected(msg, EventArgs.Empty); } } break; case NetIncomingMessageType.ConnectionApproval: msg.SenderConnection.Approve(); iAmPlayer1 = false; break; case NetIncomingMessageType.DiscoveryRequest: #region old stuff //NetOutgoingMessage resp = peer.CreateMessage(); //resp.Write(peerName); //resp.Write(GAME_NAME); //peer.SendDiscoveryResponse(resp, msg.SenderEndPoint); //System.Net.IPAddress myAddress; //System.Net.IPAddress myAddressMask; //myAddress = NetUtility.GetMyAddress(out myAddressMask); //bool same = msg.SenderEndPoint.Address.Equals(myAddress); //if (!same) //{ // bool discoverSender = true; // foreach (peerType p in availablePeers) // { // if (p.address.Equals(msg.SenderEndPoint.Address)) // { // discoverSender = false; // break; // } // } // if (discoverSender) // { // peer.DiscoverKnownPeer(msg.SenderEndPoint); // } //} #endregion Console.WriteLine("Type = DiscoveryRequest; Sender = " + msg.SenderEndPoint.ToString()); getPeerId(msg.SenderEndPoint); if (!listContainsIPEndPoint(msg.SenderEndPoint) && msg.SenderEndPoint != myIPEndPoint) { peer.DiscoverKnownPeer(msg.SenderEndPoint); } break; case NetIncomingMessageType.DiscoveryResponse: Console.WriteLine("Type = DiscoveryResponse; Sender = " + msg.SenderEndPoint); string foundPeerName = msg.ReadString(); string foundGameName = msg.ReadString(); Console.WriteLine(foundPeerName); Console.WriteLine(foundGameName); addPeerToList(foundPeerName, foundGameName, msg.SenderEndPoint); Console.WriteLine("Available Peers:"); foreach (peerType p in availablePeers) { Console.WriteLine(p.name); } // Raise event causing lobby list to be updated. if (Discovered != null) { Discovered(msg, EventArgs.Empty); } break; case NetIncomingMessageType.Data: #region Data //Console.ForegroundColor = ConsoleColor.Cyan; //Console.WriteLine(msg.ReadString()); //Console.ResetColor(); short type = msg.ReadInt16(); //Console.WriteLine("Type = Data; Subtype = " + type + " Sender = " + msg.SenderEndPoint); if (type == (short)SentDataType.move) { Console.WriteLine("Type = move; Sender = " + msg.SenderEndPoint); moveType move = new moveType(); move.quad = msg.ReadInt16(); move.position = msg.ReadInt16(); move.isClockwise = msg.ReadBoolean(); if (MoveReceived != null) { MoveReceived(move, EventArgs.Empty); } } else if (type == (short)SentDataType.globalChat) { string message = msg.ReadString(); } else if (type == (short)SentDataType.privateChat) { string message = msg.ReadString(); } else if (type == (short)SentDataType.idRequest) { Console.WriteLine("Type = idRequest; Sender = " + msg.SenderEndPoint); sendId(msg.SenderEndPoint); } else if (type == (short)SentDataType.idResponse) { Console.WriteLine("Type = idResponse; Sender = " + msg.SenderEndPoint); otherId = msg.ReadInt32(); // Discovery Response if (otherId != myId) { NetOutgoingMessage resp = peer.CreateMessage(); resp.Write(peerName); resp.Write(GAME_NAME); peer.SendDiscoveryResponse(resp, msg.SenderEndPoint); } else { myIPEndPoint = msg.SenderEndPoint; } } break; #endregion case NetIncomingMessageType.UnconnectedData: #region Unconnected Data type = msg.ReadInt16(); if (type == (short)SentDataType.move) { Console.WriteLine("Type = move; Sender = " + msg.SenderEndPoint); short quadrant = msg.ReadInt16(); short position = msg.ReadInt16(); bool isClockwise = msg.ReadBoolean(); } else if (type == (short)SentDataType.globalChat) { string message = msg.ReadString(); } else if (type == (short)SentDataType.privateChat) { string message = msg.ReadString(); } else if (type == (short)SentDataType.idRequest) { Console.WriteLine("Type = idRequest; Sender = " + msg.SenderEndPoint); sendId(msg.SenderEndPoint); } else if (type == (short)SentDataType.idResponse) { Console.WriteLine("Type = idResponse; Sender = " + msg.SenderEndPoint); otherId = msg.ReadInt32(); // Discovery Response if (otherId != myId) { NetOutgoingMessage resp = peer.CreateMessage(); resp.Write(peerName); resp.Write(GAME_NAME); peer.SendDiscoveryResponse(resp, msg.SenderEndPoint); } else { myIPEndPoint = msg.SenderEndPoint; } } else if (type == (short)SentDataType.connectRequest) { // Raise event causing user to get connection request if (ConnectionRequest != null) { pendingConnectRequester = msg.SenderEndPoint; ConnectionRequest(msg.ReadString(), EventArgs.Empty); } } else if (type == (short)SentDataType.ping) { if (peer.Connections.Count == 0) { NetOutgoingMessage resp = peer.CreateMessage(); resp.Write((short)SentDataType.pingResponse); peer.SendUnconnectedMessage(resp, msg.SenderEndPoint); } } else if (type == (short)SentDataType.pingResponse) { foreach (peerType p in availablePeers) { if (p.address == msg.SenderEndPoint) { p.lastPing = DateTime.Now; } } } break; #endregion default: Console.WriteLine("Unhandled type: " + msg.MessageType); break; } peer.Recycle(msg); } } }
Direction.Next => cursor?.TryGotoNext(moveType, conditions) ?? false ? cursor : null,
Direction.Prev => cursor?.TryGotoPrev(moveType, conditions) ?? false ? cursor : null,
void Update() { _x = 0; _z = 0; if (Input.GetKey(KeyCode.W)) { _z += 1; } if (Input.GetKey(KeyCode.S)) { _z -= 1; } if (Input.GetKey(KeyCode.A)) { _x -= 1; } if (Input.GetKey(KeyCode.D)) { _x += 1; } //_x = Input.GetAxis("Horizontal"); //_z = Input.GetAxis("Vertical"); if (Input.GetKeyDown(KeyCode.LeftControl)) { if (_moveState == moveType.Sneaking) { _moveState = moveType.Walking; _speed = _walkSpeed; _onWalk.Invoke(); } else { _moveState = moveType.Sneaking; _speed = _sneakSpeed; _OnSneak.Invoke(); } } if (Input.GetKeyDown(KeyCode.LeftShift)) { if (_moveState == moveType.Running) { _moveState = moveType.Walking; _speed = _walkSpeed; _onWalk.Invoke(); } else { _moveState = moveType.Running; _speed = _runSpeed; _onRun.Invoke(); } } _move = transform.right * _x + transform.forward * _z; _controller.Move(_move * _speed * Time.deltaTime); if (_controller.velocity != Vector3.zero) { if (_prevVelocity == Vector3.zero) { //Debug.Log("Starting move"); _onMoveStart.Invoke(); } else { //Debug.Log("Moving"); _onMove.Invoke(); } } else { if (_prevVelocity != Vector3.zero) { //Debug.Log("Ending Move"); _onMoveEnd.Invoke(); } } _prevVelocity = _controller.velocity; }
private void waitForMessages() { while (peerOn) { if (DateTime.Now > nextPingTime) { for (int i = 0; i < availablePeers.Count; i++) //foreach (peerType p in availablePeers) { peerType p = availablePeers[i]; NetOutgoingMessage ping = peer.CreateMessage(); ping.Write((short)SentDataType.ping); peer.SendUnconnectedMessage(ping, p.address); } lastPingTime = DateTime.Now; nextPingTime = lastPingTime.AddSeconds(1); } for (int i = 0; i < availablePeers.Count; i++) //foreach (peerType p in availablePeers) { peerType p = availablePeers[i]; if (p.lastPing < DateTime.Now.AddSeconds(-2)) { availablePeers.Remove(p); PlayerRemoved(p, EventArgs.Empty); } } NetIncomingMessage msg; while ((msg = peer.ReadMessage()) != null) { switch (msg.MessageType) { case NetIncomingMessageType.VerboseDebugMessage: case NetIncomingMessageType.DebugMessage: case NetIncomingMessageType.WarningMessage: case NetIncomingMessageType.ErrorMessage: Console.WriteLine(msg.ReadString()); break; case NetIncomingMessageType.StatusChanged: // In case status changed // It can be one of these // NetConnectionStatus.Connected; // NetConnectionStatus.Connecting; // NetConnectionStatus.Disconnected; // NetConnectionStatus.Disconnecting; // NetConnectionStatus.None; // NOTE: Disconnecting and Disconnected are not instant unless client is shutdown with disconnect() Console.WriteLine(msg.SenderConnection.ToString() + " status changed. " + (NetConnectionStatus)msg.SenderConnection.Status); if(msg.SenderConnection.Status == NetConnectionStatus.Connected) { if (Connected != null) { foreach (peerType p in availablePeers) { if (p.address.Equals(peer.Connections[0].RemoteEndPoint)) { clientName = p.name; } } Connected(msg, EventArgs.Empty); } } if (msg.SenderConnection.Status == NetConnectionStatus.Disconnected) { if (Disconnected != null) { Disconnected(msg, EventArgs.Empty); } } break; case NetIncomingMessageType.ConnectionApproval: msg.SenderConnection.Approve(); iAmPlayer1 = false; break; case NetIncomingMessageType.DiscoveryRequest: #region old stuff //NetOutgoingMessage resp = peer.CreateMessage(); //resp.Write(peerName); //resp.Write(GAME_NAME); //peer.SendDiscoveryResponse(resp, msg.SenderEndPoint); //System.Net.IPAddress myAddress; //System.Net.IPAddress myAddressMask; //myAddress = NetUtility.GetMyAddress(out myAddressMask); //bool same = msg.SenderEndPoint.Address.Equals(myAddress); //if (!same) //{ // bool discoverSender = true; // foreach (peerType p in availablePeers) // { // if (p.address.Equals(msg.SenderEndPoint.Address)) // { // discoverSender = false; // break; // } // } // if (discoverSender) // { // peer.DiscoverKnownPeer(msg.SenderEndPoint); // } //} #endregion Console.WriteLine("Type = DiscoveryRequest; Sender = " + msg.SenderEndPoint.ToString()); getPeerId(msg.SenderEndPoint); if (!listContainsIPEndPoint(msg.SenderEndPoint) && msg.SenderEndPoint != myIPEndPoint) { peer.DiscoverKnownPeer(msg.SenderEndPoint); } break; case NetIncomingMessageType.DiscoveryResponse: Console.WriteLine("Type = DiscoveryResponse; Sender = " + msg.SenderEndPoint); string foundPeerName = msg.ReadString(); string foundGameName = msg.ReadString(); Console.WriteLine(foundPeerName); Console.WriteLine(foundGameName); addPeerToList(foundPeerName, foundGameName, msg.SenderEndPoint); Console.WriteLine("Available Peers:"); foreach (peerType p in availablePeers) { Console.WriteLine(p.name); } // Raise event causing lobby list to be updated. if (Discovered != null) { Discovered(msg, EventArgs.Empty); } break; case NetIncomingMessageType.Data: #region Data //Console.ForegroundColor = ConsoleColor.Cyan; //Console.WriteLine(msg.ReadString()); //Console.ResetColor(); short type = msg.ReadInt16(); //Console.WriteLine("Type = Data; Subtype = " + type + " Sender = " + msg.SenderEndPoint); if (type == (short)SentDataType.move) { Console.WriteLine("Type = move; Sender = " + msg.SenderEndPoint); moveType move = new moveType(); move.quad = msg.ReadInt16(); move.position = msg.ReadInt16(); move.isClockwise = msg.ReadBoolean(); if (MoveReceived != null) { MoveReceived(move, EventArgs.Empty); } } else if (type == (short)SentDataType.globalChat) { string message = msg.ReadString(); } else if (type == (short)SentDataType.privateChat) { string message = msg.ReadString(); } else if (type == (short)SentDataType.idRequest) { Console.WriteLine("Type = idRequest; Sender = " + msg.SenderEndPoint); sendId(msg.SenderEndPoint); } else if (type == (short)SentDataType.idResponse) { Console.WriteLine("Type = idResponse; Sender = " + msg.SenderEndPoint); otherId = msg.ReadInt32(); // Discovery Response if (otherId != myId) { NetOutgoingMessage resp = peer.CreateMessage(); resp.Write(peerName); resp.Write(GAME_NAME); peer.SendDiscoveryResponse(resp, msg.SenderEndPoint); } else { myIPEndPoint = msg.SenderEndPoint; } } break; #endregion case NetIncomingMessageType.UnconnectedData: #region Unconnected Data type = msg.ReadInt16(); if (type == (short)SentDataType.move) { Console.WriteLine("Type = move; Sender = " + msg.SenderEndPoint); short quadrant = msg.ReadInt16(); short position = msg.ReadInt16(); bool isClockwise = msg.ReadBoolean(); } else if (type == (short)SentDataType.globalChat) { string message = msg.ReadString(); } else if (type == (short)SentDataType.privateChat) { string message = msg.ReadString(); } else if (type == (short)SentDataType.idRequest) { Console.WriteLine("Type = idRequest; Sender = " + msg.SenderEndPoint); sendId(msg.SenderEndPoint); } else if (type == (short)SentDataType.idResponse) { Console.WriteLine("Type = idResponse; Sender = " + msg.SenderEndPoint); otherId = msg.ReadInt32(); // Discovery Response if (otherId != myId) { NetOutgoingMessage resp = peer.CreateMessage(); resp.Write(peerName); resp.Write(GAME_NAME); peer.SendDiscoveryResponse(resp, msg.SenderEndPoint); } else { myIPEndPoint = msg.SenderEndPoint; } } else if (type == (short)SentDataType.connectRequest) { // Raise event causing user to get connection request if (ConnectionRequest != null) { pendingConnectRequester = msg.SenderEndPoint; ConnectionRequest(msg.ReadString(), EventArgs.Empty); } } else if (type == (short)SentDataType.ping) { if (peer.Connections.Count == 0) { NetOutgoingMessage resp = peer.CreateMessage(); resp.Write((short)SentDataType.pingResponse); peer.SendUnconnectedMessage(resp, msg.SenderEndPoint); } } else if (type == (short)SentDataType.pingResponse) { foreach(peerType p in availablePeers) { if (p.address == msg.SenderEndPoint) { p.lastPing = DateTime.Now; } } } break; #endregion default: Console.WriteLine("Unhandled type: " + msg.MessageType); break; } peer.Recycle(msg); } } }