forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Полезные функции (http://forum.boolean.name/forumdisplay.php?f=17)
-   -   Рисование двухмерного массива с поворотом (http://forum.boolean.name/showthread.php?t=16678)

Жека 21.04.2012 16:38

Рисование двухмерного массива с поворотом
 
Вложений: 1
Такая тема: есть двухмерный массив с какой-то инфой, например с экземплярами игровых объектов, нужно отобразить массив на экран с возможностью поворота на 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


Фраза "Рисование массива" какая-то неправильная, но суть отражает.

Картинка:

Randomize 22.04.2012 03:54

Ответ: Рисование двухмерного массива с поворотом
 
Аплодисменты! Доходчиво написал!


Часовой пояс GMT +4, время: 18:25.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot