Спрайты для игрового поля наверное это не лучший вариант, хотя хозяин-барин))Tantrixx wrote: ↑Fri Apr 14, 2017 5:38 amСпасибо, я зафиксировал в портретной, но ещё не зациклил ))
А задумка, это игровое поле из спрайтов. Просто спрайтов так много получилось, ещё 10 будет по мимо тех, которые созданы, но ещё не показал на поле. А с фишками, ещё 8. Хотел сначала просто нарисовать графикой, но не понял, как буду нахождение фишек на поле отмечать. По координатам показалось сложно для меня. По спрайтам проще
Вот моя программка для крестиков и ноликов для двух человек. Посмотри может чтото тебе будет полезно здесь.
Code: Select all
'стандартный набор стартовых команд
GRAPHICS
'SET TOOLBAR OFF
GET ORIENTATION P
IF p=1 OR p=3 THEN
SET ORIENTATION PORTRAIT
ELSE
SET ORIENTATION LANDSCAPE
ENDIF
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
'исходные данные для начертания игрового поля
kol=3
st=.maxy/(kol+1)
otst=(maxx-maxy)/2
DIM gor(kol)
DIM ver(kol)
FOR i=1 TO kol
FOR i1=1 TO kol
gor(i1)=otst+st*i1
ver(i)=st*i
NEXT i1
NEXT i
'обнуляем массив поля и переменные для начала новой партии
10 DIM mas(kol,kol)
stoper=0
n=0
'рисуем игровое поле
GRAPHICS CLEAR 0,0,0
DRAW COLOR 1,1,1
DRAW SIZE 2*.kof
FOR i=1 TO kol
FOR i1=1 TO kol
DRAW RECT gor(i1),ver(i) SIZE st/2
NEXT i1
NEXT i
REFRESH
DRAW COLOR 0,0,0
DRAW SIZE 6*.kof
'основной цикл. определяем точки касания экрана и рисуем крестики и нолики на игровом поле
LOOP:
GET TOUCH 0 AS x,y
FOR i=1 TO kol
FOR i1=1 TO kol
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
IF n%2=0 THEN
FILL COLOR 1,.5,.5
FILL RECT gor(i1),ver(i) SIZE st/2.1
DRAW CIRCLE gor(i1),ver(i) SIZE st/2.5
mas(i,i1)=1
ELSE
FILL COLOR .5,.5,1
FILL RECT gor(i1),ver(i) SIZE st/2.1
DRAW LINE gor(i1)-st/2.2,ver(i)-st/2.2 TO gor(i1)+st/2.2,ver(i)+st/2.2
DRAW LINE gor(i1)+st/2.2,ver(i)-st/2.2 TO gor(i1)-st/2.2,ver(i)+st/2.2
mas(i,i1)=10
ENDIF
REFRESH
n+=1
nazh
prov
BREAK i
ENDIF
NEXT i1
NEXT i
IF stoper=1 THEN 10
GOTO LOOP
'функция нажатия
DEF nazh
1 GET TOUCH 0 AS x,y
SLOWDOWN
IF x>-1 THEN 1
END DEF
'проверка выигрышных позиций
DEF prov
n=0
k=0
FOR i=1 TO .kol
k+=1
n+=.mas(i,k)
NEXT i
IF n=.kol OR n=10*.kol THEN ! stopigra ! RETURN! ENDIF
n=0
k=.kol+1
FOR i=1 TO .kol
k-=1
n+=.mas(i,k)
NEXT i
IF n=.kol OR n=10*.kol THEN ! stopigra ! RETURN! ENDIF
FOR i=1 TO .kol
n=0
FOR i1=1 TO .kol
IF .mas(i,i1)=0 THEN BREAK
n+=.mas(i,i1)
IF n=.kol OR n=10*.kol THEN ! stopigra ! RETURN! ENDIF
NEXT i1
NEXT i
FOR i1=1 TO .kol
n=0
FOR i=1 TO .kol
IF .mas(i,i1)=0 THEN BREAK
n+=.mas(i,i1)
IF n=.kol OR n=10*.kol THEN ! stopigra ! RETURN! ENDIF
NEXT i
NEXT i1
IF .n=9 THEN
.ravenstvo=1
stopigra
ENDIF
END DEF
'вывод результата игры
DEF sTOPigra
DRAW COLOR 1,1,1
IF .ravenstvo=0 THEN
IF prov.n=3 THEN DRAW TEXT "ПОБЕДА НОЛИКА!" AT .maxx/2,.st/4 ELSE DRAW TEXT "ПОБЕДА КРЕСТИКА!" AT .maxx/2,.st/4
ELSE
DRAW TEXT "НИЧЬЯ!" AT .maxx/2,.st/4
.ravenstvo=0
ENDIF
REFRESH
5
GET TOUCH 0 AS x,y
SLOWDOWN
IF x=-1 THEN 5
nazh
.stoper=1
END DEF