Niewyszukany programik z niewyszukanym imieniem – napisany w Tcl/Tk. Chlebak jak sama nazwa wskazuje służy do noszenia granatów, a naumiacz do naumiewania się na pamięć słówek z języków sobie obcych. Przy uruchomieniu program prosi nas o podanie pliku ze słówkami. Plikiem tym jest zwykły plik tekstowy o układzie:
słówko obce – tłumaczenie
słówko obce – tłumaczenie
słówko obce – tłumaczenie
który możemy sobie tworzyć na bieżąco w byle notatniku (ucząc się np. z książki). Program traktuje myślnik jako oddzielenie obcego słówka od rodzimego tłumaczenia.
Po wczytaniu pliku ze słówkami do nauczenia, jesteśmy proszeni o wybranie rozdziału. Każdy rozdział to ileśtam (ile? – to do ustawienia w kodzie programu) kolejnych słów z pliku słówek.
I rozpoczyna się nauka. Wiecie jak najefektywniej szkoli się żołnierzy w zabijaniu na polu walki? Ustawia im się ruchome tarcze, które pojawiają się na moment zza krzaka lub pagórka i po sekundzie znowu chowają. Żołnierz nie ma czasu na zastanawianie się nad pociągnięciem za spust – widzi cel, to musi bezmyślnie strzelić, bo cel się już chowa. Odruch… Z programikiem naumiacz zasada nauki słówek jest podobna, widzisz słowo i musisz jak najszybciej zaznaczyć jedną z trzech możliwości tłumaczenia. Widzisz słówko – klikasz tłumaczenie, widzisz słówko – klikasz tłumaczenie, itd. Czasu nic nie odlicza – założyłem, że korzystający z naumiacza robi to z własnej chęci, ma wystarczającą, dobrowolną motywację do nauki i nie trzeba go stresować ułamkami sekund 😉
#!/usr/bin/wish
#
# naumiacz.tcl – program do nauki słówek.
# Autor: miroslaw.kosmala@trilowcy.org
#
###
###
# Kolorystyka
tk_setPalette gray90
# Ile słówek ma zawierać jeden dział (stan zakładany – 1}?
# max 10
set il_w_dziale 9
font create base_font -family Helvetica -size 14 -weight normal
font create word_font -family Helvetica -size 16 -weight bold
proc losowa max {
set temp [expr rand()]
set temp [split $temp {.}]
set temp [split [lindex $temp 1] {}]
if { [lindex $temp 0] > $max } {
while { [lindex $temp 0] > $max } {
set temp [expr rand()]
set temp [split $temp {.}]
set temp [split [lindex $temp 1] {}]
}
return [lindex $temp 0]
}
proc dawaj_slowa {} {
global rozdzial
global slowka
global tlumaczenia
global il_w_dziale
set index [losowa $il_w_dziale]
set index2 [losowa $il_w_dziale]
while { $index == $index2 } {
set index2 [losowa $il_w_dziale]
}
set index3 [losowa $il_w_dziale]
while { $index == $index3 || $index2 == $index3 } {
set index3 [losowa $il_w_dziale]
}
.f.sl configure -text „[lindex $slowka($rozdzial) $index]” -font word_font
global poprawne
set pozycja [losowa 2]
if { $pozycja == 0 } {
.f.f.g configure -text „[lindex $tlumaczenia($rozdzial) $index]” \
-font word_font
.f.f.s configure -text „[lindex $tlumaczenia($rozdzial) $index2]” \
-font word_font
.f.f.d configure -text „[lindex $tlumaczenia($rozdzial) $index3]” \
-font word_font
set poprawne „jeden”
}
if { $pozycja == 1 } {
.f.f.g configure -text „[lindex $tlumaczenia($rozdzial) $index2]” \
-font word_font
.f.f.s configure -text „[lindex $tlumaczenia($rozdzial) $index]” \
-font word_font
.f.f.d configure -text „[lindex $tlumaczenia($rozdzial) $index3]” \
-font word_font
set poprawne „dwa”
}
if { $pozycja == 2 } {
.f.f.g configure -text „[lindex $tlumaczenia($rozdzial) $index2]” \
-font word_font
.f.f.s configure -text „[lindex $tlumaczenia($rozdzial) $index3]” \
-font word_font
.f.f.d configure -text „[lindex $tlumaczenia($rozdzial) $index]” \
-font word_font
set poprawne „trzy”
}
}
# ——————————————————
# — PROCEDURA PRACY —
# ——————————————————
proc praca {widget rozdzial} {
destroy $widget
frame .f
label .f.top -text „NAUKA” -relief raised -font base_font
label .f.sep1 -text ” ”
label .f.sl
frame .f.f
label .f.f.g -text ” *** ” -font word_font \
-background white -foreground black
label .f.f.s -text ” *** ” -font word_font \
-background white -foreground black
label .f.f.d -text ” *** ” -font word_font \
-background white -foreground black
label .f.sep -text ” ”
pack .f .f.top .f.sep1 .f.sl .f.f .f.f.g .f.f.s .f.f.d .f.sep -expand no -fill x
frame .f.b
button .f.b.j -text ” Dział ” -font base_font -command { dawaj_rozdzial .f}
button .f.b.d -text ” Koniec ” -font base_font -command {exit}
pack .f.b -expand no -fill x
pack .f.b.j .f.b.d -expand no -fill x -side left
dawaj_slowa
# ———————-
# — ZDARZENIA —
# –
bind .f.f.g {
.f.f.g configure -background navy -foreground yellow
.f.f.s configure -background white -foreground black
.f.f.d configure -background white -foreground black
}
bind .f.f.s {
.f.f.g configure -background white -foreground black
.f.f.s configure -background navy -foreground yellow
.f.f.d configure -background white -foreground black
}
bind .f.f.d {
.f.f.g configure -background white -foreground black
.f.f.s configure -background white -foreground black
.f.f.d configure -background navy -foreground yellow
}
# —
bind .f.f.g {
global poprawne
if { $poprawne != „jeden” } {
tk_dialog {.con} { Kontrola } { PUDŁO!!!} {} 0 { O.K }
} else {
dawaj_slowa
}
}
bind .f.f.s {
global poprawne
if { $poprawne != „dwa” } {
tk_dialog {.con} { Kontrola } { PUDŁO!!!} {} 0 { O.K }
} else {
dawaj_slowa
}
}
bind .f.f.d {
global poprawne
if { $poprawne != „trzy” } {
tk_dialog {.con} { Kontrola } { PUDŁO!!!} {} 0 { O.K }
} else {
dawaj_slowa
}
}
}
set poprawne „”
# ——————————————————
# — PROCEDURA WYBORU ROZDZIAŁU —
# ——————————————————
proc dawaj_rozdzial {widget} {
if { $widget != „null” } {
destroy $widget
}
global il_nazwa
global il_slow
global rozdzial
frame .f
pack .f -expand yes -fill both
label .f.top -text „WYBÓR ROZDZIAŁU” -font base_font -relief raised
label .f.op -text „Do dyspozycji jest $il_slow slów\nw $il_nazwa rozdzialach.” \
-font base_font
label .f.wyb -text „Do opanowania wybieram\nrozdział nr ” \
-font base_font
spinbox .f.sb -from 1 -to $il_nazwa -width 3
label .f.sep -text ” ”
pack .f.top .f.op .f.wyb -expand yes -fill x
pack .f.sb .f.sep -expand no
frame .f.b
pack .f.b -expand no -fill x
button .f.b.b1 -text ” O.K ” -font base_font -command {
set rozdzial [.f.sb get]
praca .f [expr $rozdzial-1]
}
button .f.b.b2 -text ” Zamknij ” -command {exit} -font base_font
pack .f.b.b1 .f.b.b2 -expand no -fill x -side right
}
# ——————————————————
wm title . „Naumiacz II”
#wm geometry . 200×300
# Dawaj plik słownika
if [catch { set fdes [open [tk_getOpenFile] r]} dupa ] {
puts „Błąd: Nie mogę otworzyć pliku z danymi\n”
exit 1
}
list slowka
list tlumaczenia
set il_tmp 0
set il_nazwa 0
set il_slow -1
while { [gets $fdes wiersz] != -1 } {
set tmp [split $wiersz {-}]
lappend slowka($il_nazwa) [lindex $tmp 0]
lappend tlumaczenia($il_nazwa) [lindex $tmp 1]
if {$il_tmp != $il_w_dziale} {
set il_tmp [expr $il_tmp + 1]
} else {
set il_tmp 0
set il_nazwa [expr $il_nazwa + 1]
}
set il_slow [expr $il_slow + 1]
}
unset tmp
unset il_tmp
# —
# Dawaj na początek wybór rozdziału
dawaj_rozdzial null
—
No tak – wszystko powyższe fajnie, ale co gdy mamy plik ze słówkami: słowo obce – tłumaczenie, a nam jest potrzebny plik: tłumaczenie – słowo obce ? Po prostu, korzystamy z konsolowego konwentera plików ze słówkami.
#!/usr/bin/tcl
#
# konwerter.tcl – program zamieniający miejscami slowa oddzielone
# myślnikiem (czyli. „słówko – tłumaczenie” na
# tłumaczenie – słowko), przewidziany jako wspomaganie
# do programu NAUMIACZ
#
#
# Autor: Mirosław ‚mk23z’ Kosmala Resko, dn. 04.09.2003r
# maito: miroslaw.kosmala@trilowcy.org godz. 22:09
#
#####
# Sprawdzenie parametrów wywołania
if { $argc == 0 || $argc == 1 } {
puts „”
puts ” Podaj parametry wywołania:”
puts „”
puts ” BASH>konwerter.tcl ”
puts „”
exit
}
####
# Otwarcie plików roboczych
if [catch {set fin [open [lindex $argv 0] r]} dupa] {
puts „”
puts „Błąd: Nie mogę otworzyć pliku <[lindex $argv 0]> do odczytu…”
puts „”
exit
}
if [catch {set fout [open [lindex $argv 1] w]} dupa] {
puts „”
puts „Błąd: Nie mogę otworzyć pliku <[lindex $argv 1]> do zapisu…”
puts „”
exit
}
####
# Praca
# Flaga zlicznika
set zlicznik 0
while { [gets $fin inline] != -1 } {
set inline [split $inline {-}]
puts $fout „[lindex $inline 1] – [lindex $inline 0]”
set zlicznik [expr $zlicznik+1]
}
####
# Sprzątanie po sobie
close $fin
close $fout
# Raport
puts „——————————————–”
puts ” Gotowe… przerobiono $zlicznik wierszy słówek…\n”
exit