C# - XBALL OYUNU ve MOUSE KONTROLÜ


using System;
using System.Collections.Generic;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
//using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace xball
{
    public partial class Form1 : Form
    {
        ArrayList kutucuklar = new ArrayList();
        Timer timer1;
        Random rdn;
        Button btnTop;

        int yerX = 5,yerY=5;
        int kutuSayisi = 5;//kırılan kutusayısı
        int Hak = 3;
        int Level = 1;
        int hareket = 5;

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            this.KeyPreview = true;
            this.KeyDown += new KeyEventHandler(Form1_KeyDown);
            this.MouseMove += new MouseEventHandler(Form1_MouseMove);
            this.Text = "Seviye : " + Level.ToString() + "   Kalan hakkınız :" + Hak.ToString();
            Yenile();
            kutucuklarOlustur();
            timer1.Tick += new EventHandler(timer1_Tick);

            //MessageBox.Show("kontrolLeft" +kontrol.Left +"\nkontrolRight" +kontrol.Right + "\nkontrolBottom" +kontrol.Bottom + "\nkontrolTop" + kontrol.Top);
        }

        void Form1_KeyDown(object sender, KeyEventArgs e)
        {

            if (e.KeyCode == Keys.A)
                kontrol.Left = kontrol.Left - 50; //yon tuslarıyla hareket calısması 
            else if (e.KeyCode == Keys.D)      //mouse ekranda olmazsa calısıorrrr ama mouse kadar iyi degil
                kontrol.Left = kontrol.Left + 50;
                
        }

       
        void timer1_Tick(object sender, EventArgs e)
        {
            xballHareket();
            carpmaDenetimi();
            oyunBittiMi(sender, e);
            KalanHak(sender, e);
        }

      void Form1_MouseMove(object sender, MouseEventArgs e)
        {
           
           if( e.X <350)
            kontrol.Left = e.X;
            //kontrol.Top = e.Y; //yukarıya hareket eder alttaki buton
       }

        private void Yenile()
        {
            int x, y;

            timer1 = new Timer();
            timer1.Enabled = true;
            timer1.Interval = 5;

            rdn = new Random();
             x = rdn.Next(0, 50);
             y = rdn.Next(150, 250);

             kutuSayisi = 5 * Level;  //bes tane yeyınce level atlıor.

            xball.Location = new Point(x, y);

            yerX = 1 + Level * 1;
            yerY = -1 - Level * 1;
            if (yerX < 0)
                hareket = yerX * -1;
            else
                hareket = yerX;
        }

        private void KalanHak(object sender, EventArgs e)
        {
            if (xball.Bottom > kontrol.Bottom )// && (xball.Right >= kontrol.Left) && (xball.Left <= kontrol.Right))//&&
        
            {
                Hak--;
                
                for (int i = 0; i < kutucuklar.Count; i++)
                {
                    Button btn = ((Button)kutucuklar[i]);
                    ((Button)kutucuklar[i]).Dispose();
                }
                kutucuklar.Clear();
                timer1.Enabled = false;

                DialogResult dr = DialogResult.None;

                if (Hak > 0)
                {
                    dr = MessageBox.Show("Yandınız. Kalan hakkınız : " + Hak.ToString());
                  
                    if(dr ==DialogResult.OK)
                        Form1_Load(sender, e);
                }
                else if (Hak == 0)
                {
                    MessageBox.Show("GameOver");
                    this.Close();
                }
            }
        }

        private void oyunBittiMi(object sender, EventArgs e)
        {
            DialogResult dr = DialogResult.None;
            if (kutuSayisi == 0)
            {
                timer1.Enabled = false;
                dr = MessageBox.Show("Tebrikler. Seviye " + Level + " Bitirdiniz. ");
                Level++;
            }
            if (dr == DialogResult.OK)
                Form1_Load(sender, e);
        }

        private void xballHareket()
        {
            if (this.ClientSize.Width <= xball.Right)
                yerX = yerX * -1;
            if (0 >= xball.Left)
                yerX = yerX * -1;
            if (this.ClientSize.Height<= xball.Bottom)
                yerY = yerY * -1;
            if (0 >= xball.Top)
                yerY = yerY * -1;
            if (xball.Bottom >= kontrol.Top + 5 && xball.Right >= kontrol.Left && xball.Left <= kontrol.Right)
                yerY = yerY * -1;

            xball.Location = new Point(xball.Left + yerX, xball.Top + yerY);
        }

        private void kutucuklarOlustur()
        {
            for (int j = 0; j < Level; j++)
            {
                for (int i = 0; i < 14; i++) //14 ekrandaki buton sayısı
                {
                  btnTop = new Button();

                    btnTop.Name = i.ToString();
                    btnTop.Location = new Point(10+i*30, j*30 );
                    btnTop.Width = 20;
                    btnTop.BackColor = Color.Black;
                    this.Controls.Add(btnTop);
                    kutucuklar.Add(btnTop);
                }
            }
        }

        private void carpmaDenetimi() 
        {
            Rectangle r = new Rectangle();
            Rectangle t = new Rectangle();

   t.X=xball.Left;
                t.Y=xball.Top;
                t.Height=xball.Height;
                t.Width=xball.Width;

            for (int i = 0; i < kutucuklar.Count; i++)
{
                Button btn =((Button)kutucuklar[i]);
   r.X=btn.Left;
                r.Y=btn.Top;
                r.Height=btn.Height;
                r.Width=btn.Width;
                if (r.IntersectsWith(t))
                {
                    kutuSayisi--;

                    kutucuklar.RemoveAt(i);
                    if (yerY > 0 && yerX >0)
                    {
                        if (btn.Top <= xball.Bottom && btn.Left < xball.Right - hareket)
                            yerY = yerY * -1;
                        else
                            yerX = yerX * -1;
                    }
                    else
                        if (yerY > 0 && yerX < 0)
                        {
                            if (btn.Top <= xball.Bottom && btn.Right > xball.Left + hareket)
                                yerY = yerY * -1;
                            else
                                yerX = yerX * -1;
                        }
                        else
                            if (yerY < 0 && yerX > 0)
                            {
                                if (btn.Bottom >= xball.Top && btn.Left < xball.Right - hareket)
                                    yerY = yerY * -1;
                                else
                                    yerX = yerX * -1;
                            }
                            else
                                if (yerY < 0 && yerX < 0)
                                {
                                    if (btn.Bottom >= xball.Top && btn.Right > xball.Left + hareket)
                                        yerY = yerY * -1;
                                    else
                                        yerX = yerX * -1;
                                }


                    btn.Dispose();
                }
}
        }
    }
}

Hiç yorum yok:

Yorum Gönder