ФорумПрограммированиеПыхнуть хотите?Battles → Ханойские башни.

Ханойские башни.

  • Professor

    Сообщения: 2089 Репутация: N Группа: Адекваты

    Spritz 26 августа 2009 г. 6:12

    В общем наткнулся на задание для кандидатов на вакансию программиста.
    Предлагаю сделать из этого задания батл =)
    Все задание в прикрепленном файле.
  • Givi

    Сообщения: 2284 Репутация: N Группа: Адекваты

    Spritz 26 августа 2009 г. 6:36, спустя 23 минуты 53 секунды

    мдя… интересная штука. Даже не думал как-то относительно головоломок на пыхе (пусть и с ЖуКери).
  • Professor

    Сообщения: 2089 Репутация: N Группа: Адекваты

    Spritz 26 августа 2009 г. 6:52, спустя 15 минут 49 секунд

    Да там не надо разгадывать ее. Хотя она элементарна.
    Там интерфейс просится создать. Тоесть написать игру в которую могут играть пользователи.
    Фреймоворк предлагаю использовать любой. Кто какой хочет.
  • Givi

    Сообщения: 2284 Репутация: N Группа: Адекваты

    Spritz 26 августа 2009 г. 6:56, спустя 4 минуты 6 секунд

    ну относительно твоего предложения, то… я вообще с ЖуКери не дружу. А изучать пока времени нет + нет необходимости… пока.

    А относительно разгадывания: я и не думал разгадывать… просто идея интересная делать логические игры на пыхе и ява-скриптах.
  • Professor

    Сообщения: 2089 Репутация: N Группа: Адекваты

    Spritz 26 августа 2009 г. 7:11, спустя 14 минут 33 секунды

    Ага, раздел игр на ПЫХЕ =)
    Тогда вообще люди работать перестанут =)
  • Givi

    Сообщения: 2284 Репутация: N Группа: Адекваты

    Spritz 26 августа 2009 г. 7:15, спустя 4 минуты 5 секунд

    зато пыха станет популярной среди её пользователей :)
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 26 августа 2009 г. 8:44, спустя 1 час 29 минут 8 секунд

    хуйня
    Сапожник без сапог
  • Trej Gun

    Сообщения: 5299 Репутация: N Группа: в ухо

    Spritz 27 августа 2009 г. 1:27, спустя 16 часов 43 минуты 25 секунд

    зато пыха станет популярной среди её пользователей

    пыха и так популярна среди них
  • }/{EHR

    Сообщения: 734 Репутация: N Группа: Адекваты

    Spritz 27 августа 2009 г. 1:30, спустя 2 минуты 58 секунд


    зато пыха станет популярной среди её пользователей

    пыха и так популярна среди них
    И не более того…
  • }/{EHR

    Сообщения: 734 Репутация: N Группа: Адекваты

    Spritz 27 августа 2009 г. 1:37, спустя 6 минут 49 секунд


    В общем наткнулся на задание для кандидатов на вакансию программиста.
    Предлагаю сделать из этого задания батл =)
    Все задание в прикрепленном файле.
    C нета скачать и все дела )
    <!– Original:  Adam Stock ([email protected]) –>

    <!– © Copyright 1998-99 Adam L. Stock. All Rights Reserved –>
    <!– You have permission to republish this code provided –>
    <!– that you do not remove this copyright notice –>

    <!– This script and many more are available free online at –>
    <!– The JavaScript Source!! http://javascript.internet.com –>

    <!– Begin

    <!– STEP TWO: Save these images to your website server directory –>

    // http://www.yourdomain.com/hanoi-img-directory/disk1.gif
    // http://www.yourdomain.com/hanoi-img-directory/disk1h.gif
    // http://www.yourdomain.com/hanoi-img-directory/disk2.gif
    // http://www.yourdomain.com/hanoi-img-directory/disk2h.gif
    // http://www.yourdomain.com/hanoi-img-directory/disk3.gif
    // http://www.yourdomain.com/hanoi-img-directory/disk3h.gif
    // http://www.yourdomain.com/hanoi-img-directory/disk4.gif
    // http://www.yourdomain.com/hanoi-img-directory/disk4h.gif
    // http://www.yourdomain.com/hanoi-img-directory/disk5.gif
    // http://www.yourdomain.com/hanoi-img-directory/disk5h.gif
    // http://www.yourdomain.com/hanoi-img-directory/disk6.gif
    // http://www.yourdomain.com/hanoi-img-directory/disk6h.gif
    // http://www.yourdomain.com/hanoi-img-directory/disk7.gif
    // http://www.yourdomain.com/hanoi-img-directory/disk7h.gif
    // http://www.yourdomain.com/hanoi-img-directory/post.gif
    // http://www.yourdomain.com/hanoi-img-directory/posttop.gif


    // change this to where you upload the images to your site
    imgdir = "./";


    function preload() {
    this.length = preload.arguments.length;
    for (var i = 0; i < this.length; i++) {
    this = new Image();
    this.src = imgdir + preload.arguments;
    }
    }

    var pics = new preload("disk1.gif","disk2.gif",
    "disk3.gif","disk4.gif","disk5.gif","disk6.gif",
    "disk7.gif","pole.gif", "disk1h.gif","disk2h.gif",
    "disk3h.gif","disk4h.gif","disk5h.gif","disk6h.gif",
    "disk7h.gif");

    var selectedr = null;
    var selectedc = null;
    var maxposts = 3;
    var maxdisks = 7;
    var all_posts = 3;
    var startpost = 1;
    var endpost = (startpost-1 < 0 ? maxposts-1 : startpost-1);
    var disks = 7;
    var imgwidth = 160;
    var imgheight = 14;
    var game_is_over = false;
    var show_messages = false;
    var board = new Array(maxposts);
    board[0] = new Array(maxdisks + 1);
    board[1] = new Array(maxdisks + 1);
    board[2] = new Array(maxdisks + 1);

    function initboard(startpost, disks) {
    var len = board[0].length;
    selectedc = null;
    selectedr = null;
    game_is_over = false;
    endpost = (startpost-1 < 0 ? maxposts-1 : startpost-1);

    for (i = 0; i < len; i++) {
    board[0] = 0;
    board[1] = 0;
    board[2] = 0;
    }
    for (i = len-disks, j = 0; i < len; i++, j++) {
    board[startpost] = len - j - 1;
    }
    }

    function drawall() {
    for (j=0; j<board.length; j++) {
    for (i=0; i<board[j].length; i++) {
    draw(j,i, getName( board[j]));
    }
    }
    message("You may begin! Select a piece to move.");
    }

    function restart(start) {
    startpost = start;
    disks = document.forms[0].disc.options[document.forms[0].disc.selectedIndex].text;
    initboard(startpost,disks);
    drawall();
    theAnim = new Animation();
    }
    initboard(startpost, disks);

    function getName( num ) {
    if (num == 0) return "diskpost.gif";
    return "disk" + num + ".gif";
    }

    function message(str, force) {
    if (force || !game_is_over && !show_messages)
    document.disp.message.value = str;
    }

    function messageadd(str) {
    if (!game_is_over)
    document.disp.message.value = document.disp.message.value + "\n" + str;
    }

    function isempty(num) {
    for (i = 0; i < board[num].length; i++) {
    if ( board[num] != 0) return false;
    }
    return true;
    }

    function topmost(num) {
    for (i = 0; i < board[num].length; i++) {
    if (board[num] != 0) return i;
    }
    return -1;
    }

    function ispost(i,j) {
    return (board[j] == 0);
    }

    function istopdisk(i,j) {
    return (board[j][i-1] == 0);
    }

    function drawboard() {
    document.writeln("<h2>The Towers of Hanoi</h2><p>");
    document.writeln("<table cellspacing=0 cellpadding=0 border=0>");
    document.write("<tr>");
    for (j = 0; j < board.length; j++) {
    document.write("<td>");
    document.write("<a href='javascript:clicked("+0+","+j+")'><img src='" + imgdir + "diskposttop.gif' border=0></a><br>");
    for (i=0; i< board[0].length; i++) {
    document.write("<a href='javascript:clicked("+i+","+j+")'>");
    document.write("<img src='" + imgdir + getName(board[j]) + "' name='pos"+ j + i + "' border=0><br>");
    document.write("</a>");
    }
    document.writeln("</td>");
    }
    document.write("</tr></table>");
    document.write("<form name='disp'><textarea name='message' wrap=virtual rows=2 cols=40></textarea><br>" +
    "Disks: <select name=\"disc\" size=1><option>3<option>4<option>5<option>6<option selected>7</select><input "
    +"type=button value=\"Start the Game Over\" onClick=\"restart(startpost);\"><input "
    +"type=button value=\"Solve It!\" onClick=\"restart(startpost);setTimeout('hanoi(disks,startpost,endpost)',300)\"></form>");
    }

    function draw(x,y,name) {
    document.images["pos"+x+""+y].src = imgdir + name;
    }

    function animate(x,y,name) {
    theAnim.addFrame( "pos"+x+""+y, imgdir + name);
    }

    function clicked(i,j) {
    document.forms[0].message.focus(); // get rid of annoying outline in MSIE
    document.forms[0].message.blur();

    if (game_is_over) restart(startpost = endpost);
    if (!isselection() && ispost(i,j)) { message("Select a piece to move."); return; }
    if (!ispost(i,j)) { toggle(j); return; };
    if (ispost(i,j) && selectedc == j) { message("Move the piece to a different post."); return; }
    if (!legalmove(j)) { message("That is not a legal move. Try again."); return; }
    move(j); return;
    }

    function legalmove(j) {
    if (isempty(j)) return true;
    return (board[j][topmost(j)] < board[selectedc][selectedr]);
    }

    function isselection() {
    return selectedc != null;
    }

    function toggle( num ) {
    var toppos = topmost(num);

    if (selectedc == num && selectedr == toppos) {
    selectedc = null; selectedr = null;
    animate(num,toppos,"disk" + board[num][toppos] + ".gif");
    message("Select a piece to move.");
    return;
    }
    if (isselection()) {
    animate(selectedc,selectedr,"disk" + board[selectedc][selectedr] + ".gif");
    }
    selectedc = num; selectedr = toppos;
    animate(num,toppos,"disk" + board[num][toppos] + "h.gif");
    message("Click on the post to which you want to move the disk.");
    }

    function move( num ) {
    var toppos = (!isempty(num) ? topmost(num) : board[num].length);
    board[num][toppos-1] = board[selectedc][selectedr];
    board[selectedc][selectedr] = 0;
    animate(selectedc,selectedr,"diskpost.gif");
    animate(num,toppos-1,"disk" + board[num][toppos-1] + ".gif");
    selectedc = null; selectedr = null;
    message("Select a piece to move.");
    game_over();
    }

    function hanoi(no_of_disks, start_post, goal_post) {
    if (no_of_disks > 0) {
    var free_post = all_posts - start_post - goal_post;
    hanoi (no_of_disks - 1, start_post, free_post);
    show_messages = true;
    toggle(start_post);
    move(goal_post);
    show_messages = false;
    hanoi (no_of_disks - 1 , free_post, goal_post);
    game_over(true);
    }
    }

    function game_over(forceMsg) {
    var filledpost = null;
    var val = 0;
    for (k = 0; k < board.length; k++) {
    val += ( isempty(k) ? 1 : 0 );
    if (!isempty(k)) filledpost = k;
    }

    if (val == 2 && isempty(startpost)) {
    message("You won!", forceMsg);
    game_is_over = true;
    endpost = filledpost;
    }
    return game_is_over;
    }

    //
    // Animation functions
    //

    function Animation() {
    this.imageNum = new Array(); // Array of indicies document.images to be changed
    this.imageSrc = new Array(); // Array of new srcs for imageNum array
    this.frameIndex = 0; // the frame to play next
    this.alreadyPlaying = false; // semaphore to ensure we play smoothly

    this.getFrameCount = getframecount; // the total numebr of frame so far
    this.moreFrames = moreframes; // tells us if there are more frames to play
    this.addFrame = addframe; // add a frame to the animation
    this.drawNextFrame = drawnextframe; // draws the next frame
    this.startAnimation = startanimation; // start the animation if necessary
    }

    function getframecount() { return this.imageNum.length; }
    function moreframes() { return this.frameIndex < this.getFrameCount(); }
    function startanimation() {
    if (!this.alreadyPlaying) {
    theAnim.alreadyPlaying = true;
    setTimeout('theAnim.drawNextFrame()',5);
    }
    }

    function addframe(num, src) {
    var theIndex = theAnim.imageNum.length;
    theAnim.imageSrc[theIndex] = src;
    theAnim.imageNum[theIndex] = num;
    theAnim.startAnimation();
    }

    function drawnextframe() {
    if (theAnim.moreFrames()) {
    document.images[ theAnim.imageNum[theAnim.frameIndex] ].src = theAnim.imageSrc[theAnim.frameIndex];
    theAnim.frameIndex++;
    setTimeout('theAnim.drawNextFrame()', 30);
    } else {
    theAnim.alreadyPlaying = false;
    }
    }

    drawboard();
    var theAnim = new Animation();
    message("You may begin! Select a piece to move.");
    document.disp.message.value = "";
    // End –>
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 27 августа 2009 г. 1:38, спустя 1 минуту 17 секунд

    }/{EHR, блин, я подумал это задание "два массива которые надо в один цикл слить в один"
    adw/0
  • }/{EHR

    Сообщения: 734 Репутация: N Группа: Адекваты

    Spritz 27 августа 2009 г. 1:42, спустя 3 минуты 25 секунд


    }/{EHR, блин, я подумал это задание "два массива которые надо в один цикл слить в один"

    http://mysite.e-stile.ru/files/disktowershanoi.htm - вот игра )
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 27 августа 2009 г. 1:45, спустя 2 минуты 42 секунды

    А, как-то играл в нее, было интересно
    Спустя 18 сек.
    только не в эту реализацию… эта реализация убога
    adw/0
  • }/{EHR

    Сообщения: 734 Репутация: N Группа: Адекваты

    Spritz 27 августа 2009 г. 2:01, спустя 16 минут 11 секунд


    А, как-то играл в нее, было интересно
    Спустя 18 сек.
    только не в эту реализацию… эта реализация убога
    Тоже играл, только во flash версию )
  • Professor

    Сообщения: 2089 Репутация: N Группа: Адекваты

    Spritz 27 августа 2009 г. 2:55, спустя 53 минуты 56 секунд

    Ты не правильно прочитал задание. Необходимо юзать Драг энд дроп.
    Что бы мышкой перемещать.

Пожалуйста, авторизуйтесь, чтобы написать комментарий!