using System;using System.Windows;using System.Windows.Controls;using System.Windows.Input;using System.Windows.Media;using System.Windows.Shapes;using System.Windows.Threading;namespace BrickBreakerGame{public partial class MainWindow : Window{private const int PaddleWidth = 100;private const int PaddleHeight = 20;private const int BallSize = 20;private const int BrickWidth = 80;private const int BrickHeight = 30;private const int Rows = 5;private const int Columns = 10;private Rectangle paddle;private Ellipse ball;private int ballSpeedX = 5;private int ballSpeedY = 5;private int score = 0;private int bricksCount = Rows * Columns;public MainWindow(){InitializeComponent();CreatePaddle();CreateBall();CreateBricks();DispatcherTimer timer = new DispatcherTimer();timer.Tick += new EventHandler(Update);timer.Interval = new TimeSpan(0, 0, 0, 0, 10);timer.Start();}private void CreatePaddle(){paddle = new Rectangle();paddle.Width = PaddleWidth;paddle.Height = PaddleHeight;paddle.Fill = Brushes.Blue;Canvas.SetBottom(paddle, 10);Canvas.SetLeft(paddle, (canvas.ActualWidth - PaddleWidth) / 2);canvas.Children.Add(paddle);}private void CreateBall(){ball = new Ellipse();ball.Width = BallSize;ball.Height = BallSize;ball.Fill = Brushes.Red;Canvas.SetBottom(ball, canvas.ActualHeight / 2 - BallSize);Canvas.SetLeft(ball, canvas.ActualWidth / 2 - BallSize);canvas.Children.Add(ball);}private void CreateBricks(){for (int i = 0; i < Rows; i++){for (int j = 0; j < Columns; j++){Rectangle brick = new Rectangle();brick.Width = BrickWidth;brick.Height = BrickHeight;brick.Fill = Brushes.Green;Canvas.SetTop(brick, i * BrickHeight);Canvas.SetLeft(brick, j * BrickWidth);canvas.Children.Add(brick;}}}}private void Update(object sender, EventArgs e){MovePaddle();MoveBall();CheckCollision();}private void MovePaddle(){if (Keyboard.IsKeyDown(Key.Left) && Canvas.GetLeft(paddle) > 0){Canvas.SetLeft(paddle, Canvas.GetLeft(paddle) - 10);}if (Keyboard.IsKeyDown(Key.Right) && Canvas.GetLeft(paddle) + PaddleWidth < canvas.ActualWidth){Canvas.SetLeft(paddle, Canvas.GetLeft(paddle) + 10);}}private void MoveBall(){Canvas.SetLeft(ball, Canvas.GetLeft(ball) + ballSpeedX);Canvas.SetTop(ball, Canvas.GetTop(ball) + ballSpeedY);if (Canvas.GetLeft(ball) <= 0 || Canvas.GetLeft(ball) + BallSize >= canvas.ActualWidth){ballSpeedX *= -1;}if (Canvas.GetTop(ball) <= 0){ballSpeedY *= -1;}if (Canvas.GetTop(ball) + BallSize >= canvas.ActualHeight){GameOver();}}private void CheckCollision(){if (Canvas.GetTop(ball) + BallSize >= canvas.ActualHeight - PaddleHeight - 10 &&Canvas.GetLeft(ball) + BallSize >= Canvas.GetLeft(paddle) &&Canvas.GetLeft(ball) <= Canvas.GetLeft(paddle) + PaddleWidth){ballSpeedY *= -1;}foreach (var item in canvas.Children){if (item is Rectangle){Rectangle brick = item as Rectangle;if (Canvas.GetTop(ball) <= Canvas.GetTop(brick) + BrickHeight &&Canvas.GetTop(ball) + BallSize >= Canvas.GetTop(brick) &&Canvas.GetLeft(ball) + BallSize >= Canvas.GetLeft(brick) &&Canvas.GetLeft(ball) <= Canvas.GetLeft(brick) + BrickWidth){canvas.Children.Remove(brick);ballSpeedY *= -1;score++;bricksCount--;if (bricksCount == 0){GameOver();}break;}}}}private void GameOver(){MessageBox.Show("Game Over! Score: " + score);Environment.Exit(0);}

C# 打砖块游戏:简单实现

原文地址: https://www.cveoy.top/t/topic/p2s0 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录