Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Сделать стены в игре "Лабиринт"

87K
24 мая 2016 года
AltAsche
4 / / 24.05.2016
Приветствую. Вопрос следующий: как реализовать построение стен лабиринта в c# windows forms? Собственно, у меня получилось сделать одну стену осязаемой, т.е. через нее нельзя пройти, но мне нужно проделать эту операцию для множества таких стенок, а писать по 4 строчки кода для каждой стенки негоже. Как можно придать одно свойство нескольким объектам? Может есть такое понятие как тег, которым можно обозначить, что какая-то сущность наделяется определенными свойствами? Или лучше написать класс для стен, а если так, то как это сделать? Очень надеюсь на пример кода в ваших ответах. Свой код прилагаю.
Код:
namespace Catacombs
{
    public partial class Menu : Form
    {
        bool right;
        bool left;
        bool up;
        bool down;
        public Menu()
        {
            InitializeComponent();
        }
       
        private void timer1_Tick(object sender, EventArgs e)
        {

//делаем 1 блок осязаемым
            if (player.Right > block.Left-3 && player.Bottom > block.Top && player.Top < block.Bottom) { right = false; }
            if (player.Left < block.Right+3 && player.Bottom > block.Top && player.Top < block.Bottom) { left = false; }
            if (player.Bottom > block.Top-3 && player.Left < block.Right && player.Right > block.Left) { down = false; }
            if (player.Top < block.Bottom+3 && player.Left < block.Right && player.Right > block.Left) { up = false; }
           

            if (right == true) {player.Left += 3;}
            if (left == true) { player.Left -= 3; }
            if (up == true) { player.Top -= 3; }
            if (down == true) { player.Top += 3; }

        }

        private void Menu_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode ==Keys.Right) { right = true; }
            if (e.KeyCode == Keys.Left) { left = true; }
            if (e.KeyCode == Keys.Up) { up = true; }
            if (e.KeyCode == Keys.Down) { down = true; }
        }

        private void Menu_KeyUp(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Right) { right = false; }
            if (e.KeyCode == Keys.Left) { left = false; }
            if (e.KeyCode == Keys.Up) { up = false; }
            if (e.KeyCode == Keys.Down) { down = false; }
        }      
    }
}
327
30 мая 2016 года
UserNet2008
748 / / 03.04.2010
Если Ыщё актуально!!!
Нужно, что-бы не стены думали, а сам курсор-лабиринта определял, что у нево на пути
Для этово нужно проверять ход (Right-Left-Up-Down) перед курсором-лабиринта.
327
06 июня 2016 года
UserNet2008
748 / / 03.04.2010
Вот Вам код-на скорую руку
un2008Csharp.dll - нужно добавить к проекту Как ссылку
Все PictureBox Size 13x13, кроме лабиринта(в данном случаи 402x402) зависит от настроек генератора лабиринтов.
Код:
using System;
using System.Drawing;
using System.Windows.Forms;
using Microsoft.VisualBasic.Devices;
using un2008Csharp;

namespace SimpleMaze
{
  public partial class Form1 : Form
  {
    int int_corX;
    int int_corY;
    string str_MemArrow;

    Computer My = new Computer();
 
    public Form1()
    {
      InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
      int_corX = picCursor.Left;
      int_corY = picCursor.Top;

      NumLockOffOn();
      Buza.ShowMove(picMaze, picControlMove, picCursor);
    }

    private void NumLockOffOn()
    {
      if (My.Keyboard.NumLock)
      {
        picNumLock.BackColor = Color.Green;
      }
      else
      {
        picNumLock.BackColor = Color.Red;
      }
    }

    private void Form1_KeyDown(object sender, KeyEventArgs e)
    {
      switch (e.KeyCode)
      {
        case Keys.Up:
        case Keys.NumPad8:
          int_corY -= 1;
          str_MemArrow = "AU";
          break;
        case Keys.Down:
        case Keys.NumPad2:
          int_corY += 1;
          str_MemArrow = "AD";
          break;
        case Keys.Left:
        case Keys.NumPad4:
          int_corX -= 1;
          str_MemArrow = "AL";
          break;
        case Keys.Right:
        case Keys.NumPad6:
          int_corX += 1;
          str_MemArrow = "AR";
          break;
        case Keys.NumLock:
          NumLockOffOn();
          return;
                   
      }

      picCursor.Location = new Point(int_corX, int_corY);
      Buza.ShowMove(picMaze, picControlMove, picCursor);
    }

    private void picControlMove_Paint(object sender, PaintEventArgs e)
    {
      Bitmap M_bm = new Bitmap(picMask.Image);
      Bitmap C_bm = new Bitmap(picControlMove.Image);

      if (Buza.CompareImage(M_bm, C_bm) == Buza.CompareResult.unPixelMismatch)
      {
        switch (str_MemArrow)
        {
          case "AU":
            int_corY += 1;
            break;
          case "AD":
            int_corY -= 1;
            break;
          case "AL":
            int_corX += 1;
            break;
          case "AR":
            int_corX -= 1;
            break;
        }

      }

      picCursor.Location = new Point(int_corX, int_corY);
    }
  }
}
p/s если актуально ответ не раньше субботы ы т.д
Прикрепленные файлы:
38 Кб
Загрузок: 910
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог