Дэвелопер
Регистрация: 04.09.2005
Адрес: Красноярск
Сообщений: 1,376
Написано 491 полезных сообщений (для 886 пользователей)
|
Рисование двухмерного массива с поворотом
Такая тема: есть двухмерный массив с какой-то инфой, например с экземплярами игровых объектов, нужно отобразить массив на экран с возможностью поворота на 90, 180, 270 градусов.
Я сделал неким образом, который предлагаю к рассмотрению. Проход двойного цикла, в котором можно и обрабатывать элемент массива, и сразу рисовать.
Код:
Graphics(800,300,16,2)
AppTitle ("Рисование двухмерного массива с поворотом")
;создаём "поле" 3х10, в котором инфа о цвете, для примера
Global dimX%=3, dimZ%=10
Dim cells.TColor(dimX, dimZ)
Local xx%,zz%
For xx%=0 To dimX-1
For zz%=0 To dimZ-1
;cells(xx,zz) = CreateColor(xx*zz*255/(dimX*dimZ),xx*zz*255/(dimX*dimZ),xx*zz*255/(dimX*dimZ))
cells(xx,zz) = CreateRandomColor()
Next
Next
ClsColor(50,50,100)
While Not KeyHit(1)
;рисуем с поворотами
DrawCells(20,50,0)
DrawCells(200,50,1)
DrawCells(380,50,2)
DrawCells(560,50,3)
;инфа
Color(230,230,230)
Text 20+60,30, "0 = 0*"
Text 200+60,30, "1 = 90*"
Text 380+60,30, "2 = 180*"
Text 560+60,30, "3 = 270*"
Flip()
Cls()
Wend
End
;рисуем с учётом поворота, dir = direction = направление
Function DrawCells(x0#,y0#,dir%=0)
Local xx%,zz%,px%,pz%
For xx%=0 To dimX-1
For zz%=0 To dimZ-1
;---
;здесь можно обрабатывать что-то для конкретной ячейки
;---
SetColor(cells(xx,zz)) ;цвет
If(dir = 0) ;в зависимости отнаправления получаем координаты отображения
px = xx
pz = zz
Else If(dir = 1)
px = zz
pz = dimX-1-xx
Else If(dir = 2)
px = dimX-1-xx
pz = dimZ-1-zz
Else If(dir = 3)
px = dimZ-1-zz
pz = xx
EndIf
Rect(x0+px*15,y0+pz*15,10,10,True)
Next
Next
End Function
;
Function CreateColor.TColor(r%,g%,b%)
Local c.TColor = New TColor
c\r = r
c\g = g
c\b = b
Return c
End Function
Function CreateRandomColor.TColor()
Return CreateColor(Rand(0,255),Rand(0,255),Rand(0,255))
End Function
Function SetColor(c.TColor)
Color(c\r,c\g,c\b)
End Function
;
Type TColor
Field r%,g%,b%
End Type
Фраза "Рисование массива" какая-то неправильная, но суть отражает.
Картинка:
|