Игра ЯЙЦА
Posted: Mon Dec 21, 2015 6:33 am
Тему поднятую Tantrixx решил вывести в отдельную тему. Игра с открытым кодом. Желающие могут посмотреть, пйоучиться и подкорректировать программу.
Игра ЯЙЦА.
[code]'установочные команды
GRAPHICS
'SET TOOLBAR OFF
PAGE 2 SET
PAGE 2 COLOR 1,0,0,.7
PAGE 2 HIDE
PAGE 1 SET
SET ORIENTATION LANDSCAPE
RANDOMIZE
OPTION BASE 1
OPTION ANGLE DEGREES
OPTION TEXT POS CENTRAL
OPTION SPRITE POS CENTRAL
OPTION IMAGE POS CENTRAL
SET LISTS CUSTOM
SET BUTTONS CUSTOM
OPTION SORT DESCENDING
REFRESH OFF
maxx=SCREEN_WIDTH()
maxy=SCREEN_HEIGHT()
kof=maxy/768
kof1=maxx/1024
SHADOW OFFSET 2*.kof,2*.kof
DRAW FONT SIZE 40*.kof
'ввод переменных
c=40*.kof
x(1)=c ! x(2)=maxx-c ! x(3)=c ! x(4)=maxx-c
y(1)=c ! y(2)=c ! y(3)=5*c ! y(4)=5*c
'графика
SPRITE 0 BEGIN 8*c,20*.kof
GRAPHICS CLEAR 0,0,1
SPRITE END
SPRITE 0 AT 3*c,4*c ANGLE 45
SPRITE 0 STAMP
SPRITE 0 AT 3*c,8.9*c ANGLE 45
SPRITE 0 STAMP
SPRITE 0 AT maxx-3*c,4*c ANGLE 135
SPRITE 0 STAMP
SPRITE 0 AT maxx-3*c,8.9*c ANGLE 135
SPRITE 0 STAMP
DRAW LINE 0,maxy-100*.kof TO maxx,maxy-100*.kof
DRAW LINE 0,maxy-200*.kof TO maxx,maxy-200*.kof
DRAW LINE maxx/2,maxy-200*.kof TO maxx/2,maxy
FOR i=1 TO 3
DRAW CIRCLE maxx/2-200*.kof+100*.kof*i,100*.kof SIZE 25*.kof,40*.kof
NEXT i
REFRESH
SPRITE 0 DELETE
FILL COLOR .8,.8,.8
'создаем и размещаем на экране скрытые спрайты
FOR i=1 TO 24
SPRITE i BEGIN 50*.kof,50*.kof
FILL CIRCLE 25*.kof,25*.kof SIZE 25*kof,15*.kof
SPRITE END
ang+=15
k+=1
IF k%3=0 THEN dob+=c
IF k=1 THEN ! x(1)+=c ! SPRITE i AT x(1)-c/2,y(1)+dob ANGLE ang ! ENDIF
IF k=2 THEN ! x(2)-=c ! SPRITE i AT x(2)+c/2,y(2)+dob ANGLE ang ! ENDIF
IF k=3 THEN ! x(3)+=c ! SPRITE i AT x(3)-c/2,y(3)+dob ANGLE ang ! ENDIF
IF k=4 THEN ! x(4)-=c ! SPRITE i AT x(4)+c/2,y(4)+dob ANGLE ang ! ENDIF
IF k=4 THEN k=0
NEXT i
'спрайт корзинка
DRAW COLOR 0,0,0
SPRITE "kor" BEGIN 160*.kof,80*.kof
FILL COLOR 1,1,0
FILL CIRCLE 80*.kof,0 SIZE 80*.kof
SPRITE END
SPRITE "kor" AT -500,-500
SPRITE "kor" SHOW
'установки уровня игры-их необходимо регулировать в главном цикле в зависимости от задач игры
ur=5 'частота появления яиц. с каждым уровнем надо уменьшать на 1.
t=1 ' определяет скорость движения яиц-постепенно должна уменьшаться.
tim=TIME()
PAGE 1 SHOW
' главный цикл
LOOP:
' считываем касание кнопок экрана
GET TOUCH 0 AS xx,yy
IF xx<=maxx/2 AND xx>-1 AND yy>maxy-100*.kof THEN kor=23
IF xx<=maxx/2 AND xx>-1 AND yy<maxy-100*.kof AND yy>maxy/2 THEN kor=21
IF xx>maxx/2 AND yy>maxy-100*.kof THEN kor=24
IF xx>maxx/2 AND yy<maxy-100*.kof AND yy>maxy/2 THEN kor=22
'устанавливаем корзинку в нужное место
IF kor=21 THEN SPRITE "kor" AT maxx/2-6*c, c*7
IF kor=23 THEN SPRITE "kor" AT maxx/2-6*c, c*12
IF kor=22 THEN SPRITE "kor" AT maxx/2+6*c, c*7
IF kor=24 THEN SPRITE "kor" AT maxx/2+6*c, c*12
'по истечении заданного времени (время определяющее скорость яиц) производим подсветку нужного яйца
IF TIME()>tim+t THEN
katS
'сравниваем последнее на дощечке яйцо с переменной касания кнопки.
FOR i=21 TO 24
i$=i
IF SPRITE_VISIBLE (i$)=1 THEN
IF kor=i THEN
'совпадение
korS
n+=1
t-=.005 ' изменение установочного параметра скорости
IF n=5 THEN ur-=1 ' изменение уровня появления нового яйца
IF n%20=0 AND ur>2 THEN ur-=1
'пишем на корзинке количество собранных яиц
SPRITE "kor" BEGIN
FILL COLOR 1,1,0
FILL CIRCLE 80*.kof,0 SIZE 80*.kof
DRAW TEXT n AT 80*.kof,40*.kof
SPRITE END
ELSE
'ошибка-яйцо разбилось
nn+=1
FOR ii=1 TO 10
IF ii%2=0 THEN PAGE 2 HIDE ELSE PAGE 2 SHOW
piskS
PAUSE .1
NEXT ii
FILL COLOR 1,0,0
FILL CIRCLE maxx/2-200*.kof+100*.kof*nn,100*.kof SIZE 25*.kof,40*.kof
REFRESH
'конец игры
IF nn=3 THEN
GRAPHICS CLEAR .2,.2,.2
PAGE 1 HIDE
DRAW FONT SIZE 60*.kof
DRAW TEXT "КОНЕЦ ИГРЫ" AT .maxx/2,.maxy/2-100*.kof
DRAW FONT SIZE 40*.kof
DRAW TEXT "Собранные ЯЙЦА: "&n AT .maxx/2,.maxy/2
DRAW RECT .maxx/2,.maxy/2+200 SIZE 100*.kof,50*.kof
DRAW TEXT "OK" AT .maxx/2,.maxy/2+200
REFRESH
PAUSE 1
nazh
loo:
GET TOUCH 0 AS xx,yy
IF xx>-1 THEN RUN "Яйца.txt"
GOTO loo
ENDIF
ENDIF
SPRITE i HIDE
ENDIF
NEXT i
'мигание экрана(появление красной пустой страницы
FOR i=20 TO 1 STEP -1
i$=i
IF SPRITE_VISIBLE (i$)=1 THEN ! SPRITE i HIDE ! SPRITE i+4 SHOW ! GET SPRITE i+4 POS x1,y1 ! ENDIF
NEXT i
tim=TIME()
'появление нового яйца на случайной дощечке
IF k%ur=0 THEN
sl=RND(4)+1
SPRITE sl SHOW
ENDIF
k+=1
ENDIF
GOTO LOOP
'функция касания
DEF nazh
LOOP:
IF NOT x>-1 THEN LOOP
END DEF
'звук попадания яйца в корзину
DEF korS
NOTES MIDI 0,12,115
k=40+.i
NOTES MIDI 0,9,k,127
END DEF
'звук движения яйца
DEF katS
NOTES MIDI 1,12,120
NOTES MIDI 1,9,61,127
END DEF
'звук ошибки
DEF piskS
k=RND(7)+60
NOTES MIDI 2,12,123
NOTES MIDI 2,9,k,127
END DEF[/code]
Игра ЯЙЦА.
[code]'установочные команды
GRAPHICS
'SET TOOLBAR OFF
PAGE 2 SET
PAGE 2 COLOR 1,0,0,.7
PAGE 2 HIDE
PAGE 1 SET
SET ORIENTATION LANDSCAPE
RANDOMIZE
OPTION BASE 1
OPTION ANGLE DEGREES
OPTION TEXT POS CENTRAL
OPTION SPRITE POS CENTRAL
OPTION IMAGE POS CENTRAL
SET LISTS CUSTOM
SET BUTTONS CUSTOM
OPTION SORT DESCENDING
REFRESH OFF
maxx=SCREEN_WIDTH()
maxy=SCREEN_HEIGHT()
kof=maxy/768
kof1=maxx/1024
SHADOW OFFSET 2*.kof,2*.kof
DRAW FONT SIZE 40*.kof
'ввод переменных
c=40*.kof
x(1)=c ! x(2)=maxx-c ! x(3)=c ! x(4)=maxx-c
y(1)=c ! y(2)=c ! y(3)=5*c ! y(4)=5*c
'графика
SPRITE 0 BEGIN 8*c,20*.kof
GRAPHICS CLEAR 0,0,1
SPRITE END
SPRITE 0 AT 3*c,4*c ANGLE 45
SPRITE 0 STAMP
SPRITE 0 AT 3*c,8.9*c ANGLE 45
SPRITE 0 STAMP
SPRITE 0 AT maxx-3*c,4*c ANGLE 135
SPRITE 0 STAMP
SPRITE 0 AT maxx-3*c,8.9*c ANGLE 135
SPRITE 0 STAMP
DRAW LINE 0,maxy-100*.kof TO maxx,maxy-100*.kof
DRAW LINE 0,maxy-200*.kof TO maxx,maxy-200*.kof
DRAW LINE maxx/2,maxy-200*.kof TO maxx/2,maxy
FOR i=1 TO 3
DRAW CIRCLE maxx/2-200*.kof+100*.kof*i,100*.kof SIZE 25*.kof,40*.kof
NEXT i
REFRESH
SPRITE 0 DELETE
FILL COLOR .8,.8,.8
'создаем и размещаем на экране скрытые спрайты
FOR i=1 TO 24
SPRITE i BEGIN 50*.kof,50*.kof
FILL CIRCLE 25*.kof,25*.kof SIZE 25*kof,15*.kof
SPRITE END
ang+=15
k+=1
IF k%3=0 THEN dob+=c
IF k=1 THEN ! x(1)+=c ! SPRITE i AT x(1)-c/2,y(1)+dob ANGLE ang ! ENDIF
IF k=2 THEN ! x(2)-=c ! SPRITE i AT x(2)+c/2,y(2)+dob ANGLE ang ! ENDIF
IF k=3 THEN ! x(3)+=c ! SPRITE i AT x(3)-c/2,y(3)+dob ANGLE ang ! ENDIF
IF k=4 THEN ! x(4)-=c ! SPRITE i AT x(4)+c/2,y(4)+dob ANGLE ang ! ENDIF
IF k=4 THEN k=0
NEXT i
'спрайт корзинка
DRAW COLOR 0,0,0
SPRITE "kor" BEGIN 160*.kof,80*.kof
FILL COLOR 1,1,0
FILL CIRCLE 80*.kof,0 SIZE 80*.kof
SPRITE END
SPRITE "kor" AT -500,-500
SPRITE "kor" SHOW
'установки уровня игры-их необходимо регулировать в главном цикле в зависимости от задач игры
ur=5 'частота появления яиц. с каждым уровнем надо уменьшать на 1.
t=1 ' определяет скорость движения яиц-постепенно должна уменьшаться.
tim=TIME()
PAGE 1 SHOW
' главный цикл
LOOP:
' считываем касание кнопок экрана
GET TOUCH 0 AS xx,yy
IF xx<=maxx/2 AND xx>-1 AND yy>maxy-100*.kof THEN kor=23
IF xx<=maxx/2 AND xx>-1 AND yy<maxy-100*.kof AND yy>maxy/2 THEN kor=21
IF xx>maxx/2 AND yy>maxy-100*.kof THEN kor=24
IF xx>maxx/2 AND yy<maxy-100*.kof AND yy>maxy/2 THEN kor=22
'устанавливаем корзинку в нужное место
IF kor=21 THEN SPRITE "kor" AT maxx/2-6*c, c*7
IF kor=23 THEN SPRITE "kor" AT maxx/2-6*c, c*12
IF kor=22 THEN SPRITE "kor" AT maxx/2+6*c, c*7
IF kor=24 THEN SPRITE "kor" AT maxx/2+6*c, c*12
'по истечении заданного времени (время определяющее скорость яиц) производим подсветку нужного яйца
IF TIME()>tim+t THEN
katS
'сравниваем последнее на дощечке яйцо с переменной касания кнопки.
FOR i=21 TO 24
i$=i
IF SPRITE_VISIBLE (i$)=1 THEN
IF kor=i THEN
'совпадение
korS
n+=1
t-=.005 ' изменение установочного параметра скорости
IF n=5 THEN ur-=1 ' изменение уровня появления нового яйца
IF n%20=0 AND ur>2 THEN ur-=1
'пишем на корзинке количество собранных яиц
SPRITE "kor" BEGIN
FILL COLOR 1,1,0
FILL CIRCLE 80*.kof,0 SIZE 80*.kof
DRAW TEXT n AT 80*.kof,40*.kof
SPRITE END
ELSE
'ошибка-яйцо разбилось
nn+=1
FOR ii=1 TO 10
IF ii%2=0 THEN PAGE 2 HIDE ELSE PAGE 2 SHOW
piskS
PAUSE .1
NEXT ii
FILL COLOR 1,0,0
FILL CIRCLE maxx/2-200*.kof+100*.kof*nn,100*.kof SIZE 25*.kof,40*.kof
REFRESH
'конец игры
IF nn=3 THEN
GRAPHICS CLEAR .2,.2,.2
PAGE 1 HIDE
DRAW FONT SIZE 60*.kof
DRAW TEXT "КОНЕЦ ИГРЫ" AT .maxx/2,.maxy/2-100*.kof
DRAW FONT SIZE 40*.kof
DRAW TEXT "Собранные ЯЙЦА: "&n AT .maxx/2,.maxy/2
DRAW RECT .maxx/2,.maxy/2+200 SIZE 100*.kof,50*.kof
DRAW TEXT "OK" AT .maxx/2,.maxy/2+200
REFRESH
PAUSE 1
nazh
loo:
GET TOUCH 0 AS xx,yy
IF xx>-1 THEN RUN "Яйца.txt"
GOTO loo
ENDIF
ENDIF
SPRITE i HIDE
ENDIF
NEXT i
'мигание экрана(появление красной пустой страницы
FOR i=20 TO 1 STEP -1
i$=i
IF SPRITE_VISIBLE (i$)=1 THEN ! SPRITE i HIDE ! SPRITE i+4 SHOW ! GET SPRITE i+4 POS x1,y1 ! ENDIF
NEXT i
tim=TIME()
'появление нового яйца на случайной дощечке
IF k%ur=0 THEN
sl=RND(4)+1
SPRITE sl SHOW
ENDIF
k+=1
ENDIF
GOTO LOOP
'функция касания
DEF nazh
LOOP:
IF NOT x>-1 THEN LOOP
END DEF
'звук попадания яйца в корзину
DEF korS
NOTES MIDI 0,12,115
k=40+.i
NOTES MIDI 0,9,k,127
END DEF
'звук движения яйца
DEF katS
NOTES MIDI 1,12,120
NOTES MIDI 1,9,61,127
END DEF
'звук ошибки
DEF piskS
k=RND(7)+60
NOTES MIDI 2,12,123
NOTES MIDI 2,9,k,127
END DEF[/code]