@happylittledoers


Suitable for ages +5


If you've created a new activity using Happy Little Doers Flashcards, simply tag @happylittledoers in your Instagram Reel and we can feature your creation on our website!

Home Kids Activities Tricky Words Tricky Words Wordsearch – Year 2 – Stage 3

Tricky Words Wordsearch – Year 2 – Stage 3

Practise Tricky Words Year 2, Stage 3, with our reusable wordsearch! Each time you visit, create a new crossword to play with.

@media print { #sLogo {display: block!important;margin-top:15px;} ul#list li { display:inline-block; padding:5px 10px; font-family: 'Poppins',sans-serif; font-size: 24px; } #words, #puzzle {width:100%; float:left: display:inline-block; text-align: center; } #words h4 {font-family: 'Poppins',sans-serif; font-weight:bold; font-size: 28px;#wordContain ul {padding-left:0px;} } }

Find these words!

    class App { constructor(div) { this.div = div; this.canvas = document.getElementById("canvas"); this.ctx = canvas.getContext('2d'); this.dirty = true; this.prev = +new Date(); this.resize(); window.addEventListener('resize', () => this.resize(), false); this.canvas.addEventListener("mousedown", (event) => { this.touchdown(...App.getmousePos(event)); event.preventDefault(); }); this.canvas.addEventListener("mousemove", (event) => { this.touchmove(...App.getmousePos(event)); event.preventDefault(); }); this.canvas.addEventListener("mouseup", (event) => { this.touchup(...App.getmousePos(event)); event.preventDefault(); }); this.canvas.addEventListener("touchstart", (event) => { this.touchdown(...App.getmousePos(event)); event.preventDefault(); }); this.canvas.addEventListener("touchmove", (event) => { this.touchmove(App.getmousePos(event)); event.preventDefault(); }); this.canvas.addEventListener("touchend", (event) => { this.touchup(App.getmousePos(event)); event.preventDefault(); }); } resize() { this.canvas.width = this.div.clientWidth; this.canvas.height = this.div.clientWidth; this.draw(); } loop() { let now = +new Date(); let dt = now - this.prev; this.prev = now; this.update() if (this.dirty) this.draw(); window.requestAnimationFrame(() => this.loop()); } update(dt) {} draw() { this.ctx.clearRect(0, 0, canvas.width, canvas.height); this.ctx.rect(0, 0, 100, 100); this.ctx.fill(); } touchdown(x, y) { console.log("down", x, y); } touchmove(x, y) {} touchup(x, y) {} static getmousePos(event) { if (event.changedTouches) { return [event.changedTouches[0].pageX, event.changedTouches[0].pageY]; } else { var rect = event.target.getBoundingClientRect(); return [event.clientX- rect.left, event.clientY - rect.top]; } } } class Vector { constructor(x, y) { this.x = x; this.y = y; } add(v_x, y) { if (y != undefined) { return new Vector(this.x + v_x, this.y + y); } else { return new Vector(this.x + v_x.x, this.y + v_x.y); } } sub(v_x, y) { if (y != undefined) { return new Vector(this.x - v_x, this.y - y); } else { return new Vector(this.x - v_x.x, this.y - v_x.y); } } mul(s) { return new Vector(this.x * s, this.y * s); } get slength() { return this.x * this.x + this.y * this.y; } get length() { return Math.sqrt(this.x * this.x + this.y * this.y); } get angle() { return Math.atan2(this.y, this.x); } } class Grid { constructor(width, height, data) { this.width = width; this.height = height; this.data = data || new Array(width*height).fill("_"); } get length() { return this.width*this.height; } get(x_pos, y) { if (y != undefined) return this.data[x_pos+y*this.width]; else return this.data[x_pos]; } set(value, x_pos, y) { if (y != undefined) this.data[x_pos+y*this.width] = value; else this.data[x_pos] = value; } clone() { return new Grid(this.width, this.height, this.data.slice()); } finalize() { this.data = this.data.map(v => v == "_" ? String.fromCharCode(Math.floor(Math.random() * 26) + 97) : v); } print() { for (let i = 0; i Array.from({length: N}, (v, k) => k); const shuffle = (array) => { for (let i = array.length - 1; i > 0; i--) { let j = Math.floor(Math.random() * (i + 1)); [array[i], array[j]] = [array[j], array[i]]; } return array; } words = words.slice(); let positions = range(this.grid.length); let stack = [ { grid: this.grid, word: words.shift(), directions: shuffle(directions.slice()), positions: shuffle(positions.slice()) } ]; while (true) { let current = stack[stack.length-1]; if (!current) throw Error("impossible"); let dir = current.directions.pop(); if (!dir) { current.positions.pop(); current.directions = shuffle(directions.slice()); dir = current.directions.pop(); } if (current.positions.length 0) { stack.push({grid: grid, word: words.shift(), directions: shuffle(directions.slice()), positions: shuffle(positions.slice())}); } else { grid.finalize(); this.grid = grid; break; } } } } } placeWord(grid, word, position, direction) { let copy = grid.clone(); position = new Vector(position % grid.width, Math.floor(position / grid.width)); let letters = [...word]; while (0 <= position.x && position.x < grid.width && 0 <= position.y && position.y < grid.height) { if (letters.length 0) return null; else return copy; } wordAt(position, direction, length) { let word = new Array(length); for (let i = 0; i = 0 ? 1 : -1, 0); this.length = direction.x * this.direction.x; } else if (Math.abs(direction.x) == 0) { this.direction = new Vector(0, direction.y >= 0 ? 1 : -1); this.length = direction.y * this.direction.y; } else { this.direction = new Vector(direction.x >= 0 ? 1 : -1, direction.y >= 0 ? 1 : -1); this.length = direction.x * this.direction.x; } this.flength = direction.length; return this; } fill(fill=true) { this._fill = fill; return this; } draw(ctx, wsize, hsize) { let pos = this.position.mul(wsize); let length = wsize * (this.flength+1); let angle = this.direction.angle; //console.log(this.x, this.y, x, y, length, angle, this.dx, this.dy); ctx.save(); ctx.strokeStyle = "#ff6211"; ctx.fillStyle = "#ffffff"; ctx.translate(pos.x+hsize*0.5, pos.y+hsize*0.5); ctx.rotate(angle); this.drawHighlight(ctx, -hsize*0.5, -hsize*0.5, length, hsize, hsize*0.5, this._fill, true); ctx.restore(); } drawHighlight(ctx, x, y, width, height, radius=10, fill=true, stroke=false) { ctx.beginPath(); ctx.moveTo(x + radius, y); ctx.lineTo(x + width - radius, y); ctx.quadraticCurveTo(x + width, y, x + width, y + radius); ctx.lineTo(x + width, y + height - radius); ctx.quadraticCurveTo(x + width, y + height, x + width - radius, y + height); ctx.lineTo(x + radius, y + height); ctx.quadraticCurveTo(x, y + height, x, y + height - radius); ctx.lineTo(x, y + radius); ctx.quadraticCurveTo(x, y, x + radius, y); ctx.closePath(); if (fill) ctx.fill(); if (stroke) ctx.stroke(); } } class PuzzleApp extends App { constructor(div, puzzle) { super(div); this.puzzle = puzzle; this.renderList(document.getElementById("list")); this.selections = new Array(); this.loop(); } renderList(parent) { this.puzzle.words.forEach(word => { let li = document.createElement("li"); let text = document.createTextNode(word); li.appendChild(text); parent.appendChild(li); }); } gridSize() { let wsize = Math.floor(this.canvas.width/this.puzzle.grid.width); let hsize = Math.floor(this.canvas.width/this.puzzle.grid.height); return [wsize, hsize]; } clientToGrid(x, y) { let [wsize, hsize] = this.gridSize(); x = Math.floor(x / wsize); y = Math.floor(y / hsize); return [x, y]; } draw() { if (!this.puzzle) return; this.ctx.clearRect(0, 0, canvas.width, canvas.height); let [wsize, hsize] = this.gridSize(); this.selections.forEach(s => s.draw(this.ctx, wsize, hsize)); if (this.selection) this.selection.draw(this.ctx, wsize, hsize); let x = 0; let y = 0; this.ctx.fillStyle = "black"; this.ctx.font = (wsize * 0.5) + 'px sans-serif'; this.ctx.textAlign = "center"; this.ctx.textBaseline = "middle"; for (let j = 0; j < this.puzzle.grid.height; j++) { for (let i = 0; i { if (li.innerText == word) { li.classList.add("found"); this.selections.push(this.selection.clone().fill()); return true; } return false; }); } this.selection = null; } } let app = null; document.addEventListener("DOMContentLoaded", function(event) { const wordLists = [ ["grass", "pass", "plant", "path", "bath", "hour", "move", "prove", "improve", "sure", "sugar", "eye", "could", "should", "would", "who"] ] const pick = (array) => array[Math.floor(Math.random() * (array.length))]; let params = (new URL(document.location)).searchParams; let directions = [new Vector(1,0), new Vector(0,1)]; if (params.get("diagonal")) { directions.push(new Vector(1,1)); } if (params.get("backwards")) { directions.push(new Vector(-1,0)); directions.push(new Vector(0,-1)); if (params.get("diagonal")) { directions.push(new Vector(-1,-1)); } } let puzzle = new Puzzle(10, 10, pick(wordLists), directions); puzzle.print(); app = new PuzzleApp(document.getElementById("canvasContainer"), puzzle); });

    "),t.type){case"pdf":if(a.default.isFirefox()||a.default.isEdge()||a.default.isIE())try{if(console.info("PrintJS currently doesn't support PDF printing in Firefox, Internet Explorer and Edge."),!0===t.onBrowserIncompatible())window.open(t.fallbackPrintable,"_blank").focus(),t.onPdfOpen&&t.onPdfOpen()}catch(e){t.onError(e)}finally{t.showModal&&l.default.close(),t.onLoadingEnd&&t.onLoadingEnd()}else d.default.print(t,o);break;case"image":f.default.print(t,o);break;case"html":u.default.print(t,o);break;case"raw-html":c.default.print(t,o);break;case"json":s.default.print(t,o)}}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r,o=n(0),i=(r=o)&&r.__esModule?r:{default:r},a=n(1);function l(e,t,n){var r=new window.Blob([n],{type:"application/pdf"});r=window.URL.createObjectURL(r),t.setAttribute("src",r),i.default.send(e,t)}t.default={print:function(e,t){if(e.base64){var n=Uint8Array.from(atob(e.printable),function(e){return e.charCodeAt(0)});l(e,t,n)}else{e.printable=/^(blob|http)/i.test(e.printable)?e.printable:window.location.origin+("/"!==e.printable.charAt(0)?"/"+e.printable:e.printable);var r=new window.XMLHttpRequest;r.responseType="arraybuffer",r.addEventListener("load",function(){if(-1===[200,201].indexOf(r.status))return(0,a.cleanUp)(e),void e.onError(r.statusText);l(e,t,r.response)}),r.open("GET",e.printable,!0),r.send()}}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r,o=n(1),i=n(0),a=(r=i)&&r.__esModule?r:{default:r};t.default={print:function(e,t){var n=document.getElementById(e.printable);n?(e.printableElement=function e(t,n){var r=t.cloneNode();var o=!0;var i=!1;var a=void 0;try{for(var l,d=t.childNodes[Symbol.iterator]();!(o=(l=d.next()).done);o=!0){var u=l.value;if(-1===n.ignoreElements.indexOf(u.id)){var c=e(u,n);r.appendChild(c)}}}catch(e){i=!0,a=e}finally{try{!o&&d.return&&d.return()}finally{if(i)throw a}}switch(t.tagName){case"SELECT":r.value=t.value;break;case"CANVAS":r.getContext("2d").drawImage(t,0,0)}return r}(n,e),e.header&&(0,o.addHeader)(e.printableElement,e),a.default.send(e,t)):window.console.error("Invalid HTML element id: "+e.printable)}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r,o=n(0),i=(r=o)&&r.__esModule?r:{default:r};t.default={print:function(e,t){e.printableElement=document.createElement("div"),e.printableElement.setAttribute("style","width:100%"),e.printableElement.innerHTML=e.printable,i.default.send(e,t)}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r,o=n(1),i=n(0),a=(r=i)&&r.__esModule?r:{default:r};t.default={print:function(r,e){r.printable.constructor!==Array&&(r.printable=[r.printable]),r.printableElement=document.createElement("div"),r.printable.forEach(function(e){var t=document.createElement("img");t.setAttribute("style",r.imageStyle),t.src=e;var n=document.createElement("div");n.appendChild(t),r.printableElement.appendChild(n)}),r.header&&(0,o.addHeader)(r.printableElement,r),a.default.send(r,e)}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r,o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},c=n(1),i=n(0),a=(r=i)&&r.__esModule?r:{default:r};t.default={print:function(t,e){if("object"!==o(t.printable))throw new Error("Invalid javascript data object (JSON).");if("boolean"!=typeof t.repeatTableHeader)throw new Error("Invalid value for repeatTableHeader attribute (JSON).");if(!t.properties||!Array.isArray(t.properties))throw new Error("Invalid properties array for your JSON data.");t.properties=t.properties.map(function(e){return{field:"object"===(void 0===e?"undefined":o(e))?e.field:e,displayName:"object"===(void 0===e?"undefined":o(e))?e.displayName:e,columnSize:"object"===(void 0===e?"undefined":o(e))&&e.columnSize?e.columnSize+";":100/t.properties.length+"%;"}}),t.printableElement=document.createElement("div"),t.header&&(0,c.addHeader)(t.printableElement,t),t.printableElement.innerHTML+=function(e){var t=e.printable,n=e.properties,r='';e.repeatTableHeader&&(r+="");r+="";for(var o=0;o'+(0,c.capitalizePrint)(n[o].displayName)+"";r+="",e.repeatTableHeader&&(r+="");r+="";for(var i=0;i";for(var a=0;a'+l+""}r+=""}return r+="
    "}(t),a.default.send(t,e)}}}]).default});

    Be the first to write a comment.


    Tell us what you think?

    Multi-award winning educational toy brand

    Happy Little Doers wins in the Junior Design Awards 2021 for Best Educational Toy Happy Little Doers wins in the Junior Design Awards 2022 for Best Toy Design for +6 Years Happy Little Doers wins in the Made for Mums Awards 2022 for Best Puzzle Fully STEM Accredited Toy Brand Happy Little Doers awarded the ToyMark Award by Let Toys Be Toys Happy Little Doers is a finalist in the Progressive Preschool Awards 2023
    Trustpilot
    Find us in
    Not On The High Street
    Chalkboard
    The Crown Estate
    Waterstones
    Blue Diamond Garden Centres
    Kidly
    Shopping cart0
    There are no products in the cart!
    Continue shopping