Спасибо. Буду разбираться.
У меня появились мысли, как сделать с массивом поле, сегодня допишу и выложу. Даже если не получится потому что иначе если своей головой не пойму, так и буду чайником
У меня такая странность с Бейсиком, размер экрана 320х524 хотя у меня сейчас 6s а был 5 ??? У них одинаковый размер экрана? Сомневаюсь. Может нужно перезагрузить Бейсик ? Я восстанавливал его с 5 через Айтюнс.
Мне нужна помощь с изучением синтаксиса.
Re: Мне нужна помощь с изучением синтаксиса.
Как интересно получается. Вроде понимаю.
Не понял этот цикл
FOR i=1 TO 15
IF i=8 THEN CONTINUE
IF i=9 THEN n-=1
n+=1
Для чего цикл, я понимаю, я не понял действие continue. То есть когда цикл дошёл до 8, он начинается с начала? А как он до 9 дойдёт и до 15?
С ними экспериментировал, сдвигалось поле в середине и цифры.
А ещё не совсем понял :
mas(4,10)=100 ! mas(6,4)=100 И др.
Это для Д - отмечено координатами, а сто это для if...then??? Если не равняется 100(т.е. этим координатам, то рисуем поле и нумеруем, если равняется, то рисуем Д боковые клетки?
Не понял этот цикл
FOR i=1 TO 15
IF i=8 THEN CONTINUE
IF i=9 THEN n-=1
n+=1
Для чего цикл, я понимаю, я не понял действие continue. То есть когда цикл дошёл до 8, он начинается с начала? А как он до 9 дойдёт и до 15?
С ними экспериментировал, сдвигалось поле в середине и цифры.
А ещё не совсем понял :
mas(4,10)=100 ! mas(6,4)=100 И др.
Это для Д - отмечено координатами, а сто это для if...then??? Если не равняется 100(т.е. этим координатам, то рисуем поле и нумеруем, если равняется, то рисуем Д боковые клетки?
- Фант
- Posts: 1363
- Joined: Sat Nov 30, 2013 10:01 am
- My devices: iPad 4 (iOS 9.3), iMac (MAC OS 11.03)
- Location: Россия,Санкт-Петербург
- Flag:
- Contact:
Re: Мне нужна помощь с изучением синтаксиса.
1. Я таким замысловатым циклом присвоил ячейкам массива значения соответствующие твоему игровому полю.Tantrixx wrote: ↑Thu Apr 20, 2017 11:35 amКак интересно получается. Вроде понимаю.
Не понял этот цикл
FOR i=1 TO 15
IF i=8 THEN CONTINUE
IF i=9 THEN n-=1
n+=1
Для чего цикл, я понимаю, я не понял действие continue. То есть когда цикл дошёл до 8, он начинается с начала? А как он до 9 дойдёт и до 15?
С ними экспериментировал, сдвигалось поле в середине и цифры.
А ещё не совсем понял :
mas(4,10)=100 ! mas(6,4)=100 И др.
Это для Д - отмечено координатами, а сто это для if...then??? Если не равняется 100(т.е. этим координатам, то рисуем поле и нумеруем, если равняется, то рисуем Д боковые клетки?
2. Я прогоняю нужные вертикали и горизонтали массива(те в которых надо указать значения от 1 до 13). N+=1- переменная n изменяется на каждый виток цикла на 1 единичку. Если i=8(у тебя это пустая центральная горизонталь и вертикаль) включается команда continue, которая перекидывает цикл на следующий виток,тоесть пропускаются все вычисления и цикл продолжается уже с i=9 и идет до окончания до 15.
3. На i=9 у тебя идет повтор числа что и на i=7, поэтому я понижаю переменную n на 1 и потом сразу опять прибавляю единичку)
4. Ячейкам массива я присваиваю 100-таким образом указываю где находится дом. Этим ячейкам надо присвоить цифровые значения, так как массив у тебя задан числовой а не строковый. Если мы присвоили этим клеткам букву Д, то считывалось бы с этой ячейки-0, но ноль у нас в массиве присвоен всем незадействованным ячейкам. это потом понадобится как я думаю для поиска пути к дому. Так как эти ячейки у тебя содержат букву Д на игровом поле(тоесть строковую переменную) я сделал условие, что для ячейки со значением 100-мы рисуем букву "Д".
Re: Мне нужна помощь с изучением синтаксиса.
Спасибо Фант. Я почти разобрался с массивом )
Даже по своему через data прописал значения в массив и по твоему примеру вывел уже окончательное игровое поле.
Теперь значения, равные выбросу кубика буду пробовать продвигать по полю. Выложу, что получится в программах на форуме, но чувствую, ещё к тебе обращусь ))
Даже по своему через data прописал значения в массив и по твоему примеру вывел уже окончательное игровое поле.
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
'создаем спрайт хода
SPRITE 1 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
'задаем двумерный массив игрового поля
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 ! k$="I" ! ENDIF
IF mas(i1,i)=22 THEN ! k$="II" ! ENDIF
IF mas(i1,i)=23 THEN ! k$="III" ! ENDIF
IF mas(i1,i)=24 THEN ! k$="IV" ! ENDIF
IF mas(i1,i)=25 THEN ! 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
/*IF mas(i1,i)=0 THEN ! k$=mas(i1,i)
DRAW COLOR 1,0,0
DRAW TEXT k$ AT gor(i1),ver(i)
ENDIF */
NEXT i1
NEXT i
FILL ALPHA 1
REFRESH
Re: Мне нужна помощь с изучением синтаксиса.
https://www.dropbox.com/sh/m4qoxwln08gt ... VjtSa?dl=0
Это то, что у меня получилось. А точнее не получилось.
Там должно быть так, когда выпадет любой дубль, одна из 5 фишек встаёт на поле. При следующем броске отмечается поле, куда можно поставить фишку.
При следующем дубле должен подключиться один из вариантов на поле, плюс вариант выставить фишку к полю. Для первой актуальна сумма двух кубиков, но если фишек больше одной на поле, то для каждой появляется один из трёх вариантов хода. При нажатии на поле, фишка перемешается на отмеченный участок. Плюс если ход выпадает на поле соседствующее с домиком, можно вместо поля пойти в дом. Например поле 3 выпало, которое соседствует с домиком, вместо поля 3 идёшь в домик. Ещё броски кубика поочереди для каждого игрока как то отмечать. Плюс фишку соперника срубить нужно обязательно, если она впереди. Через неё ходить нельзя. Срубленную фишку можно выкупить дублем, который ты даришь игроку, у которого фишку выкупаешь. Фишка, находящаяся в домике не рубится и мимо неё можно пройти. По окончании круга нужно завести фишки на римские цифры.
Думал просто будет, оказалось ещё на этапе рисования не смог ничего без массива сделать. ((
Это то, что у меня получилось. А точнее не получилось.
Там должно быть так, когда выпадет любой дубль, одна из 5 фишек встаёт на поле. При следующем броске отмечается поле, куда можно поставить фишку.
При следующем дубле должен подключиться один из вариантов на поле, плюс вариант выставить фишку к полю. Для первой актуальна сумма двух кубиков, но если фишек больше одной на поле, то для каждой появляется один из трёх вариантов хода. При нажатии на поле, фишка перемешается на отмеченный участок. Плюс если ход выпадает на поле соседствующее с домиком, можно вместо поля пойти в дом. Например поле 3 выпало, которое соседствует с домиком, вместо поля 3 идёшь в домик. Ещё броски кубика поочереди для каждого игрока как то отмечать. Плюс фишку соперника срубить нужно обязательно, если она впереди. Через неё ходить нельзя. Срубленную фишку можно выкупить дублем, который ты даришь игроку, у которого фишку выкупаешь. Фишка, находящаяся в домике не рубится и мимо неё можно пройти. По окончании круга нужно завести фишки на римские цифры.
Думал просто будет, оказалось ещё на этапе рисования не смог ничего без массива сделать. ((
Re: Мне нужна помощь с изучением синтаксиса.
Это пока что всё, что я смог сделать с передвижением. Почему-то при дубле 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