当然可以!下面是一个简单的用C#和WPF制作的打砖块游戏的代码示例:

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);
        }
    }
}

这段代码使用了WPF中的Canvas来创建游戏界面,并在Canvas上绘制了挡板、小球和砖块。通过键盘控制挡板的移动,小球会沿着一定的速度进行运动,并且会检测与挡板和砖块的碰撞情况。当小球触碰到底部边界或者砖块全部被消除时,游戏结束。

希望这个示例能对你有所帮助

你能否指导我用C#做一款打砖块的WPF游戏?并告诉我代码的来源

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

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