Пустое поле WindowsForms C#
Код:
namespace Catacombs
{
public partial class Menu : Form
{
bool right;
bool left;
bool up;
bool down;
public Menu()
{
InitializeComponent();
}
// Создаем кисть и указываем, что рисовать (Начало)
SolidBrush blackBrush = new SolidBrush(Color.Black);
private void Menu_Paint(object sender, PaintEventArgs e)
{
e.Graphics.FillRectangle(blackBrush, 0, 0, 10, 500);
e.Graphics.FillRectangle(blackBrush, 100, 100, 10, 200);
}
// Создаем кисть и указываем, что рисовать (Конец)
// Элементы управления игроком (Начало)
private void timer1_Tick(object sender, EventArgs e)
{
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; }
}
// Элементы управления игроком (Конец)
//Скриншот окна (Начало)
public static Bitmap CaptureScreen()
{
Bitmap BMP = new Bitmap(System.Windows.Forms.Form.ActiveForm.Bounds.Width,
System.Windows.Forms.Form.ActiveForm.Bounds.Height,
System.Drawing.Imaging.PixelFormat.Format32bppArgb);
System.Drawing.Graphics GFX = System.Drawing.Graphics.FromImage(BMP);
GFX.CopyFromScreen(System.Windows.Forms.Form.ActiveForm.Bounds.X,
System.Windows.Forms.Form.ActiveForm.Bounds.Y,
0, 0,
System.Windows.Forms.Form.ActiveForm.Bounds.Size,
System.Drawing.CopyPixelOperation.SourceCopy);
return BMP;
}
//Скриншот окна (Конец)
//Определение цвета пикселя (Начало)
public static Color PC(int x,int y)
{
Bitmap myBitmap = CaptureScreen();
Color pixelColor = myBitmap.GetPixel(x+8, y+30);
return pixelColor;
}
//Определение цвета пикселя (Конец)
// Делаем стены непроходимыми (Начало)
private void player_LocationChanged(object sender, EventArgs e)
{
if ((PC(player.Location.X - 1, player.Location.Y) == Color.Black) || (PC(player.Location.X - 1, player.Location.Y + 10) == Color.Black)) { left = false; }
}
// Делаем стены непроходимыми (Не Конец)
}
}
{
public partial class Menu : Form
{
bool right;
bool left;
bool up;
bool down;
public Menu()
{
InitializeComponent();
}
// Создаем кисть и указываем, что рисовать (Начало)
SolidBrush blackBrush = new SolidBrush(Color.Black);
private void Menu_Paint(object sender, PaintEventArgs e)
{
e.Graphics.FillRectangle(blackBrush, 0, 0, 10, 500);
e.Graphics.FillRectangle(blackBrush, 100, 100, 10, 200);
}
// Создаем кисть и указываем, что рисовать (Конец)
// Элементы управления игроком (Начало)
private void timer1_Tick(object sender, EventArgs e)
{
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; }
}
// Элементы управления игроком (Конец)
//Скриншот окна (Начало)
public static Bitmap CaptureScreen()
{
Bitmap BMP = new Bitmap(System.Windows.Forms.Form.ActiveForm.Bounds.Width,
System.Windows.Forms.Form.ActiveForm.Bounds.Height,
System.Drawing.Imaging.PixelFormat.Format32bppArgb);
System.Drawing.Graphics GFX = System.Drawing.Graphics.FromImage(BMP);
GFX.CopyFromScreen(System.Windows.Forms.Form.ActiveForm.Bounds.X,
System.Windows.Forms.Form.ActiveForm.Bounds.Y,
0, 0,
System.Windows.Forms.Form.ActiveForm.Bounds.Size,
System.Drawing.CopyPixelOperation.SourceCopy);
return BMP;
}
//Скриншот окна (Конец)
//Определение цвета пикселя (Начало)
public static Color PC(int x,int y)
{
Bitmap myBitmap = CaptureScreen();
Color pixelColor = myBitmap.GetPixel(x+8, y+30);
return pixelColor;
}
//Определение цвета пикселя (Конец)
// Делаем стены непроходимыми (Начало)
private void player_LocationChanged(object sender, EventArgs e)
{
if ((PC(player.Location.X - 1, player.Location.Y) == Color.Black) || (PC(player.Location.X - 1, player.Location.Y + 10) == Color.Black)) { left = false; }
}
// Делаем стены непроходимыми (Не Конец)
}
}
Переписал весь код в точности в другой проект. Графика появилась. Но игрок все равно проходит сквозь стены :/
я так понимаю у тебя нет системы координат, введи их в игру, а потом когда координаты игрока будут соприкасаться с координатами стены, просто "банешь" клавишу с которой игрок тыкается в стену.
Цитата: Kuzya
я так понимаю у тебя нет системы координат, введи их в игру, а потом когда координаты игрока будут соприкасаться с координатами стены, просто "банешь" клавишу с которой игрок тыкается в стену.
Спасибо, а не подскажете событие, в котором описывать координаты и метод бы. Я так понял, что, в принципе, можно указать координаты "запретных" пикселей?
Цитата: AltAsche
Спасибо, а не подскажете событие, в котором описывать координаты и метод бы. Я так понял, что, в принципе, можно указать координаты "запретных" пикселей?
Это ты сам придумываешь,
см. Тему Сделать стены в игре "Лабиринт"