Collision
This commit is contained in:
parent
ecbbda9477
commit
c38737fa61
@ -1,8 +1,10 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
using System.Security.AccessControl;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
using static System.Windows.Forms.VisualStyles.VisualStyleElement.ScrollBar;
|
||||||
|
|
||||||
namespace DoubleDeckerBus
|
namespace DoubleDeckerBus
|
||||||
{
|
{
|
||||||
@ -18,6 +20,7 @@ namespace DoubleDeckerBus
|
|||||||
protected readonly int _freeRoad = 0;
|
protected readonly int _freeRoad = 0;
|
||||||
protected readonly int _barrier = 1;
|
protected readonly int _barrier = 1;
|
||||||
|
|
||||||
|
|
||||||
public Bitmap CreateMap(int width, int height, IDrawingObject drawningObject)
|
public Bitmap CreateMap(int width, int height, IDrawingObject drawningObject)
|
||||||
{
|
{
|
||||||
_width = width;
|
_width = width;
|
||||||
@ -33,10 +36,28 @@ namespace DoubleDeckerBus
|
|||||||
public Bitmap MoveObject(Direction direction)
|
public Bitmap MoveObject(Direction direction)
|
||||||
{
|
{
|
||||||
// TODO проверка, что объект может переместится в требуемом направлении
|
// TODO проверка, что объект может переместится в требуемом направлении
|
||||||
if (true)
|
|
||||||
{
|
|
||||||
_drawingObject.MoveObject(direction);
|
_drawingObject.MoveObject(direction);
|
||||||
|
|
||||||
|
bool collision = CheckCollision();
|
||||||
|
|
||||||
|
if (collision) {
|
||||||
|
switch (direction) {
|
||||||
|
case Direction.Left:
|
||||||
|
_drawingObject.MoveObject(Direction.Right);
|
||||||
|
break;
|
||||||
|
case Direction.Right:
|
||||||
|
_drawingObject.MoveObject(Direction.Left);
|
||||||
|
break;
|
||||||
|
case Direction.Up:
|
||||||
|
_drawingObject.MoveObject(Direction.Down);
|
||||||
|
break;
|
||||||
|
case Direction.Down:
|
||||||
|
_drawingObject.MoveObject(Direction.Up);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return DrawMapWithObject();
|
return DrawMapWithObject();
|
||||||
}
|
}
|
||||||
private bool SetObjectOnMap()
|
private bool SetObjectOnMap()
|
||||||
@ -48,7 +69,15 @@ namespace DoubleDeckerBus
|
|||||||
int x = _random.Next(0, 10);
|
int x = _random.Next(0, 10);
|
||||||
int y = _random.Next(0, 10);
|
int y = _random.Next(0, 10);
|
||||||
_drawingObject.SetObject(x, y, _width, _height);
|
_drawingObject.SetObject(x, y, _width, _height);
|
||||||
|
|
||||||
|
|
||||||
// TODO првоерка, что объект не "накладывается" на закрытые участки
|
// TODO првоерка, что объект не "накладывается" на закрытые участки
|
||||||
|
|
||||||
|
while (CheckCollision()) {
|
||||||
|
x = _random.Next(0, 10);
|
||||||
|
y = _random.Next(0, 10);
|
||||||
|
_drawingObject.SetObject(x, y, _width, _height);
|
||||||
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
private Bitmap DrawMapWithObject()
|
private Bitmap DrawMapWithObject()
|
||||||
@ -75,6 +104,38 @@ namespace DoubleDeckerBus
|
|||||||
}
|
}
|
||||||
_drawingObject.DrawingObject(gr);
|
_drawingObject.DrawingObject(gr);
|
||||||
return bmp;
|
return bmp;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private bool CheckCollision() {
|
||||||
|
var pos = _drawingObject.GetCurrentPosition();
|
||||||
|
int startX = (int)((pos.Left) / _size_x);
|
||||||
|
int endX = (int)((pos.Right) / _size_x);
|
||||||
|
int startY = (int)((pos.Top) / _size_y);
|
||||||
|
int endY = (int)((pos.Bottom) / _size_y);
|
||||||
|
|
||||||
|
if (startX < 0 || startY < 0 || endX > _map.GetLength(1) || endY > _map.GetLength(0)) { return false; }
|
||||||
|
|
||||||
|
/* startX = (int)((pos.Left - 5) / _size_x);
|
||||||
|
endX = (int)((pos.Right + 5) / _size_x);
|
||||||
|
startY = (int)((pos.Top - 5) / _size_y);
|
||||||
|
endY = (int)((pos.Bottom + 5) / _size_y);*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
for (int y = startY - 1; y <= endY + 1; y++)
|
||||||
|
{
|
||||||
|
for (int x = startX - 1; x <= endX + 1; x++)
|
||||||
|
{
|
||||||
|
if (_map[x, y] == _barrier)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected abstract void GenerateMap();
|
protected abstract void GenerateMap();
|
||||||
|
@ -34,7 +34,7 @@ namespace DoubleDeckerBus
|
|||||||
|
|
||||||
void IDrawingObject.DrawingObject(Graphics g)
|
void IDrawingObject.DrawingObject(Graphics g)
|
||||||
{
|
{
|
||||||
// TODO
|
_bus.DrawTransport(g);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user