Тема: Задачка!!!
Показать сообщение отдельно
Старый 23.12.2006, 01:55   #54
HolyDel
 
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений
(для 2,707 пользователей)
Re: Задачка!!!

ну стандартно
[blitz]
Graphics 640,480,32,2
SetBuffer BackBuffer()
[/blitz]
создаем массив под пункты меню: название пункта и цвет
[blitz]
Graphics 640,480,32,2
SetBuffer BackBuffer()
Dim item$(10)
Dim iColor(10)
[/blitz]
заполняем пункты, инициализируем необходимые переменные и грузим шрифт.
[blitz]
item(0)="New Game"
item(1)="Options"
item(2)="About"
item(3)="Exit"
ttmi=3
SetFont LoadFont("Courier New Cyr",24,1)
[/blitz]
ttmi - количество пунктов.

ну и собственно

[blitz]
While 1
Cls
y=50
si=0
For i=0 To ttmi
If iColor(i)<255 Then iColor(i)=iColor(i)+24
If iColor(i)>255 Then iColor(i)=255
If Abs(MouseX()-320)<100 And Abs(MouseY()-y)<10 Then si=i:iColor(i)=iColor(i)-32
If iColor(i)<0 Then iColor(i)=0
Color 255,iColor(i),iColor(i)
Text 320,y,item(i),1,1
y=y+24
Next

If MouseDown(1)
Select si
Case 0
Exit
Case 3
End
End Select
EndIf

Color 0,255,0
Text 10,10,item(si)
Flip
Wend

[/blitz]

цикл, 1 - оно всегда 1, такчто цикл будет крутиться вечно
отчищаем экран, задаем Y - позиция пункта меню по оси Y, присваиваем переменной SI значение 0. переменная SI означает выбранный пункт меню.

запускаем цикл, где перебираем все пункты. там:
увеличиваем значение цвет пункта на 24
проверяем не превысило ли оно 255, если превысило то присваиваем 255
[blitz]
If Abs(MouseX()-320)<100 And Abs(MouseY()-y)<10 Then si=i:iColor(i)=iColor(i)-32
[/blitz]
ето означает что выбран I-тый пункт. уменьшаем значение цвета I-того пункта на 32. выбранный пункт становится i-тым (переменную si помниш?)

далее:
[blitz]
Color 255,iColor(i),iColor(i)
Text 320,y,item(i),1,1
y=y+24
[/blitz]
устанавливаем цвет пункта, чем меньше цвет тем пункт краснее.
рисуем пункт, увеличиваем y на 24 (щтоб следующий пункт рисовался ниже).

[blitz]
If MouseDown(1)
Select si
Case 0
Exit
Case 3
End
End Select
EndIf
[/blitz]
по нажатию на мыш, проверяем выбранный пункт, и в зависимости от значения Si делаем что, то, например если si равно трем (выход) то завершаем работу программы.

[blitz]
Color 0,255,0
Text 10,10,item(si)
[/blitz]
ну это просто чтоб показать что работает.

весь код:
[blitz]
Graphics 640,480,32,2
SetBuffer BackBuffer()

Dim item$(10)
Dim iColor(10)
item(0)="New Game"
item(1)="Options"
item(2)="About"
item(3)="Exit"
ttmi=3
xit=0
SetFont LoadFont("Courier New Cyr",24,1)

While 1
Cls
y=50
si=0
For i=0 To ttmi
If iColor(i)<255 Then iColor(i)=iColor(i)+24
If iColor(i)>255 Then iColor(i)=255
If Abs(MouseX()-320)<100 And Abs(MouseY()-y)<10 Then si=i:iColor(i)=iColor(i)-32
If iColor(i)<0 Then iColor(i)=0
Color 255,iColor(i),iColor(i)
Text 320,y,item(i),1,1
y=y+24
Next

If MouseDown(1)
Select si
Case 0
Exit
Case 3
End
End Select
EndIf

Color 0,255,0
Text 10,10,item(si)
Flip
Wend
[/blitz]
(Offline)
 
Ответить с цитированием