razeyeh razy

razeyeh razy

  • NA
  • 18
  • 27.2k

Question of Snake Game Program

Jun 22 2011 12:22 PM
hi,
I've written a play Snake Game, given that I scroll using the arrow keys have been defined, but the keys do not work.
I appreciate everything I've found a bug Timer or command switch or KeyDown method.
If you can please help me. Thank you.
source code:
 

//form1.cs

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

using System.Threading;

 

 

 

namespace Snake_Game

{

    public partial class Form1 : Form

    {

       

        private int score = 0;

        private Keys direction;

        private Keys arrow;

        private Point LastLocation;

        private Food MyFood;

        private Snake MySnake;

        private Bitmap ScreenBitmap;

        private Graphics BitmapPicture;

        private Graphics ScreenPage;

        public Form1()

        {

            direction = Keys.Left;

            arrow = direction;

            MySnake = new Snake();

            MyFood = new Food();

            ScreenBitmap = new Bitmap(300, 300);

            LastLocation = MySnake.Location[MySnake.Length - 1];

            InitializeComponent();

        }

 

        private void Form1_Load(object sender, EventArgs e)

        { 

        }

 

        private void timer1_Tick(object sender, EventArgs e)

        {

            LastLocation = MySnake.Location[MySnake.Length - 1];

 

            switch (direction)

            {

                case Keys.Left:

                    MySnake.Left();

                    break;

                case Keys.Right:

                    MySnake.Right();

                    break;

                case Keys.Up:

                    MySnake.Up();

                    break;

                case Keys.Down:

                    MySnake.Down();

                    break;

            }

           

            BitmapPicture.Clear(Color.White);

            SolidBrush Mybush = new SolidBrush(Color.Black);

            BitmapPicture.FillEllipse(Mybush, (MyFood.Location.X * 10), (MyFood.Location.Y * 10), 10, 10);

 

            bool gameover = false;

            for (int i = 0; i < MySnake.Length; i++)

            {

                SolidBrush Mybrush = new SolidBrush(Color.Brown);

                BitmapPicture.FillRectangle(Mybrush, (MySnake.Location[i].X * 10), (MySnake.Location[i].Y * 10), 10, 10);

                if ((MySnake.Location[i] == MySnake.Location[0]) && (i > 0))

                    gameover = true;

            }

            ScreenPage.DrawImage(ScreenBitmap, 0, 0);

            CheckSnake();

 

            if (gameover == true)

                GameOver();

            //Invalidate();

        }

        private void StartToolStripMenuItem_Click(object sender, EventArgs e)

        {

            StartGame();

        }

        private void exitToolStripMenuItem_Click(object sender, EventArgs e)

        {

            if (BitmapPicture != null)

                BitmapPicture.Dispose();

            if (ScreenPage != null)

                ScreenPage.Dispose();

            Close();

        }

       

        protected override void OnKeyDown(KeyEventArgs e)

        {

            if ((e.KeyCode == Keys.Left) ||

                (e.KeyCode == Keys.Right) ||

                (e.KeyCode == Keys.Up) ||

                (e.KeyCode == Keys.Down))

                //arrow = e.KeyCode;

            base.OnKeyDown(e);

        }

 

        private void CheckSnake()

        {

            if (MySnake.Location[0] == MyFood.Location)

            {

                MySnake.AddLenght();

                MySnake.Location[MySnake.Length - 1] = LastLocation;

                score += 10;

                ScoreLabel.Text = score.ToString();

                CreateFood();

            }

        }

        private void CreateFood()

        {

            bool fullCell;

            do

            {

                MyFood.CreateFood();

                fullCell = false;

                for (int i = 0; i < MySnake.Length; i++)

                {

                    if (MyFood.Location == MySnake.Location[i])

                    {

                        fullCell = true;

                        break;

                    }

                }

            }

            while (fullCell == true);

        }

        private void StartGame()

        {

            MySnake.Reset();

            StartToolStripMenuItem.Enabled = false;

            CreateFood();

            //direction = Keys.Left;

            timer1.Interval = 100;

            ScoreLabel.Text="0";

            score = 0;

            BitmapPicture = Graphics.FromImage(ScreenBitmap);

            ScreenPage = GamePage.CreateGraphics();

            timer1.Enabled = true;

        }

        public void GameOver()

        {

            timer1.Enabled = false;

            StartToolStripMenuItem.Enabled = true;

            BitmapPicture.Dispose();

            ScreenPage.Dispose();

            string Message1 = "Your Score:" + score + "\nDo you want to play again?";

            if (MessageBox.Show(Message1, "GameOver", MessageBoxButtons.YesNo,

                MessageBoxIcon.Question) == DialogResult.Yes)

                StartGame();

            else

                Application.Exit();

        }

       

        public void Winner()

        {

            timer1.Enabled = true;

            if (score >= 150)

           

            MessageBox.Show("you are wine" + score);

        }

 

        private void pictureBox1_Click(object sender, EventArgs e)

        {

 

        }

        private void fileToolStripMenuItem1_Click(object sender, EventArgs e)

        {

 

        }

           

        }

    }

 

//Class food

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Drawing;

 

namespace Snake_Game

{

    class Food

    {

        private Point _location;

        public Point Location

        {

            get { return _location;}

        }

        public Food()

        {

            _location = new Point();

        }

        public void CreateFood()

        {

            Random rndFood = new Random();

            _location = new Point(rndFood.Next(0, 30), rndFood.Next(0, 30));

        }

    }

}

//class Snake

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Drawing;

 

namespace Snake_Game

{

    class Snake

    {

        private int _length;

        public int Length

        {

            get { return _length; }

            set { _length = value; }

        }

        private Point[] _location;

        public Point[] Location

        {

            get { return _location; }

        }

        public Snake()

        {

            _location = new Point[30 * 30];

            Reset();

        }

        public void Reset()

        {

            _length = 5;

            for (int i = 0; i < _length; i++)

            {

                _location[i].X = 14;

                _location[i].Y = 14;

            }

        }

        //for move snake

        private void Move()

        {

            for (int i = _length - 1; i > 0; i--)

                _location[i] = _location[i - 1];

        }

        public void Up()

        {

            Move();

            _location[0].Y--;

            if (_location[0].Y < 0)

                _location[0].Y += 30;

        }

        public void Down()

        {

            Move();

            _location[0].Y++;

            if (_location[0].Y > 29)

                _location[0].Y -= 30;

        }

        public void Left()

        {

            Move();

            _location[0].X--;

            if (_location[0].X < 0)

                _location[0].X += 30;

        }

        public void Right()

        {

            Move();

            _location[0].X++;

            if (_location[0].X > 29)

                _location[0].X -= 30;

        }

        public void AddLenght()

        {

            _length++;

        }

 

    }

 

}