Это пока что всё, что я смог сделать с передвижением. Почему-то при дубле 1 или 2 появляются сразу по мимо фишки метки для передвижения. С двух до семи перемещается, а если больше семи, нет
Code: Select all
GRAPHICS
OPTION BASE 1
OPTION ANGLE DEGREES
OPTION SPRITE POS CENTRAL
OPTION IMAGE POS CENTRAL
OPTION TEXT POS CENTRAL
REFRESH OFF
GET ORIENTATION P
IF p=1 OR p=3 THEN SET ORIENTATION PORTRAIT ELSE SET ORIENTATION LANDSCAPE
maxx=SCREEN_WIDTH()
maxy=SCREEN_HEIGHT()
'сторона клетки
st=MIN(maxx,maxy)/16
'коэффициент для пересчета координат при портрете или ландшафте
kofr=st*16
a$="kost"
MUSIC a$ LOAD "MY_System/Kost1_1.mp3"
SPRITE 0 LOAD "MY_System/gk.png",6,1
SPRITE 1 LOAD "MY_System/gk.png",6,1
'создаем спрайт хода
SPRITE 2 BEGIN st,st
GRAPHICS CLEAR 1,1,0,.4
DRAW COLOR 0,0,0
DRAW RECT st/2,st/2 SIZE st/2
SPRITE END
SPRITE 2 COPY 4
SPRITE 4 COPY 5
'спрайт фишки
SPRITE 3 BEGIN st,st
FILL COLOR 0,0,1
FILL ALPHA 0.6
FILL CIRCLE st/2,st/2 SIZE st/2-6
SPRITE END
SPRITE 3 COPY 6
SPRITE 6 SHOW
SPRITE 6 ALPHA 0
'задаем двумерный массив игрового поля
DIM mas(15,15)
'задаем одномерные массивы координат клеток по х и у
DIM gor(15)
DIM ver(15)
'присваиваем массиву значения игрового поля
FOR i=1 TO 15
FOR i1=1 TO 15
DATA 0,0,0,0,0,0,1,14,13,0,0,0,0,0,0
DATA 0,0,0,0,0,0,2,21,12,0,0,0,0,0,0
DATA 0,0,0,0,0,15,3,22,11,0,0,0,0,0,0
DATA 0,0,0,0,0,0,4,23,10,15,0,0,0,0,0
DATA 0,0,0,0,0,0,5,24,9,0,0,0,0,0,0
DATA 0,0,0,15,0,0,6,25,8,0,0,0,15,0,0
DATA 13,12,11,10,9,8,7,0,7,6,5,4,3,2,1
DATA 14,21,22,23,24,25,0,0,0,25,24,23,22,21,14
DATA 1,2,3,4,5,6,7,0,7,8,9,10,11,12,13
DATA 0,0,15,0,0,0,8,25,6,0,0,15,0,0,0
DATA 0,0,0,0,0,0,9,24,5,0,0,0,0,0,0
DATA 0,0,0,0,0,15,10,23,4,0,0,0,0,0,0
DATA 0,0,0,0,0,0,11,22,3,15,0,0,0,0,0
DATA 0,0,0,0,0,0,12,21,2,0,0,0,0,0,0
DATA 0,0,0,0,0,0,13,14,1,0,0,0,0,0,0
READ mas(i1,i)
NEXT i1
NEXT i
GRAPHICS CLEAR .9,.9,.9
DRAW FONT SIZE st*.7
DRAW FONT NAME "palatino"
DRAW COLOR 0,0,0
FILL ALPHA .5
FOR i=1 TO 15
FOR i1=1 TO 15
gor(i1)=(maxx-kofr)/2+st*i1
ver(i)=(maxy-kofr)/2+st*i
IF mas(i1,i)<>15 THEN ! FILL COLOR .4,.4,.4 ! k$=mas(i1,i) ! ELSE ! k$="Д" ! FILL COLOR 1,0,0 ! ENDIF
IF mas(i1,i)=21 THEN ! FILL COLOR .4,0,.4 !k$="I" ! ENDIF
IF mas(i1,i)=22 THEN ! FILL COLOR .4,0,.4 ! k$="II" ! ENDIF
IF mas(i1,i)=23 THEN ! FILL COLOR .4,0,.4 !k$="III" ! ENDIF
IF mas(i1,i)=24 THEN ! FILL COLOR .4,0,.4 ! k$="IV" ! ENDIF
IF mas(i1,i)=25 THEN ! FILL COLOR .4,0,.4 ! k$="V" ! ENDIF
IF mas(i1,i)>0 THEN ! FILL RECT gor(i1),ver(i) SIZE st/2 ! DRAW RECT gor(i1),ver(i) SIZE st/2 ! DRAW TEXT k$ AT gor(i1),ver(i) ! ENDIF
NEXT i1
NEXT i
FILL ALPHA 1
REFRESH
'устанавливаем спрайт в начало поля
SPRITE 3 AT gor(10),ver(15)
'главный цикл касания клеток поля
/*LOOP:
GET TOUCH 0 AS x,y
SLOWDOWN
FOR i=1 TO 15
FOR i1=1 TO 15
IF mas(i1,i)=0 THEN CONTINUE
'проверка касания клетки игрового поля
IF x>gor(i1)-st/2 AND x<gor(i1)+st/2 AND y>ver(i)-st/2 AND y<ver(i)+st/2 THEN SPRITE 2 AT gor(i1),ver(i)
NEXT i1
NEXT i
GOTO LOOP
*/
GET SPRITE 0 SIZE w,h
s=MIN(maxx,maxy)/w/9
SPRITE 0 AT maxx/2-st,maxy-st*2 SCALE s
SPRITE 0 SHOW
GET SPRITE 1 SIZE w,h
SPRITE 1 AT maxx/2+st,maxy-st*2 SCALE s
SPRITE 1 SHOW
4
GET TOUCH 0 AS h,w
SPRITE 6 AT h,w
/*IF SPRITE_HIT ("1",h,w)=1 OR SPRITE_HIT ("0",h,w)=1 THEN */
IF SPRITES_COLLIDE ("6","1") OR SPRITES_COLLIDE ("6","0") THEN
MUSIC a$ PLAY
1
RANDOMIZE
f=RND(5)
d=RND(5)
fd=f+1
df=d+1
PAUSE .1
SPRITE 1 FRAME fd
SPRITE 0 FRAME df
IF MUSIC_PLAYING (a$)=0 THEN GOTO 2
GOTO 1
2
df$=df ! fd$=fd
ff=df+fd
'ff=ff-1
df-=1
fd-=1
ss=0
GRAPHICS CLEAR 1,1,1
DRAW COLOR 0,0,0
DRAW TEXT df$ AT 10,10
DRAW TEXT fd$ AT 50,10
'устанавливаем фишку при дубле
IF df$=fd$ THEN
SPRITE 3 SHOW
ENDIF
IF SPRITE_VISIBLE ("3")=1 THEN
SPRITE 2 AT gor(9),ver(15-df)
SPRITE 4 AT gor(9),ver(15-fd)
IF ff>7 THEN
ss=ff-7
fs=9+ss
sf=9
SPRITE 5 AT gor(fs),ver(sf)
ELSE
fs=9
sf=16-ff
SPRITE 5 AT gor(fs),ver(sf)
GET SPRITE 5 POS x,y
SPRITE 2 SHOW
SPRITE 4 SHOW
SPRITE 5 SHOW
ENDIF
ENDIF
ENDIF
IF SPRITE_VISIBLE ("5")=1 THEN
GOSUB 10
ENDIF
GOTO 4
10
IF SPRITES_COLLIDE ("6","5")=1 THEN
SPRITE 3 HIDE
SPRITE 5 HIDE
SPRITE 2 HIDE
SPRITE 4 HIDE
SPRITE 3 AT x,y
SPRITE 3 SHOW
ENDIF
RETURN