Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 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;
- namespace WindowsFormsApplication6
- {
- public partial class Form1 : Form
- {
- public enum Direction
- { Up, Down, Left, Right };
- public Random rand = new Random();
- private int x, y, SnakeLength;
- private Direction direction;
- private bool FoodExists;
- Graphics g;
- Rectangle foodfield = new Rectangle();
- List<Rectangle> snake = new List<Rectangle>();
- public Form1()
- {
- InitializeComponent();
- direction = Direction.Down;
- snake.Add(new Rectangle(1, 0, 20, 20));
- snake.Add(new Rectangle(21, 0, 20, 20));
- snake.Add(new Rectangle(41, 0, 20, 20));
- SnakeLength = 3;
- g = CreateGraphics();
- DrawSnake();
- }
- private void Form1_KeyDown(object sender, KeyEventArgs e)
- {
- if(e.KeyCode==Keys.Down)
- {
- direction = Direction.Down;
- }
- if (e.KeyCode == Keys.Up)
- {
- direction = Direction.Up;
- }
- if (e.KeyCode == Keys.Right)
- {
- direction = Direction.Right;
- }
- if (e.KeyCode == Keys.Left)
- {
- direction = Direction.Left;
- }
- }
- private void timer1_Tick(object sender, EventArgs e)
- {
- Refresh();
- timer1.Enabled = false;
- switch (direction)
- {
- case (Direction.Down):
- {
- y = 20;
- x = 0;
- break;
- }
- case (Direction.Up):
- {
- y = -20;
- x = 0;
- break;
- }
- case (Direction.Right):
- {
- y = 0;
- x = 20;
- break;
- }
- case (Direction.Left):
- {
- y = 0;
- x = -20;
- break;
- }
- }
- Rectangle Prev = snake[0];
- Rectangle Next;
- for (int i = 0; i < snake.Count - 1; i++)
- {
- if (i == 0)
- {
- snake[i] = new Rectangle(snake[i].X + x, snake[i].Y + y, 20, 20);
- }
- if (!(snake[i + 1].IsEmpty))
- {
- Next = snake[i + 1];
- snake[i + 1] = Prev;
- Prev=Next;
- }
- }
- if (snake[0]==foodfield)
- {
- snake.Add(foodfield);
- SnakeLength++;
- FoodExists = false;
- }
- if ((snake[0].X < 0 || snake[0].X > 510 || snake[0].Y < 0 || snake[0].Y > 700) || EatItSelf())
- {
- MessageBox.Show("Игра закончена\n Длина змейки равна: " + SnakeLength.ToString());
- Close();
- return;
- }
- DrawSnake();
- timer1.Enabled = true;
- }
- private void DrawSnake()
- {
- for (int i = 0; i < snake.Count; i++)
- {
- if (i == 0)
- g.FillRectangle(Brushes.Red, snake[i]);
- else
- g.FillRectangle(Brushes.Gray, snake[i]);
- g.DrawRectangle(Pens.Green, snake[i]);
- }
- }
- private bool EatItSelf()
- {
- int count = 0;
- foreach (Rectangle a in snake)
- if (a == snake[0]) count++;
- if (count > 1 && foodfield != snake[0])
- return true;
- else
- return false;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement