diff options
| author | hallgren <hallgren@chalmers.se> | 2010-04-28 12:58:17 +0000 |
|---|---|---|
| committer | hallgren <hallgren@chalmers.se> | 2010-04-28 12:58:17 +0000 |
| commit | 593f104bc1852be9690d870153dc2ba251490040 (patch) | |
| tree | a39b4ae42a234ee6d0a0345f249f73dde5acc64e /src/runtime/javascript/minibar | |
| parent | c757e914cd874062ac4952ae4e52b2e8e897bfca (diff) | |
Some work on the Saldo game
Diffstat (limited to 'src/runtime/javascript/minibar')
| -rw-r--r-- | src/runtime/javascript/minibar/minibar.css | 5 | ||||
| -rw-r--r-- | src/runtime/javascript/minibar/saldotest.js | 89 | ||||
| -rw-r--r-- | src/runtime/javascript/minibar/support.js | 18 |
3 files changed, 111 insertions, 1 deletions
diff --git a/src/runtime/javascript/minibar/minibar.css b/src/runtime/javascript/minibar/minibar.css index 17d7350c9..84d02ec1a 100644 --- a/src/runtime/javascript/minibar/minibar.css +++ b/src/runtime/javascript/minibar/minibar.css @@ -35,3 +35,8 @@ div.modtime { float: right; } .modtime { color: #444; white-space: nowrap; } ul.space>li { margin-top: 0.5ex; } + +div#saldospel input[type=button] { font-size: 100%; } + +div#saldospel input.correct { color: green; } +div#saldospel input.incorrect { color: red; }
\ No newline at end of file diff --git a/src/runtime/javascript/minibar/saldotest.js b/src/runtime/javascript/minibar/saldotest.js index cc2cdd1b1..8103e6e4f 100644 --- a/src/runtime/javascript/minibar/saldotest.js +++ b/src/runtime/javascript/minibar/saldotest.js @@ -3,6 +3,14 @@ var Saldo_ws_url = "http://spraakbanken.gu.se/ws/saldo-ws/"; //var Saldo_ff_url = Saldo_ws_url+"ff/json+remember_completions/"; var Saldo_lid_url = Saldo_ws_url+"lid/json"; +function saldo_ws(fn,fmt,arg,cont_name) { + jsonp(Saldo_ws_url+fn+"/"+fmt+(cont_name ? "+"+cont_name : "")+"/"+arg,""); +} + +function saldo_json(fn,arg,cont_name) { saldo_ws(fn,"json",arg,cont_name); } +function saldo_lid(arg,cont_name) { saldo_json("lid",arg,cont_name); } +function saldo_lid_rnd(cont_name) { saldo_lid("rnd?"+Math.random(),cont_name); } + var ordlista=[]; var current=""; @@ -22,7 +30,7 @@ function start_saldotest() { } function random_word() { - jsonp(Saldo_lid_url+"+show_random/rnd?"+Math.random()); + saldo_lid_rnd("show_random"); } function show_random(lid) { @@ -106,6 +114,8 @@ function allowed(c) { } } +// ordklasser: mxc sxc (förekommer bara som prefix), +// *h (förekommer bara som suffix) function ignore(msd) { switch(msd) { case "c": @@ -238,3 +248,80 @@ function show_prefixes() { trans.innerHTML="Prefix av "+current+":"; show_prefixes_of(trans,current); } + +/* -------------------------------------------------------------------------- */ + +var spel={ antal_ord: 4, // antal närbesläktade ord att visa + antal_korrekta_svar: 0, + antal_felaktiga_svar: 0 + }; + +function start_saldospel() { + spel.hylla=div_id("hylla"); + spel.status=div_id("status"); + element("saldospel").innerHTML="<h2>Vilket ord ska bort? <span id=score></span></h2>"; + appendChildren(element("saldospel"), + [spel.hylla,spel.status, + button("Nya ord","spel0()")]); + spel.score=element("score"); + spel0(); +} + +function spel0() { // Välj ord 1 + saldo_lid_rnd("spel1"); +} + +function spel1(lid) { // Slå upp md1 för ord 1 + spel.lid=lid; + saldo_json("md1",lid.lex,"spel2"); +} + +function spel2(md1) { // Kontrollera att det finns minst 4 ord i md1 för ord1 + if(md1.length<spel.antal_ord) spel0(); + else { + spel.md1=md1; + spel3(); + } +} + +function spel3() { // Välj ord 2 + saldo_lid_rnd("spel4"); +} + +function spel4(lid) { // Slå upp md1 för ord 2 + spel.lid2=lid; + saldo_json("md1",lid.lex,"spel5"); +} + +function spel5(md1) { // Kontrollera att ord 1 och ord 2 inte har något gemensamt + var ordlista1=map(wf,spel.md1); + var ord2=wf(spel.lid2.lex); + var ordlista2=map(wf,md1).concat(ord2); + if(overlaps(ordlista1,ordlista2)) spel3(); + else spel6(ordlista1,ord2); +} + +function spel6(ordlista1,ord2) { + spel.ord2=ord2; + var pos=Math.floor(Math.random()*spel.antal_ord); + var ordlista=shuffle(shuffle(ordlista1).slice(0,spel.antal_ord).concat(ord2)); + spel.hylla.innerHTML=""; + var lista=empty_class("p","space"); + for(var i=0;i<ordlista.length;i++) + lista.appendChild((button(ordlista[i],"spel7(this)"))); + spel.hylla.appendChild(lista); +} + +function spel7(btn) { + btn.disabled=true; + var ok=btn.value==spel.ord2; + btn.setAttribute("class",ok ? "correct" : "incorrect"); + if(ok) spel.antal_korrekta_svar++; else spel.antal_felaktiga_svar++; + spel.score.innerHTML=""+spel.antal_korrekta_svar+" rätt, " + +spel.antal_felaktiga_svar+" fel"; + if(ok) spel0(); +} + +function wf(ord) { // word form, wf("band..1") == "band" + return ord.split(".",1)[0].split("_").join(" "); +} diff --git a/src/runtime/javascript/minibar/support.js b/src/runtime/javascript/minibar/support.js index f124d5194..2161ff650 100644 --- a/src/runtime/javascript/minibar/support.js +++ b/src/runtime/javascript/minibar/support.js @@ -56,6 +56,7 @@ function div_class(cls,contents) { return wrap_class("div",cls,contents); } function p(contents) { return wrap("p",contents); } function dt(contents) { return wrap("dt",contents); } +function li(contents) { return wrap("li",contents); } function th(contents) { return wrap("th",contents); } function td(contents) { return wrap("td",contents); } @@ -165,3 +166,20 @@ function mapc_from(f,xs,i,ys,cont) { else cont(ys); } + +function overlaps(as,bs) { + for(var i=0;i<as.length;i++) + if(elem(as[i],bs)) return true; + return false; +} + +function elem(a,as) { + for(var i=0;i<as.length;i++) + if(a==as[i]) return true; + return false; +} + +function shuffle(a) { + for(i=0;i<a.length;i++) swap(a,i,Math.floor(Math.random()*a.length)) + return a; +} |
