Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > Blitz3D > Полезные функции

Полезные функции Выкладываем полезные функции, чтоб не изобретать велосипед заново...

Ответ
 
Опции темы
Старый 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
Просмотров: 1032
Размер:	9.4 Кб
ID:	16676  
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо Жека за это полезное сообщение:
LLI.T.A.L.K.E.R. (22.04.2012), Randomize (22.04.2012)
Старый 22.04.2012, 03:54   #2
Randomize
[object Object]
 
Аватар для Randomize
 
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,354
Написано 2,470 полезных сообщений
(для 6,850 пользователей)
Ответ: Рисование двухмерного массива с поворотом

Аплодисменты! Доходчиво написал!
__________________
Retry, Abort, Ignore? █
Intel Core i7-9700 4.70 Ghz; 64Gb; Nvidia RTX 3070
AMD Ryzen 7 3800X 4.3Ghz; 64Gb; Nvidia 1070Ti
AMD Ryzen 7 1700X 3.4Ghz; 8Gb; AMD RX 570
AMD Athlon II 2.6Ghz; 8Gb; Nvidia GTX 750 Ti
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Жека (22.04.2012)
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


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


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com