Спрайты для игрового поля наверное это не лучший вариант, хотя хозяин-барин))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