public void MovePacman(Grid gr, KeyEventArgs e, object _game) { Game game = (Game)_game; switch (e.Key) { case Key.Up: ImgPacman.RenderTransform = new RotateTransform(90); if (ImgPacman.Margin.Top - 10 >= 0) { int x1 = (int)(ImgPacman.Margin.Left / 30); int y = (int)((ImgPacman.Margin.Top - 10) / 30); int x2 = (int)((ImgPacman.Margin.Left + 25) / 30); if ((game.map[y, x1] == '0' || game.map[y, x1] == '2' || game.map[y, x1] == '3') && (game.map[y, x2] == '0' || game.map[y, x2] == '2' || game.map[y, x2] == '3')) { if ((game.map[y + 1, x1] == '0' || game.map[y + 1, x1] == '3') && game.coins[y + 1, x1].Visibility == Visibility.Visible) { if (game.map[y + 1, x1] == '3' || game.map[y + 1, x2] == '3') { game.GhostsIsSleep = true; } game.coins[y + 1, x1].Visibility = Visibility.Hidden; game.count_coins--; game._Score.Content = String.Format("Score: {0}", (game.count_coins_all - game.count_coins) * 10); game.IsWin(); } ImgPacman.Margin = new Thickness(ImgPacman.Margin.Left, ImgPacman.Margin.Top - 10, ImgPacman.Margin.Right, ImgPacman.Margin.Bottom + 10); } } break; case Key.Down: ImgPacman.RenderTransform = new RotateTransform(-90); if (ImgPacman.Margin.Bottom - 10 >= 0) { int x1 = (int)(ImgPacman.Margin.Left / 30); int y = (int)((ImgPacman.Margin.Top + 30) / 30); int x2 = (int)((ImgPacman.Margin.Left + 25) / 30); if ((game.map[y, x1] == '0' || game.map[y, x1] == '2' || game.map[y, x1] == '3') && (game.map[y, x2] == '0' || game.map[y, x2] == '2' || game.map[y, x2] == '3')) { if ((game.map[y - 1, x1] == '0' || game.map[y - 1, x1] == '3') && game.coins[y - 1, x1].Visibility == Visibility.Visible) { if (game.map[y - 1, x1] == '3' || game.map[y - 1, x2] == '3') { game.GhostsIsSleep = true; } game.coins[y - 1, x1].Visibility = Visibility.Hidden; game.count_coins--; game._Score.Content = String.Format("Score: {0}", (game.count_coins_all - game.count_coins) * 10); game.IsWin(); } ImgPacman.Margin = new Thickness(ImgPacman.Margin.Left, ImgPacman.Margin.Top + 10, ImgPacman.Margin.Right, ImgPacman.Margin.Bottom - 10); } } break; case Key.Right: ImgPacman.RenderTransform = new RotateTransform(180); if (ImgPacman.Margin.Right - 10 >= 0) { int x = (int)((ImgPacman.Margin.Left + 30) / 30); int y1 = (int)(ImgPacman.Margin.Top / 30); int y2 = (int)((ImgPacman.Margin.Top + 25) / 30); if ((game.map[y1, x] == '0' || game.map[y1, x] == '2' || game.map[y1, x] == '3') && (game.map[y2, x] == '0' || game.map[y2, x] == '2' || game.map[y2, x] == '3')) { if ((game.map[y1, x - 1] == '0' || game.map[y1, x - 1] == '3') && game.coins[y1, x - 1].Visibility == Visibility.Visible) { if (game.map[y1, x - 1] == '3' || game.map[y2, x - 1] == '3') { game.GhostsIsSleep = true; } game.coins[y1, x - 1].Visibility = Visibility.Hidden; game.count_coins--; game._Score.Content = String.Format("Score: {0}", (game.count_coins_all - game.count_coins) * 10); game.IsWin(); } ImgPacman.Margin = new Thickness(ImgPacman.Margin.Left + 10, ImgPacman.Margin.Top, ImgPacman.Margin.Right - 10, ImgPacman.Margin.Bottom); } } break; case Key.Left: ImgPacman.RenderTransform = new RotateTransform(0); if (ImgPacman.Margin.Left - 10 >= 0) { int x = (int)((ImgPacman.Margin.Left - 10) / 30); int y1 = (int)(ImgPacman.Margin.Top / 30); int y2 = (int)((ImgPacman.Margin.Top + 25) / 30); if ((game.map[y1, x] == '0' || game.map[y1, x] == '2' || game.map[y1, x] == '3') && (game.map[y2, x] == '0' || game.map[y2, x] == '2' || game.map[y2, x] == '3')) { if ((game.map[y1, x + 1] == '0' || game.map[y1, x + 1] == '3') && game.coins[y1, x + 1].Visibility == Visibility.Visible) { if (game.map[y1, x + 1] == '3' || game.map[y2, x + 1] == '3') { game.GhostsIsSleep = true; } game.coins[y1, x + 1].Visibility = Visibility.Hidden; game.count_coins--; game._Score.Content = String.Format("Score: {0}", (game.count_coins_all - game.count_coins) * 10); game.IsWin(); } ImgPacman.Margin = new Thickness(ImgPacman.Margin.Left - 10, ImgPacman.Margin.Top, ImgPacman.Margin.Right + 10, ImgPacman.Margin.Bottom); } } break; } }
private void GhostMove(Image Ghost, object _game, object _pmc) { Game game = (Game)_game; PacmanClass pmc = (PacmanClass)_pmc; Thread.Sleep(8); Random rnd = new Random(); switch (rnd.Next(1, 5)) { case 1: Ghost.Dispatcher.BeginInvoke((Action)(() => { if (Ghost.Margin.Top - 10 >= 0) { int x1 = (int)(Ghost.Margin.Left / 30); int y = (int)((Ghost.Margin.Top - 10) / 30); int x2 = (int)((Ghost.Margin.Left + 29) / 30); if ((game.map[y, x1] == '0' || game.map[y, x1] == '2' || game.map[y, x1] == '3') && (game.map[y, x2] == '0' || game.map[y, x2] == '2' || game.map[y, x2] == '3')) { if (Ghost.Margin.Top + 10 <= (630 - pmc.ImgPacman.Margin.Bottom) && Ghost.Margin.Top >= pmc.ImgPacman.Margin.Top && (x1 == (int)(pmc.ImgPacman.Margin.Left / 30) || x2 == (int)((pmc.ImgPacman.Margin.Left + 25) / 30))) { game.is_lose = true; game.IsWin(); return; } Ghost.Margin = new Thickness(Ghost.Margin.Left, Ghost.Margin.Top - 10, Ghost.Margin.Right, Ghost.Margin.Bottom + 10); } } })); break; case 2: Ghost.Dispatcher.BeginInvoke((Action)(() => { if (Ghost.Margin.Bottom - 10 >= 0) { int x1 = (int)(Ghost.Margin.Left / 30); int y = (int)((Ghost.Margin.Top + 30) / 30); int x2 = (int)((Ghost.Margin.Left + 29) / 30); if ((game.map[y, x1] == '0' || game.map[y, x1] == '2' || game.map[y, x1] == '3') && (game.map[y, x2] == '0' || game.map[y, x2] == '2' || game.map[y, x2] == '3')) { if (Ghost.Margin.Bottom + 10 <= (630 - pmc.ImgPacman.Margin.Top) && Ghost.Margin.Bottom >= pmc.ImgPacman.Margin.Bottom && (x1 == (int)(pmc.ImgPacman.Margin.Left / 30) || x2 == (int)((pmc.ImgPacman.Margin.Left + 29) / 30))) { game.is_lose = true; game.IsWin(); return; } Ghost.Margin = new Thickness(Ghost.Margin.Left, Ghost.Margin.Top + 10, Ghost.Margin.Right, Ghost.Margin.Bottom - 10); } } })); break; case 3: Ghost.Dispatcher.BeginInvoke((Action)(() => { if (Ghost.Margin.Right - 10 >= 0) { int x = (int)((Ghost.Margin.Left + 30) / 30); int y1 = (int)(Ghost.Margin.Top / 30); int y2 = (int)((Ghost.Margin.Top + 29) / 30); if ((game.map[y1, x] == '0' || game.map[y1, x] == '2' || game.map[y1, x] == '3') && (game.map[y2, x] == '0' || game.map[y2, x] == '2' || game.map[y2, x] == '3')) { if (Ghost.Margin.Right + 10 <= (630 - pmc.ImgPacman.Margin.Left) && Ghost.Margin.Right >= pmc.ImgPacman.Margin.Right && (y1 == (int)(pmc.ImgPacman.Margin.Top / 30) || y2 == (int)((pmc.ImgPacman.Margin.Top + 25) / 30))) { game.is_lose = true; game.IsWin(); return; } Ghost.Margin = new Thickness(Ghost.Margin.Left + 10, Ghost.Margin.Top, Ghost.Margin.Right - 10, Ghost.Margin.Bottom); } } })); break; case 4: Ghost.Dispatcher.BeginInvoke((Action)(() => { if (Ghost.Margin.Left - 10 >= 0) { int x = (int)((Ghost.Margin.Left - 10) / 30); int y1 = (int)(Ghost.Margin.Top / 30); int y2 = (int)((Ghost.Margin.Top + 29) / 30); if ((game.map[y1, x] == '0' || game.map[y1, x] == '2' || game.map[y1, x] == '3') && (game.map[y2, x] == '0' || game.map[y2, x] == '2' || game.map[y2, x] == '3')) { if (Ghost.Margin.Left + 10 <= (630 - pmc.ImgPacman.Margin.Right) && Ghost.Margin.Left >= pmc.ImgPacman.Margin.Left && (y1 == (int)(pmc.ImgPacman.Margin.Top / 30) || y2 == (int)((pmc.ImgPacman.Margin.Top + 25) / 30))) { game.is_lose = true; game.IsWin(); return; } Ghost.Margin = new Thickness(Ghost.Margin.Left - 10, Ghost.Margin.Top, Ghost.Margin.Right + 10, Ghost.Margin.Bottom); } } })); break; } }