Share Pastebin
Guest
Public paste!

Profas

By: a guest | Nov 7th, 2008 | Syntax: C++ | Size: 13.21 KB | Hits: 1,038 | Expires: Never
This paste has a previous version, view the difference. Copy text to clipboard
  1. using System;
  2. using System.Text;
  3. using System.Collections.Generic;
  4. using System.Collections.ObjectModel;
  5. using System.Drawing;
  6. using SdlDotNet.Graphics;
  7. using SdlDotNet.Graphics.Sprites;
  8. using SdlDotNet.Core;
  9. using SdlDotNet.Input;
  10.  
  11. namespace SNAKE
  12. {
  13.     public class MainSnake
  14.     {
  15.         #region Fields
  16.         private Surface background;
  17.         public Surface screen;
  18.         private Sprite bg;
  19.         public SpriteCollection main = new SpriteCollection();
  20.         public Collection<Rectangle> rects = new Collection<Rectangle>();
  21.         private Snake snake;
  22.         public Surface text;
  23.         private Surface esctext;
  24.         public SdlDotNet.Graphics.Font font;
  25.         #endregion
  26.  
  27.         #region MainSnake
  28.         public MainSnake()
  29.         {
  30.             Events.Fps = 120;
  31.             Events.Tick += new EventHandler<TickEventArgs>(EngineTick);
  32.  
  33.             screen = Video.SetVideoMode(800, 600);
  34.  
  35.             Video.WindowCaption = "PRO SNAKE 2D:: By Profas";
  36.             background = new Surface(@"failai/map.jpg");
  37.             bg = new Sprite(background);
  38.             bg.Position = new Point(0, 0);
  39.             main.Add(bg);
  40.             rects = screen.Blit(main);
  41.  
  42.             snake = new Snake(new Point(250,250), this);
  43.             main.Add(snake._head);
  44.  
  45.             AddTail();
  46.  
  47.             font = new SdlDotNet.Graphics.Font(@"failai/comic.ttf", 18);
  48.             esctext = font.Render("PRO SNAKE 2D :: By Profas :: ESC to quit", Color.Black);
  49.             text = font.Render("SCORE "+ snake.score.ToString()+", FPS: "+Events.Fps.ToString(), Color.Gold);
  50.  
  51.             Events.Run();
  52.         }
  53.         ~MainSnake() { }
  54.         #endregion
  55.  
  56.         #region EngineTick
  57.         private void EngineTick(object sender, TickEventArgs args)
  58.         {
  59.             rects = screen.Blit(main);
  60.             screen.Blit(text, new Point(70, 560));
  61.             screen.Blit(esctext, new Point(200, 10));
  62.             screen.Update();
  63.             screen.Update(rects);
  64.  
  65.             snake.Move();
  66.             Video.Screen.Fill(Color.Black);
  67.         }
  68.         #endregion
  69.  
  70.         #region AddTail
  71.         private void AddTail()
  72.         {
  73.             for (int i = 0; i < snake.tail_count; i++)
  74.                 main.Add(snake._tail[i]);
  75.         }
  76.         #endregion
  77.     }
  78.  
  79.     static class Program
  80.     {
  81.         [STAThread]
  82.         static void Main()
  83.         {
  84.             Application.EnableVisualStyles();
  85.             Application.SetCompatibleTextRenderingDefault(false);
  86.             Application.Run(new Main());
  87.         }
  88.     }
  89.  
  90.     #region eWalk
  91.     public enum walk
  92.     {
  93.         none = 0,
  94.         up,
  95.         right,
  96.         down,
  97.         left
  98.     }
  99.     #endregion
  100.  
  101.     public class Snake
  102.     {
  103.         #region Fields
  104.         private walk direction = new walk();
  105.         private Surface head;
  106.         public Sprite _head;
  107.         public Tail[] _tail;
  108.         public int tail_count = 6;
  109.         public int speed = 0;
  110.         private System.Windows.Forms.Timer permission = new System.Windows.Forms.Timer();
  111.         private bool stop = true;
  112.         private int pos = 2;
  113.         private Point head_last_pos;
  114.         private MainSnake _engine;
  115.         private int step = 25;
  116.         private Liux liux;
  117.         private bool dead = false;
  118.         public int score;
  119.         private Surface tl_surf;
  120.         #endregion
  121.  
  122.         #region Snake
  123.         public Snake(Point location, MainSnake engine)
  124.         {
  125.             _engine = engine;
  126.  
  127.             score = (tail_count - 1) * 10;
  128.  
  129.             Events.KeyboardDown += new EventHandler<KeyboardEventArgs>(KeyboardDown);
  130.             Events.KeyboardUp += new EventHandler<KeyboardEventArgs>(KeyboardUp);
  131.  
  132.             _tail = new Tail[tail_count];
  133.  
  134.             tl_surf = new Surface(@"failai/tail.bmp");
  135.  
  136.             for (int i = 0; i < tail_count; i++)
  137.                 _tail[i] = new Tail(tl_surf);
  138.  
  139.             head = new Surface(@"failai/head.bmp");
  140.             _head = new Sprite(head);
  141.             _head.Position = location;
  142.             head_last_pos = location;
  143.             _head.Transparent = true;
  144.             _head.TransparentColor = Color.White;
  145.  
  146.             _tail[1].Surface = head;
  147.  
  148.             permission.Interval = 25;
  149.             permission.Tick += new EventHandler(PermissionTick);
  150.             permission.Enabled = true;
  151.  
  152.             liux = new Liux(this);
  153.             _engine.main.Add(liux);
  154.  
  155.             direction = walk.right;
  156.         }
  157.         ~Snake() { }
  158.         #endregion
  159.  
  160.         #region Move
  161.         public void Move()
  162.         {
  163.             if (!dead)
  164.             {
  165.                 LiuxCollision();
  166.  
  167.                 if ((!TailCollision()) && (WallsCollision()))
  168.                 {
  169.                     if (!stop)
  170.                         if (_head.Y % 25 != 0)
  171.                         {
  172.                             if (pos == 1)
  173.                                 _head.Y -= step;
  174.                             if (pos == 3)
  175.                                 _head.Y += step;
  176.                         }
  177.                         else if (_head.X % 25 != 0)
  178.                         {
  179.                             if (pos == 2)
  180.                                 _head.X += step;
  181.                             if (pos == 4)
  182.                                 _head.X -= step;
  183.                         }
  184.                         else
  185.                         {
  186.                             stop = true;
  187.                             permission.Enabled = true;
  188.                         }
  189.                 }
  190.                 else
  191.                     Die();
  192.             }
  193.         }
  194.         #endregion
  195.  
  196.         #region Keyboard
  197.         private void KeyboardDown(object sender, KeyboardEventArgs args)
  198.         {
  199.             switch (args.Key)
  200.             {
  201.                 case (Key.UpArrow):
  202.                     if(direction!=walk.down)
  203.                         direction = walk.up;
  204.                     break;
  205.                 case (Key.RightArrow):
  206.                     if(direction != walk.left)
  207.                         direction = walk.right;
  208.                     break;
  209.                 case (Key.DownArrow):
  210.                     if(direction != walk.up)
  211.                         direction = walk.down;
  212.                     break;
  213.                 case (Key.LeftArrow):
  214.                     if(direction != walk.right)
  215.                         direction = walk.left;
  216.                     break;
  217.                 case (Key.Escape):
  218.                     Events.QuitApplication();
  219.                     break;
  220.             }
  221.         }
  222.  
  223.         private void KeyboardUp(object sender, KeyboardEventArgs args)
  224.         {
  225.         }
  226.         #endregion
  227.  
  228.         #region PermissionTick
  229.         private void PermissionTick(object sender, EventArgs args)
  230.         {
  231.             if(speed++ == 1)
  232.             {
  233.                 stop = false;
  234.                 speed = 0;
  235.  
  236.                 switch (direction)
  237.                 {
  238.                     case walk.up:
  239.                         pos = 1;
  240.                         _head.Y -= step;
  241.                         break;
  242.                     case walk.right:
  243.                         pos = 2;
  244.                         _head.X += step;
  245.                         break;
  246.                     case walk.down:
  247.                         pos = 3;
  248.                         _head.Y += step;
  249.                         break;
  250.                     case walk.left:
  251.                         pos = 4;
  252.                         _head.X -= step;
  253.                         break;
  254.                 }
  255.  
  256.                 TailMove();
  257.                 _engine.text = _engine.font.Render("SCORE " + score.ToString() + ", FPS: " + Events.Fps.ToString(), Color.Gold);
  258.                 permission.Enabled = false;
  259.             }
  260.         }
  261.         #endregion
  262.  
  263.         #region PickUp
  264.         private void PickUp()
  265.         {
  266.             score += 10;
  267.             //_engine.text = _engine.font.Render("SCORE " + score.ToString() + ", FPS: " + Events.Fps.ToString(), Color.Gold);
  268.             Grow();
  269.             liux.ChangeLocation();
  270.         }
  271.         #endregion
  272.  
  273.         #region LiuxCollision
  274.         private void LiuxCollision()
  275.         {
  276.             Point head_xy = new Point(_head.X + (_head.Width / 2), _head.Y + (_head.Height / 2));
  277.  
  278.             if ((head_xy.X > liux.X) && (head_xy.X < liux.X + liux.Width))
  279.                 if ((head_xy.Y > liux.Y) && (head_xy.Y < liux.Y + liux.Height))
  280.                     PickUp();
  281.         }
  282.         #endregion
  283.  
  284.         #region WallsCollision
  285.         private bool WallsCollision()
  286.         {
  287.             Point head_xy = new Point(_head.X + (_head.Width / 2), _head.Y + (_head.Height / 2));
  288.  
  289.             if ((head_xy.X > 50) && (head_xy.X < 750))
  290.                 if ((head_xy.Y > 50) && (head_xy.Y < 550))
  291.                     return true;
  292.                 else
  293.                     return false;
  294.             else
  295.                 return false;
  296.         }
  297.         #endregion
  298.  
  299.         #region TailCollision
  300.         private bool TailCollision()
  301.         {
  302.             Point head_xy = new Point(_head.X + (_head.Width / 2), _head.Y + (_head.Height / 2));
  303.  
  304.             for (int i = 0; i < tail_count; i++)
  305.             {
  306.                 if (i != 1)
  307.                     if ((head_xy.X > _tail[i].X) && (head_xy.X < _tail[i].X + _tail[i].Width))
  308.                         if ((head_xy.Y > _tail[i].Y) && (head_xy.Y < _tail[i].Y + _tail[i].Height))
  309.                             return true;
  310.             }
  311.  
  312.             return false;
  313.         }
  314.         #endregion
  315.  
  316.         #region TailMove
  317.         public void TailMove()
  318.         {
  319.             for (int i = 0; i < tail_count; i++)
  320.             {
  321.                 if (i != 0)
  322.                 {
  323.                     _tail[i].last_pos = _tail[i].Position;
  324.                     _tail[i].Position = _tail[i-1].last_pos;
  325.                 }
  326.                 else
  327.                 {
  328.                     _tail[i].Position = _tail[i].last_pos;
  329.                     _tail[i].last_pos = _head.Position;
  330.                 }
  331.             }
  332.         }
  333.         #endregion
  334.  
  335.         #region Grow
  336.         private void Grow()
  337.         {
  338.             Tail[] _newTail = new Tail[++tail_count];
  339.  
  340.             for (int i = 0; i < tail_count - 1; i++)
  341.                 _newTail[i] = _tail[i];
  342.  
  343.             _tail = new Tail[tail_count];
  344.  
  345.             for (int i = 0; i < tail_count; i++)
  346.                 _tail[i] = _newTail[i];
  347.  
  348.             _tail[tail_count - 1] = new Tail(tl_surf);
  349.  
  350.             _tail[tail_count - 1].last_pos = _tail[tail_count - 2].Position;
  351.  
  352.             _engine.main.Add(_tail[tail_count - 1]);
  353.  
  354.             _tail[tail_count - 1].Position = _tail[tail_count - 1].last_pos;
  355.  
  356.             _newTail = new Tail[0];
  357.         }
  358.         #endregion
  359.  
  360.         #region Die
  361.         private void Die()
  362.         {
  363.             dead = true;
  364.             direction = walk.none;
  365.             System.Windows.Forms.MessageBox.Show("YOUR SCORE IS: " + score.ToString() + ".", "GAME OVER");
  366.             Events.QuitApplication();
  367.         }
  368.         #endregion
  369.     }
  370.  
  371.     public class Tail : Sprite
  372.     {
  373.         #region Fields
  374.         public Point last_pos = new Point(-50, -50);
  375.         #endregion
  376.  
  377.         #region Tail
  378.         public Tail(Surface tail)
  379.         {
  380.             this.Surface = tail;
  381.             this.Position = new Point(-50, -50);
  382.             this.Transparent = true;
  383.             this.TransparentColor = Color.White;
  384.         }
  385.         ~Tail() { }
  386.         #endregion
  387.     }
  388.  
  389.     public class Liux : Sprite
  390.     {
  391.         #region Fields
  392.         private Random rand = new Random();
  393.         private bool ok = false;
  394.         private Snake _snake;
  395.         #endregion
  396.  
  397.         #region Liux
  398.         public Liux(Snake snake)
  399.         {
  400.             int x = rand.Next(10, 50);
  401.             _snake = snake;
  402.  
  403.             Surface liux = new Surface(@"failai/liux.bmp");
  404.             this.Surface = liux;
  405.             this.Transparent = true;
  406.             this.TransparentColor = Color.White;
  407.  
  408.             ChangeLocation();
  409.         }
  410.         ~Liux() { }
  411.         #endregion
  412.  
  413.         #region ChangeLocation
  414.         public void ChangeLocation()
  415.         {
  416.             int posx = 0;
  417.             int posy = 0;
  418.  
  419.             while (!ok)
  420.             {
  421.                 posx = rand.Next(50, 675);
  422.                 posy = rand.Next(50, 475);
  423.  
  424.                 while (posx % 25 != 0)
  425.                     posx++;
  426.  
  427.                 while (posy % 25 != 0)
  428.                     posy++;
  429.  
  430.                 for (int i = 0; i < _snake.tail_count; i++)
  431.                     if (_snake._tail[i].Position == new Point(posx, posy))
  432.                     {
  433.                         ok = false;
  434.                         break;
  435.                     }
  436.                     else
  437.                         ok = true;
  438.             }
  439.  
  440.             ok = false;
  441.  
  442.             this.Position = new Point(posx, posy);
  443.         }
  444.         #endregion
  445.     }
  446.  
  447.     public partial class Main : Form
  448.     {
  449.         public Main()
  450.         {
  451.             InitializeComponent();
  452.         }
  453.  
  454.         private void button1_Click(object sender, EventArgs e)
  455.         {
  456.             MainSnake mainsnake = new MainSnake();
  457.         }
  458.  
  459.         private void button2_Click(object sender, EventArgs e)
  460.         {
  461.             this.Close();
  462.         }
  463.     }
  464.  
  465.  
  466. }