Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using System.Windows;
- using System.Windows.Controls;
- using System.Windows.Data;
- using System.Windows.Documents;
- using System.Windows.Input;
- using System.Windows.Media;
- using System.Windows.Media.Imaging;
- using System.Windows.Navigation;
- using System.Windows.Shapes;
- using System.Windows.Media.Animation;
- using System.Windows.Threading; // Для таймера
- namespace Стрельба_по_мишени
- {
- /// <summary>
- /// Логика взаимодействия для MainWindow.xaml
- /// </summary>
- ///
- public partial class MainWindow : Window
- {
- int rifleSpeed = 5; // объявление скорости винтовки, равна x
- bool rifleGoRight;
- bool rifleGoLeft;
- double previousAngle = 0;
- double movingAngle = 0;
- int targetSpeed = 10; // объявление скорости мишени, равна x
- bool targetGoLeft;
- bool targetRightUp;
- double targetAngle = 0;
- bool bulletExist = false;
- Image Bullet;
- int bulletSpeed = 5; // объявление скорости пули, равна x
- double fireAngle = 0;
- bool hit = false;
- Image hitPlace;
- public MainWindow()
- {
- InitializeComponent();
- DispatcherTimer dispatcherTimer = new DispatcherTimer(); // Добавление таймера
- dispatcherTimer.Tick += Timer_Tick; // Привязка события таймера
- dispatcherTimer.Interval = TimeSpan.FromMilliseconds(15); // Срабатывание таймера каждые x миллисекунд
- dispatcherTimer.Start(); // Начало таймера
- }
- private void Canvas_KeyDown(object sender, KeyEventArgs e)
- {
- if ((e.Key == Key.Left) || (e.Key == Key.A))
- {
- rifleGoLeft = true; // Нажата стрелка "влево" или клавиша "A"
- }
- else if ((e.Key == Key.Right) || (e.Key == Key.D))
- {
- rifleGoRight = true; // Нажата стрелка "вправо" или клавиша "D"
- }
- }
- private void Canvas_KeyUp(object sender, KeyEventArgs e)
- {
- if ((e.Key == Key.Left) || (e.Key == Key.A))
- {
- rifleGoLeft = false; // Отпущена стрелка "влево" или клавиша "A"
- }
- else if ((e.Key == Key.Right) || (e.Key == Key.D))
- {
- rifleGoRight = false; // Отпущена стрелка "вправо" или клавиша "D"
- }
- }
- private void FireButton(object sender, MouseButtonEventArgs e)
- {
- if (bulletExist == false)
- {
- Bullet = new Image
- {
- Height = 10,
- Width = 10,
- Source = new BitmapImage(new Uri("pack://application:,,,/bullet.png"))
- };
- Canvas.SetLeft(Bullet, Canvas.GetLeft(Rifle) + Rifle.Width / 2 - 5 + (Rifle.Height / 2) *Math.Sin(movingAngle* Math.PI/180));
- Canvas.SetTop(Bullet, Canvas.GetTop(Rifle)+Rifle.Height/2 - (Rifle.Height / 2)*Math.Cos(movingAngle * Math.PI / 180));
- MyCanvas.Children.Add(Bullet);
- fireAngle = movingAngle * Math.PI / 180;
- bulletExist = true;
- }
- }
- private void Timer_Tick(object sender, EventArgs e)
- {
- Point pm = Mouse.GetPosition(this);
- Point pr = new Point(Canvas.GetLeft(Rifle) + Rifle.Width/2, Canvas.GetTop(Rifle)+Rifle.Height/2);
- Point tr = new Point(pr.X, pm.Y);
- double Catet = Math.Sqrt(Math.Pow(tr.X - pr.X, 2) + Math.Pow(tr.Y - pr.Y, 2));
- double Hyp = Math.Sqrt(Math.Pow(pm.X - pr.X, 2) + Math.Pow(pm.Y - pr.Y, 2));
- movingAngle = (Math.Acos(Catet / Hyp)) * 180 / (Math.PI);
- if (pm.X < pr.X)
- movingAngle = -movingAngle;
- DoubleAnimation RR = new DoubleAnimation();
- RR.From = previousAngle;
- RR.To = movingAngle;
- Rifle.RenderTransform.BeginAnimation(RotateTransform.AngleProperty, RR);
- previousAngle = movingAngle;
- if (rifleGoLeft && Canvas.GetLeft(Rifle) > 0)
- {
- Canvas.SetLeft(Rifle, Canvas.GetLeft(Rifle) - rifleSpeed);
- // if go left is true and player is inside the boundary from the left
- // then we can set left of the player to move towards left of the screen
- }
- if (rifleGoRight && Canvas.GetLeft(Rifle) + (Rifle.Width * 2) < Application.Current.MainWindow.Width)
- {
- Canvas.SetLeft(Rifle, Canvas.GetLeft(Rifle) + rifleSpeed);
- // if go right is true and player is inside the boundary from the right
- // then we can set left of the player to move towards right of the screen
- }
- if ((Canvas.GetLeft(Target) <= 0) || ((Canvas.GetTop(Target) >= 675) && (targetRightUp == true)) || ((Canvas.GetTop(Target) <= 100) && (targetRightUp == false)))
- targetGoLeft = false;
- else if ((Canvas.GetLeft(Target) + Target.Width>= Application.Current.MainWindow.Width) || ((Canvas.GetTop(Target) >= 675) && (targetRightUp == false)) || ((Canvas.GetTop(Target) <= 100) && (targetRightUp == true)))
- targetGoLeft = true;
- if (targetGoLeft == true)
- {
- Canvas.SetLeft(Target, Canvas.GetLeft(Target) - targetSpeed * Math.Cos(targetAngle * Math.PI / 180));
- Canvas.SetTop(Target, Canvas.GetTop(Target) + targetSpeed * Math.Sin(targetAngle * Math.PI / 180));
- if (hit == true)
- {
- Canvas.SetLeft(hitPlace, Canvas.GetLeft(hitPlace) - targetSpeed * Math.Cos(targetAngle * Math.PI / 180));
- Canvas.SetTop(hitPlace, Canvas.GetTop(hitPlace) + targetSpeed * Math.Sin(targetAngle * Math.PI / 180));
- }
- }
- else
- {
- Canvas.SetLeft(Target, Canvas.GetLeft(Target) + targetSpeed * Math.Cos(targetAngle * Math.PI / 180));
- Canvas.SetTop(Target, Canvas.GetTop(Target) - targetSpeed * Math.Sin(targetAngle * Math.PI / 180));
- if (hit == true)
- {
- Canvas.SetLeft(hitPlace, Canvas.GetLeft(hitPlace) + targetSpeed * Math.Cos(targetAngle * Math.PI / 180));
- Canvas.SetTop(hitPlace, Canvas.GetTop(hitPlace) - targetSpeed * Math.Sin(targetAngle * Math.PI / 180));
- }
- }
- if (bulletExist == true)
- {
- double targetRadius = Target.Width / 2;
- double targetCenterX = Canvas.GetLeft(Target) + Target.Width / 2;
- double targetCenterY = Canvas.GetTop(Target) + Target.Width / 2;
- double bulletRadius = Bullet.Width / 2;
- double bulletCenterX = Canvas.GetLeft(Bullet) + Bullet.Width / 2;
- double bulletCenterY = Canvas.GetTop(Bullet) + Bullet.Width / 2;
- double distance = Math.Sqrt(Math.Pow(bulletCenterX - targetCenterX, 2) + Math.Pow(bulletCenterY - targetCenterY, 2));
- Canvas.SetTop(Bullet,Canvas.GetTop(Bullet) - Math.Abs(bulletSpeed*Math.Cos(fireAngle)));
- Canvas.SetLeft(Bullet, Canvas.GetLeft(Bullet) + bulletSpeed * Math.Sin(fireAngle));
- if (distance<=targetRadius+bulletRadius)
- {
- if (hit == true)
- {
- MyCanvas.Children.Remove(hitPlace);
- }
- hitPlace = new Image
- {
- Height = 10,
- Width = 10,
- Source = new BitmapImage(new Uri("pack://application:,,,/hole.png"))
- };
- Canvas.SetLeft(hitPlace, Canvas.GetLeft(Bullet));
- Canvas.SetTop(hitPlace, Canvas.GetTop(Bullet));
- MyCanvas.Children.Add(hitPlace);
- hit = true;
- MyCanvas.Children.Remove(Bullet);
- bulletExist = false;
- }
- else if ((Canvas.GetTop(Bullet) < 100) || (Canvas.GetLeft(Bullet) < 0) || (Canvas.GetLeft(Bullet) > Application.Current.MainWindow.Width))
- {
- MyCanvas.Children.Remove(Bullet);
- bulletExist = false;
- }
- }
- }
- private void button_Click(object sender, RoutedEventArgs e)
- {
- try
- {
- double newTargetX = Convert.ToDouble(textBox.Text);
- if ((newTargetX > 1125) || (newTargetX < 0))
- {
- MessageBox.Show("Слишком большое или слишком маленькое значение. Мишень выйдет за поля экрана. Введите значение в диапазоне [0; 1125].");
- }
- else
- {
- Canvas.SetLeft(Target, newTargetX);
- if (hit == true)
- Canvas.SetLeft(hitPlace, newTargetX);
- }
- }
- catch (FormatException)
- {
- MessageBox.Show("Введено не действительное число. Перемещение мишени не будет осуществлено.");
- }
- catch (OverflowException)
- {
- MessageBox.Show("Было введено слишком большое или слишком маленькое число. Перемещение мишени не будет осуществлено.");
- }
- try
- {
- double newTargetY = Convert.ToDouble(textBox1.Text);
- if ((newTargetY > 675) || (newTargetY < 100))
- {
- MessageBox.Show("Слишком большое или слишком маленькое значение. Мишень выйдет за поля экрана. Введите значение в диапазоне [100; 675].");
- }
- else
- {
- Canvas.SetTop(Target, newTargetY);
- if (hit == true)
- Canvas.SetTop(hitPlace, newTargetY);
- }
- }
- catch (FormatException)
- {
- MessageBox.Show("Введено не действительное число. Перемещение мишени не будет осуществлено.");
- }
- catch (OverflowException)
- {
- MessageBox.Show("Было введено слишком большое или слишком маленькое число. Перемещение мишени не будет осуществлено.");
- }
- try
- {
- targetSpeed = Convert.ToInt32(textBox2.Text);
- }
- catch (FormatException)
- {
- MessageBox.Show("Введено не целое число. Изменение скорости мишени не будет осуществлено.");
- }
- catch (OverflowException)
- {
- MessageBox.Show("Было введено слишком большое или слишком маленькое число. Перемещение мишени не будет осуществлено.");
- }
- try
- {
- bulletSpeed = Convert.ToInt32(textBox3.Text);
- }
- catch (FormatException)
- {
- MessageBox.Show("Введено не целое число. Изменение скорости пули не будет осуществлено.");
- }
- catch (OverflowException)
- {
- MessageBox.Show("Было введено слишком большое или слишком маленькое число. Перемещение мишени не будет осуществлено.");
- }
- try
- {
- targetAngle = Convert.ToDouble(textBox4.Text);
- do
- {
- if (targetAngle > 90) targetAngle -= 180;
- else if (targetAngle < -90) targetAngle += 180;
- else break;
- }
- while (true);
- if (targetAngle >= 0) targetRightUp = true;
- else targetRightUp = false;
- }
- catch (FormatException)
- {
- MessageBox.Show("Введено не действительное число. Изменение угла наклона мишени не будет осуществлено.");
- }
- catch (OverflowException)
- {
- MessageBox.Show("Было введено слишком большое или слишком маленькое число. Перемещение мишени не будет осуществлено.");
- }
- }
- private void textBox_TextChanged(object sender, TextChangedEventArgs e)
- {
- }
- private void textBox1_TextChanged(object sender, TextChangedEventArgs e)
- {
- }
- private void textBox2_TextChanged(object sender, TextChangedEventArgs e)
- {
- }
- private void textBox3_TextChanged(object sender, TextChangedEventArgs e)
- {
- }
- private void textBox4_TextChanged(object sender, TextChangedEventArgs e)
- {
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement