diff options
Diffstat (limited to 'js')
| -rw-r--r-- | js/lost.js | 453 |
1 files changed, 358 insertions, 95 deletions
| @@ -20,6 +20,27 @@ function oppositeDir( iDir ) | |||
| 20 | } | 20 | } |
| 21 | 21 | ||
| 22 | // | 22 | // |
| 23 | // Class: Signal | ||
| 24 | // | ||
| 25 | function Signal() | ||
| 26 | { | ||
| 27 | this.aSlot = new Array(); | ||
| 28 | } | ||
| 29 | |||
| 30 | Signal.prototype.connect = function connect( fSlot ) | ||
| 31 | { | ||
| 32 | this.aSlot.push( fSlot ); | ||
| 33 | } | ||
| 34 | |||
| 35 | Signal.prototype.call = function call() | ||
| 36 | { | ||
| 37 | for( let j = 0; j < this.aSlot.length; j++ ) | ||
| 38 | { | ||
| 39 | (this.aSlot[j])(); | ||
| 40 | } | ||
| 41 | } | ||
| 42 | |||
| 43 | // | ||
| 23 | // Class: Cell | 44 | // Class: Cell |
| 24 | // | 45 | // |
| 25 | function Cell() | 46 | function Cell() |
| @@ -99,6 +120,21 @@ Position.prototype.copy = function translate() | |||
| 99 | return new Position( this.iDims, ...this.aiValues.slice() ); | 120 | return new Position( this.iDims, ...this.aiValues.slice() ); |
| 100 | } | 121 | } |
| 101 | 122 | ||
| 123 | Position.prototype.equals = function equals( rhs ) | ||
| 124 | { | ||
| 125 | if( this.iDims != rhs.iDims && | ||
| 126 | this.aiValues.length != rhs.aiValues.length ) | ||
| 127 | return false; | ||
| 128 | |||
| 129 | for( let j = 0; j < this.aiValues.length; j++ ) | ||
| 130 | { | ||
| 131 | if( this.aiValues[j] != rhs.aiValues[j] ) | ||
| 132 | return false; | ||
| 133 | } | ||
| 134 | |||
| 135 | return true; | ||
| 136 | } | ||
| 137 | |||
| 102 | // | 138 | // |
| 103 | // Class: Map | 139 | // Class: Map |
| 104 | // | 140 | // |
| @@ -106,6 +142,9 @@ function Map( Dimensions ) | |||
| 106 | { | 142 | { |
| 107 | // Store dimensional data | 143 | // Store dimensional data |
| 108 | this.Dimensions = Dimensions; | 144 | this.Dimensions = Dimensions; |
| 145 | this.aWorms = new Array(); | ||
| 146 | this.pPlayer = null; | ||
| 147 | this.ePlayerMoved = new Signal(); | ||
| 109 | 148 | ||
| 110 | // Compute the total number of cells | 149 | // Compute the total number of cells |
| 111 | let iTotalSize = 1; | 150 | let iTotalSize = 1; |
| @@ -132,6 +171,36 @@ Map.prototype.getSize = function getSize( iDim ) | |||
| 132 | return this.Dimensions.get( iDim ); | 171 | return this.Dimensions.get( iDim ); |
| 133 | } | 172 | } |
| 134 | 173 | ||
| 174 | Map.prototype.getPlayerPos = function getPlayerPos() | ||
| 175 | { | ||
| 176 | return this.pPlayer; | ||
| 177 | } | ||
| 178 | |||
| 179 | Map.prototype.setPlayerPos = function setPlayerPos( pNewPos ) | ||
| 180 | { | ||
| 181 | this.pPlayer = pNewPos; | ||
| 182 | this.ePlayerMoved.call(); | ||
| 183 | } | ||
| 184 | |||
| 185 | Map.prototype.movePlayer = function movePlayer( iDim, iDelta ) | ||
| 186 | { | ||
| 187 | let cCur = this.get( this.pPlayer ); | ||
| 188 | |||
| 189 | let iBit = iDim*2; | ||
| 190 | if( iDelta > 0 ) | ||
| 191 | iBit++; | ||
| 192 | |||
| 193 | if( (cCur.iWalls&(1<<iBit)) === 0 ) | ||
| 194 | return; | ||
| 195 | |||
| 196 | let iNewX = this.pPlayer.get( iDim ) + iDelta; | ||
| 197 | if( iNewX < 0 || iNewX >= this.getSize( iDim ) ) | ||
| 198 | return; | ||
| 199 | |||
| 200 | this.pPlayer.add( iDim, iDelta ); | ||
| 201 | this.ePlayerMoved.call(); | ||
| 202 | } | ||
| 203 | |||
| 135 | Map.prototype.isInside = function isInside( Position ) | 204 | Map.prototype.isInside = function isInside( Position ) |
| 136 | { | 205 | { |
| 137 | if( Position.getDims() != this.Dimensions.getDims() ) | 206 | if( Position.getDims() != this.Dimensions.getDims() ) |
| @@ -174,6 +243,39 @@ Map.prototype.get = function get( Position ) | |||
| 174 | return this.aCell[this.getIndex( Position )]; | 243 | return this.aCell[this.getIndex( Position )]; |
| 175 | } | 244 | } |
| 176 | 245 | ||
| 246 | Map.prototype.addWorm = function addWorm( pStart ) | ||
| 247 | { | ||
| 248 | if( this.aWorms.length === 0 ) | ||
| 249 | { | ||
| 250 | this.pPlayer = pStart; | ||
| 251 | } | ||
| 252 | let iNewId = this.aWorms.length+1; | ||
| 253 | this.aWorms.push( | ||
| 254 | new Worm( | ||
| 255 | iNewId, | ||
| 256 | pStart, | ||
| 257 | this | ||
| 258 | ) | ||
| 259 | ); | ||
| 260 | return iNewId; | ||
| 261 | } | ||
| 262 | |||
| 263 | Map.prototype.buildMaze = function buildMaze() | ||
| 264 | { | ||
| 265 | do | ||
| 266 | { | ||
| 267 | for( let j = 0; j < this.aWorms.length; j++ ) | ||
| 268 | { | ||
| 269 | if( !this.aWorms[j].timestep() ) | ||
| 270 | { | ||
| 271 | this.aWorms.splice( j, 1 ); | ||
| 272 | j--; | ||
| 273 | } | ||
| 274 | } | ||
| 275 | } while( this.aWorms.length > 0 ); | ||
| 276 | this.connect( 1, 2 ); | ||
| 277 | } | ||
| 278 | |||
| 177 | Map.prototype.connect = function connect( iWormId1, iWormId2 ) | 279 | Map.prototype.connect = function connect( iWormId1, iWormId2 ) |
| 178 | { | 280 | { |
| 179 | let p = new Position( this.getDims() ); | 281 | let p = new Position( this.getDims() ); |
| @@ -376,12 +478,41 @@ Render.prototype.render = function render() | |||
| 376 | { | 478 | { |
| 377 | } | 479 | } |
| 378 | 480 | ||
| 481 | function createMoveButton( rMap, iDim, iDir, sLabel ) | ||
| 482 | { | ||
| 483 | let btn = document.createElement('button'); | ||
| 484 | btn.addEventListener( | ||
| 485 | 'click', | ||
| 486 | Map.prototype.movePlayer.bind( | ||
| 487 | rMap, | ||
| 488 | iDim, | ||
| 489 | iDir | ||
| 490 | ) | ||
| 491 | ); | ||
| 492 | if( sLabel === null || sLabel === '' ) | ||
| 493 | { | ||
| 494 | btn.appendChild( | ||
| 495 | document.createTextNode('Dim ' + (j+1) + ': -') | ||
| 496 | ); | ||
| 497 | } | ||
| 498 | else | ||
| 499 | { | ||
| 500 | btn.appendChild( | ||
| 501 | document.createTextNode( sLabel ) | ||
| 502 | ); | ||
| 503 | } | ||
| 504 | return btn; | ||
| 505 | } | ||
| 506 | |||
| 379 | // | 507 | // |
| 380 | // Class: RenderCanvas2D | 508 | // Class: RenderCanvas2D |
| 381 | // | 509 | // |
| 382 | function RenderCanvas2D( rMap, eParent ) | 510 | function RenderCanvas2D( rMap, eParent ) |
| 383 | { | 511 | { |
| 384 | Render.call( this, rMap, eParent ); | 512 | Render.call( this, rMap, eParent ); |
| 513 | this.rMap.ePlayerMoved.connect( | ||
| 514 | RenderCanvas2D.prototype.render.bind( this ) | ||
| 515 | ); | ||
| 385 | 516 | ||
| 386 | this.eCanvas = null; | 517 | this.eCanvas = null; |
| 387 | this.ctx = null; | 518 | this.ctx = null; |
| @@ -390,9 +521,13 @@ function RenderCanvas2D( rMap, eParent ) | |||
| 390 | 521 | ||
| 391 | this.iIconSize = 11; | 522 | this.iIconSize = 11; |
| 392 | this.iBorder = 3; | 523 | this.iBorder = 3; |
| 524 | this.iIconSquare = Math.ceil( | ||
| 525 | Math.sqrt((this.rMap.getDims()-2)*2 + 1) | ||
| 526 | ); | ||
| 527 | |||
| 393 | this.iCellSize = | 528 | this.iCellSize = |
| 394 | this.iBorder + | 529 | this.iBorder + |
| 395 | (this.rMap.getDims()-2)*2*(this.iIconSize+this.iBorder); | 530 | this.iIconSquare*(this.iIconSize+this.iBorder); |
| 396 | 531 | ||
| 397 | this.eCanvas = document.createElement('canvas'); | 532 | this.eCanvas = document.createElement('canvas'); |
| 398 | this.eCanvas.width = this.iCellSize*this.rMap.getSize( 0 ); | 533 | this.eCanvas.width = this.iCellSize*this.rMap.getSize( 0 ); |
| @@ -408,24 +543,88 @@ function RenderCanvas2D( rMap, eParent ) | |||
| 408 | eParent.appendChild( document.createElement('br') ); | 543 | eParent.appendChild( document.createElement('br') ); |
| 409 | eParent.appendChild( btnBox ); | 544 | eParent.appendChild( btnBox ); |
| 410 | 545 | ||
| 411 | for( let j = 2; j < this.rMap.getDims(); j++ ) | 546 | let cardTbl; |
| 547 | let cardRow; | ||
| 548 | let cardTd; | ||
| 549 | |||
| 550 | cardTbl = document.createElement('table'); | ||
| 551 | cardRow = document.createElement('tr'); | ||
| 552 | cardTbl.appendChild( cardRow ); | ||
| 553 | cardRow.appendChild( document.createElement('td') ); | ||
| 554 | cardTd = document.createElement('td'); | ||
| 555 | cardTd.appendChild( createMoveButton( this.rMap, 1, -1, "North" ) ); | ||
| 556 | cardRow.appendChild( cardTd ); | ||
| 557 | cardRow.appendChild( document.createElement('td') ); | ||
| 558 | if( this.rMap.getDims() >= 3 ) | ||
| 412 | { | 559 | { |
| 413 | for( let k = 0; k < this.rMap.getSize( j ); k++ ) | 560 | cardTd = document.createElement('td'); |
| 414 | { | 561 | cardTd.appendChild( createMoveButton( this.rMap, 2, -1, "Up" ) ); |
| 415 | let btn = document.createElement('button'); | 562 | cardRow.appendChild( cardTd ); |
| 416 | btn.addEventListener( | 563 | } |
| 417 | 'click', | 564 | |
| 418 | RenderCanvas2D.prototype.setFloor.bind( | 565 | cardRow = document.createElement('tr'); |
| 419 | this, | 566 | cardTbl.appendChild( cardRow ); |
| 420 | [k] | 567 | cardTd = document.createElement('td'); |
| 421 | ) | 568 | cardTd.appendChild( createMoveButton( this.rMap, 0, -1, "West" ) ); |
| 422 | ); | 569 | cardRow.appendChild( cardTd ); |
| 423 | btn.appendChild( | 570 | cardRow.appendChild( document.createElement('td') ); |
| 424 | document.createTextNode('Floor ' + (k+1) ) | 571 | cardTd = document.createElement('td'); |
| 425 | ); | 572 | cardTd.appendChild( createMoveButton( this.rMap, 0, 1, "East" ) ); |
| 426 | btnBox.appendChild( btn ); | 573 | cardRow.appendChild( cardTd ); |
| 427 | } | 574 | if( this.rMap.getDims() >= 3 ) |
| 575 | { | ||
| 576 | cardRow.appendChild( document.createElement('td') ); | ||
| 577 | } | ||
| 578 | |||
| 579 | cardRow = document.createElement('tr'); | ||
| 580 | cardTbl.appendChild( cardRow ); | ||
| 581 | cardRow.appendChild( document.createElement('td') ); | ||
| 582 | cardTd = document.createElement('td'); | ||
| 583 | cardTd.appendChild( createMoveButton( this.rMap, 1, 1, "South" ) ); | ||
| 584 | cardRow.appendChild( cardTd ); | ||
| 585 | cardRow.appendChild( document.createElement('td') ); | ||
| 586 | if( this.rMap.getDims() >= 3 ) | ||
| 587 | { | ||
| 588 | cardTd = document.createElement('td'); | ||
| 589 | cardTd.appendChild( createMoveButton( this.rMap, 2, 1, "Down" ) ); | ||
| 590 | cardRow.appendChild( cardTd ); | ||
| 428 | } | 591 | } |
| 592 | |||
| 593 | btnBox.appendChild( cardTbl ); | ||
| 594 | |||
| 595 | let names = []; | ||
| 596 | names[6] = 'In'; | ||
| 597 | names[7] = 'Out'; | ||
| 598 | names[8] = 'Through'; | ||
| 599 | names[9] = 'Around'; | ||
| 600 | |||
| 601 | cardTbl = document.createElement('table'); | ||
| 602 | for( let j = 3; j < this.rMap.getDims(); j++ ) | ||
| 603 | { | ||
| 604 | cardRow = document.createElement('tr'); | ||
| 605 | cardTbl.appendChild( cardRow ); | ||
| 606 | |||
| 607 | let label; | ||
| 608 | |||
| 609 | if( typeof names[j*2] === 'undefined' ) | ||
| 610 | label = 'Dim ' + (j+1) + ': -'; | ||
| 611 | else | ||
| 612 | label = names[j*2]; | ||
| 613 | |||
| 614 | cardTd = document.createElement('td'); | ||
| 615 | cardTd.appendChild( createMoveButton( this.rMap, j, -1, label ) ); | ||
| 616 | cardRow.appendChild( cardTd ); | ||
| 617 | |||
| 618 | if( typeof names[j*2+1] === 'undefined' ) | ||
| 619 | label = 'Dim ' + (j+1) + ': +'; | ||
| 620 | else | ||
| 621 | label = names[j*2+1]; | ||
| 622 | |||
| 623 | cardTd = document.createElement('td'); | ||
| 624 | cardTd.appendChild( createMoveButton( this.rMap, j, 1, label ) ); | ||
| 625 | cardRow.appendChild( cardTd ); | ||
| 626 | } | ||
| 627 | btnBox.appendChild( cardTbl ); | ||
| 429 | } | 628 | } |
| 430 | 629 | ||
| 431 | RenderCanvas2D.prototype = Object.create(Render.prototype); | 630 | RenderCanvas2D.prototype = Object.create(Render.prototype); |
| @@ -437,76 +636,156 @@ RenderCanvas2D.prototype.render = function render() | |||
| 437 | this.ctx.clearRect( 0, 0, this.eCanvas.width, this.eCanvas.height ); | 636 | this.ctx.clearRect( 0, 0, this.eCanvas.width, this.eCanvas.height ); |
| 438 | this.ctx.beginPath(); | 637 | this.ctx.beginPath(); |
| 439 | 638 | ||
| 440 | let p = this.pExtPosition.copy(); | 639 | let p; |
| 640 | if( this.rMap.pPlayer === null ) | ||
| 641 | p = this.pExtPosition.copy(); | ||
| 642 | else | ||
| 643 | p = this.rMap.pPlayer.copy(); | ||
| 644 | |||
| 645 | for( let x = 0; x < this.rMap.getSize( 0 ); x++ ) | ||
| 441 | { | 646 | { |
| 442 | for( let x = 0; x < this.rMap.getSize( 0 ); x++ ) | 647 | for( let y = 0; y < this.rMap.getSize( 1 ); y++ ) |
| 443 | { | 648 | { |
| 444 | for( let y = 0; y < this.rMap.getSize( 1 ); y++ ) | 649 | p.set( 0, x ); |
| 650 | p.set( 1, y ); | ||
| 651 | let c = this.rMap.get( p ); | ||
| 652 | if( (c.iWalls&1) === 0 && x === 0) | ||
| 445 | { | 653 | { |
| 446 | p.set( 0, x ); | 654 | this.ctx.moveTo( x*iSize, y*iSize ); |
| 447 | p.set( 1, y ); | 655 | this.ctx.lineTo( x*iSize, (y+1)*iSize ); |
| 448 | let c = this.rMap.get( p ); | 656 | } |
| 449 | if( (c.iWalls&1) === 0 && x === 0) | 657 | if( (c.iWalls&2) === 0 ) |
| 450 | { | 658 | { |
| 451 | this.ctx.moveTo( x*iSize, y*iSize ); | 659 | this.ctx.moveTo( (x+1)*iSize, y*iSize ); |
| 452 | this.ctx.lineTo( x*iSize, (y+1)*iSize ); | 660 | this.ctx.lineTo( (x+1)*iSize, (y+1)*iSize ); |
| 453 | } | 661 | } |
| 454 | if( (c.iWalls&2) === 0 ) | 662 | if( (c.iWalls&4) === 0 && y === 0) |
| 455 | { | 663 | { |
| 456 | this.ctx.moveTo( (x+1)*iSize, y*iSize ); | 664 | this.ctx.moveTo( x*iSize, y*iSize ); |
| 457 | this.ctx.lineTo( (x+1)*iSize, (y+1)*iSize ); | 665 | this.ctx.lineTo( (x+1)*iSize, y*iSize ); |
| 458 | } | 666 | } |
| 459 | if( (c.iWalls&4) === 0 && y === 0) | 667 | if( (c.iWalls&8) === 0 ) |
| 460 | { | 668 | { |
| 461 | this.ctx.moveTo( x*iSize, y*iSize ); | 669 | this.ctx.moveTo( x*iSize, (y+1)*iSize ); |
| 462 | this.ctx.lineTo( (x+1)*iSize, y*iSize ); | 670 | this.ctx.lineTo( (x+1)*iSize, (y+1)*iSize ); |
| 463 | } | 671 | } |
| 464 | if( (c.iWalls&8) === 0 ) | ||
| 465 | { | ||
| 466 | this.ctx.moveTo( x*iSize, (y+1)*iSize ); | ||
| 467 | this.ctx.lineTo( (x+1)*iSize, (y+1)*iSize ); | ||
| 468 | } | ||
| 469 | 672 | ||
| 470 | if( (c.iWalls&16) !== 0 ) | 673 | // Extended dimenisons (above 2 :-P) |
| 674 | let iIcon = 0; | ||
| 675 | for( let ed = 2; ed < this.rMap.getDims(); ed++ ) | ||
| 676 | { | ||
| 677 | if( (c.iWalls&(1<<(ed*2))) !== 0 ) | ||
| 471 | { | 678 | { |
| 472 | // Up | 679 | this.renderDirIcon( x, y, iIcon, ed*2 ); |
| 473 | let bx = x*iSize+this.iBorder; | ||
| 474 | let by = y*iSize+this.iBorder; | ||
| 475 | this.ctx.moveTo( | ||
| 476 | bx, | ||
| 477 | by+this.iIconSize | ||
| 478 | ); | ||
| 479 | this.ctx.lineTo( | ||
| 480 | bx+this.iIconSize/2, | ||
| 481 | by | ||
| 482 | ); | ||
| 483 | this.ctx.lineTo( | ||
| 484 | bx+this.iIconSize, | ||
| 485 | by+this.iIconSize | ||
| 486 | ); | ||
| 487 | } | 680 | } |
| 488 | if( (c.iWalls&32) !== 0 ) | 681 | iIcon++; |
| 682 | if( (c.iWalls&(1<<(ed*2+1))) !== 0 ) | ||
| 489 | { | 683 | { |
| 490 | // Down | 684 | this.renderDirIcon( x, y, iIcon, ed*2+1 ); |
| 491 | let bx = x*iSize+this.iBorder*2+this.iIconSize; | ||
| 492 | let by = y*iSize+this.iBorder; | ||
| 493 | this.ctx.moveTo( | ||
| 494 | bx, | ||
| 495 | by | ||
| 496 | ); | ||
| 497 | this.ctx.lineTo( | ||
| 498 | bx+this.iIconSize/2, | ||
| 499 | by+this.iIconSize | ||
| 500 | ); | ||
| 501 | this.ctx.lineTo( | ||
| 502 | bx+this.iIconSize, | ||
| 503 | by | ||
| 504 | ); | ||
| 505 | } | 685 | } |
| 686 | iIcon++; | ||
| 506 | } | 687 | } |
| 507 | } | 688 | } |
| 508 | } | 689 | } |
| 509 | this.ctx.stroke(); | 690 | this.ctx.stroke(); |
| 691 | |||
| 692 | // Draw the player | ||
| 693 | if( this.rMap.pPlayer !== null ) | ||
| 694 | { | ||
| 695 | let bx = this.rMap.pPlayer.get(0)*iSize + | ||
| 696 | this.iBorder + (this.iIconSquare-1)*(this.iBorder+this.iIconSize); | ||
| 697 | let by = this.rMap.pPlayer.get(1)*iSize + | ||
| 698 | this.iBorder + (this.iIconSquare-1)*(this.iBorder+this.iIconSize); | ||
| 699 | this.rMap.pPlayer.equals( p ); | ||
| 700 | this.ctx.beginPath(); | ||
| 701 | this.ctx.ellipse( | ||
| 702 | bx+this.iIconSize*0.5, by+this.iIconSize*0.5, | ||
| 703 | this.iIconSize*0.4, this.iIconSize*0.4, | ||
| 704 | 0, | ||
| 705 | Math.PI*2.0, | ||
| 706 | false | ||
| 707 | ); | ||
| 708 | this.ctx.fill(); | ||
| 709 | } | ||
| 710 | } | ||
| 711 | |||
| 712 | RenderCanvas2D.prototype.renderDirIcon = function renderDirIcon( | ||
| 713 | x, y, iIcon, iDir ) | ||
| 714 | { | ||
| 715 | let bx = x*this.iCellSize + | ||
| 716 | this.iBorder + | ||
| 717 | (iIcon%this.iIconSquare)*(this.iIconSize+this.iBorder); | ||
| 718 | let by = y*this.iCellSize + | ||
| 719 | this.iBorder + | ||
| 720 | Math.floor(iIcon/this.iIconSquare)*(this.iIconSize+this.iBorder); | ||
| 721 | |||
| 722 | //this.ctx.rect(bx, by, this.iIconSize, this.iIconSize ); | ||
| 723 | switch( iDir ) | ||
| 724 | { | ||
| 725 | case 4: | ||
| 726 | // Up | ||
| 727 | this.ctx.moveTo( | ||
| 728 | bx, | ||
| 729 | by+this.iIconSize | ||
| 730 | ); | ||
| 731 | this.ctx.lineTo( | ||
| 732 | bx+this.iIconSize/2, | ||
| 733 | by | ||
| 734 | ); | ||
| 735 | this.ctx.lineTo( | ||
| 736 | bx+this.iIconSize, | ||
| 737 | by+this.iIconSize | ||
| 738 | ); | ||
| 739 | break; | ||
| 740 | |||
| 741 | case 5: | ||
| 742 | // Down | ||
| 743 | this.ctx.moveTo( | ||
| 744 | bx, | ||
| 745 | by | ||
| 746 | ); | ||
| 747 | this.ctx.lineTo( | ||
| 748 | bx+this.iIconSize/2, | ||
| 749 | by+this.iIconSize | ||
| 750 | ); | ||
| 751 | this.ctx.lineTo( | ||
| 752 | bx+this.iIconSize, | ||
| 753 | by | ||
| 754 | ); | ||
| 755 | break; | ||
| 756 | |||
| 757 | case 6: | ||
| 758 | // In | ||
| 759 | this.ctx.moveTo( | ||
| 760 | bx+this.iIconSize, | ||
| 761 | by | ||
| 762 | ); | ||
| 763 | this.ctx.lineTo( | ||
| 764 | bx, | ||
| 765 | by+this.iIconSize/2 | ||
| 766 | ); | ||
| 767 | this.ctx.lineTo( | ||
| 768 | bx+this.iIconSize, | ||
| 769 | by+this.iIconSize | ||
| 770 | ); | ||
| 771 | break; | ||
| 772 | |||
| 773 | case 7: | ||
| 774 | // Out | ||
| 775 | this.ctx.moveTo( | ||
| 776 | bx, | ||
| 777 | by | ||
| 778 | ); | ||
| 779 | this.ctx.lineTo( | ||
| 780 | bx+this.iIconSize, | ||
| 781 | by+this.iIconSize/2 | ||
| 782 | ); | ||
| 783 | this.ctx.lineTo( | ||
| 784 | bx, | ||
| 785 | by+this.iIconSize | ||
| 786 | ); | ||
| 787 | break; | ||
| 788 | } | ||
| 510 | } | 789 | } |
| 511 | 790 | ||
| 512 | RenderCanvas2D.prototype.setFloor = function setFloor( aFloor ) | 791 | RenderCanvas2D.prototype.setFloor = function setFloor( aFloor ) |
| @@ -521,29 +800,13 @@ RenderCanvas2D.prototype.setFloor = function setFloor( aFloor ) | |||
| 521 | // | 800 | // |
| 522 | // Initialize | 801 | // Initialize |
| 523 | // | 802 | // |
| 524 | let p = new Position( 3, 15, 15, 3 ); | 803 | let p = new Position( 4, 3, 3, 3, 3 ); |
| 525 | let m = new Map( p ); | 804 | let m = new Map( p ); |
| 526 | let exit1 = new Position( p.getDims() ); | 805 | let exit1 = new Position( p.getDims() ); |
| 527 | let exit2 = new Position( p.getDims() ); | 806 | let exit2 = new Position( p.getDims() ); |
| 528 | exit2.set( 1, p.get( 1 )-1 ); | 807 | exit2.set( 1, p.get( 1 )-1 ); |
| 529 | let w = [ | 808 | m.addWorm( exit1 ); |
| 530 | new Worm( 1, exit1, m ), | 809 | m.addWorm( exit2 ); |
| 531 | new Worm( 2, exit2, m ) | 810 | m.buildMaze(); |
| 532 | ]; | ||
| 533 | |||
| 534 | do | ||
| 535 | { | ||
| 536 | for( let j = 0; j < w.length; j++ ) | ||
| 537 | { | ||
| 538 | if( !w[j].timestep() ) | ||
| 539 | { | ||
| 540 | w.splice( j, 1 ); | ||
| 541 | j--; | ||
| 542 | } | ||
| 543 | } | ||
| 544 | } while( w.length > 0 ); | ||
| 545 | |||
| 546 | m.connect( 1, 2 ); | ||
| 547 | 811 | ||
| 548 | let rend = new RenderCanvas2D( m, document.body ); | 812 | let rend = new RenderCanvas2D( m, document.body ); |
| 549 | //rend.render( document.body ); | ||
