HTML Square Horizontal Rule Four Graphs Tutorial
โœ‚๐Ÿƒ๐Ÿพโ€โ™€๏ธ๐Ÿƒ๐Ÿผโ€โ™‚๏ธ
๐Ÿ“–

HTML Square Horizontal Rule Four Graphs Tutorial

HTML Square Horizontal Rule Four Graphs Tutorial

Yesterdayโ€™s Mathematical Induction n + 1 feeling HTML Square Horizontal Rule Line Graph Tutorial dealt with the simpler two โ€ฆ

  1. Column Graph
  2. Line Graph โ€ฆ the scaffolding needed for todayโ€™s harder work to add functionality for โ€ฆ
  3. Area Graph
  4. Bar Graph

โ€ฆ where โ€ฆ

  • Area Graph challenge primarily revolved around how to create polygonal backgrounds, and here we got great help from both encasing SVG within an absolutely positioned HTML div in order to control SVG positioning (thanks heaps) and regarding Area Chart looks to end up with some Area Graph only Javascript โ€ฆ


    if (document.getElementById('h1column').innerHTML == 'Area') { // thanks to https://stackoverflow.com/questions/41988955/absolute-positioning-of-svg-element-not-working and https://datavizcatalogue.com/methods/area_graph.html

    var mintop=Math.min(eval('' + document.getElementById('hrlg' + lasthr).style.top.replace('px','')), eval('' + document.getElementById('hrlg' + hrlgcnt).style.top.replace('px','')));

    var minleft=Math.min(eval('' + document.getElementById('hrlg' + lasthr).style.left.replace('px','')), eval('' + document.getElementById('hrlg' + hrlgcnt).style.left.replace('px','')));

    var thisheight=Math.abs(zerozeroy - mintop);

    var thiswidth=Math.abs(eval('' + document.getElementById('hrlg' + lasthr).style.left.replace('px','')) - eval('' + document.getElementById('hrlg' + hrlgcnt).style.left.replace('px','')));

    var az='<div class="svg-container" style="opacity:0.5;position:absolute;top:' + Math.floor(eval(14 + mintop)) + 'px;left:' + Math.floor(minleft) + 'px;width:' + Math.floor(thiswidth) + 'px;height:' + Math.floor(thisheight) + 'px;"><svg height="100%" width="100%"><polygon points="'; //0,0 ' + Math.floor(eval('' + dwl) + eval(eval('' + dw) / 2)) + ',0 ' + Math.floor(eval('' + dwl) + eval(eval('' + dw) / 2)) + ',' + Math.floor(eval(yfactor * eval(eval('' + yvalue) - eval('' + yoffset)))) + ' ' + Math.floor(eval('' + dwl) + eval(eval('' + dw) / 2)) + ',' + Math.floor(eval(yfactor * eval(eval('' + yvalue) - eval('' + yoffset)))) + '" style="fill:lime;stroke:purple;stroke-width:1" /></svg></div>';

    az+='' + Math.floor(eval('' + document.getElementById('hrlg' + lasthr).style.left.replace('px','')) - minleft) + ',';

    az+='' + Math.floor(eval('' + document.getElementById('hrlg' + lasthr).style.top.replace('px','')) - mintop) + ' ';

    az+='' + Math.floor(eval('' + document.getElementById('hrlg' + hrlgcnt).style.left.replace('px','')) - minleft) + ',';

    az+='' + Math.floor(eval('' + document.getElementById('hrlg' + hrlgcnt).style.top.replace('px','')) - mintop) + ' ';

    az+='' + Math.floor(eval('' + document.getElementById('hrlg' + hrlgcnt).style.left.replace('px','')) - minleft) + ',';

    az+='' + Math.floor(eval(eval(eval('' + zerozeroy)) - mintop)) + ' ';

    az+='' + Math.floor(eval('' + document.getElementById('hrlg' + lasthr).style.left.replace('px','')) - minleft) + ',';

    az+='' + Math.floor(eval(eval(eval('' + zerozeroy)) - mintop)) + ' ';

    az+='" style="fill:' + acol + ';stroke:purple;stroke-width:1" /></svg></div>';

    document.getElementById('daxes').innerHTML+=az;

    }


    โ€ฆ half the day gone โ€ฆ while โ€ฆ
  • Bar Graph challenge was the posterior-about-visage way X is Y and Y is X about it, and deciding on a messaging strategy, that being in broad brush terms โ€ฆ
    1. sending out a URL into an email link URL the order of first and second items in any semicolon separated data is reversed (so as to fit in with the other 3 graph types) โ€ฆ meaning that โ€ฆ
    2. as you get into the web application an email link to a Bar Graph and before it is โ€œfedโ€ to our one hard working textbox (in order โ€ฆ doh!) you re-reverse the message first and second items of a semicolon separated record (to fit back in with Bar Graph thinking)

    โ€ฆ another half day gone โ€ฆ getting the X is Y and Y is X display aspects correct

Well, at least yesterday paved the way for โ€œwhereโ€ we plugged in these changes โ€ฆ phew!

To see the four graphs in action please donโ€™t be shy trying thechanged square_hr_tracingโšซhtmโ€˜s Barโœ‚Graph live run or Areaโœ‚Graph live run or Lineโœ‚Graph live run or Columnโœ‚Graph live run link.



Previous relevant HTML Square Horizontal Rule Line Graph Tutorial is shown below.

HTML Square Horizontal Rule Line Graph Tutorial

HTML Square Horizontal Rule Line Graph Tutorial

Software integration work, whether it be internally in amongst your own code, or externally, integrating with APIs and our software sharing arrangements, needs to be approached systematically, and not in a rush. As such, we find the general idea of mathematical induction, as we first came across in high school mathematics โ€ฆ

