Загрузка данных


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;

namespace ArkanoidGame
{
    public partial class Form1 : Form
    {

        Ball ball;
        int ballX = 300;
        int ballY = 300;
        int dx = 8;
        int dy = -8;

        int paddleX = 400;
        int paddleY = 600;
        int paddleWidth = 120;
        int paddleHeight = 15;

        int score = 0;
        int lives = 3;

        int ballSize = 20;

        bool gameStarted = false;
        bool paused = false;
        int currentLevel;
        int reachedLevel = 1;

        btnResume.Visible = false;
        btnRestart.Visible = false;
        btnMenu.Visible = false;



        List<Rectangle> bricks = new List<Rectangle>();
        public Form1(int level)
        {
            InitializeComponent();

            currentLevel = level;
            CreateLevel(level);
            timer1.Start();


            this.MouseMove += Form1_MouseMove;


            gameStarted = true;


            if (gameStarted && bricks.Count == 0)
            {
                timer1.Stop();
                gameStarted = false;

                MessageBox.Show("You Win!");
            }
        }


        



        private void Form1_Load(object sender, EventArgs e)
        {

        }

        protected override void OnPaint(PaintEventArgs e)
        {
            Graphics g = e.Graphics;

            // мяч
            g.FillEllipse(Brushes.White, ballX, ballY, 20, 20);

            // платформа
            g.FillRectangle(Brushes.Blue, paddleX, paddleY, paddleWidth, paddleHeight);

            // UI
            g.DrawString("Score: " + score, Font, Brushes.White, 10, 10);
            g.DrawString("Lives: " + lives, Font, Brushes.White, 10, 30);

            foreach (var b in bricks)
            {
                g.FillRectangle(Brushes.OrangeRed, b);
                g.DrawRectangle(Pens.Black, b);
            }

            if (paused)
            {
                e.Graphics.FillRectangle(
                    new SolidBrush(Color.FromArgb(150, Color.Black)),
                    ClientRectangle
                    );

                e.Graphics.DrawString(
                    "PAUSED",
                    new Font("Arial", 40),
                    Brushes.White,
                    300,
                    200
                    );
            }

            this.DoubleBuffered = true;

            try
            {
                string imagePath = @"C:\Users\PC\Pictures\P.jpg";
                this.BackgroundImage = Image.FromFile(imagePath);
                this.BackgroundImageLayout = ImageLayout.Stretch;
            }
            catch (Exception ex)
            {

            }

            this.StartPosition = FormStartPosition.CenterScreen;
            this.ClientSize = new Size(850, 700);
            this.Text = "Форма с изображением из файла";

        
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
ballX += dx;
ballY += dy;

// ЛЕВАЯ СТЕНА
if (ballX < 0)
{
    ballX = 0;
    dx *= -1;
}

// ПРАВАЯ СТЕНА
if (ballX + ballSize > ClientSize.Width)
{
    ballX = ClientSize.Width - ballSize;
    dx *= -1;
}

// ВЕРХ
if (ballY < 0)
{
    ballY = 0;
    dy *= -1;
}

            // платформа
            Rectangle ballRect = new Rectangle(ballX, ballY, 20, 20);
            Rectangle paddleRect = new Rectangle(paddleX, paddleY, paddleWidth, paddleHeight);

            if (ballRect.IntersectsWith(paddleRect))
            {
                dy *= -1;
                IncreaseSpeed();
            }

            Invalidate(); // перерисовка

            for (int i = 0; i < bricks.Count; i++)
            {
                if (ballRect.IntersectsWith(bricks[i]))
                {
                    bricks.RemoveAt(i);
                    dy *= -1;
                    score += 10;
                    break;
                }
            }

            if (lives <= 0)
            {
                timer1.Stop();
                MessageBox.Show("Game Over!");
                SaveScore();
                return;
            }

            ballX = 300;
            ballY = 300;
            dx = 5;
            dy = -5;

            if (bricks.Count == 0)
            {
                reachedLevel = currentLevel;

                timer1.Stop();
                MessageBox.Show("You Win!");
            }
        }


        protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
        {
            if (keyData == Keys.Escape)
            {
                paused = !paused;
                timer1.Enabled = !paused;
            }

            return base.ProcessCmdKey(ref msg, keyData);
        }

        private void Form1_MouseMove(object sender, MouseEventArgs e)
        {
            paddleX = e.X - paddleWidth / 2;
        }


        private void CreateLevel(int level)
        {
            bricks.Clear();

            switch (level)
            {
                case 1:
                    SimpleLevel();
                    break;

                case 2:
                    PyramidLevel();
                    break;

                case 3:
                    WallsLevel();
                    break;

                case 4:
                    CheckerLevel();
                    break;

                case 5:
                    HardLevel();
                    break;

                case 6:
                    CrossLevel();
                    break;

                case 7:
                    RandomLevel();
                    break;
            }
        }

        void SimpleLevel()
        {
            for (int i = 0; i < 4; i++)
                for (int j = 0; j < 8; j++)
                    bricks.Add(new Rectangle(100 + j * 80, 50 + i * 30, 70, 20));
        }

        void PyramidLevel()
        {
            for (int i = 0; i < 5; i++)
                for (int j = 0; j <= i; j++)
                    bricks.Add(new Rectangle(300 + j * 80 - i * 40, 50 + i * 30, 70, 20));
        }

        void IncreaseSpeed()
        {
                dx += Math.Sign(dx);
                dy += Math.Sign(dy);

                dx = Math.Max(Math.Min(dx, 12), -12);
                dy = Math.Max(Math.Min(dy, 12), -12);

        }

        void WallsLevel()
        {
            for (int i = 0; i < 6; i++)
            {
                bricks.Add(new Rectangle(100, 50 + i * 30, 70, 20));
                bricks.Add(new Rectangle(700, 50 + i * 30, 70, 20));
            }
        }

        void CheckerLevel()
        {
            for (int i = 0; i < 6; i++)
                for (int j = 0; j < 10; j++)
                    if ((i + j) % 2 == 0)
                        bricks.Add(new Rectangle(100 + j * 70, 50 + i * 30, 65, 20));
        }

        void HardLevel()
        {
            for (int i = 0; i < 7; i++)
                for (int j = 0; j < 10; j++)
                    bricks.Add(new Rectangle(80 + j * 75, 40 + i * 25, 70, 20));
        }

        void CrossLevel()
        {
            for (int i = 0; i < 7; i++)
            {
                bricks.Add(new Rectangle(400, 50 + i * 30, 70, 20));
                bricks.Add(new Rectangle(200 + i * 70, 200, 70, 20));
            }
        }

        void RandomLevel()
        {
            Random rnd = new Random();

            for (int i = 0; i < 30; i++)
            {
                int x = rnd.Next(50, 700);
                int y = rnd.Next(50, 300);

                bricks.Add(new Rectangle(x, y, 70, 20));
            }
        }

        void SaveScore()
        {
            string line = UserSession.Username + ";" + reachedLevel;
            File.AppendAllText("scores.txt", line + Environment.NewLine);
        }

        private void btnResume_Click(object sender, EventArgs e)
        {
            paused = false;

            btnResume.Visible = false;
            btnRestart.Visible = false;
            btnMenu.Visible = false;

            timer1.Start();
        }

        private void btnRestart_Click(object sender, EventArgs e)
        {
            lives = 3;
            score = 0;

            CreateLevel(currentLevel);

            ballX = 300;
            ballY = 300;
            dx = 5;
            dy = -5;

            paused = false;
            btnResume.Visible = false;
            btnRestart.Visible = false;
            btnMenu.Visible = false;

            timer1.Start();
        }

        private void btnMenu_Click(object sender, EventArgs e)
        {
            MainMenuForm menu = new MainMenuForm();
            menu.Show();

            this.Close();
        }
    }
}