За последние 24 часа нас посетили 17619 программистов и 1722 робота. Сейчас ищут 915 программистов ...

Задача с картами

Тема в разделе "JavaScript и AJAX", создана пользователем X-man, 19 май 2013.

  1. X-man

    X-man Новичок

    С нами с:
    17 май 2013
    Сообщения:
    19
    Симпатии:
    0
    Добрый день!
    Подскажите реализацию такой задачи на javascript:
    на столе(странице) лежат 4 туза рубашкой вверх.
    вначале задается масть и нужно открыть туза данной масти
    т.е. при клике карта открывается и проверяется совпадение масти с заданным значением
    если масть не угадана дается следующая попытка и так до совпадения
    И есть кнопка 'начать заново'.
    Как лучше сделать такую задачу? На javascript или есть другой более эффективный способ?
    Буду благодарен за наводку либо за решение.
     
  2. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    если не важно сохранить данные в тайне - то жс. если тайна важна то обработку лучше отдать какому-нибудь бэк-энду на том же пхп. для связи без перезагрузки страницы использовать жс.
     
  3. X-man

    X-man Новичок

    С нами с:
    17 май 2013
    Сообщения:
    19
    Симпатии:
    0
    Что касается перезагрузки то точно без нее, ну и в тайне тут хранить особо нечего.
    Я только начал изучать javascript, если можно ближе к решению, как именно хранить массив карт на странице и как открыть карту?
     
  4. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    если все выполнять на стороне клиента то я с первого раза буду угадывать карту. оно так и задумано? почему тогда все карты лицом вверх сразу не положить?

    js выполняется в браузере и взаимодействует со страницей. собственно как удобно так и храните - хотите в нодах самих карт, хотите в переменных js. что касается открытия то тут тоже все просто - на действие пользователя нужно "убрать" карту в состоянии рубашки и "положить" карту в состоянии лица. решений задачи много. вы в каком направлении планируете двигаться?
     
  5. X-man

    X-man Новичок

    С нами с:
    17 май 2013
    Сообщения:
    19
    Симпатии:
    0
    В общем, к примеру покер в соцсетях - страница там не перезагружается, данные естественно тоже хранятся в тайне. Нужен тот же инструмент. Это javascript?
     
  6. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    javascript + ajax + некий бэкэнд в вашем случае вполне себе на php
     
  7. X-man

    X-man Новичок

    С нами с:
    17 май 2013
    Сообщения:
    19
    Симпатии:
    0
    Ganzal, понятно, примерно так и представлял, интересует код решения.
     
  8. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    интересует бюджет заказа
     
  9. X-man

    X-man Новичок

    С нами с:
    17 май 2013
    Сообщения:
    19
    Симпатии:
    0
    Короче, ясно, буду сам разбираться. Хотел чтоб кто-нибудь помог сдвинуться с мертвой точки на простом примере, хоть с одной картой.
     
  10. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    добро пожаловать в суровый мир. я даю подсказки, вопрошающий - двигается в нужном направлении. если он не в состоянии этого сделать - он меняет свои деньги на мои знания.
    если будут какие-то вопросы - выкладывайте код, комментируйте ожидание и действительность и мы с удовольствием поможем.

    удачи.
     
  11. X-man

    X-man Новичок

    С нами с:
    17 май 2013
    Сообщения:
    19
    Симпатии:
    0
    В данном случае ты его делаешь суровым, раз первый поднял материальный вопрос.
     
  12. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    во-первых, мы на ты не переходили. во-вторых, я лучше тебя знаю, что упорным трудом решаются любые проблемы. а те, кто не хочет трудиться - может оплатить труд другого человека. ведь другой человек не виноват в том, что он не ленился. так что ты посиди с учебничками, а как вопросы появятся - спрашивай. готовый код тут некоторые форумчане тоже иногда выкладывают. но тут вопрос дальнейшего использования - ты по этому коду научишься чему-нибудь или тебе нужна халява чтоб закрыть должок перед преподом в универе и пойти наслаждаться летом.

    удачи.
     
  13. X-man

    X-man Новичок

    С нами с:
    17 май 2013
    Сообщения:
    19
    Симпатии:
    0
    Ganzal, объясняю: эта минизадача нужна мне как отправная точка для намного более серьезной задачи, на php я писал алгоритмы в десятки раз сложнее и свой проект делал полностью сам с нуля, дошел до javascript которого не знаю, поэтому обратился с вопросом, что такое книга и труд можешь мне не объяснять, есть разные способы получения знаний. И лучше не злись на ленивых тупых студентов а сними капюшон и иди сам прогуляйся и проветрись.
    Удачи.
     
  14. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    что-то я сомневаюсь, что задачи были сложнее в десятки раз. поясню. профессионализм не в знании инструмента, а в умении его применить. ты заявляешь, что решал задачи в десятки раз сложнее. значит с алгоритмизацией проблем нет. тогда какая разница на каком япе будет написан алгоритм? php, java, javacript, c++, perl? дальше перечислять? тебе просто для нужно взять соответствующие инструменты из выбранного япа. но ты-то тему начал с того что не представляешь как это делается. значит ты не решал задачи в десятки раз сложнее... слив не засчитан. еще попытка?

    может ты уже перестанешь пытаться меня задеть и будешь по своей теме вопросы задавать? раз ты в десятки раз сложнее задачи решал, значит умеешь формулировать не только оскорбления, но и вопросы.
     
  15. X-man

    X-man Новичок

    С нами с:
    17 май 2013
    Сообщения:
    19
    Симпатии:
    0
    Ganzal, алгоритм уже написан на php, но мне нужен javascript по вышеописанным причинам, если я увижу код минизадачи реализованный средствами js я пойму как преобразовать дальше и не буду зря рыться в книгах.
    P.S. За это время вместо пустой болтовни ты бы уже десять раз мог выложить решение задачи как специалист по этому вопросу и я бы не забыл твоей помощи, поверь.
     
  16. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    вот этим все сказано. ты роешься в книгах а не черпаешь из них знания. уже давно бы залез на htmlbook или jquery и ознакомился с языком разметки как хранилищем на уровне браузера, и с мощным инструментов языка интерактивности вэб-страниц. потом в голове бы все это переварил и понял бы как что из этого нужно использовать. но ты роешься...

    да я-то могу себе позволить пустую болтовню. я тут на добровольных началах помощь оказываю. когда меня уважают - я помогаю от и до. бесплатно. но случаются ленивые лживые халявщики вроде тебя. да еще и опускаются до унижений в мою сторону. я на таких не обижаюсь. просто устраиваю пустую болтовню. оппонент ведь и сам себя с говном смешает...

    и меня на понт не надо брать. я могу сделать эту задачу и прокомментировать каждую лексему. вопрос - зачем мне бесплатно тратить время на ленивого лживого халявщика? намного интереснее где-нибудь в соседней теме помочь человеку, который значительно более отзывчив, уважителен и действительно хочет обучиться.

    удачи!

    PS. обожаю капюшоны. позволяют легко и быстро изолировать себя от окружающей действительности. а потом так же быстро вернуться обратно.
    PPS. гулять не пойду. во-первых, интересная работа в процессе. а во-вторых - непогода надвигается на столицу моей родины.


    ну что, закрываем тему из-за перехода на личности или ты все же начнешь выкладывать наработки, чтоб я тебя быстрее протащил до решения твоей задачи?
     
  17. X-man

    X-man Новичок

    С нами с:
    17 май 2013
    Сообщения:
    19
    Симпатии:
    0
    Если ты считаешь капюшон переходом на личности то можешь закрывать. Обрати внимание сколько раз перешел на личности ты.

    Добавлено спустя 3 минуты 33 секунды:
    У меня нету никаких препятствий чтобы это сделать, и я не понимаю почему ты так разошелся. Если подскажешь литературу по данному вопросу я буду тебе только благодарен.
    Ganzal, я не понял при чем здесь htmlbook который я давно знаю, при чем здесь, perl, с++ если мы остановились на том что нужен javascript + ajax??? Ты меня только запутал..
    P.S. Меня как раз таки не надо никуда тащить, как ты это делаешь с разными немощными(извини за выражение) в соседних темах, я пришел за взаимопомощью и сотрудничеством.
     
  18. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    да ты реальный дуб. без обид только.

    идея нумер 1. самая простая.
    получаем статическую страничку. уже в браузере генерируем список карт, навешиваем на карты слушатели кликов, по событию сверяемся со списком карт. реализуется быстро, но консоль кажет какую карту нужно ткнуть. не то.

    идея нумер 2. простая.
    генерируем страничку на сервере, помещая загаданной карте некий атрибут. уже в браузере навешиваем слушатели кликов, по событию сверяемся с атрибутом. просмотр исходного кода странице кажет нужную карту. опять не то.

    идея нумер 3. посложнее.
    генерируем список карт, запоминаем пакет. генерируем страницу с простой передачей этого идентификатора пакета. уже в бразуере раскладываем карты рубашкой вверх и навешиваем слушатели кликов. по событию обращаемся аяксом к бэкэнду передавая номер пакета и номер карты. бэкэнд открывает пакет и сравнивает присланный ответ с правильным. бэкэнд отвечает успех или неуспех. по ответу от бэкэнда решаем обрадовать пользователя или огорчить. уже ближе к теме. пользователь не видит правильной карты. а через счетчик в пакете можно ограничить кол-во попыток двумя-тремя. пожалуй нам это подходит.

    вот простое поверхностное описание алгоритма. дальше каждый пункт дробится на десятки маленьких и под них подбираются инструменты которыми эти микрозадачки решаются. а в целом система будет решать вот таким простым языком поставленную задачу. если ты решал задачи в десятки раз сложнее, то почему я от тебя до сих пор ни одного даже словесного алгоритма не увидел? ведь ты мог словами сформулировать, а я бы тебя мог поправить, верно? но ты видимо думаешь что я сразу от тебя PHP+JS+AJAX ожидаю. да зачем? ты ж в этом ноль, хотя бьешь себя пяткой в грудь утверждением, что это не так =)

    причем тут другие япы? ну генерировать пакет я могу на сях. а бэкэнд на джаве написать. да, обменом будет заниматься джаваскрипт. ведь у нас же поставлено условие без перезагрузки страницы. но как мы будем обмениваться? простой гет-запрос? простой пост-запрос? или пишем арписи? а какой формат арписи - иксэмэль или джейсон? соапчик? продолжать?
    видишь что получается? зная инструменты я могу одну и ту же задачу решить разным сочетанием разных инструментов. именно поэтому я тебе предложил почитать jquery. php ты вроде как знаешь, html тоже. значит быстро читаем про jquery, находим какие его методы помогают нам в решении задачи и решаем ее уже наконец.

    ты уже мог готовый код написать. но вместо этого ты тратил время на пустую болтовню.
     
  19. X-man

    X-man Новичок

    С нами с:
    17 май 2013
    Сообщения:
    19
    Симпатии:
    0
    Да ничего, зато бабы вешаются;)
    Еще неделя-две и вытресу из тебя готовый код :)))
    Алгоритмы которые сложнее в десятки раз реализованы на php+mysql. Но это самый убогий вариант, приходится перезагружать страницу, постоянно обращаться к базе. Первоначально так сделал т.к. не знал других средств. А вот идею 3 сейчас буду реализовывать.
    А где ты работаешь? Freelance?
     
  20. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    с учетом смысла термина фриланс - да, я - фрилансер. я меняю свои знания на деньги заказчика. у меня свой бизнес сразу в нескольких сферах. ну и периодически позволяю себе работать на дядю в формате официального трудоустройства у него. относительно программирования - по большей части это хобби, приносящее колоссальный доход...
     
  21. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    профи бесплатно не дают. =)
     
  22. X-man

    X-man Новичок

    С нами с:
    17 май 2013
    Сообщения:
    19
    Симпатии:
    0
    И правильно делают.
    Но я не за халявой пришел. Хочу освоить новые инструменты и придумал минизадачку, в рассчете что накидают пару-тройку решений хотябы для разминки ума кому это интересно. Своим решением поделюсь в процессе.
     
  23. X-man

    X-man Новичок

    С нами с:
    17 май 2013
    Сообщения:
    19
    Симпатии:
    0
    Пробую открытие карт. Не срабатывает передача номера открываемой карты через функцию ( строка img.onclick=opencard(i);) Ошибся в коде или это неверный способ? Какая есть альтернатива?
    Код (Text):
    1. <style type="text/css">
    2. img
    3. {
    4.     margin:30px 5px;
    5.     cursor:pointer;
    6.     border-radius:5px;
    7. }
    8. div
    9. {
    10.     background-color:#999;
    11. }
    12. </style>
    13. <script type="text/javascript">
    14. <!--
    15. var cards= new Array("11.png","12.png","13.png","14.png","rub.png")
    16. function opencard(num)
    17. {
    18.     var img=document.getElementsByTagName("IMG")
    19.     for (var i=0; i<img.length;i++)
    20.     {
    21.         if(i=num)
    22.             img[i].src=cards[num];
    23.     }
    24. }
    25. window.onload=function()
    26. {
    27.     var img=document.getElementsByTagName("IMG")
    28.     for (var i=0; i<img.length;i++)
    29.     {
    30.         img[i].src=cards[img.length];
    31.         img[i].alt=cards[i];
    32.         img[i].onclick=opencard(i);
    33.     }
    34. }
    35. //-->
    36. </script>
    37.  
    38.  
    39. <div align="center">
    40. <img />
    41. <img />
    42. <img />
    43. <img /><br>
    44. </div>
    Картинки тут - http://myfolder.ru/files/36538300
     
  24. X-man

    X-man Новичок

    С нами с:
    17 май 2013
    Сообщения:
    19
    Симпатии:
    0
    Т.е. вопрос сводится к тому, как динамически работать с массивом элементов img. Задавать каждому свой id с порядковым номером типа id1, id2, id3, id4, но как тогда обратиться внутри функции к элементу, по которому кликнули, чтобы не писать для каждого id отдельную функцию, или можно вместо 'img' в document.getElementById('img') писать переменные, например document.getElementById(i)?

    Добавлено спустя 19 минут 27 секунд:
    С этим разобрался, через указание индекса [num] вконце - var img=document.getElementsByTagName("IMG")[num];
    Вопрос другой почему при использовании 'img.onclick=opencard(i);' карты переварачиваются при загрузке страницы а не по клику.

    Код (Text):
    1. <style type="text/css">
    2. img
    3. {
    4.     margin:30px 5px;
    5.     cursor:pointer;
    6.     border-radius:5px;
    7. }
    8. div
    9. {
    10.     background-color:#999;
    11. }
    12. </style>
    13. <script type="text/javascript">
    14. <!--
    15. var cards= new Array("11.png","12.png","13.png","14.png","rub.png");
    16. function opencard(num)
    17. {
    18.     var img=document.getElementsByTagName("IMG")[num];
    19.     window.alert(num);
    20.     img.src=cards[num];
    21. }
    22. window.onload=function()
    23. {
    24.     var img=document.getElementsByTagName("IMG")
    25.     for (var i=0; i<img.length;i++)
    26.     {
    27.         img[i].src=cards[img.length];
    28.       img[i].onclick=opencard(i);      
    29.     }
    30. }
    31. //-->
    32. </script>
    33.  
    34. <div align="center">
    35. <img />
    36. <img />
    37. <img />
    38. <img /><br>
    39.  
    40. </div>
     
  25. X-man

    X-man Новичок

    С нами с:
    17 май 2013
    Сообщения:
    19
    Симпатии:
    0
    На жс.ру за 10 минут набросали несколько решений. Как я и ожидал, все вмещается в пару функций, с которыми уже успел разобраться.