The method of induction requires two cases to be proved. The first case, called the base case (or, sometimes, the basis), proves that the property holds for the number 0. The second case, called the induction step, proves that, if the property holds for one natural number n, then it holds for the next natural number n + 1. These two steps establish the property P(n) for every natural number n = 0, 1, 2, 3, โ€ฆ The base step need not begin with zero. Often it begins with the number one, and it can begin with any natural number, establishing the truth of the property for all natural numbers greater than or equal to the starting number.

โ€ฆ both a useful way to approach many of these software integration jobs, as well as almost forcing calm, and the absence of dangerous rushing, with the coding tasks at hand. Yes, proving anything for one case, yesterdayโ€™s HTML Square Horizontal Rule Column Graph Tutorial one being Column Graphs, is all well and good, but it would be dangerous to step straight to integrate all four that we intend to do (those being Column, Line, Bar, Area Graphs), in one step. As mathematical induction would tell us, prove it for n + 1, that being Line Graphs in todayโ€™s case.

When you integrate for n + 1 you almost invariably sort out โ€ฆ

  • HTML element type requirements for your current integration drive
  • sharing arrangement nuances, including those coming back from email links
  • data and display code places for where to differentiate, and to come back to when we start integrating the other two Graph types later
  • navigation requirements within the domain of the web application, for us with this work, mainly centering around manipulations of Javascript location.hash containing the parts of a URL including and after the hash (ie. #) character

โ€ฆ matters that should not be rushed when several options of functionality are flying about being integrated (no doubt on the โ€œflying about being integratedโ€ cycle).

And so, even though what differentiates a Column Graph from a Line Graph is more a โ€œdisplay thaingโ€ (as you might have surmised with the Google Charts integration work weโ€™ve done here in the past), as the same data set can be represented by either Graph, from what weโ€™ve seen, you end up spending most of the time coding for such a change readying yourself for the arrival of three new graphs, rather than the Line Graph per se. Doesnโ€™t mean youโ€™re wasting time, quite the contrary. Testing on two functionality parts that are similar but different can have you testing all this integration work in a systematic, ticking the boxes, way to pave the way for faster work later with integration of Graph types that do need more โ€œdisplay differenceโ€ thinking. Where having ground away at n + 1 Mathematical Induction helps again here, will be that thought processes can concentrate on those more tricky โ€œdisplay differencesโ€ without being clouded out by the โ€œadministrationโ€ issues of that list above we have gone towards roboticizing for the next stage of integration.

Again, weโ€™d like to thank this useful link for the inspiration with todayโ€™s tutorial picture of this worked example also shown below โ€ฆ

Please donโ€™t be shy trying thechanged square_hr_tracingโšซhtmโ€˜s Lineโœ‚Graph live run link.


Previous relevant HTML Square Horizontal Rule Column Graph Tutorial is shown below.

HTML Square Horizontal Rule Column Graph Tutorial

HTML Square Horizontal Rule Column Graph Tutorial

We follow up yesterdayโ€™s HTML Square Horizontal Rule Plot Polynomial Tutorial mathematical theme with a mathematics meets statistics theme, today, writing some functionality to create Column Graphs. Like with the Plot functionalities we like having the vertices there, but that little bit different is that we make those vertex helpers disappear once the Column Graph has been created, and perhaps, shared, via similar Email sharing logic to that introduced yesterday.

Identical to Like yesterday we have 3 parts to user input involving that one textbox again โ€ฆ

  1. four comma separated fields involves a plot range entry (Column Graph) Title, Number of data sets, Minimum Y (numerical), Maximum Y โ€ฆ whereas โ€ฆ
  2. three comma two semicolon separated fields involves a polynomial equation entry X-Axis label; Y-Axis label (for numerical) โ€ฆ whereas โ€ฆ
  3. two comma semicolon separated fields involves a linear equation X value; Y value ask for each of the (Number of) data sets

As you would know if you think about a Column Graph it is debatable on the X-Axis (non-numerical) labelling if you โ€ฆ

  • try to fit the X-Axis labels in below the column (that we randomly colour with opacity 0.5) โ€ฆ or โ€ฆ
  • create a legend

โ€ฆ and weโ€™ve decided on the former, but may reserve final judgement on this over time, perhaps writing code later to determine which approach would look better, and use that approach when apt. Weโ€™ll see.

Weโ€™d like to thank this useful link for the inspiration with todayโ€™s tutorial picture of this worked example (where a trap for young players sees us setting the Maximum Y value from 40 to 45 (as a multiple of 9 (Y-axis segments left for graph (after surrounds)) to avoid โ€œdecimal fractions of peopleโ€) also shown below โ€ฆ

Early days, but interesting days, and it goes without saying, we would listen to your feedback on trying thechanged square_hr_tracingโšซhtmโ€˜s Columnโœ‚Graph live run link.


Previous relevant HTML Square Horizontal Rule Plot Polynomial Tutorial is shown below.

HTML Square Horizontal Rule Plot Polynomial Tutorial

HTML Square Horizontal Rule Plot Polynomial Tutorial

Yesterdayโ€™s HTML Square Horizontal Rule Plot Axes Tutorial start with โ€ฆ

  • linear equation plotting โ€ฆ has been extended today (by one dimension) to โ€ฆ
  • polynomial equation

โ€ฆ and along the way we โ€ฆ

  • highlight Y axis intercepts and X axis intercepts
  • limit the plotting range to the range the user selected first off
  • label the axes โ€ฆ and sharing wise we allow โ€ฆ
  • email link collaboration

What else is new to us, and perhaps to you, today? Itโ€™s the โ€œEat at Joesโ€ type of idea to effectively animate an HTML input type=text textbox. Why, pray tell. Two reasons occur to us โ€ฆ

  • as we do more and more web application coding we find the labelling of HTML input type=textbox textboxes โ€œexternallyโ€ (ie. creating another different HTML element of some sort sitting adjacent to textbox) annoying in the sense of easily making it look good โ€ฆ but more and more โ€ฆ
  • as we do more and more web application coding we find the use of the โ€œplaceholderโ€ attribute of HTML input type=textbox textboxes useful and easy โ€ฆ and today we do some inhouse animation, because we have two bits of functionality available and decipherable from the one textbox because an entry with โ€ฆ
    1. four comma separated fields involves a plot range entry โ€ฆ whereas โ€ฆ
    2. three comma separated fields involves a polynomial equation entry โ€ฆ whereas โ€ฆ
    3. two comma separated fields involves a linear equation โ€ฆ so, that being the case โ€ฆ

    โ€ฆ we get that first one above as information off the user and immediately animate via a setTimeout invocation (ie. setTimeout(toggleplaceholder, 5000); ) via the textbox โ€œplaceholderโ€ attribute via โ€ฆ


    function toggleplaceholder() {

    if (oiois != null) {

    if (oiois.value == '') {

    if (oiois.placeholder != 'Line formula y=Gx + O ... G is gradient, O is Y-offset ... please comma separate G,O') {

    oiois.placeholder='Line formula y=Gx + O ... G is gradient, O is Y-offset ... please comma separate G,O';

    } else {

    oiois.placeholder='Polynomial formula y=A*x*x + B*x + C ... please comma separate A,B,C';

    }

    setTimeout(toggleplaceholder, 5000);

    } else {

    oiois=null;

    }

    }

    }

The email link collaboration work has meant that we can show you below some equations โ€œbakedโ€ ahead of time โ€ฆ



Example of 2 Linear Equations:

y = 2x + 12

y = -2x - 8

โ€ฆ and thanks to this very useful link for methodologies to discover X axis intercepts for polynomial equations โ€ฆ



Example of 2 Polynomial Equations and 1 Linear Equation:

y = 2x2 - 11x + 5

y = -4x2 + 12x - 9

y = 2x + 24

Feel free to peruse the HTML and Javascript and CSS code of thechanged square_hr_tracingโšซhtmโ€˜s liveโœ‚run link.


Previous relevant HTML Square Horizontal Rule Plot Axes Tutorial is shown below.

HTML Square Horizontal Rule Plot Axes Tutorial

HTML Square Horizontal Rule Plot Axes Tutorial

A lot of us have a goodly amount of โ€œvisual learnerโ€ in us, and the study of geometry in mathematics is full of opportunities for โ€œvisual cuesโ€ to topics that look a bit โ€œdryโ€ on paper. Take linear equations for instance โ€ฆ and I hear that the circus is a popular winner here. If we were to offer you โ€ฆ



y = [Gradient]x + [Y-Offset] = 2x + 189

โ€ฆ as a linear equation to contemplate, can you imagine it in your mind as easily as to use the โ€œvisual cueโ€ of todayโ€™s tutorial picture? It asks this of the user information wise โ€ฆ

  • user enters minimumX,minimumY,maximumX,maximumY for a range of interest for the plotting of the axes โ€ฆ perhaps a bit tricky โ€ฆ in todayโ€™s tutorial picture we entered -200,-200,200,200 โ€ฆ then โ€ฆ
  • user enters gradient,y-offset โ€ฆ in todayโ€™s tutorial picture we entered 2,189 (for that linear equation above)

Onto the recent HTML Square Horizontal Rule Tracing Image Reveal Game Tutorial we added the one new dropdown menu option โ€œPlot Axesโ€ to get to this functionality, so why not peruse the HTML and Javascript and CSS code of square_hr_tracingโšซhtmโ€˜s liveโœ‚run link.


Previous relevant HTML Square Horizontal Rule Tracing Image Reveal Game Tutorial is shown below.

HTML Square Horizontal Rule Tracing Image Reveal Game Tutorial

HTML Square Horizontal Rule Tracing Image Reveal Game Tutorial

Rest assured all of yesterdayโ€™s HTML Square Horizontal Rule Tracing iOS Mobile App Tutorial thoughts will continue on with any extended functionality with our โ€œHTML Square Horizontal Rule Tracingโ€ inspired web applicationโ€™s dropdown list of games and puzzles. With that in mind, todayโ€™s extended functionality is an Image Revealing Game. Are you a regular, and know about our design belief in categorizing (a lot of) web design ideas into one of โ€ฆ

โ€ฆ concepts? Well, today, our Image Revealing Game uses a bit of both to create its workings.

Whatโ€™s the gist of the game? Itโ€™s a game for two players and the players take it in turns, with โ€ฆ

  • One player picking an image via either โ€ฆ
    1. image URL โ€ฆ or
    2. browsed for image file on disk

    โ€ฆ and this image is the background image for the table element consisting of that 5ร—5 grid of the earliest days (still) of this projectโ€™s concepts โ€ฆ and โ€ฆ

  • the other player is clicking on overlayed buttons placed on top of this image to reveal 1/100th (as each table cell has four such buttons) of the image, and at any time, via the โ€œguessโ€ HTML โ€œaโ€ link means of guessing what the image contains, a correct guess, as judged by the first (image choosing) player scores that guessing player (100 โ€“ number of clicked buttons) points

To test this new game out, you could try todayโ€™schanged square_hr_tracingโšซhtmโ€˜s Imageโœ‚Revealing Game live run.


Previous relevant HTML Square Horizontal Rule Tracing iOS Mobile App Tutorial is shown below.

HTML Square Horizontal Rule Tracing iOS Mobile App Tutorial

HTML Square Horizontal Rule Tracing iOS Mobile App Tutorial

The design of our recent โ€œHTML Square Horizontal Rule Tracingโ€ suite of functionalities, with their navigational arrangements using โ€ฆ

  • web browser (address bar) URL involving ? and & arguments โ€ฆ and โ€ฆ
  • hashtags (using #)

โ€ฆ all possible, because the amounts of passed data is small (and so we donโ€™t need to post to a serverside piece of code written in a language like PHP or Perl or Python (the three โ€œPโ€โ€˜s)), lends itself to (iOS) โ€ฆ

  • on the iPad or iPhone in a web browser such as Safari โ€ฆ
  • arrange navigation to a web application โ€œsnapshotโ€ of the (game or puzzle or whatever) functionality of interest at its instigation โ€ฆ
  • touch the Share link up near the top right โ€ฆ
  • touch the โ€œAdd to Home Screenโ€ button โ€ฆ
  • fill in a suitable name (you can โ€œlong touchโ€ Select All to effectively highlight whatโ€™s there already, ready) for the โ€ฆ
  • icon you create in the Home Screen by touching the Add link at the top right

Then, from then on, those icons you create in the Home Screen could be your instant access method of โ€œCutting to the Chaseโ€.

To show this, we used QuickTime Player on a MacBook Pro connected to an iPad by the (ubiquitous) Apple white lead via its New Movie Recording dropdown to โ€œRobertโ€™s iPadโ€ option, to create a video called โ€œiOS Mobile App and Web Application Nexus via Shareโ€™s Add to Homeโ€ uploaded to YouTube, and with the โ€œblurbโ€ โ€ฆ

We demonstrate some web applications that use the one HTML and Javascript and CSS codeset partitioned off to many functionalities (such as games and puzzles) visited by a Safari web browser user the once, and at instigation, are hived off to iPad Home screen icons as iOS Mobile Apps to a large degree, via the Share linkโ€™s Add to Home.

โ€ฆ that you can play for yourself below โ€ฆ

โ€ฆ resulting in the (best part of, but nobodyโ€™s saying โ€œtotallyโ€) iOS Mobile App looking icons pointing at โ€ฆ

You can also see this play out at WordPress 4.1.1โ€™s HTML Square Horizontal Rule Tracing iOS Mobile App Tutorial.


Previous relevant HTML Square Horizontal Rule Tracing SOS Game Tutorial is shown below.

HTML Square Horizontal Rule Tracing SOS Game Tutorial

HTML Square Horizontal Rule Tracing SOS Game Tutorial

The new development today on top of yesterdayโ€™s HTML Square Horizontal Rule Tracing Maths Grid Paper Tutorial is the coding for a game we used to play at school called the SOS Game.

If the grid is filled up and the number of SOSs for each player is the same, then the game is a draw. The game can also be played where the player who creates an SOS is the winner and if no SOSs are created the game is a draw.

A technique that came into play with this as far as user interaction is concerned was to involve select (dropdown) elements (surprise, surprise) with โ€œsize=3โ€ณ for the three choices โ€ โ€ (initially) or โ€œSโ€ or โ€œOโ€. Once the user makes a non-blank choice we adjust that select (dropdown) elementโ€™s innerHTML to still be a dropdown but just with your selected value, nullifying any duplicate โ€œonchangeโ€ event logics, on the understanding that the โ€œonchangeโ€ event canโ€™t be fired from a select (dropdown) element with only one option subelement.

This is a game designed for more than one player so we organize two players to play the game in turns.

Here is the initial drawing of the SOS Game grid โ€ฆ



function sosize() {

var itds=0; tds=document.getElementsByTagName('td');

var sqsi=0, ioffset=0;

document.getElementById('myh4').innerHTML+=' ... turn of Player1' + score1 + ' versus Player2' + score2;

for (var itrs=0; itrs<5; itrs++) {

for (var itds=eval(5 * itrs); itds<eval(5 + eval(5 * itrs)); itds++) {

thisrect=tds[itds].getBoundingClientRect();

tds[itds].style.verticalAlign='top';

sqsi=eval(2 * itds + ioffset);

tds[itds].innerHTML='<select title="" style=vertical-align:top;width:50%;height:50%;text-align:center; size=3 id=sqsi' + sqsi + ' onchange=sosmove(this);><option value=" "> </option><option value="S">S</option><option value="O">O</option></select>';

tds[itds].innerHTML+='<select title="" style=vertical-align:top;width:50%;height:50%;text-align:center; size=3 id=sqsi' + eval(1 + sqsi) + ' onchange=sosmove(this);><option value=" "> </option><option value="S">S</option><option value="O">O</option></select>';

tds[itds].innerHTML+='<br><select title="" style=vertical-align:bottom;width:50%;height:50%;text-align:center; size=3 id=sqsi' + eval(10 + sqsi) + ' onchange=sosmove(this);><option value=" "> </option><option value="S">S</option><option value="O">O</option></select>';

tds[itds].innerHTML+='<select title="" style=vertical-align:bottom;width:50%;height:50%;text-align:center; size=3 id=sqsi' + eval(11 + sqsi) + ' onchange=sosmove(this);><option value=" "> </option><option value="S">S</option><option value="O">O</option></select>';

}

ioffset+=10;

}

}

Here is the analysis of a playerโ€™s SOS Game select (dropdown) element interaction โ€ฆ



function checkifsos(t1, t2, t3) { //, camv) {

//var score1=' (0)', score2=' (0)';

//var amv=camv.split('.')[0];

var retv=false;

if (t1 >= 0 && t1 < 100 && t2 >= 0 && t2 < 100 && t3 >= 0 && t3 < 100) {

if (document.getElementById('sqsi' + t1).value == 'S' && document.getElementById('sqsi' + t2).value == 'O' && document.getElementById('sqsi' + t3).value == 'S') {

if (thisplayer == 1) {

document.getElementById('sqsi' + t1).style.border='1px inset red';

document.getElementById('sqsi' + t2).style.border='1px inset red';

document.getElementById('sqsi' + t3).style.border='1px inset red';




if (document.getElementById('sqsi' + t1).title.indexOf('2') != -1) {

document.getElementById('sqsi' + t1).style.backgroundColor='';

document.getElementById('sqsi' + t1).className='bicol'; //style.backgroundColor="linear-gradient(top, pink, yellow)";

} else {

document.getElementById('sqsi' + t1).style.backgroundColor='pink';

}

if (document.getElementById('sqsi' + t2).title.indexOf('2') != -1) {

document.getElementById('sqsi' + t2).style.backgroundColor='';

document.getElementById('sqsi' + t2).className='bicol'; //style.backgroundColor="linear-gradient(top, pink, yellow)";

} else {

document.getElementById('sqsi' + t2).style.backgroundColor='pink';

}

if (document.getElementById('sqsi' + t3).title.indexOf('2') != -1) {

document.getElementById('sqsi' + t3).style.backgroundColor='';

document.getElementById('sqsi' + t3).className='bicol'; //style.backgroundColor="linear-gradient(top, pink, yellow)";

} else {

document.getElementById('sqsi' + t3).style.backgroundColor='pink';

}

document.getElementById('sqsi' + t1).title+='1';

document.getElementById('sqsi' + t2).title+='1';

document.getElementById('sqsi' + t3).title+='1';

} else {

document.getElementById('sqsi' + t1).style.border='1px inset olive';

document.getElementById('sqsi' + t2).style.border='1px inset olive';

document.getElementById('sqsi' + t3).style.border='1px inset olive';

if (document.getElementById('sqsi' + t1).title.indexOf('1') != -1) {

document.getElementById('sqsi' + t1).style.backgroundColor='';

document.getElementById('sqsi' + t1).className='bicol'; //style.backgroundColor="linear-gradient(top, pink, yellow)";

} else {

document.getElementById('sqsi' + t1).style.backgroundColor='yellow';

}

if (document.getElementById('sqsi' + t2).title.indexOf('1') != -1) {

document.getElementById('sqsi' + t2).style.backgroundColor='';

document.getElementById('sqsi' + t2).className='bicol'; //style.backgroundColor="linear-gradient(top, pink, yellow)";

} else {

document.getElementById('sqsi' + t2).style.backgroundColor='yellow';

}

if (document.getElementById('sqsi' + t3).title.indexOf('1') != -1) {

document.getElementById('sqsi' + t3).style.backgroundColor='';

document.getElementById('sqsi' + t3).className='bicol'; //style.backgroundColor="linear-gradient(top, pink, yellow)";

} else {

document.getElementById('sqsi' + t3).style.backgroundColor='yellow';

}

document.getElementById('sqsi' + t1).title+='2';

document.getElementById('sqsi' + t2).title+='2';

document.getElementById('sqsi' + t3).title+='2';

}

retv=true;

if (thisplayer == 1) {

score1=' (' + eval(eval(score1.split('(')[1].split(')')[0]) + 1) + ')';

} else {

score2=' (' + eval(eval(score2.split('(')[1].split(')')[0]) + 1) + ')';

}

}

}

return retv;

}



function sosmove(osel) {

var cosel=osel.value, anothergo=false, prevplayer=thisplayer;

var thistile=eval(osel.id.replace('sqsi',''));

var surrounds='';

var prevscore1=score1;

var prevscore2=score2;

if (cosel.trim() != '') {

osel.size=1;

osel.style.border='1px inset blue';

osel.innerHTML='<option value=' + cosel + '>' + cosel + '</option>';

document.getElementById('myh4').innerHTML=document.getElementById('myh4').innerHTML.replace(' Player1' + score1 + ' versus Player2' + score2,' Player02' + score2 + ' versus Player01' + score1).replace(' Player2' + score2 + ' versus Player1' + score1,' Player01' + score1 + ' versus Player02' + score2).replace(' Player0',' Player').replace(' Player0',' Player');

// hmiddle -1 me +1

// hend -2 -1 me

// hstart me +1 +2

// vmiddle -10 me +10

// vend -20 -10 me

// vstart me +10 +20

// ddmiddle -11 me +11

// ddend -22 -11 me

// ddstart me +11 +22

// udmiddle -9 me +9

// udend -18 -9 me

// udstart me +9 +18

if (eval(thistile % 10) > 0 && eval(thistile % 10) < 9) {

anothergo|=checkifsos(eval(-1 + thistile), thistile, eval(1 + thistile));

}

if (eval(thistile % 10) > 1) {

anothergo|=checkifsos(eval(-2 + thistile), eval(-1 + thistile), thistile);

}

if (eval(thistile % 10) < 8 ) {

anothergo|=checkifsos(thistile, eval(1 + thistile), eval(2 + thistile));

}




if (eval(thistile / 10) > 0 && eval(thistile / 10) < 9) {

anothergo|=checkifsos(eval(-10 + thistile), thistile, eval(10 + thistile));

}

if (eval(thistile / 10) > 1) {

anothergo|=checkifsos(eval(-20 + thistile), eval(-10 + thistile), thistile);

}

if (eval(thistile / 10) < 8 ) {

anothergo|=checkifsos(thistile, eval(10 + thistile), eval(20 + thistile));

}




if (eval(thistile % 10) > 0 && eval(thistile % 10) < 9 && eval(thistile / 10) > 0 && eval(thistile / 10) < 9) {

anothergo|=checkifsos(eval(-11 + thistile), thistile, eval(11 + thistile));

}

if (eval(thistile % 10) > 1 && eval(thistile / 10) > 2) {

anothergo|=checkifsos(eval(-22 + thistile), eval(-11 + thistile), thistile);

}

if (eval(thistile % 10) < 8 && eval(thistile / 10) < 8 ) {

anothergo|=checkifsos(thistile, eval(11 + thistile), eval(22 + thistile));

}




if (eval(thistile % 10) > 0 && eval(thistile % 10) < 9 && eval(thistile / 10) > 0 && eval(thistile / 10) < 9) {

anothergo|=checkifsos(eval(-9 + thistile), thistile, eval(9 + thistile));

}

if (eval(thistile % 10) >= 0 && eval(thistile / 10) < 8 ) {

anothergo|=checkifsos(eval(-18 + thistile), eval(-9 + thistile), thistile);

}

if (eval(thistile % 10) > 2 && eval(thistile / 10) < 8 ) {

anothergo|=checkifsos(thistile, eval(9 + thistile), eval(18 + thistile));

}




if (!anothergo) { thisplayer=eval(eval('' + 3) - eval('' + prevplayer)); } else { document.getElementById('myh4').innerHTML=document.getElementById('myh4').innerHTML.replace(' Player1' + prevscore1 + ' versus Player2' + prevscore2,' Player02' + score2 + ' versus Player01' + score1).replace(' Player2' + prevscore2 + ' versus Player1' + prevscore1,' Player01' + score1 + ' versus Player02' + score2).replace(' Player0',' Player').replace(' Player0',' Player'); }

}

}

โ€ฆ being simplified, considerably, via the advice of this great link, thanks, regarding CSS linear-gradient usage โ€ฆ



<style>

.bicol {

background: rgb(255,255,255); /* Old browsers */

background: -moz-linear-gradient(top, pink 0%, pink 50%, yellow 51%, yellow 100%); /* FF3.6-15 */

background: -webkit-linear-gradient(top, pink 0%,pink 50%,yellow 51%,yellow 100%); /* Chrome10-25,Safari5.1-6 */

background: linear-gradient(to bottom, pink 0%,pink 50%,yellow 51%,yellow 100%); /* W3C, IE10+, FF16+, Chrome26+, Opera12+, Safari7+ */

filter: progid:DXImageTransform.Microsoft.gradient( startColorstr=pink, endColorstr=yellow,GradientType=0 ); /* IE6-9 */

}

</style>

You could try todayโ€™schanged square_hr_tracingโšซhtmโ€˜s SOSโœ‚Game live run.


Previous relevant HTML Square Horizontal Rule Tracing Maths Grid Paper Tutorial is shown below.

HTML Square Horizontal Rule Tracing Maths Grid Paper Tutorial

HTML Square Horizontal Rule Tracing Maths Grid Paper Tutorial

Yesterdayโ€™s HTML Square Horizontal Rule Tracing Hangman Game Tutorial set us up for todayโ€™s Maths Grid Paper web application part that involves โ€ฆ

Thatโ€™s a discussion more with the focus on looks. Doing this, we found it to be that one stage better than (just) โ€œlooksโ€ though, as we discovered even though the child iframe Hangman Game was โ€œslightly behind on z-indexโ€ we could still differentiate the โ€ฆ

โ€ฆ could also allow the user to do some Math Grid Paper scribbling and then click/touch four vertices to define a window of extraction from which a sharable image is created, ready for an email attachment or some other purpose. We werenโ€™t sure that both data capture methods above could live in the one interfacing arrangement, so we were happy to see this working, especially as this opens the door to sharing and collaboration possibilities with this new Maths Grid Paper functionality.

Again, try todayโ€™schanged square_hr_tracingโšซhtmโ€˜s Mathsโœ‚Grid Paper live run tool.


Previous relevant HTML Square Horizontal Rule Tracing Hangman Game Tutorial is shown below.

HTML Square Horizontal Rule Tracing Hangman Game Tutorial

HTML Square Horizontal Rule Tracing Hangman Game Tutorial

Our new Hangman Game extension to functionality (on top of HTML Square Horizontal Rule Tracing Propogation Tutorial) makes use of both โ€ฆ

  • HTML Square Horizontal Rule Tracing โ€ฆ and โ€ฆ
  • Emoji overlay โ€ฆ two of our usual suspect โ€ฆ
    1. position:absolute property
    2. z-index

    โ€ฆ ideas

โ€ฆ the latter of which aids us with the head ๐Ÿ™‚ and noose ๐ŸŽ€ drawing requirements โ€ฆ but still no purpose built imagery is required. We hope you can see how these emojis can help we graphically challenged ones โ€ฆ both โ€ฆ

  • get on with projects despite that lack of image based work โ€ฆ and โ€ฆ
  • work with a more and more accepted form of communication that is more Internationally understood

Of interest as far as the Javascript code for this goes is our approach of setting up some static array records consisting of multiple Javascript lines of code (separated by ; (semicolon)) that are executed via Javascript eval functionality as per โ€ฆ



var ihangman=0;

var hangmanc=[

" document.getElementById('dhangman').innerHTML+='<p id=phead class=face style=z-index:90;position:absolute;top:248px;left:142px;font-size:56px;>&#128578;</p>'; ",

" document.getElementById('hr77').click(); document.getElementById('hr137').click(); ",

" document.getElementById('hr119').click(); document.getElementById('hr77').click(); ",

" document.getElementById('hr131').click(); document.getElementById('hr77').click(); ",

" document.getElementById('hr137').click(); document.getElementById('hr234').click(); ",

" document.getElementById('hr137').click(); document.getElementById('hr246').click(); ",

" document.getElementById('hr235').click(); document.getElementById('hr256').click(); ",

" document.getElementById('hr260').click(); document.getElementById('hr256').click(); ",

" document.getElementById('hr230').click(); document.getElementById('hr235').click(); ",

" document.getElementById('hr235').click(); document.getElementById('hr20').click(); ",

" document.getElementById('hr290').style.display='none'; document.getElementById('hr260').click(); document.getElementById('hr235').click(); document.getElementById('phead').innerHTML='&#129314;'; document.getElementById('dhangman').innerHTML+='<p id=pnoose class=face style=background-color:blank;z-index:95;position:absolute;top:195px;left:168px;font-size:6px;>&#127872;&lt;br&gt;&#127872;&lt;br&gt;&#127872;&lt;br&gt;&#127872;&lt;br&gt;&#127872;&lt;br&gt;&#127872;&lt;br&gt;&#127872;&lt;br&gt;&#127872;&lt;br&gt;&#127872;&lt;br&gt;&#127872;&lt;br&gt;&#127872;&lt;br&gt;&#127872;&lt;br&gt;&#127872;&lt;br&gt;&#127872;&lt;br&gt;&#127872;&lt;br&gt;&#127872;&lt;br&gt;&#127872;</p>'; "

];




function hguess(gthis,othis) {

var ifnd=0, fnd=false, newval='';

for (ifnd=0; ifnd<vocabulary[0].length; ifnd++) {

if (vocabulary[0].substring(ifnd,eval(1 + ifnd)).toLowerCase() == gthis.toLowerCase()) {

fnd=true;

newval+=gthis;

} else {

newval+=document.getElementById('sletters').innerHTML.substring(ifnd,eval(1 + ifnd));

}

}

document.getElementById('sletters').innerHTML=newval;

document.getElementById('sletters').title=newval;

othis.style.visibility='hidden';




if (!fnd) {

eval(hangmanc[ihangman]);

ihangman++;

}

if (ihangman >= hangmanc.length) {

goes++;

newval='';

for (ifnd=0; ifnd<vocabulary[0].length; ifnd++) {

if (document.getElementById('sletters').innerHTML.substring(ifnd,eval(1 + ifnd)).toLowerCase() == "_") {

newval+='<font color=red>' + vocabulary[0].substring(ifnd,eval(1 + ifnd)) + '</font>';

} else {

newval+=document.getElementById('sletters').innerHTML.substring(ifnd,eval(1 + ifnd));

}

}

document.getElementById('sletters').innerHTML=newval;

document.getElementById('sletters').title=vocabulary[0];

setTimeout(handon, 5000);

} else if (document.getElementById('sletters').innerHTML.indexOf('_') != -1) {

} else {

score+=document.getElementById('sletters').innerHTML.length;

goes++;

setTimeout(handon, 5000);

}

}

And where do we get our English words to challenge you? We get them from the serverโ€™s English Ispell dictionary. Other servers would have other language Ispell dictionaries. Either way, you will find these dictionaries invaluable for word games.

Try todayโ€™schanged square_hr_tracingโšซhtmโ€˜s Hangmanโœ‚live run game to test your English vocabulary skills. You may find the Speech to Text Speech to Text Hangman Game Tutorialโ€˜s Hangman Game of interest too.


Previous relevant HTML Square Horizontal Rule Tracing Propogation Tutorial is shown below.

HTML Square Horizontal Rule Tracing Propogation Tutorial

HTML Square Horizontal Rule Tracing Propogation Tutorial

Yesterdayโ€™s HTML Square Horizontal Rule Tracing Game Tutorial continued on with the โ€ฆ

  • HTML hr and div elements made up to be โ€ฆ
    1. lines
    2. vertices

    โ€ฆ only needing the underlying โ€ฆ

  • table cell elements as graphical position markers only (made to have intelligence derived via use of Javascript getBoundingClientRect()), but pretty โ€œdumbโ€ markers at that

โ€ฆ but HTML and Javascript are capable of very sophisticated event propogation, and there is no reason you have to have those underlying table cell elements remaining โ€œdumbโ€ that way. You can, amongst many things, in Javascript, dynamically add โ€ฆ

  • ID on the fly โ€ฆ


    var tds=document.getElementsByTagName('td');

    for (var itds=0; itds<tds.length; itds++) {

    tds[itds].id='td' + eval(1 + itds);

    }

  • onclick event logic on the fly โ€ฆ


    var lastsquare=-1;

    var tds=document.getElementsByTagName('td');

    for (var itds=0; itds<tds.length; itds++) {

    tds[itds].id='td' + eval(1 + itds);

    tds[itds].onclick=function(event) { lastsquare=eval(('' + this.id).replace('td','')); goes++; if (lastsquare == sqchoice) { score++; } if (('' + location.hash).indexOf('square') != -1) { picksq(); } else if (('' + location.hash).indexOf('grid') != -1) { gridinfo(' in square number ' + lastsquare); } };

    }

Weโ€™ve started with some other game ideas using event propogation, with the last one, in todayโ€™schanged square_hr_tracingโšซhtmโ€˜s liveโœ‚run game, that now has game options โ€ฆ

  • Chinese Brain Twisters
  • Vertex Pointing Game โ€ฆ just shows vertices and on a set of 4 clicks or touches, will plot a Bezier Curve (thanks to this useful link, thanks)
  • Square Pointing Game โ€ฆ just shows the table and its numbered cells โ€ฆ with a number quiz
  • Grid Pointing Game โ€ฆ shows border lines, and vertices and table cells with their thinner borders โ€ฆ where information is presented, relying on event propogation orders to show information from two hierarchies of event propogation

To differentiate between these forms of game (selected via a new HTML select (dropdown) element) we did not choose to use our usual address bar URL argument (via ? and &) navigation method, but rather use hashtag (via #) address bar URL methods, and in the Javascript (DOM) examine location.hash to know which โ€œgameโ€ is applicable to a web application session.

Food for thought, we hope!


Previous relevant HTML Square Horizontal Rule Tracing Game Tutorial is shown below.

HTML Square Horizontal Rule Tracing Game Tutorial

HTML Square Horizontal Rule Tracing Game Tutorial

The first application of the (online web application) line drawing we started with yesterdayโ€™s HTML Square Horizontal Rule Tracing Primer Tutorial is todayโ€™s online (web application) game version of some of the excellent puzzles in the book โ€œChinese Brain Twistersโ€ by Baifang (ISBN: 0-471-59505-5). It was the โ€œstickโ€ rearrangement puzzles in this excellent book that were the inspiration to getting together a display and user interaction set of HTML and CSS and Javascript code logics to turn a hardcopy concept into an online game.

Of course, when you start with a โ€œproof of conceptโ€ it can need quite a bit of โ€œtweakingโ€ (in this case, fitting it into those concept paradigms we talk about a couple of paragraphs on) when the reality of making it practical for the user comes into play with a project like this. We, at first thought, that โ€ฆ

  • we would display a question (about matches, rather than sticks, because we remember many a holiday game that involved the use of matches (โ€ฆ no, not that way) regarding patterns and counting, and because a match gives us an excuse to add some red colour as per CSS โ€ฆ


    <style>

    hr {

    height: 4px;

    border: 2px solid black;

    background: linear-gradient(to right, yellow 80%, rgba(255,0,0,1) 20%);

    }

    </style>


    ) and then with a button controlled by the user, โ€œslap onโ€ the screen the answer โ€ฆ then we had a mild epiphany (you had to be there) โ€ฆ
  • we would display a question and then animate the answer โ€ฆ which can be achieved by โ€œslapping onโ€ that same question, and click/touch the actions of a successful user after 2 second delays between the clicks/touches (via a setTimeout timer controlled set of Javascript calls)

We hope it gives the game a more interactive feel, and a better way to learn perhaps, because geometry can be an โ€œahhhh haaaโ€ type of thing to learn, when you see graphically the steps involved.

As with many a game weโ€™ve written we again fall back to two tried and true (and very simple) concepts โ€ฆ

  • gather question data into simple (single dimension) arrays, additional complexity controlled within members by web application specific delimitation rules (or more singular dimensioned arrays (such as today, where there are two)) โ€ฆ
  • get the user a randomized question for the game via Javascript code like (where โ€œinquestionsโ€ variable below is just such an array) โ€ฆ


    var choice=Math.floor(Math.random() * inquestions.length);


    โ€ฆ leading to โ€œโ€inquestions[choice]โ€ containing the data required to piece together the question โ€ฆ along with the โ€œinwordings[choice]โ€ of the other such array โ€œinwordingsโ€ that contains โ€œChinese Brain Twistersโ€ instructional text

Another โ€œgame chestnutโ€ concept for us is to have some sort of scoring mechanism, which we may attend to in upcoming posts. For now, weโ€™ll let you โ€œcheat in the comfort of your own conscienceโ€ when bragging about your โ€œChinese Brain Twistersโ€ prowess!

Feel free to try out thechanged square_hr_tracingโšซhtmโ€˜s liveโœ‚run game, and challenge yourself!

You can also see this play out at WordPress 4.1.1โ€™s HTML Square Horizontal Rule Tracing Primer Tutorial.


Previous relevant HTML Square Horizontal Rule Tracing Primer Tutorial is shown below.

HTML Square Horizontal Rule Tracing Primer Tutorial

HTML Square Horizontal Rule Tracing Primer Tutorial

One sad thing about todayโ€™s blog posting title is it gives the game away. Weโ€™re tackling a proof of concept web application for a future venture. We want to be able to draw a grid of lines (or you could see them as matches) and weโ€™ll want to โ€ฆ

  • graphically present them (ie. grid square border lines (or matches)) around the edges of each grid square โ€ฆ and โ€ฆ
  • graphically present vertices at match end points and half way between, and well as in the middle of squares โ€ฆ then let the user โ€ฆ
  • click/touch a match โ€ฆ then โ€ฆ
  • click/touch two vertices to reposition that match to the clicked vertex positioning

Now, it seems to me, off the top of the head, you could proceed along the lines of โ€ฆ

  • HTML5 canvas element graphics โ€ฆ or
  • SVG graphics โ€ฆ but we prefer โ€ฆ you guessed it โ€ฆ
  • HR (Horizontal Rule) HTML elements, transformed as required, to suit our purposes

Interested?! Why not try the HTML/Javascript/CSS square_hr_tracingโšซhtmlโ€˜s liveโœ‚run to see what we mean here.

If this was interesting you may be interested in this too.


If this was interesting you may be interested in this too.


If this was interesting you may be interested in this too.


If this was interesting you may be interested in this too.


If this was interesting you may be interested in this too.


If this was interesting you may be interested in this too.


If this was interesting you may be interested in this too.


If this was interesting you may be interested in this too.


If this was interesting you may be interested in this too.


If this was interesting you may be interested in this too.


If this was interesting you may be interested in this too.


If this was interesting you may be interested in this too.


If this was interesting you may be interested in this too.

This entry was posted in eLearning, Event-Driven Programming, Tutorials and tagged , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , . Bookmark the permalink.

One Response to HTML Square Horizontal Rule Four Graphs Tutorial

Leave a Reply

Your email address will not be published. Required fields are marked *