0

In this word search,Randam letters are displaying in a correct format.The problem comes when i use 'ஊர்','ஐயா','கோவை' words.Actually the size of these letters is 2. [(ஊ,ர்-2),(ஐ,யா-2),(கோ,வை-2),but it splited it as 3 or 4.Can anybody help me to solve this issue?

Thanks in Advance

HTML

    <body>
    <button onclick='setGameUp()'>New Puzzle</button>
    <div id='crossword_board'></div><br>
    <script  src="./script.js"></script>
    </body>     

JAVASCRIPT

        var blocks = 100
        const cb = document.querySelector('#crossword_board')
        var md = false
        var num_words = 3
        function addBlocks() {
            for (var i = 0; i < blocks; i++) {
                var b = document.createElement('div')
                b.className = 'block'
                cb.appendChild(b)
            }
        }
        function countStr(str) {

            var chars = str.split("");
            var count = 0;
            for (var i = 0, ilen = chars.length; i < ilen; i++) {
                var chars2 = chars[i] + chars[i + 1];
                if (str.indexOf(chars[i]) == str.indexOf(chars2))
                    i += 1;
                count++;
            }
            return count;

        }
        function addWords() {
            var words = ['ஊர்','ஐயா','கோவை'] 
            // max word length of 10
            words.sort(() => Math.random() - 0.5);
            words = words.slice(0, num_words)

            var arr = [];
            while (arr.length < 3) {
                var r = Math.floor(Math.random() * 10);
                if (arr.indexOf(r) === -1) arr.push(r);
            }

            words.forEach(function(elm) {
                var chars = elm.split("");
                var count = 0;
                for (var i = 0, ilen = chars.length; i < ilen; i++) {
                    var chars2 = chars[i] + chars[i + 1];
                    if (elm.indexOf(chars[i]) == elm.indexOf(chars2))
                        i += 1;
                    count++;
                }

                var word_length = count
                //console.log(elm+"-"+count);
                var offset = Math.floor(Math.random() * (11 - word_length))
                var w_start = offset + (arr[0] * 10)
                arr.shift()
                elm.split('').forEach(function(e) {
                    var b = document.querySelectorAll('.block')[w_start]
                    b.innerHTML = e
                    b.classList.add('letter')
                    b.classList.add(elm)
                    b.onmousedown = function() {
                        this.classList.add('letter_pop')
                        this.style.background = this.classList[2]
                        console.log(elm);
                        if (document.querySelectorAll('.' + elm + '.letter_pop').length == word_length) {
                            document.querySelectorAll('.listed_word').forEach(function(e) {
                                if (e.innerHTML == elm) {
                                    e.classList.add('found_word')
                                    document.documentElement.style.setProperty('--bg-color', e.innerHTML)
                                }
                            })
                        }
                        setTimeout(you_win, 500)
                    }
                    b.onmouseenter = function() {
                        if (md) {
                            this.classList.add('letter_pop')
                            this.style.background = this.classList[2]
                            if (document.querySelectorAll('.' + elm + '.letter_pop').length == elm.length) {
                                document.querySelectorAll('.listed_word').forEach(function(e) {
                                    if (e.innerHTML == elm) {
                                        e.classList.add('found_word')
                                        document.documentElement.style.setProperty('--bg-color', e.innerHTML)
                                    }
                                })
                            }
                            setTimeout(you_win, 500)
                        }
                    }

                    if (elm.split('').indexOf(e) == 0 &&
                        (b.previousSibling &&
                            !b.previousSibling.classList.contains(elm)) ||
                        !b.previousSibling) {
                        b.classList.add('first_letter')
                    }
                    if (elm.split('').indexOf(e) == count) {
                        b.classList.add('last_letter')
                    }
                    w_start++
                })
                var w = document.createElement('div')
                w.className = 'listed_word'
                w.innerHTML = elm
                document.body.appendChild(w)
            })
        }
        function you_win() {
            if (document.querySelectorAll('.found_word').length == num_words) {
                md = false
                cb.removeEventListener('mousedown', mouse_down)
                cb.removeEventListener('mouseup', mouse_down)

                cb.classList.add('game_winner')
            }
        }

        const alphabet = ["அ ","ஆ","இ","ஈ","உ","ஊ","எ"," ஏ","ஐ","ஒ","ஓ","கோ","யா","க்","ங்","ச் ","ஞ்","ட்","ண்","த்","ந்","வை","ம்","ய் ","ர்","ல் ","வ்","ழ் ","ள்","ற் ","ன்"];
        function fillInEmpty() {
            var b = document.querySelectorAll('.block')
            b.forEach(function(elm) {
                if (elm.innerHTML == '') {
                    const random = Math.floor(Math.random() * alphabet.length);
                    var letter = alphabet[random];
                    elm.innerHTML = letter
                }
            })
        }

        addBlocks()
        addWords()
        fillInEmpty()
        function mouse_down(event) {
            if (!md) {
                md = true
            } else {
                md = false
            }

            if (event.type == 'touchmove') {
                var block = document.elementFromPoint(event.touches[event.touches.length - 1].clientX, event.touches[event.touches.length - 1].clientY)
                if (block.classList.contains('letter')) {
                    block.style.background = block.classList[2]
                    block.classList.add('letter_pop')
                }
                var elm = block.classList[2]
                if (document.querySelectorAll('.' + elm + '.letter_pop').length == elm.length) {
                    document.querySelectorAll('.listed_word').forEach(function(e) {
                        if (e.innerHTML == elm) {
                            e.classList.add('found_word')
                            document.documentElement.style.setProperty('--bg-color', e.innerHTML)
                        }
                    })
                }
                setTimeout(you_win, 500)
            }
        }
        function setGameUp() {
            cb.innerHTML = ''
            cb.className = ''
            document.documentElement.style.setProperty('--bg-color', '#666')
            document.querySelectorAll('.listed_word').forEach(function(e) {
                e.remove()
            })

            addBlocks()
            addWords()
            fillInEmpty()

            cb.addEventListener('mousedown', mouse_down)
            cb.addEventListener('mouseup', mouse_down)
            cb.addEventListener('touchmove', mouse_down)
        }
        setGameUp()

My Output

I have attached my HTML and JAVASCRIPT code

kala
  • 45
  • 6

0 Answers0