Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 21.07.2018, 17:24
Alexey25 вне форума Посмотреть профиль Отправить личное сообщение для Alexey25 Найти все сообщения от Alexey25
  № 1  
Ответить с цитированием
Alexey25

Регистрация: Mar 2016
Сообщений: 34
По умолчанию Проверка массива на повторные цифры и выделение их цветом

Я создал несколько квадратов и заполнил их цифрами из массива. Так же создал кнопки при щелчке на которых к переменной number будет присвоена цифра данной кнопки. Потом при щелчке на квадрате, автоматически в текстовое поле квадрата будет занесено значение переменой number. Делаю проверку на повтор цифр если цифры повторяются нужно их перекрасить в красный цвет и значению horizontal_count прибавить единицу. Проблема заключается в том, что если ставить цифру после повторяющей то предыдущая цифра перекрашивается. Если за повторяющейся, то перекрашивается та которую только, что поставил. Как сделать так, чтобы ту которую поставил вообще не перекрашивалась, а цветом выделялись только похожие цифры.
Вот мой код: test_arr.rar
Код 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
Жень Шень вне форума Посмотреть профиль Отправить личное сообщение для Жень Шень Найти все сообщения от Жень Шень
  № 2  
Ответить с цитированием
Жень Шень
 
Аватар для Жень Шень

блогер
Регистрация: Feb 2004
Адрес: Украина
Сообщений: 1,180
Записей в блоге: 3
Отправить сообщение для Жень Шень с помощью ICQ
Так надо?
Код 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();


Последний раз редактировалось Жень Шень; 23.07.2018 в 19:20. Причина: Нарушилось форматирование текста
Старый 25.07.2018, 19:43
Alexey25 вне форума Посмотреть профиль Отправить личное сообщение для Alexey25 Найти все сообщения от Alexey25
  № 3  
Ответить с цитированием
Alexey25

Регистрация: Mar 2016
Сообщений: 34
Да, то что нужно, вот ещё вопрос, у меня например два сектора по 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();

Старый 25.07.2018, 20:08
СлаваRa вне форума Посмотреть профиль Отправить личное сообщение для СлаваRa Найти все сообщения от СлаваRa
  № 4  
Ответить с цитированием
СлаваRa
 
Аватар для СлаваRa

блогер
Регистрация: Feb 2008
Адрес: http://playtika.com
Сообщений: 1,119
Записей в блоге: 5
Отправить сообщение для СлаваRa с помощью ICQ Отправить сообщение для СлаваRa с помощью Skype™
а расскажите мне пожалуйста в чем смысл подобного?
Код AS3:
var position = {x1:Math.floor(i/2)};
var position2 = {x1:Math.floor(j/2)};
 
tl["t_"+position.x1].gotoAndStop(2);
__________________
местонахождение

Старый 25.07.2018, 21:21
Alexey25 вне форума Посмотреть профиль Отправить личное сообщение для Alexey25 Найти все сообщения от Alexey25
  № 5  
Ответить с цитированием
Alexey25

Регистрация: Mar 2016
Сообщений: 34
Позиция высчитывается, так как мне нужно только первые девять клеток, то массив из 18 элементов делим на двое. То же самое, делаем второй раз с переменной j, чтобы потом сравнивать.
Код AS3:
if(tf["t_"+position.x1].text==tf["t_"+position2.x1].text)
{
				tfNameFormat3.color = 0xFF0000;
				tf["t_"+i].setTextFormat(tfNameFormat3);
}

Старый 25.07.2018, 22:55
СлаваRa вне форума Посмотреть профиль Отправить личное сообщение для СлаваRa Найти все сообщения от СлаваRa
  № 6  
Ответить с цитированием
СлаваRa
 
Аватар для СлаваRa

блогер
Регистрация: Feb 2008
Адрес: http://playtika.com
Сообщений: 1,119
Записей в блоге: 5
Отправить сообщение для СлаваRa с помощью ICQ Отправить сообщение для СлаваRa с помощью Skype™
а просто завести переменную x для хранения результата это слишком просто?
__________________
местонахождение

Создать новую тему Ответ Часовой пояс GMT +4, время: 17:09.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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