¡°´ò·É»ú¡±ÓÎÏ·×Ô½µÉúÒÔÀ´£¬±ã³ÉΪÁËÐí¶à¿ª·¢ÕßÈëÃűà³ÌµÄ¾µäÏîÄ¿£¬ÓÈÆäÔÚWebǰ¶ËÁìÓò£¬ÓÉÓÚËü¼òÆÓ¡¢Ö±¹ÛÇÒ¸»ÓÐÌôÕ½ÐÔ¡£Ê¹ÓÃJavaScriptʵÏÖÒ»¿î¡°´ò·É»ú¡±ÓÎÏ·£¬²»µ«¿ÉÒÔÌá¸ßÄãµÄ±à³ÌÄÜÁ¦£¬»¹ÄÜÔöÇ¿Äã¶Ôä¯ÀÀÆ÷»æÍ¼ºÍ½»»¥µÄÃ÷È·¡£
×Åʵ£¬ÕâÊÇÒ»¿îºÜÊǼòÆÓµÄ·É»úÉä»÷ÓÎÏ·¡£Íæ¼Ò¿ØÖÆÒ»¼Ü·É»úÔÚÆÁÄ»µ×²¿×óÓÒÒÆ¶¯£¬·¢Éä×Óµ¯»÷ÂäËæ»ú·ºÆðµÄµÐ»ú¡£Ëæ×ÅÓÎÏ·¾ÙÐУ¬µÐʱ»úÖð½¥ÔöÌíºÍ±äµÃ¸üÄÑ£¬Íæ¼ÒÐèÒªÒ»Ö±·´Ó¦ºÍÕ½ÂÔµ÷½â¡£ÓÎÏ·ÒÔÖ±¹ÛµÄ¿ØÖƺ͸»ºñµÄ¶¯»Ð§¹ûÊܵ½¿í´óÍæ¼Òϲ»¶¡£
Canvas»²¼ÊÖÒÕ£ºÊ¹ÓÃHTML5µÄCanvasAPI»æÖÆÓÎÏ·»Ã棬°üÀ¨·É»ú¡¢×Óµ¯ºÍµÐ»úµÄͼÏñ¡£ÕâÒ»ÊÖÒÕÊÇʵÏÖ2DÓÎÏ·¶¯»µÄ»ù´¡¡£¶¯»Ñ»·£ºÊ¹ÓÃrequestAnimationFrameʵÏÖÓÎÏ·Ö¡ÂÊ¿ØÖÆ£¬ÈÃ»ÃæÁ÷ͨÁ¬¹á¡£ÊÂÎñ¼àÌý£º¼àÌý¼üÅÌÊÂÎñ£¬ÊµÏÖ×óÓÒÒÆ¶¯ºÍ·¢Éä×Óµ¯¹¦Ð§£¬°ü¹ÜÍæ¼Ò²Ù×÷µÄʵʱÏìÓ¦¡£
Åöײ¼ì²â£ºÅжÏ×Óµ¯ÊÇ·ñ»÷Öелú£¬ÅöײºóµÐ»ú±¬Õ¨£¬µÃ·ÖÔöÌí¡£µÐ»úÌìÉúÓë×Ô½ç˵Âß¼£º¶¯Ì¬ÌìÉúµÐ»ú£¬²¢ÊµÏÖ²î±ðËÙÂÊ¡¢¾Þϸ¡¢·ºÆðƵÂÊ£¬ÌáÉýÓÎÏ·ÄѶȡ£ÓÎϷ״̬ÖÎÀí£º¼à¿ØÓÎÏ·ÊÇ·ñ¿¢Ê¡¢ÔÝÍ£»ò¼ÌÐø£¬È·±£Âß¼ÍêÕû¡£
Äã¿ÉÒÔ´ÓÒ»¸ö¼òÆÓ°æ±¾×îÏÈ£¬ºÃ±ÈÖ»È÷ɻú×óÓÒÒÆ¶¯²¢·¢Éä×Óµ¯£¬ÊµÏÖ³¡¾°Ñ»·¡£Öð²½¼ÓÈëµÐ»úÌìÉú¡¢Åöײ¼ì²â¡¢µÃ·Öϵͳ£¬×îÖÕ´òÔìÒ»¸öÍêÕûµÄ¡¢¸»ÓÐÒâ¼ûÒâÒåÐԵĴò·É»úÓÎÏ·¡£
ÍýÏë½çÃæ¼Ü¹¹£º»²¼ÔÚÄÇÀ°´Å¥Ôõô¿ØÖÆ£¿´î½¨»ù±¾»Ã棺»³ö·É»úºÍÅä¾°¡£ÊµÏֲٿأº¼àÌý¼üÅÌÊÂÎñ£¬¿ØÖÆ·É»úÒÆ¶¯¡£Ìí¼Ó×Óµ¯Âß¼£º·¢Éä¡¢ÒÆ¶¯ºÍɨ³ý¡£ÔöÌíµÐ»ú£ºËæ»ú·ºÆðºÍÒÆ¶¯¡£Åöײ¼ì²â£ºÅжÏ×Óµ¯ÊÇ·ñ»÷Öелú¡£Í³¼Æ·ÖÊý£º»÷ÖкóµÃ·ÖÔöÌí£¬ÌáÉý»¥¶¯ÐÔ¡£
Ã÷È·ÕâЩ֪ʶµãºÍÊÖÒÕÄѵãºó£¬±ãÄÜÃ÷È·ÓÃJavaScript´òÔìÒ»¿îÊôÓÚ×Ô¼ºµÄ¡°´ò·É»ú¡±ÓÎÏ·µÄÂó̡£ÎÒÃǽ«½øÈëµÚ¶þ²¿·Ö£¬Ïêϸ½â˵ÏêϸµÄ´úÂëʵÏÖÓëÓÅ»¯¼¼ÇÉ¡£
ʵս½â˵£ºÓÃJavaScript´òÔì8x8x·É»ú´óÕ½µÄ½¹µã´úÂëÓë¼¼ÇÉ
ÔÚµÚÒ»²¿·ÖÖУ¬ÎÒÃÇÊáÀíÁË¡°´ò·É»ú¡±ÓÎÏ·µÄ»ù´¡ÊÖÒÕµãºÍÉè¼ÆË¼Ð÷¡£ÏÖÔÚ£¬Õýʽ½øÈëʵ²Ù»·½Ú£¬ÒÔ´úÂëϸ½Ú×ÊÖúÄã´î½¨Ò»¿î»ù±¾µÄ8x8x·É»ú´óÕ½ÓÎÏ·Ä£×Ó¡£
constcanvas=document.getElementById('gameCanvas');constctx=canvas.getContext('2d');constplayer={x:180,y:550,width:40,height:40,speed:5,movingLeft:false,movingRight:false};letbullets=[];letenemies=[];letscore=0;letgameOver=false;
document.addEventListener('keydown',(e)=>{if(e.key==='ArrowLeft')player.movingLeft=true;if(e.key==='ArrowRight')player.movingRight=true;if(e.key===''){shootBullet();}});document.addEventListener('keyup',(e)=>{if(e.key==='ArrowLeft')player.movingLeft=false;if(e.key==='ArrowRight')player.movingRight=false;});
functionupdatePlayer(){if(player.movingLeft&&player.x>0)player.x-=player.speed;if(player.movingRight&&player.x+player.width
ʹÓÃrequestAnimationFrameäÖȾ¶¯»£º
functiongameLoop(){if(gameOver)return;ctx.clearRect(0,0,canvas.width,canvas.height);updatePlayer();drawPlayer();updateBullets();spawnEnemies();checkCollisions();//ÖØ¸´Å²ÓÃrequestAnimationFrame(gameLoop);}
functiondrawPlayer(){ctx.fillStyle='blue';ctx.fillRect(player.x,player.y,player.width,player.height);}
functionupdateBullets(){bullets.forEach((b,index)=>{b.y-=b.speed;if(b.y+b.height<0){bullets.splice(index,1);}else{ctx.fillStyle='red';ctx.fillRect(b.x,b.y,b.width,b.height);}});}
functionspawnEnemies(){if(Math.random()<0.02){//ÿ֡±¬·¢¸ÅÂÊconstenemyX=Math.random()*(canvas.width-40);enemies.push({x:enemyX,y:0,width:40,height:40,speed:2+Math.random()*3});}enemies.forEach((enemy,index)=>{enemy.y+=enemy.speed;if(enemy.y>canvas.height){enemies.splice(index,1);//¿ÉÒÔÉ趨ÉúÃüÖµ¡¢ÓÎÏ·¿¢ÊÂÂß¼}else{ctx.fillStyle='green';ctx.fillRect(enemy.x,enemy.y,enemy.width,enemy.height);}});}
functioncheckCollisions(){bullets.forEach((b,bIndex)=>{enemies.forEach((e,eIndex)=>{if(b.xe.x&&b.ye.y){//ÅöײÀÖ³Éenemies.splice(eIndex,1);bullets.splice(bIndex,1);score+=10;//¿ÉÒÔÌí¼Ó±¬Õ¨¶¯»}});});}
ÔöÌí²î±ðÄѶȵĵлú£¬ºÃ±ÈËÙÂʸü¿ì»ò¾Þϸ²î±ð¡£ÊµÏÖ¶àÖÖÎäÆ÷»òÌØÊâÊÖÒÕ¡£Ìí¼ÓÅä¾°ÒôÀÖºÍÒôЧ£¬ÔöÇ¿ÌåÑé¸Ð¡£ÊµÏÖÔÝÍ£¡¢ÖØÆô¡¢ÉúÑĸ߷ֵȹ¦Ð§¡£
ÕâÖ»ÊÇÒ»¸ö»ù´¡¼Ü¹¹£¬ÕæÕýµÄ´ò·É»úÓÎÏ·»¹¿ÉÒÔ¼ÓÈ븻ºñµÄ¶¯»Ð§¹û¡¢UI½çÃæ¡¢¹Ø¿¨Éè¼ÆºÍÁªÍø¶ÔÕ½¡£Í¨¹ýÒ»Ö±ÓÅ»¯´úÂë½á¹¹ºÍʵÑé²î±ðµÄÉè¼ÆÀíÄÄã»áÖð½¥ÕÆÎÕWeb¶ËÓÎÏ·¿ª·¢µÄ½¹µãÄÜÁ¦¡£
ÔÚһֱѧϰºÍʵ¼ùÖУ¬Äã¿ÉÒÔÓÃÕâÌ×»ù´¡£¬Ò»Á¬ÍêÉÆÊôÓÚ×Ô¼ºµÄ¡°´ò·É»ú¡±×÷Æ·¡£ÓÎÏ·²»µ«ÊÇÊÖÒÕµÄÌåÏÖ£¬Ò²ÊÇ´´Á¢Á¦µÄÕ¹ÏÖ¡£×½×¡Õâ¸öÏîÄ¿£¬ÓÃJavaScriptÈ¥Òý±¬ÄãµÄ¿ª·¢Ç±Á¦°É£¡