Advertisement
wingman007

SnakeWinFormFull2b

Oct 21st, 2014
264
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 6.55 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9. using System.Windows.Forms;
  10.  
  11. namespace SnakeWinForm2b
  12. {
  13.     struct Point
  14.     {
  15.         public int x, y;
  16.         public Point(int x, int y)
  17.         {
  18.             this.x = x;
  19.             this.y = y;
  20.         }
  21.     }
  22.     public enum Direction { Left, Right, Up, Down};
  23.     public partial class Form1 : Form
  24.     {
  25.         private int positionX = 0;
  26.         private int positionY = 0;
  27.  
  28.         private int width = 16;
  29.         private int height = 16;
  30.         private int speed = 16;
  31.  
  32.         Queue<Point> snake = new Queue<Point>();
  33.  
  34.         Direction direction = Direction.Right;
  35.  
  36.         Point head, newHead, food;
  37.  
  38.         Random randomNumber = new Random();
  39.  
  40.         List<Point> obstacles = new List<Point>() {
  41.             new Point(20, 10),
  42.             new Point(10, 20),
  43.             new Point(5, 30)
  44.         };
  45.  
  46.         bool gameRunning = true;
  47.  
  48.         public Form1()
  49.         {
  50.             InitializeComponent();
  51.  
  52.             do
  53.             {
  54.                 food = new Point(
  55.                         randomNumber.Next(0, pbGame.Size.Width / speed),
  56.                         randomNumber.Next(0, pbGame.Size.Height / speed));
  57.             } while (snake.Contains(food) || obstacles.Contains(food));
  58.  
  59.             for (int i = 0; i < 5; i++)
  60.             {
  61.                 snake.Enqueue(new Point(i, 0));
  62.             }
  63.  
  64.             timer1.Interval = 100;
  65.             timer1.Tick += UpdateScreen;
  66.             timer1.Start();
  67.         }
  68.  
  69.         private void UpdateScreen(object sender, EventArgs e)
  70.         {
  71.             if (gameRunning)
  72.             {
  73.                 pbGame.Invalidate();
  74.             }
  75.             else
  76.             {
  77.                 lblGameOver.Text = "The game is over! \nPress Esc to exit.";
  78.                 lblGameOver.Visible = true;
  79.                 timer1.Stop();
  80.             }
  81.            
  82.         }
  83.         private void Form1_Load(object sender, EventArgs e)
  84.         {
  85.  
  86.         }
  87.  
  88.         private void pbGame_Paint(object sender, PaintEventArgs e)
  89.         {
  90.             Graphics canvas = e.Graphics;
  91.  
  92.             Point segment;
  93.  
  94.             head = snake.Last();
  95.  
  96.             switch (direction)
  97.             {
  98.                 case Direction.Right :
  99.                     // if (positionX >= pbGame.Size.Width / speed) positionX = 0;
  100.                     // else positionX++;
  101.                     if (head.x >= pbGame.Size.Width / speed) newHead = new Point(0, head.y);
  102.                     else newHead = new Point(head.x + 1, head.y);
  103.                     break;
  104.                 case Direction.Left:
  105.                     // if (positionX <= 0) positionX = pbGame.Size.Width / speed;
  106.                     // else positionX--;
  107.                     if (head.x <= 0) newHead = new Point(pbGame.Size.Width / speed, head.y);
  108.                     else newHead = new Point(head.x - 1, head.y);
  109.                     break;
  110.                 case Direction.Up :
  111.                     // if (positionY <= 0) positionY = pbGame.Size.Height / speed;
  112.                     // else positionY--;
  113.                     if (head.y <= 0) newHead = new Point(head.x, pbGame.Size.Height / speed);
  114.                     else newHead = new Point(head.x, head.y - 1);
  115.                     break;
  116.                 case Direction.Down :
  117.                     // if (positionY >= pbGame.Size.Height / speed) positionY = 0;
  118.                     // else positionY++;
  119.                     if (head.y >= pbGame.Size.Height / speed) newHead = new Point(head.x, 0);
  120.                     else newHead = new Point(head.x, head.y + 1);
  121.                     break;
  122.             }
  123.  
  124.             snake.Enqueue(newHead);
  125.  
  126.             // collision detection with food
  127.             if (newHead.x == food.x && newHead.y == food.y)
  128.             {
  129.                 // generate new position of the food
  130.                 do{
  131.                     food = new Point(
  132.                             randomNumber.Next(0, pbGame.Size.Width / speed),
  133.                             randomNumber.Next(0, pbGame.Size.Height / speed));
  134.                 } while (snake.Contains(food) || obstacles.Contains(food));
  135.             }
  136.             else
  137.             {
  138.                 snake.Dequeue();
  139.             }
  140.  
  141.             // colission detection PrintControllerWithStatusDialog obstacles
  142.             if (obstacles.Contains(newHead))
  143.             {
  144.                 gameRunning = false;
  145.             }
  146.  
  147.  
  148.             // render obstacles
  149.             foreach (Point obstacle in obstacles)
  150.             {
  151.                 canvas.FillEllipse(Brushes.Blue,
  152.                    new Rectangle(obstacle.x * speed, obstacle.y * speed, width, height));                
  153.             }
  154.  
  155.             // render food
  156.             canvas.FillEllipse(Brushes.Green,
  157.                   new Rectangle(food.x * speed, food.y * speed, width, height));
  158.  
  159.             // render snake
  160.             for (int i = 0; i < snake.Count; i++)
  161.             {
  162.                 segment = snake.ElementAt(i);
  163.                 if (i == snake.Count - 1)
  164.                 {
  165.                     canvas.FillEllipse(Brushes.Black,
  166.                         new Rectangle(segment.x * speed, segment.y * speed, width, height));
  167.                 }
  168.                 else
  169.                 {
  170.                     canvas.FillEllipse(Brushes.Red,
  171.                        new Rectangle(segment.x * speed, segment.y * speed, width, height));              
  172.                 }
  173.             }
  174.  
  175.             // render point
  176.             //canvas.FillEllipse(Brushes.Red,
  177.             //    new Rectangle(positionX * speed, positionY * speed, width, height));
  178.         }
  179.  
  180.         private void Form1_KeyDown(object sender, KeyEventArgs e)
  181.         {
  182.             switch (e.KeyCode) {
  183.                 case Keys.Right :
  184.                     // positionX++;
  185.                     direction = Direction.Right;
  186.                     break;
  187.                 case Keys.Left:
  188.                     // positionX--;
  189.                     direction = Direction.Left;
  190.                     break;
  191.                 case Keys.Up:
  192.                     // positionY--;
  193.                     direction = Direction.Up;
  194.                     break;
  195.                 case Keys.Down:
  196.                     // positionY++;
  197.                     direction = Direction.Down;
  198.                     break;
  199.                 case Keys.Escape:
  200.                     Application.Exit();
  201.                     break;
  202.             }
  203.         }
  204.  
  205.  
  206.     }
  207. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement