Описание на процедурите,
използвани в средата ABC LEARN
to abc.game
cs ht
; променливи, които съхраняват резултата от всяка игра
make "all.cw 0
make "all.wr 0
; Меню за избор
let "t1 [1. Първа буква на картинка]
pprop "codearea 1001 [-255 130 190 95]
let "t2 [2. Липсваща буква в дума]
pprop "codearea 1002 [-255 80 185 40]
let "t3 [3. Първа буква на чута дума]
pprop "codearea 1003 [-255 25 200 -5]
let "t4 [4. Разбъркани букви]
pprop "codearea 1004 [-255 -23 110 -60]
let "t5 [5. Чута буква]
pprop "codearea 1005 [-255 -75 15 -105]
setx -200 sety 200
settt [Hebar][20 700 0 0 1]
setpc 4 tt [Втора част - Игри с букви]
setx -250 sety ycor - 50
settt [Hebar][18 700 0 0 1] setpc 12
tt [Изберете:] setpc 0
sety ycor - 50 tt :t1
sety ycor - 50 tt :t2
sety ycor - 50 tt :t3
sety ycor - 50 tt :t4
sety ycor - 50 tt :t5
setpc 9 setx -200
sety ycor - 50 tt [Заб: Използвайте клавиша ESC за изход]
case readkey ~
[49 1001 [cs setmc 11 my.playw [abc3] erase props game.abc.picture setmc 0] ~
50 1002 [cs setmc 11 my.playw [abc4] erase props game.abc.picture.1 setmc 0] ~
51 1003 [cs setmc 11 my.playw [abc5] my.setshape "abc1 st repeat 40 [rt 360 / ~
count getshape wait 100] ht erase props game.abc.sound setmc 0] ~
52 1004 [erase props start.compare.letters] ~
53 1005 [setmc 11 erase props game.abc.sound.2 setmc 0] ~
27 [clean stop]]
abc.game
end
to abc.learn
; процедурата визуализира картинка с буква, чиито клавиш е натиснат
pu ht clean
let "k readkey
while [not and ( :k > 0 ) ( :k < 255 )][let "k readkey]
if :k = 27 [ht clean setmc 0 stop]
if not member? char :k \QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm ~
[my.playw [abc15 []] abc.learn stop]
if :k > 96 [let "sw item :k - 96 :abc][let "sw item :k - 64 :abc]
my.setshape first :sw
setx - ( ( first imagesize getshape ) / 2 + 160 )
sety -30
settt [Hebar][62 700 1 0 1] setpc 12
tt list char ( ascii ( first first :sw ) ) - 32 first first :sw
setx ( first imagesize getshape ) / 2 + 40
settt [Hebar][28 700 0 0 1] setpc 9
sety 15 tt list first :sw
settt [Hebar][24 400 0 0 0] setpc 0
sety -10 tt list last :sw
my.playw ( list first first :sw [] first :sw )
setpos [0 0] st setphasemode "true
while [not key?][setphase phase + 1 wait 400]
ht
abc.learn
end
to abc.learn.alphabet
; процедурата представя последователно буквите от английския език
ht cs pu
setmc 11
ask 0 [my.setshape "abc1 setphasemode "true st]
my.playw [abc1]
repeat 70 [setphase phase + 1 wait 100]
setphase 1
ht
( loadscreen "keyboard [-320 -50] )
maketurtle 1 [-120 80 15 pu tell ht]
maketurtle 2 [-250 160 350 pu tell ht]
maketurtle 3 [100 40 10 pu tell ht]
maketurtle 4 [140 150 pu tell ht]
maketurtle 5 [45 0 0 pu tell ht]
maketurtle 6 [-254 -142 0 pu ht "key]
ask 0 [my.setshape "abc]
ask 5 [my.setshape "abc setphasemode "true setphase 27]
ask 1 [settt [Times New Roman][60 700 0 0 1] setpc 15]
ask 2 [settt [Hebar][50 700 1 0 1] setpc 12]
ask 3 [settt [Times New Roman][35 400 1 0 1] setpc 13]
ask 4 [settt [Hebar][72 400 0 0 1] setpc 10]
let "abcd "ABCDEFGHIJKLMNOPQRSTUVWXYZ
ask [0 5 6][st]
repeat count :abc [pd tt se item repc :abcd char ( ( ascii item repc :abcd ) + 32 ) ~
my.playw item repc :abcd ask 6 [setpos item repc :key.pos] ~
wait 2000 ~
pe tt se item repc :abcd char ( ( ascii item repc :abcd ) + 32 ) ~
ask 0 [setphase phase + 1] ask 5 [setphase phase + 1] ~
if key? [if readkey = 27 [erturtle [1 2 3 4 5 6] ht clean ( ~
loadscreen "keyboard [-320 90] ) my.playw [abc2 []] setphasemode "false ( readkey 0 ) stop]]]
erturtle [1 2 3 4 5 6] ht
clean ( loadscreen "keyboard [-320 90] )
my.playw [abc2 []]
( readkey 0 )
setphasemode "false
end
to compare.letters :level
; ПРОЦЕДУРАТА ИНИЦИАЛИЗИРА ИГРАТА ЗА СРАВНЯВАНЕ НА 5 БУКВИ С ВЕЗНА
; При вход 1 буквите са последователни, при 2 случайно избрани
clean ( readkey 0 )
case :level ~
[1 [let "letters shuffle item se 1 + random 21 "5 "ABCDEFGHIJKLMNOPQRSTUVWXYZ] ~
2 [let "letters item [1 5] shuffle "QWERTYUIOPASDFGHJKLZXCVBNM]]
make "g.c.l 0
; създаване на променливи за състоянието на лявата и дясна везна
let "l1 [] let "l2 []
erturtle 0
; създаване на костенурки с образ съответните букви и костенурки - чекмеджета
repeat 5 ~
[let "n.t item repc :letters ~
let "pos.x ( repc * 50 - 165 ) ~
maketurtle :n.t ( se :pos.x 100 [st pu setphasemode "abc] ) ~
ask :n.t [setphase ( ascii :n.t ) - 64] ~
let "n.t.c word item repc merge.sort :letters "1 ~
let "pos.x ( repc * 65 - 220 ) ~
maketurtle :n.t.c ( se :pos.x 250 "st "pu ":cupboard )]
foreach "i all [if count :i = 1 [maketurtle :i]]
; създаване на костенурка ВЕЗНА
maketurtle "vezna [0 0 0 st pu "vezna setphasemode]
ask "vezna [setphase 2]
game.comp.let
if readkey = 27 [stop][compare.letters :level]
end
to dictionary
; процедурата връща в списък всички думи от проекта
op ( se :abc ~
bl bf :airport ~
bl bf :body ~
bl bf :clothes ~
bl bf :colors ~
:days :dictionl ~
bl bf :family ~
bl bf :food ~
bl bf :home ~
bl bf :house ~
bl bf :lunch ~
bl bf :me ~
:months ~
bl bf :numbers ~
bl bf :park ~
bl bf :people ~
bl bf :picture ~
bl bf :restaurant ~
bl bf :room ~
bl bf :school ~
bl bf :street ~
bl bf :swim ~
bl bf :weekend ~
:my.dictionary )
; :opposites :verbs
end
to dictionary.abc :eb
; процедурата генерира азбучен речник на думите от проекта
cs setx -90 tt [Моля, изчакайте ...]
setmc 1
sety -20 setx -10
my.setshape "wait setphasemode "true st
case :eb [EB [let "dic merge.sort map "first dictionary] ~
BE [let "dic merge.sort map "last dictionary]]
my.playw [abc25]
printto "dict.txt
let "Letter "
pr se [Общ брой думи:] count :dic
repeat count :dic ~
[setphase phase + 1 ~
if :letter <> first item repc :dic [let "Letter first item repc :dic pr [] ~
pr ( se [> >] :letter [< <] )][] ~
type item repc :dic type ( se char 32 [\<\-\>] char 32 ) ~
case :eb [EB [pr item member item repc :dic map "first dictionary map "last dictionary] ~
BE [pr item member item repc :dic map "last dictionary map "first dictionary]]]
printto []
cs ( readkey 0 )
playw []
edfile "dict.txt
setmc 0
waituntil [key?]
ignore readkey
end
to dictionary.add
; Процедурата добавя дума към речника на потребителя
maketurtle 0 [pu ht]
gs cs setbg 3 setpc 0
settt [Hebar][16 400 0 0 1]
let "t1 [Въведете новата дума на английски:]
sety 100 setx - ( item 1 textsize :t1 ) / 2
tt :t1
sety ycor - 50
setx 0
let "nwe ( rlt [] 200 )
if empty? :nwe [cs stop][let "nwe first :nwe]
setpc 1 setx - ( first textsize :nwe ) / 2 tt :nwe
setx -100 sety ycor - 50 setpc 0
if member? :nwe map "first dictionary ~
[tt [Превод:] setx 0 setpc 12 tt last item ( member ~
:nwe map "first dictionary ) dictionary waituntil [key?]] ~
[tt [Превод:] setx 160 - item 1 textsize [Превод:] ~
let "nwb ( rlt [] 200 ) if empty? :nwb [stop][let "nwb first :nwb] ~
setpc 12 setx 0 tt :nwb ~
let "picture emptyimage my.playw [abc12] ed [:picture] sety 30 setx 50 + first ~
textsize :nwe ~
putimage :picture saveimage if count :nwe > 8 [item [1 8] :nwe][:nwe] :picture ~
make "my.dictionary fput list :nwe :nwb :my.dictionary]
if readkey = 27 [cs stop][dictionary.add]
end
to dictionary.search
; Процедурата търси дума за превод
maketurtle 0 [pu ht]
cs gs setbg 3 setpc 0
settt [Hebar][16 400 0 0 1]
let "t1 [Въведете дума за търсене:]
setx -10 - item 1 textsize :t1
tt :t1
setx 100
let "wsearch ( rlt [] 200 )
test empty? :wsearch
ift [cs stop]
iff [if member? char 45 :wsearch [let "wsearch ( word first :wsearch char 45 last ~
:wsearch )][let "wsearch first :wsearch]]
; проверява се дали думата е на английски или български
test ascii :wsearch < 122
ift [test member? :wsearch map "first dictionary ~
ift [setx 0 setpc 12 tt first item ( member :wsearch map "first ~
dictionary ) dictionary ~
setpos [-90 -40] setpc 0 tt [Превод:] setx 0 setpc 1 tt last ~
item ( member :wsearch map "first dictionary ) dictionary] ~
iff [cs setpc 12 setx -120 tt [Няма такава дума в моя речник!] waituntil ~
[key?] ignore readkey dictionary.search stop]]
iff [test member? :wsearch map "last dictionary ~
ift [setx 0 setpc 12 tt last item ( member :wsearch map "last dictionary ~
) dictionary ~
setpos [-90 -40] setpc 0 tt [Превод:] setx 0 setpc 1 let "wsearch ~
first item ~
( member :wsearch map "last dictionary ) dictionary tt :wsearch] ~
iff [cs setpc 12 setx -120 tt [Няма такава дума в моя речник!] ~
waituntil [key?] ignore readkey dictionary.search stop]]
if count :wsearch > 8 [let "wsearch item [1 8] :wsearch]
my.setshape :wsearch
sety -20
setx ( 40 + ( item 1 textsize list :wsearch ) + ( first imagesize getshape ) / 2 )
st
my.playw list :wsearch
if readkey = 27 [cs stop][dictionary.search]
end
to dictionary.subject
; процедурата запознава с думи по теми
cs pu ht
setmc 11
maketurtle 0 [-250 200 0 ht pu tell]
settt [Hebar][12 700 0 1 0] setpc 0
let "subjects [Me Body Family House Room Clothes Home Food Weekend Street School ~
Park Swim Restaurant Numbers Picture Airport Lunch People Colors]
let "sub.bg [Аз Тяло Семейство Къща Стая Дрехи Жилище Храна Почивка Улица Училище ~
Парк Басейн Ресторант Числа Рисунка Летище Обяд Професии Цветове]
repeat count :subjects [maketurtle item repc :subjects se pos [0 pu ht] ~
ask item repc :subjects [setshape item repc loadimage "temi []] ~
sety ycor - 40 setx xcor - ( first textsize item repc :sub.bg ) / 2 ~
tt item repc :sub.bg ~
sety ycor + 40 setx xcor + ( first textsize item repc :sub.bg ) / 2 ~
if xcor > 170 [sety ycor - 100 setx -250][setx xcor + 130]]
erturtle 0
tell all st
( readkey 0 )
my.playw [abc10]
setmc 14
let "k readkey
while [not member? :k [0 27]][let "k readkey]
case :k [0 [if not empty? touched ~
[my.playw [abc11] let "el touched erturtle all setbg 15 ~
( loadscreen item [1 8] :el first thing :el ) ~
dictionary.subject.elements]] ~
27 [erturtle all maketurtle 0 [0 0 0 tell ht] setmc 0 setgs item [3 2] ~
logosize cs setbg 3 stop]]
erturtle all
dictionary.subject
end
to dictionary.subject.elements
; процедурата визуализира думите по дадена тема в textbox turtle
let "el bf thing :el
repeat ( count :el ) - 1 [make repc item repc :el ~
maketurtle repc se item repc last :el [0 st pu tell] ~
ask repc [setboxmode "true setbox [frame 1 pp 4 title 0 bg 15 edit 0]]]
( readkey 0 )
play.dictionary.subject.elements
repeat ( count :el ) - 1 [erase word ": repc]
erturtle all
maketurtle 0 [0 0 0 pu ht tell]
setgs item [3 2] logosize
cs setbg 3
end
to dictionary.trans :LLL
; Процедурата проверява знанията за думи при превод от английски на български ( ~
ЕВ ) и обратно ( ВЕ )
maketurtle 0 [pu ht]
cs setbg 3 setpc 0
settt [Hebar][16 400 0 0 1]
my.playw [abc17]
let "t1 [Преведете думата:]
setx -10 - first textsize :t1
tt :t1
setx 10
setpc 1
let "pos.wtrans 1 + random count map "first dictionary
case :LLL [EB [tt item :pos.wtrans map "first dictionary] ~
BE [tt item :pos.wtrans map "last dictionary]]
setx -230 sety -40 setpc 0 tt [Превод от моя речник:] setx 100 setpc 1
let "wtrans ( rlt [] 200 )
if empty? :wtrans [rezult :all.cw :all.wr stop][let "wtrans first :wtrans]
setpc 10 setx 10 tt :wtrans
case :LLL ~
[EB [if :wtrans = item :pos.wtrans map "last dictionary [make "all.cw :all.cw + 1] ~
[make "all.wr :all.wr + 1 repeat 3 [setpc 12 tt :wtrans wait 200 setpc 10 tt :wtrans wait 200] ~
pe tt :wtrans pd tt item :pos.wtrans map "last dictionary]] ~
BE [if :wtrans = item :pos.wtrans map "first dictionary [make "all.cw :all.cw + 1] ~
[make "all.wr :all.wr + 1 repeat 3 [setpc 12 tt :wtrans wait 200 setpc 10 tt :wtrans wait 200] ~
pe tt :wtrans pd tt item :pos.wtrans map "first dictionary]]]
if readkey = 27 [rezult :all.cw :all.wr stop][dictionary.trans :LLL]
end
to filter.dir :list.dir
; процедурата, връща списък само с първите елементи на подадения вход
if word? first :list.dir [op :list.dir]
op filter.dir lput first first :list.dir bf :list.dir
end
to game.abc.picture
; процедурата показва картинка, чиято първа буква потребителя трябва да въведе
( readkey 0 )
let "letter pick :abc
setphasemode "true
settt [Hebar][36 700 0 0 0]
cs pu
setpath "%image
if member? word first :letter ".lgw filter.dir dir "*.lgw [my.setshape first :letter] ~
[game.abc.picture stop]
setx 0 - ( item 1 textsize last :letter ) / 2
sety 100 + ( last imagesize getshape ) / 2
setpc 0 tt list last :letter
setpos [0 0] st
while [not key?][setphase phase + 1 wait 400] stamp ht
let "k readkey
while [not and ( :k > 0 ) ( :k < 255 )][let "k readkey]
ht
if :k = 27 [rezult :all.cw :all.wr stop]
setpc 0
sety 40
setx -90 - ( first imagesize getshape ) / 2
tt list char :k
my.playw se list char :k []
setpc pick [12 15 1 9 13 14 5]
setx 30 + ( first imagesize getshape ) / 2
tt list char ( ascii ( first first :letter ) ) - 32 first first :letter
if char :k = first first :letter [my.playw [abc21 []] make "all.cw :all.cw + 1] ~
[my.playw se [abc26] first first :letter setx -90 - ( first imagesize getshape ~
) / 2 putimage :X make "all.wr :all.wr + 1]
setx 0 - ( item 1 textsize first :letter ) / 2
sety - 50 - ( first imagesize getshape ) / 2
tt list first :letter
if readkey = 27 [rezult :all.cw :all.wr stop]
game.abc.picture
end
to game.abc.picture.1
let "letter pick :abc
maketurtle 1 [0 0 0 setphasemode]
settt [Hebar][28 700 0 0 0]
cs pu
ask [1 0][my.setshape first :letter]
setx 0 - ( item 1 textsize last :letter ) / 2
sety 60 + ( last imagesize getshape ) / 2
setpc 0 tt list last :letter
setpc pick [15 1 9 13 14 5]
sety - 20 - ( last imagesize getshape ) / 2
setx 0 - ( item 1 textsize first :letter ) / 2
let "pos.l 1 + random count first :letter
let "fl item :pos.l first :letter
tt list replace :pos.l first :letter "_
ask 1 [setpos [0 0] st while [not key?][setphase phase + 1 wait 400] stamp ht]
let "w readkey
while [not and ( :w > 0 ) ( :w < 255 )][let "w readkey]
my.playw list char :w []
if :w = 27 [rezult :all.cw :all.wr stop]
pe tt list replace :pos.l first :letter "_
pu setpc 0
tt list replace :pos.l first :letter char :w
if char :w = :fl [make "all.cw :all.cw + 1 my.playw [abc21]] ~
[setx -12 sety -10 - ( last imagesize getshape ) / 2 ~
putimage :X make "all.wr :all.wr + 1 wait 1000 setpc 10 my.playw ( se [abc27 abc30] :fl [] ) ~
sety 0 setx - 100 - ( first imagesize getshape ) / 2 setpc pick [15 1 9 13 14 5] tt :fl ~
setx 20 + ( first imagesize getshape ) / 2 sety 0 tt list first :letter]
if readkey = 27 [rezult :all.cw :all.wr stop]
game.abc.picture.1
end
to game.abc.picture.2
; процедурата представя картинка, чието име потребителя трябва да въведе
let "letter pick :abc
settt [Hebar][28 700 0 0 0]
cs pu
my.setshape first :letter
setx 0 - ( first textsize last :letter ) / 2
sety 50 + ( last imagesize getshape ) / 2
setpc 0 tt list last :letter
setpos [0 0] stamp
setpc pick [1 9 13 5]
sety - 50 - ( last imagesize getshape ) / 2
setx 0
my.playw [abc8]
setshape emptyimage
let "w ( rlt [] first textsize word first :letter "a )
if empty? :w [rezult :all.cw :all.wr stop]
my.setshape first :letter ht
if :w = [x - ray][let "w word "x\-ray][let "w first :w]
setx 0 - ( item 1 textsize :w ) / 2
sety - 10 - ( last imagesize getshape ) / 2
tt list :w
if :w = first :letter [make "all.cw :all.cw + 1 my.playw [abc22]] ~
[setx -12 sety - 5 - ( last imagesize getshape ) / 2 ~
putimage :X make "all.wr :all.wr + 1 my.playw ( se [abc29] first :letter [] ) ~
setpc 10 setx 10 + ( first imagesize getshape ) / 2 sety 0 tt list first :letter]
if readkey = 27 [rezult :all.cw :all.wr stop]
game.abc.picture.2
end
to game.abc.sound
cs pu
( readkey 0 )
let "letter pick :abc
let "b 0
while [not key?][if mod :b 5000 = 0 [my.playw se first :letter] let "b :b + 1]
let "k readkey
while [not and ( :k > 0 ) ( :k < 255 )][let "k readkey]
if :k = 27 [rezult :all.cw :all.wr stop]
settt [Hebar][28 700 0 0 0]
my.setshape first :letter
setx 0 - ( item 1 textsize last :letter ) / 2
sety 50 + ( last imagesize getshape ) / 2
setpc 0 tt list last :letter
setpos [0 0] stamp
ht
setpc 0
sety 40
setx -90 - ( first imagesize getshape ) / 2
tt list char :k
if char :k = first first :letter [make "all.cw :all.cw + 1 my.playw [abc21]] ~
[setx -90 - ( first imagesize getshape ) / 2 putimage :X make "all.wr :all.wr + 1 ~
my.playw ( se [abc28 abc6] first :letter [abc7] first first :letter [ ] )]
setpc pick [12 15 1 9 13 14 5]
setx 30 + ( first imagesize getshape ) / 2
tt list char ( ascii ( first first :letter ) ) - 32 first first :letter
setx 0 - ( item 1 textsize first :letter ) / 2
sety - 20 - ( last imagesize getshape ) / 2
tt list first :letter
( readkey 0 )
if readkey = 27 [rezult :all.cw :all.wr stop]
game.abc.sound
end
to game.abc.sound.1
setshape emptyimage
setbg 3 setpc 0
settt [Hebar][28 700 0 0 0]
let "letter pick :abc
if member? word first :letter ".wav filter.dir dir "*.wav [my.playw se [abc9] first ~
:letter][game.abc.sound.1 stop]
setpos [0 0]
let "w ( rlt [] item 1 textsize word "a first :letter )
if empty? :w [rezult :all.cw :all.wr stop]
if :w = [x - ray][let "w word "x\-ray][let "w first :w]
cs pu
my.setshape first :letter
setx 0 - ( item 1 textsize last :letter ) / 2
sety 50 + ( last imagesize getshape ) / 2
setpc 0 tt list last :letter
setpos [0 0] stamp
ht
setpc 0
if :w = first :letter [setpc 1 setx - ( item 1 textsize :w ) / 2 ~
sety -10 - ( last imagesize getshape ) / 2 ~
tt list :w " make "all.cw :all.cw + 1 my.playw [abc22]] ~
[sety 40 setx -20 - ( first imagesize getshape ) / 2 - ( item 1 textsize :w ) tt list :w " ~
setx -90 - ( first imagesize getshape ) / 2 putimage :X make "all.wr :all.wr + 1 ~
my.playw se [abc29] first :letter ~
setpc pick [12 15 1 9 13 14 5] ~
setx 30 + ( first imagesize getshape ) / 2 ~
tt list first :letter]
( readkey 0 )
if readkey = 27 [rezult :all.cw :all.wr stop]
game.abc.sound.1
end
to game.abc.sound.2
cs pu
setx - 200
settt [Hebar][20 700 0 0 0]
setpc 13
tt [Натиснете клавиша с чутата буква]
settt [Hebar][36 700 0 0 0]
let "letter pick :abc
my.playw first first :letter
let "k readkey
while [not and ( :k > 0 ) ( :k < 255 )][let "k readkey]
cs
if :k = 27 [rezult :all.cw :all.wr stop]
my.setshape first :letter
setx 0 - ( item 1 textsize last :letter ) / 2
sety 100 + ( last imagesize getshape ) / 2
setpc 0 tt list last :letter
setpos [0 0] stamp
ht
setpc 0
sety 40
setx -90 - ( first imagesize getshape ) / 2
tt list char :k
if char :k = first first :letter [make "all.cw :all.cw + 1 my.playw [abc21]] ~
[setx -90 - ( first imagesize getshape ) / 2 putimage :X make "all.wr :all.wr + 1 ~
my.playw ( se [abc26] first first :letter [] )]
setpc pick [12 15 1 9 13 14 5]
setx 30 + ( first imagesize getshape ) / 2
tt list char ( ascii ( first first :letter ) ) - 32 first first :letter
setx 0 - ( item 1 textsize first :letter ) / 2
sety - 20 - ( first imagesize getshape ) / 2
tt list first :letter
( readkey 0 )
waituntil [key?]
if readkey = 27 [rezult :all.cw :all.wr stop]
game.abc.sound.2
end
to game.abc.spell
setshape emptyimage
setbg 3
settt [Hebar][28 700 0 0 0]
let "letter pick dictionary
my.playw [abc9 []]
repeat count first :letter [my.playw item repc first :letter wait 1000]
setpos [0 0]
let "w ( rlt [] item 1 textsize word "a first :letter )
if empty? :w [rezult :all.cw :all.wr stop]
if member? char 45 :w [let "w ( word first :w char 45 last :w )][let "w first :w]
cs pu
my.setshape first :letter
setx 0 - ( item 1 textsize last :letter ) / 2
sety 100 + ( last imagesize getshape ) / 2
setpc 9 tt list last :letter
setpos [0 0] stamp
ht
setpc 0
sety -20 setx -20 - ( first imagesize getshape ) / 2 - ( item 1 textsize :w )
tt list :w
setpc pick [12 15 1 9 13 5]
test :w = first :letter
ift [make "all.cw :all.cw + 1 my.playw [abc22]]
iff [setx -90 - ( first imagesize getshape ) / 2 putimage :X make "all.wr :all.wr + 1 ~
setpath "%wave ~
if member? word first :letter ".wav filter.dir dir "*.wav ~
[my.playw ( se [abc29] first :Letter [] )][my.playw [abc28 []]] ~
sety -20 setx 30 + ( first imagesize getshape ) / 2 ~
tt list first :letter]
( readkey 0 )
if readkey = 27 [rezult :all.cw :all.wr stop]
game.abc.spell
end
to game.comp.let
; ПРОЦЕДУРАТА СЛЕДИ ДЕЙСТВИЯТА НА ПОТРЕБИТЕЛЯ ЗА ИГРАТА:СРАВНЯВАНЕ НА БУКВИ С ВЕЗНА
case readkey ~
[0 [make "last.t touched tell :last.t] ~
-1 [if count :last.t = 1 [setpos mouse]] ~
-2 [if not empty? touched [if count :last.t = 1 ~
[if overlap? "vezna [my.playw [abc32] if empty? :l1 [make "l1 se :last.t ask :last.t ~
[xcor] ask :last.t [sety -60]][vezna]] ~
[test overlap? word who "1 ~
ift [my.playw [abc31] setpos ask word who "1 [pos] make "g.c.l :g.c.l + 1 if :g.c.l ~
= 5 [my.playw [abc23] game.comp.let.rezult stop]] ~
iff [home]]]]] ~
27 [game.comp.let.rezult stop]]
game.comp.let
end
to game.comp.let.rezult
erturtle [vezna]
foreach "t filter [[k][op count :k = 1]] all [ask :t [if overlap? word :t "1 [ask word :t "1 [ht]] ~
[setpos ask word :t "1 [pos]]]]
waituntil [key?]
erturtle all
maketurtle 0 [0 0 0 ht tell pu]
end
to game.dictionary.subject
cs pu ht
setmc 11
maketurtle 0 [-250 200 0 ht pu tell]
settt [Hebar][12 700 0 1 0] setpc 0
let "subjects [Me Body Family House Room Clothes Home Food Weekend Street School ~
Park Swim Restaurant Numbers Picture Airport Lunch People Colors]
let "sub.bg [Аз Тяло Семейство Къща Стая Дрехи Жилище Храна Почивка Улица Училище ~
Парк Басейн Ресторант Числа Рисунка Летище Обяд Професии Цветове]
repeat count :subjects [maketurtle item repc :subjects se pos [0 pu ht] ~
ask item repc :subjects [setshape item repc loadimage "temi []] ~
sety ycor - 40 setx xcor - ( first textsize item repc :sub.bg ) / 2 ~
tt item repc :sub.bg ~
sety ycor + 40 setx xcor + ( first textsize item repc :sub.bg ) / 2 ~
if xcor > 170 [sety ycor - 100 setx -250][setx xcor + 130]]
erturtle 0
setmc 14 tell all st
( readkey 0 )
my.playw [abc10]
case readkey [0 [if not empty? touched ~
[setmc 0 let "el touched ~
erturtle all setbg 15 ~
( loadscreen item [1 8] :el first thing :el ) ~
my.playw [abc11 abc14] game.dictionary.subject.elements]] ~
27 [setmc 0 rezult :all.cw :all.wr erturtle all setgs item [3 2] ~
logosize cs setbg 3 maketurtle 0 [0 0 0 ht tell] stop]]
erturtle all
game.dictionary.subject
end
to game.dictionary.subject.elements
let "el bf thing :el
repeat ( count :el ) - 1 [make repc item repc :el ~
maketurtle repc se item repc last :el [0 ht pu tell] ~
ask repc [setboxmode "true setbox [frame 0 pp 4 title 0 bg 15 edit 0]] ~
make word "a repc " ~
maketurtle word "a repc se item repc last :el [0 st pu tell] ~
ask word "a repc [setboxmode "true setbox [frame 1 pp 2 title 0 bg 0 edit 1 size [10 1]]]]
waituntil [readkey = 27]
repeat ( count :el ) - 1 [if thing word "a repc = first thing repc [make "all.cw ~
:all.cw + 1 ask word "a repc [setbox [bg 2]]] ~
[make "all.wr :all.wr + 1 ask word "a repc [setbox [bg 12]] make word "a repc first ~
thing repc]]
st
waituntil [key?]
ignore readkey
repeat ( count :el ) - 1 [( erase word ": repc ( word ": "a repc ) )]
erturtle all
maketurtle 0 [0 0 0 pu ht tell]
cs setbg 3
end
to garden
cs setbg 15
my.playw [abc19]
( loadscreen pick [tree1 tree2][-280 200] )
let "dict shuffle dictionary
let "s1234 item [1 4] :dict
let "sw first :s1234
let "label shuffle :label.pos
make "tree1 shuffle :tree1
let "shape pick [applel pear]
my.setshape :shape
settt [Hebar][14 700 0 0 1]
if :shape = "applel [setpc 15][setpc 0]
repeat count first :sw [setpos item repc :tree1 stamp tt list item repc first :sw]
;
; textbox turtle with correct word
make "cw list [] first :sw
maketurtle "cw [st pu]
let "mar div ( 15 - count first :sw ) 2
ask "cw [setpos item 1 :label setboxmode "true setbox ( se [size [15 3] edit 0 title ~
0 bg 7 pp 4] "margin :mar )]
;
; textbox turtle with 1 wrong word
make "w1 list [] first first bf :s1234
maketurtle "w1 [st pu]
let "mar div ( 15 - count first bf :w1 ) 2
ask "w1 [setpos item 2 :label setboxmode "true setbox ( se [size [15 3] edit 0 title ~
0 bg 7 pp 4] "margin :mar )]
;
; textbox turtle with 2 wrong word
make "w2 list [] first first bf bf :s1234
maketurtle "w2 [st pu]
let "mar div ( 15 - count first bf :w2 ) 2
ask "w2 [setpos item 3 :label setboxmode "true setbox ( se [size [15 3] edit 0 title ~
0 bg 7 pp 4] "margin :mar )]
;
; textbox turtle with 3 wrong word
make "w3 list [] first last :s1234
maketurtle "w3 [st pu]
let "mar div ( 15 - count first bf :w3 ) 2
ask "w3 [setpos item 4 :label setboxmode "true setbox ( se [size [15 3] edit 0 title ~
0 bg 7 pp 4] "margin :mar )]
;
( readkey 0 )
let "k readkey
while [( not member? :k [0 27] )][let "k readkey]
if :k = 27 [rezult :all.cw :all.wr stop]
let "c touched
if not empty? :c ~
[my.playw [abc13] test :c = "cw ~
ift [make "all.cw :all.cw + 1 ask :c [setbox [bg 2]]] ~
iff [make "all.wr :all.wr + 1 ask :c [setbox [bg 12]]] ~
my.playw [abc19] ~
repeat 6 [ask "cw [setbox [bg 7] wait 300 setbox [bg 2] wait 300]]]
erturtle all
maketurtle 0 [0 0 0 ht pu tell]
garden
end
to garden.1
setmc 11 cs pu
setbg 15
my.playw [abc19]
( loadscreen pick [tree1 tree2][-280 200] )
let "sw first shuffle dictionary
while [count first :sw > 4][let "sw first shuffle dictionary]
make "tree1 shuffle :tree1
let "shape pick [applel pear]
my.setshape :shape
settt [Hebar][14 700 0 0 1]
if :shape = "applel [setpc 15][setpc 0]
repeat count first :sw [setpos item repc :tree1 stamp tt list item repc first :sw]
setpos [170 0] setpc 0
settt [Hebar][16 700 0 0 1]
let "ans ( rlt [] ( first textsize first :sw ) + 20 )
if :ans = [][rezult :all.cw :all.wr setmc 0 stop]
let "ans first :ans
test :ans = first :sw
ift [make "all.cw :all.cw + 1 setpc 2 tt first :sw]
iff [make "all.wr :all.wr + 1 setpc 12 tt :ans setpc 10 sety ycor - 30 tt first :sw]
pu sety ycor - 30 setpc 0 tt last :sw
if readkey = 27 [rezult :all.cw :all.wr setmc 0 stop][garden.1]
end
to ini
hidespeedbar
hidebuttons
erturtle all
maketurtle 0 [0 0 0 tell ht pu]
randomize
cs
setlogosize [0 0 640 480 5 [Learning ABC...]]
gs
setgs se item 3 logosize item 4 logosize
window
setbg 3
if empty? :my.dictionary [make "my.dictionary []]
ini.path
end
to ini.path
setpath loadpath
( setpath "image word path "\\image )
( setpath "wave word path "\\wave )
( setpath "screen word path "\\screen )
end
to main
.setmousepos [-300 200]
; области от графичния екран за влизане в различните части
pprop "codearea 1001 [-150 105 -3 -12]
pprop "codearea 1002 [6 105 151 -11]
pprop "codearea 1003 [-151 -19 -3 -129]
pprop "codearea 1004 [5 -18 151 -127]
( setbg 3 0 ) ( loadscreen "win1 [-240 190] )
setshape :but.window
pu
( readkey 0 )
while [not key?] ~
[if and ( last mousestate < [151 105] ) ( last mousestate > [-147 -128] ) [st setmc ~
14][ht setmc 0] ~
if and ( last mousestate < [-3 106] ) ( last mousestate > [-147 -9] ) [if pos ~
<> [-151 104][playw [abc20] setpos [-151 104] st]][] ~
if and ( last mousestate < [152 104] ) ( last mousestate > [6 -10] ) [if pos <> ~
[4 104][playw [abc20] setpos [4 104] st]][] ~
if and ( last mousestate < [-2 -19] ) ( last mousestate > [-149 -129] ) [if pos ~
<> [-150 -18][playw [abc20] setpos [-150 -18] st]][] ~
if and ( last mousestate < [151 -18] ) ( last mousestate > [5 -130] ) [if pos ~
<> [5 -16][playw [abc20] setpos [5 -16] st]][]]
case readkey ~
[1001 [setmc 0 erase props abc.learn.alphabet abc.learn] ~
1002 [setmc 0 erase props abc.game] ~
1003 [setmc 0 erase props word.learn] ~
1004 [setmc 0 erase props word.game] ~
27 [draw setmc 0 showspeedbar ss setlogosize [] stop]]
main
end
to merge :s1 :s2
if empty? :s1 [op :s2]
if empty? :s2 [op :s1]
test first :s1 < first :s2
ift [op fput first :s1 merge bf :s1 :s2]
iff [op fput first :s2 merge :s1 bf :s2]
end
to merge.sort :s
if empty? bf :s [op :s]
local [half1 half2]
make "half1 only.odd :s
make "half2 only.odd bf :s
op merge merge.sort :half1 merge.sort :half2
end
to my.playw :filewave
; процедурата проверява за наличието на звукови файлове и
; ако се окаже, че даден липсва не го изпълнява
setpath "%wave
repeat count :filewave ~
[test empty? item repc :filewave ~
iff [if not member? word item repc :filewave ".wav filter.dir dir "*.wav ~
[make "filewave replace repc :filewave "]]]
playwave :filewave
end
to my.setshape :shape
setpath "%image
if member? word :shape ".lgw filter.dir dir "*.lgw [setshape :shape][setshape emptyimage]
end
to only.odd :s
if empty? :s [op :s]
if empty? bf :s [op :s]
op fput first :s only.odd bf bf :s
end
to play.dictionary.subject.elements
case readkey [0 [if not empty? touched [ask touched [setbox [bg 2]] ~
my.playw list first item touched :el [] ~
ask touched [setbox [bg 15]]]] ~
27 [stop]]
play.dictionary.subject.elements
end
to rezult :corr :rong
erturtle all
maketurtle 0 [0 0 0 ht pu tell]
setbg 3
settt [Hebar][22 700 0 0 0]
setshape :correct
setx -50 stamp
setx -80 - item 1 textsize :corr tt list :corr
setshape :wrong
setx 50 stamp
setx 100 tt list :rong
if :corr > :rong [my.playw [abc23]][my.playw [abc18]]
( readkey 0 )
waituntil [key?]
ignore readkey
playw []
cs
end
to start.compare.letters
; процедурата дава възможност на избор за ниво при сравняване на букви от азбуката
cs ( readkey 0 )
settt [Hebar][18 700 0 0 0]
my.playw [abc24]
sety 150
let "tg [Игра - РАЗБЪРКАНИ БУКВИ]
let "tn [Заб: Използвайте клавиша ESC за изход]
let "t1 [1. Първо ниво]
pprop "codearea 1001 [-105 30 80 5]
let "t2 [2. Второ ниво]
pprop "codearea 1002 [-105 -20 70 -50]
setpc 1
setx - ( first textsize :tg ) / 2
tt :tg
sety ycor - 70 setx -100
setpc 12 tt [Изберете ниво:]
setpc 0
sety ycor - 50 tt :t1
sety ycor - 50 tt :t2
setpc 9
setx - ( first textsize :tn ) / 2
sety ycor - 50
tt :tn
let "k readkey
while [not member? :k [49 1001 50 1002 27]][let "k readkey]
case :k [49 1001 [compare.letters 1] ~
50 1002 [compare.letters 2] ~
27 [erase props stop]]
erase props
start.compare.letters
end
to start.garden
cs
settt [Hebar][18 700 0 0 0]
my.playw [abc24]
sety 150
let "tg [Игра - В ГРАДИНАТА]
let "tn [Заб: Използвайте клавиша ESC за изход]
let "t1 [1. Първо ниво]
pprop "codearea 1001 [-105 30 80 5]
let "t2 [2. Второ ниво]
pprop "codearea 1002 [-105 -20 70 -50]
setpc 1
setx - ( first textsize :tg ) / 2
tt :tg
sety ycor - 70 setx -100
setpc 12 tt [Изберете ниво:]
setpc 0
sety ycor - 50 tt :t1
sety ycor - 50 tt :t2
setpc 9
setx - ( first textsize :tn ) / 2
sety ycor - 50
tt :tn
case readkey [49 1001 [garden] 50 1002 [garden.1] 27 [erase props stop]]
start.garden
end
to startup
ini ; настройки на основния прозорец
setmc 11
my.playw [abc0]
( loadscreen "win1 [-240 190] )
; създаване на котенурки с образ завеси
maketurtle 1 [-154 105 0 tell st pu setphasemode "winl]
maketurtle 2 [150 105 0 tell st pu setphasemode "winr]
ask [1 2][repeat 3 [setphase repc wait 500]]
erturtle [1 2]
setmc 0
main
; catch "error [main]
; ignore error
setlogosize []
showspeedbar
ss
end
to vezna
make "l2 se :last.t ask :last.t [xcor]
ask :last.t [sety -60]
; проверява подредбата на буквите
test ascii first :l1 < ascii first :l2
iff [if last :l1 < 0 [ask "vezna [setphase 1] ask first :l2 [sety ycor + 10] ~
ask first :l1 [sety ycor - 10]] ~
[ask "vezna [setphase 3] ask first :l1 [sety ycor - 10] ~
ask first :l2 [sety ycor + 10]]]
ift [if last :l2 < 0 [ask "vezna [setphase 1] ask first :l1 [sety ycor + 10] ~
ask first :l2 [sety ycor - 10]] ~
[ask "vezna [setphase 3] ask first :l2 [sety ycor - 10] ~
ask first :l1 [sety ycor + 10]]]
waituntil [key?]
ask se first :l1 first :l2 [home]
ask "vezna [setphase 2]
make "l1 []
make "l2 []
end
to word.game
cs ht pu
make "all.cw 0
make "all.wr 0
; Меню за избор
let "t1 [1. Дума от картинка]
pprop "codearea 1001 [-255 180 -10 150]
let "t2 [2. Чута дума]
pprop "codearea 1002 [-255 130 -100 100]
let "t3 [3. В градината]
pprop "codearea 1003 [-255 80 -80 50]
let "t4 [4. Превод на дума: английско - български]
pprop "codearea 1004 [-255 30 260 -5]
let "t5 [5. Превод на дума: българо - английски]
pprop "codearea 1005 [-255 -20 250 -55]
let "t6 [6. Дума от тема]
pprop "codearea 1006 [-255 -70 -65 -105]
let "t7 [7. Дума по чути букви]
pprop "codearea 1007 [-255 -120 20 -155]
setx -200 sety 230
settt [Hebar][20 700 0 0 1]
setpc 4 tt [Четвърта част - Игри с думи]
settt [Hebar][18 700 0 0 1]
setx -250 sety ycor - 30
setpc 12 tt [Изберете:]
setpc 0
sety ycor - 50 tt :t1
sety ycor - 50 tt :t2
sety ycor - 50 tt :t3
sety ycor - 50 tt :t4
sety ycor - 50 tt :t5
sety ycor - 50 tt :t6
sety ycor - 50 tt :t7
setpc 9 setx -200
sety ycor - 50 tt [Заб: Използвайте клавиша ESC за изход]
case readkey ~
[49 1001 [erase props setmc 11 game.abc.picture.2 setmc 0] ~
50 1002 [erase props setmc 11 game.abc.sound.1 setmc 0] ~
51 1003 [erase props start.garden] ~
52 1004 [erase props setmc 11 dictionary.trans "EB setmc 0] ~
53 1005 [erase props setmc 11 dictionary.trans "BE setmc 0] ~
54 1006 [erase props game.dictionary.subject] ~
55 1007 [erase props setmc 11 game.abc.spell setmc 0] ~
27 [clean erase props stop]]
word.game
end
to word.learn
cs pu ht
; Меню за избор
let "t1 [1. Тематичен речник]
pprop "codearea 1001 [-255 130 5 95]
let "t2 [2. Азбучен английско - български речник]
pprop "codearea 1002 [-255 80 250 50]
let "t3 [3. Азбучен българо - английски речник]
pprop "codearea 1003 [-255 30 225 -5]
let "t4 [4. Търсене на дума]
pprop "codearea 1004 [-255 -25 -15 -55]
let "t5 [5. Добавяне на дума в речника]
pprop "codearea 1005 [-255 -50 130 -105]
setx -200 sety 200
settt [Hebar][20 700 0 0 1]
setpc 4 tt [Трета част - Запознаване с думи]
settt [Hebar][18 700 0 0 1]
setpc 12 setx -250 sety ycor - 50
tt [Изберете:] setpc 0
sety ycor - 50 tt :t1
sety ycor - 50 tt :t2
sety ycor - 50 tt :t3
sety ycor - 50 tt :t4
sety ycor - 50 tt :t5
setpc 9 setx -200
sety ycor - 50 tt [Заб: Използвайте клавиша ESC за изход]
case readkey ~
[49 1001 [erase props dictionary.subject] ~
50 1002 [erase props dictionary.abc "EB] ~
51 1003 [erase props dictionary.abc "BE] ~
52 1004 [setmc 11 erase props dictionary.search setmc 0] ~
53 1005 [setmc 11 erase props dictionary.add setmc 0] ~
27 [clean stop]]
word.learn
end
Сподели с приятели: |