Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Проверка массива на повторные цифры и выделение их цветом (http://www.flasher.ru/forum/showthread.php?t=215633)

Alexey25 21.07.2018 17:24

Проверка массива на повторные цифры и выделение их цветом
 
Вложений: 1
Я создал несколько квадратов и заполнил их цифрами из массива. Так же создал кнопки при щелчке на которых к переменной number будет присвоена цифра данной кнопки. Потом при щелчке на квадрате, автоматически в текстовое поле квадрата будет занесено значение переменой number. Делаю проверку на повтор цифр если цифры повторяются нужно их перекрасить в красный цвет и значению horizontal_count прибавить единицу. Проблема заключается в том, что если ставить цифру после повторяющей то предыдущая цифра перекрашивается. Если за повторяющейся, то перекрашивается та которую только, что поставил. Как сделать так, чтобы ту которую поставил вообще не перекрашивалась, а цветом выделялись только похожие цифры.
Вот мой код: Вложение 33236
Код AS3:

import flash.display.MovieClip;
import flash.text.TextField;
import flash.text.TextFormat;
 
var tl:Object = {};
var tf:Object = {};
var arr = [0,2,0,4,5,6,0,8,0];
//Цифра для проверки
 
var number = 0;
var horizontal_count = 0;
 
//Создание тайлов
function createTile()
{
        for(var i = 0; i < 9; i++)
        {
                var name = "t_"+i;
                        tl[name] = new tile();
                        tf[name] = new TextField();
                        addChild(tl[name]);
                        tl[name].addChild(tf[name]);
                        tl[name].x = 150+i * 25;
                        tl[name].y = 150;
                        tl[name].idi = i;
                        tf[name].x = -12.5;
                        tf[name].y = -12.5;
                        tl[name].gotoAndStop(1);
                        if(arr[i]!=0)
                        {
 
                                tf["t_"+i].text = arr[i];
                    }
                        tl[name].addEventListener(MouseEvent.CLICK,onClick);
 
        }
 
        btn1.txt.text = "1";
        btn2.txt.text = "2";
        btn3.txt.text = "3";
        btn4.txt.text = "4";
        btn5.txt.text = "5";
        btn6.txt.text = "6";
        btn7.txt.text = "7";
        btn8.txt.text = "8";
        btn9.txt.text = "9";
        btn1.addEventListener(MouseEvent.CLICK, onNum1Click);
        btn2.addEventListener(MouseEvent.CLICK, onNum2Click);
        btn3.addEventListener(MouseEvent.CLICK, onNum3Click);
        btn4.addEventListener(MouseEvent.CLICK, onNum4Click);
        btn5.addEventListener(MouseEvent.CLICK, onNum5Click);
        btn6.addEventListener(MouseEvent.CLICK, onNum6Click);
        btn7.addEventListener(MouseEvent.CLICK, onNum7Click);
        btn8.addEventListener(MouseEvent.CLICK, onNum8Click);
        btn9.addEventListener(MouseEvent.CLICK, onNum9Click);
 
}
function onNum1Click(e:Event)
{
        number = 1;
}
function onNum2Click(e:Event)
{
        number = 2;
}
function onNum3Click(e:Event)
{
        number = 3;
}
function onNum4Click(e:Event)
{
        number = 4;
}
function onNum5Click(e:Event)
{
        number = 5;
}
function onNum6Click(e:Event)
{
        number = 6;
}
function onNum7Click(e:Event)
{
        number = 7;
}
function onNum8Click(e:Event)
{
        number = 8;
}
function onNum9Click(e:Event)
{
        number = 9;
}
function onClick(e:Event)
{
        var bool = true;
        var clicked_btn:MovieClip = e.currentTarget as MovieClip;
 
        if(arr[clicked_btn.idi]==0)
        {
                tf["t_"+clicked_btn.idi].text = number;
        }
        horizontal_count = 0;
        for(var i = 0; i < 9-1; i++)
        {
                for(var j = i+1; j < 9; j++)
                {
                        var tfNameFormat2:TextFormat = new TextFormat();
                        if(tf["t_"+i].text == tf["t_"+j].text)
                        {
                                if(tf["t_"+i].text!="")
                                {
                                        horizontal_count++;
                                }
                                var name2 = "t_"+i;
                                tfNameFormat2.color = 0xFF0000;
                                tf[name2].setTextFormat(tfNameFormat2)
                        }
                }
        }
        trace(horizontal_count);
}
createTile();


Жень Шень 23.07.2018 19:16

Так надо?
Код AS3:

import flash.display.MovieClip;
import flash.text.TextField;
import flash.text.TextFormat;
var tl:MovieClip;
var tf:TextField;
var arr:Array=[0,2,0,4,5,6,0,8,0];
var arrTL:Array=[];
var number=0;
var horizontal_count:int=0;
 
function createTile() {
    for (var i = 0; i < 9; i++) {
        tl = new tile();
        tf = new TextField();
        tl.x=150+i*25;
        tl.y=150;
        tl.idi=i;
        tf.x=-12.5;
        tf.y=-12.5;
        tf.height = 20;
        tl.gotoAndStop(1);
        if (arr[i]!=0) {
            tf.text=arr[i];
        }
        tl.buttonMode = true;
        tl.addEventListener(MouseEvent.CLICK,onClick);
        tl.mouseChildren=false;
        tl.addChild(tf);
        addChild(tl);
        arrTL.push(tl);
        this["btn"+(i+1)].txt.text=String(i+1);
        this["btn"+(i+1)].mouseChildren=false;
        this["btn"+(i+1)].addEventListener(MouseEvent.CLICK, onNum1Click);
    }
}
 
function onNum1Click(e:Event) {
    number=int(e.target.txt.text);
}
 
function onClick(e:Event) {
    var i:int;
    horizontal_count=0;
    var tfNameFormat2:TextFormat = new TextFormat();
    tfNameFormat2.color=0xFF0000;
 
    for (i = 0; i < 9; i++) {
        if (arrTL[i].getChildAt(1).text==String(number)) {
            arrTL[i].getChildAt(1).setTextFormat(tfNameFormat2);
            horizontal_count++;
        }
    }
    e.target.getChildAt(1).text=String(number);
    //trace(horizontal_count);
}
createTile();


Alexey25 25.07.2018 19:43

Да, то что нужно, вот ещё вопрос, у меня например два сектора по 9 клеток в каждом как мне найти одинаковые цифры при щелчке мыши в первом секторе (тот который выделится цветом). Вот код (его достаточно скопировать в первый фрейм который я разместил выше), он у меня ищет все одинаковые цифры в двух секторах.
Код AS3:

import flash.events.Event;
 
var arr = [0,3,3,2,7,5,8,2,1,0,2,4,1,5,7,8,1,9];
var tl:Object = {};
var tf:Object = {};
var number = 5;
 
function createTile()
{
        for(var i = 0; i < 18; i++)
    {
                var name = "t_"+i;
                tl[name] = new tile();
                tf[name] = new TextField();
                addChild(tl[name]);
                tl[name].x = 150+25*(i%3);
                tl[name].y = 150+25*int((i/3));
                tl[name].addChild(tf[name]);
                tl[name].gotoAndStop(1);
                if(arr[i]!=0)
                {
                        tf[name].text = arr[i];
                }
                tf[name].x = -12.5;
                tf[name].y = -12.5;
                tl[name].addEventListener(MouseEvent.CLICK,checkNum);
 
        }
 
}
function checkNum(e:Event)
{
        var clicked_btn:MovieClip = e.currentTarget as MovieClip;
 
        for(var i = 0; i < arr.length; i++)
        {
                for(var j = i+1; j < arr.length; j++)
                {
                        var tfNameFormat3:TextFormat = new TextFormat();
                        var position = {x1:Math.floor(i/2)};
                        var position2 = {x1:Math.floor(j/2)};
 
 
                        tl["t_"+position.x1].gotoAndStop(2);
 
                        if(tf["t_"+position.x1].text==tf["t_"+position2.x1].text)
                        {
                                tfNameFormat3.color = 0xFF0000;
                                tf["t_"+i].setTextFormat(tfNameFormat3);
                        }
                }
        }
}
createTile();


СлаваRa 25.07.2018 20:08

а расскажите мне пожалуйста в чем смысл подобного?
Код AS3:

var position = {x1:Math.floor(i/2)};
var position2 = {x1:Math.floor(j/2)};
 
tl["t_"+position.x1].gotoAndStop(2);


Alexey25 25.07.2018 21:21

Позиция высчитывается, так как мне нужно только первые девять клеток, то массив из 18 элементов делим на двое. То же самое, делаем второй раз с переменной j, чтобы потом сравнивать.
Код AS3:

if(tf["t_"+position.x1].text==tf["t_"+position2.x1].text)
{
                                tfNameFormat3.color = 0xFF0000;
                                tf["t_"+i].setTextFormat(tfNameFormat3);
}


СлаваRa 25.07.2018 22:55

а просто завести переменную x для хранения результата это слишком просто?


Часовой пояс GMT +4, время: 23:07.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.