Показать сообщение отдельно
Старый 21.04.2012, 16:38   #1
Жека
Дэвелопер
 
Регистрация: 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

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

Картинка:
Миниатюры
Нажмите на изображение для увеличения
Название: drawArray.png
Просмотров: 1044
Размер:	9.4 Кб
ID:	16676  
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо Жека за это полезное сообщение:
LLI.T.A.L.K.E.R. (22.04.2012), Randomize (22.04.2012)