setDimension(550,400); $movie->setBackground(0,0,0); $movie->setRate(31); $picname="bomb.jpg"; $fp = fopen($picname,"rb"); $i3 = fread($fp,999999); $img = new SWFBitmap($i3); fclose($fp); function makeTile($r,$g,$b){ $sh1=new SWFShape(); $sh1->setLine(1,0,0,0); $sh1->setRightFill($r,$g,$b); $sh1->drawLine(16,0); $sh1->drawLine(0,16); $sh1->drawLine(-16,0); $sh1->drawLine(0,-16); $sp1= new SWFSprite(); $f1 = $sp1->add($sh1); $sp1->nextFrame(); return $sp1; } function makePackageTile(){ $sh1=new SWFShape(); $sh1->setLine(1,0,0,0); $sh1->setRightFill(0,0,0); $sh1->drawLine(16,0); $sh1->drawLine(0,16); $sh1->drawLine(-16,0); $sh1->drawLine(0,-16); $sh2=new SWFShape(); $sh2->setLine(1,0,0,0); $sh2->setRightFill(0,255,0); $sh2->movePenTo(-5,-5); $sh2->drawLine(10,0); $sh2->drawLine(0,10); $sh2->drawLine(-10,0); $sh2->drawLine(0,-10); $sp1= new SWFSprite(); $f1 = $sp1->add($sh1); $f1 = $sp1->add($sh2); $f1->rotate(45); $f1->move(8,8); $sp1->nextFrame(); return $sp1; } function makePlayerTile(){ $r=0;$g=255;$b=0; $sq=new SWFShape(); $sq->setRightFill(0,0,0); $sq->drawLine(16,0); $sq->drawLine(0,16); $sq->drawLine(-16,0); $sq->drawLine(0,-16); $sh1=new SWFShape(); $sh1->setLine(2,$r,$g,$b); // body1 $sh1->drawLine(0,4); // leg r $sh1->drawLine(3,3); $sh1->movePen(-3,-3); // leg l $sh1->drawLine(-3,3); $sh1->movePen(3,-4); // arm r $sh1->drawLine(4,-2); $sh1->movePen(-4,2); // arm l $sh1->drawLine(-4,-2); $sh1->movePen(4,2); // body2 $sh1->drawLine(0,-6); // head $sh1->setRightFill($r,$g,$b); $sh1->drawCircle(2); $sp1= new SWFSprite(); $f1 = $sp1->add($sq); $f1 = $sp1->add($sh1); $f1->move(9,7); $f1->scale(1.3,1.1); $sp1->nextFrame(); return $sp1; } // gameholder clip $gameHolderSprite= new SWFSprite(); $spPlayer=& makePlayerTile(); $spPackage=& makePackageTile (); $spWall=& makeTile (255,0,0); $spTarget=& makeTile (0,255,0); $r=0x33;$g=0xcc;$b=0x66; $c=new SWFShape(); $c->setRightFill($r,$g,$b); $c->drawCircle(6); $spBullet= new SWFSprite(); $f1 = $spBullet->add($c); $spBullet->nextFrame(); $spBomb= new SWFSprite(); $f1 = $spBomb->add($img); $spBomb->nextFrame(); for($i=1;$i<200;$i++){ $f1 = $gameHolderSprite->add($spWall); $f1->setName('wall' . $i); $f1->moveTo(-555,-555); }; for($i=1;$i<50;$i++){ $f1 = $gameHolderSprite->add($spTarget); $f1->setName('target' . $i); $f1->moveTo(-555,-555); }; for($i=1;$i<50;$i++){ $f1 = $gameHolderSprite->add($spPackage); $f1->setName('package' . $i); $f1->multColor(1,1,1,0.75); }; $f1 = $gameHolderSprite->add($spPlayer); $f1->setName('player'); //$f1->scaleTo(0.5,0.3); $f1->moveTo(-555,-555); $f3 = $gameHolderSprite->add($spBullet); $f3->setName('bullet'); $f3->moveTo(-555,-555); $f4 = $gameHolderSprite->add($spBomb); $f4->setName('bomb'); $f4->moveTo(-555,-555); $f2 = $movie->add($gameHolderSprite); $f2->setName('gameHolderClip'); $f2->moveTo(120,120); $gameHolderSprite->nextFrame(); // get as from external file(s) // I WROTE THIS ACTIONSCRIPT IN ONE AFTERNOON SO IT IS CRUDE // BUT IT WORKS AND I HAVE NO REASON TO REWRITE IT AT PRESENT // THE MAIN AIM WAS TO TEST IF MING COULD COMPILE IT (SUCCESS!) $strAction = " map='000011111:000010001:000014001:0011100411:0010040401:1110101101000111111:1000101101111100221:1040040000000000221:1111101110131100221:0000100000111111111:00001111111&'; /////{{{ init init(); function init(){ //mapPrefix='http://www16.brinkster.com/gazb/ming/sokfiles/'; // original line mapPrefix=''; // line for my site //mapPrefix=''; addClips(); clearScreen(); addLoadVars(); //lv.load(mapPrefix + 'screen.' + lv.num); _root.processData(_root.map); addSounds(); }; function addClips(){ // player clip actions gameHolderClip.player.onKeyDown = function(){ keydownrun=true; _root.kd=Key.getCode(); switch(Key.getCode()) { case 40: //Key.DOWN: _root.testPlayerMove(1,0); break; case 38: //Key.UP: _root.testPlayerMove(-1,0); break; case 37: //Key.LEFT: _root.testPlayerMove(0,-1); break; case 39: //Key.RIGHT: _root.testPlayerMove(0,1); break; case 85: //Key.u: undo(); break; case 82: //Key.r: redo(); break; case 66: //Key.b: bomb(); break; case 65: //Key.a: shoot left shootAll(0,-1); break; case 83: //Key.s: shoot right shootAll(0,1); break; case 87: //Key.w: shoot up shootAll(-1,0); break; case 90: //Key.z: shoot down shootAll(1,0); break; case 78: //Key.n: nextLevel(); break; case 80: //Key.p: previousLevel(); break; case 67: //Key.c: cheat(); break; case 32: //Key.SPACE: resetLevel(); break; } updateAfterEvent(); }; Key.addListener(gameHolderClip.player); }; //}}} /////{{{ addLoadVars function addLoadVars(){ // add loadvars to load the maps lv = new LoadVars(); lv.num=1; lv.onLoad = function(success) { if(success) { _root.processData(this.map); }}; }; //}}} /////{{{ addSounds function addSounds(){ // add sound effects _root.createEmptyMovieClip('shootclip',86785); shootclip.shoot = new Sound(); shootclip.shoot.loadSound('shoot.dat', false); shootclip.shoot.stop(); _root.createEmptyMovieClip('boombclip',86786); boombclip.boomb = new Sound(); boombclip.boomb.loadSound('boomb.dat', false); boomb.stop(); boombclip.boomb.setVolume(30); }; //}}} /////{{{ processData function processData(d){ _root.processDataRun=true; // turn map into 2d array and make a package array var tmp=d.split(':'); mapArray=[]; for(i=0;i<20;i++){ len=(20-tmp[i].length); for(l=0;l0){ //physically move the package _root.gameHolderClip['package'+ mov.bNum]._x +=(16*mov.w); _root.gameHolderClip['package'+ mov.bNum]._y +=(16*mov.h); // update array if(!doundo){ _root.packageArray[rph+mov.h+mov.h][rpw+mov.w+mov.w]= _root.packageArray[rph+mov.h][rpw+mov.w]; _root.packageArray[rph+mov.h][rpw+mov.w]=0; }else{ _root.packageArray[rph][rpw]=_root.packageArray[rph-mov.h][rpw-mov.w]; _root.packageArray[rph-mov.h][rpw-mov.w]=0; } } //reDisplay(); //tracegameHolderClip(); }; //}}} /////{{{ isWall function isWall(h,w){ return(_root.mapArray[h][w]==1); }; //}}} /////{{{ ispackage function ispackage(h,w){ return(_root.packageArray[h][w]>0); }; //}}} /////{{{ undo function undo(){ if(_root.recordMov.curPos >0){ var mov = _root.recordMov[_root.recordMov.curPos-1]; mov.h=-mov.h;mov.w=-mov.w; moveClips(mov,1); mov.h=-mov.h;mov.w=-mov.w; if(--_root.recordMov.curPos <0){_root.recordMov.curPos=0;} } }; //}}} /////{{{ redo function redo(){ if(_root.recordMov.curPos <_root.recordMov.length){ var mov = _root.recordMov[_root.recordMov.curPos]; moveClips(mov); if(++_root.recordMov.curPos >=_root.recordMov.length){ _root.recordMov.curPos=_root.recordMov.length;} } }; //}}} /////{{{ shootAll function shootAll(a,b){ if(!shooting){ shootclip.shoot.start(); shooting=true; var rph=_root.playerPos[0]; var rpw=_root.playerPos[1]; for(i=0;i<20;i++){ if(_root.mapArray[rph+(a*i)][rpw+(b*i)]==1 || _root.packageArray[rph+(a*i)][rpw+(b*i)]>0){ cntclip=_root.packageArray[rph+(a*i)][rpw+(b*i)]; _root.packageArray[rph+(a*i)][rpw+(b*i)]=0; break; } cnt++; } tb=gameHolderClip.bullet; tb._x=gameHolderClip.player._x+8; tb._y=gameHolderClip.player._y+8; tb._xscale=tb._yscale=20; tb.onEnterFrame=function(){ if(--cnt>=0){ this._x+=(b*16); this._y+=(a*16); tb._xscale+=2; tb._yscale+=2; }else{ _root.shooting=false; _root.gameHolderClip['package'+cntclip]._y=-5000; this.onEnterFrame=null; this._y=-7777; } }; } }; //}}} /////{{{ bomb function bomb(){ if(!bombing){ boombclip.boomb.start(); bombing=true; tb=gameHolderClip.bomb; tb._x=gameHolderClip.player._x-8; tb._y=gameHolderClip.player._y-8; cntbomb=5; tb.onEnterFrame=function(){ if(!--cntbomb){_root.bombing=false;this.onEnterFrame=null;this._x=this._y=-7777;} }; // remove wall tiles from map var rph=_root.playerPos[0]; var rpw=_root.playerPos[1]; if(_root.mapArray[rph-1][rpw-1]==1){_root.mapArray[rph-1][rpw-1]=0;}; if(_root.mapArray[rph-1][rpw]==1) {_root.mapArray[rph-1][rpw]=0;}; if(_root.mapArray[rph-1][rpw+1]==1){_root.mapArray[rph-1][rpw+1]=0;}; if(_root.mapArray[rph][rpw-1]==1){_root.mapArray[rph][rpw-1]=0;}; if(_root.mapArray[rph][rpw+1]==1){_root.mapArray[rph][rpw+1]=0;}; if(_root.mapArray[rph+1][rpw-1]==1){_root.mapArray[rph+1][rpw-1]=0;}; if(_root.mapArray[rph+1][rpw]==1){_root.mapArray[rph+1][rpw]=0;}; if(_root.mapArray[rph+1][rpw+1]==1){_root.mapArray[rph+1][rpw+1]=0;}; // move wall tiles offscreen var rpx=gameHolderClip['player']._x; var rpy=gameHolderClip['player']._y; for (var i = 1; i < 200; i++) { rwx=gameHolderClip['wall'+i]._x; rwy=gameHolderClip['wall'+i]._y; if(rwx >= rpx-16 && rwx <= rpx+16 ){ if(rwy >= rpy-16 && rwy <= rpy+16 ){ gameHolderClip['wall'+i]._y=-5000; } } } } }; //}}} /////{{{ cheat function cheat(){ disableKeys(); clearScreen(); if(++lv.num>10){lv.num=10;}; lv.load(mapPrefix + 'screen' + lv.num + '.txt'); }; //}}} /////{{{ testLevelComplete function testLevelComplete(){ for (var h = 0; h < 20; ++h) { for (var w = 0; w < 20; ++w) { if(packageArray[h][w] >0 ){ if(mapArray[h][w]!=2){return false;} } }} return true; }; //}}} /////{{{ nextLevel function nextLevel(){ if( testLevelComplete()){ disableKeys(); clearScreen(); if(++lv.num>10){lv.num=10;}; //lv.load(mapPrefix + 'screen.' + lv.num); lv.load(mapPrefix + 'screen' + lv.num + '.txt'); } }; //}}} /////{{{ previousLevel function previousLevel(){ disableKeys(); clearScreen(); if(--lv.num<1){lv.num=1;}; lv.load(mapPrefix + 'screen' + lv.num + '.txt'); }; "; // add actionscript to movie $movie->add(new SWFAction( $strAction)); // write out swf movie to file for page below $outfile="sokoban2.swf"; $movie->save($outfile,9); ?> Ming Demo output(); ?>

Ming Demo

Use Arrow Keys To Move Player
Standard Controls U : Undo | R : Redo | Space : Reset Level | N : Next Level | P : Previous Level
Add On Controls B : Blow Up Adjacent Walls | W : Shoot Up | Z : Shoot Down | A : Shoot L