技术博客HTML

  <!DOCTYPE html>
  <html lang="en">
  <head>
  <meta charset="UTF-8">
  <title>贪吃蛇</title>
  <style type="text/css">
  *{margin:0;padding: 0;font-family: "Microsoft YaHei";}
  #page{margin-right: auto;margin-left: auto; margin-top: 20px;height: 600px; width: 980px; }
  #yard{ width: 800px;border: 1px solid gray;box-shadow: 0 0 10px black; float: right;}
  #mark{font-weight: 800;}
  #mark_con{ color: red; }
  button{width: 50px; }
  a{text-decoration:none;}
  </style>
  <script type="text/javascript">
  //伪常量
  var BLOCK_SIZE = 20; //格子大小
  var COLS = 40; //列数
  var ROWS = 30; //行数
  //变量
  var snakes = []; //保存蛇坐标
  var c = null; //绘图对象
  var toGo = 3; //行进方向
  var snakecount = 4; //蛇身数量
  var interval = null; //计时器
  var foodX = 0; //食物X轴坐标
  var foodY = 0; //食物Y轴坐标
  var oMark = null; //分数显示框
  var isPause = false; //是否暂停
  // 绘图函数
  function draw(){
  c.clearRect(0,0,BLOCK_SIZE * COLS, BLOCK_SIZE * ROWS);
  //画出横线
  for( var i = 1; i <= ROWS; i++ ) {
  c.beginPath();
  c.moveTo(0, i * BLOCK_SIZE);
  c.lineTo(BLOCK_SIZE * COLS, i * BLOCK_SIZE);
  c.strokeStyle = "gray";
  c.stroke();
  }
  //画出竖线
  for(var i = 1; i <= COLS; i++){
  c.beginPath();
  c.moveTo(i * BLOCK_SIZE, 0);
  c.lineTo(i * BLOCK_SIZE, BLOCK_SIZE * ROWS);
  c.stroke();
  }
  //画出蛇
  for (var i = 0; i < snakes.length; i++){
  c.beginPath();
  c.fillStyle = "green";
  c.fillRect(snakes[i].x, snakes[i].y, BLOCK_SIZE, BLOCK_SIZE);
  c.moveTo(snakes[i].x, snakes[i].y);
  c.lineTo(snakes[i].x + BLOCK_SIZE, snakes[i].y);
  c.lineTo(snakes[i].x + BLOCK_SIZE, snakes[i].y + BLOCK_SIZE);
  c.lineTo(snakes[i].x, snakes[i].y + BLOCK_SIZE);
  c.closePath();
  c.strokeStyle = "white";
  c.stroke();
  }
  //画出食物
  c.beginPath();
  c.fillStyle = "yellow";
  c.fillRect(foodX, foodY, BLOCK_SIZE, BLOCK_SIZE);
  c.moveTo(foodX, foodY);
  c.lineTo(foodX + BLOCK_SIZE, foodY);
  c.lineTo(foodX + BLOCK_SIZE, foodY + BLOCK_SIZE);
  c.lineTo(foodX, foodY + BLOCK_SIZE);
  c.closePath();
  c.strokeStyle = "red";
  c.stroke();
  }
  //游戏初始化
  function start(){
  for( var i = 0; i < snakecount; i++){
  snakes[i] = {x: i * BLOCK_SIZE, y: 0};
  }
  addFood();
  draw();
  oMark.innerHTML = 0;
  }
  //移动函数
  function move(){
  switch(toGo){
  case 1: //左边
  snakes.push({x: snakes[snakecount - 1].x - BLOCK_SIZE, y: snakes[snakecount - 1].y});
  break;
  case 2: //上边
  snakes.push({x: snakes[snakecount - 1].x, y: snakes[snakecount - 1].y - BLOCK_SIZE});
  break;
  case 3: //右边
  snakes.push({x: snakes[snakecount - 1].x + BLOCK_SIZE, y: snakes[snakecount - 1].y});
  break;
  case 4: //下边
  snakes.push({x: snakes[snakecount - 1].x, y: snakes[snakecount - 1].y + BLOCK_SIZE});
  break;
  default:;
  }
  snakes.shift();
  isEat();
  isDie();
  draw();
  }
  //吃到食物判断
  function isEat(){
  if (snakes[snakecount - 1].x == foodX && snakes[snakecount - 1].y == foodY) {
  oMark.innerHTML = (parseInt(oMark.innerHTML) + 1).toString();
  addFood();
  addSnake();
  }
  }
  //添加蛇身
  function addSnake(){
  snakecount++;
  snakes.unshift({x:BLOCK_SIZE * COLS, y:BLOCK_SIZE * ROWS});
  }
  //交互响应函数
  function keydown(keyCode){
  switch(keyCode){
  case 37: //左边
  if(toGo != 1 && toGo != 3) toGo = 1;break;
  case 38: //上边
  if(toGo != 2 && toGo != 4) toGo = 2;break;
  case 39: //右边
  if(toGo != 3 && toGo != 1) toGo = 3;break;
  case 40: //下的
  if(toGo != 4 && toGo != 2) toGo = 4;break;
  case 80: //开始/暂停
  if(isPause){
  interval = setInterval(move,100);
  isPause = false;
  document.getElementById(‘pause‘).innerHTML = "Pause";
  }else{
  clearInterval(interval);
  isPause = true;
  document.getElementById(‘pause‘).innerHTML = "Start";
  }
  break;
  }
  }
  //制造食物
  function addFood(){
  foodX = Math.floor(Math.random() * (COLS - 1)) * BLOCK_SIZE;
  foodY = Math.floor(Math.random() * (ROWS - 1)) * BLOCK_SIZE;
  // console.log(foodX + " -- " + foodY);
  }
  //死亡判断
  function isDie(){
  if(snakes[snakecount - 1].x == -20 || snakes[snakecount - 1].x == BLOCK_SIZE * COLS
  || snakes[snakecount - 1].y == -20 || snakes[snakecount - 1].y == BLOCK_SIZE * ROWS){
  alert("Game Over!");
  clearInterval(interval);
  }
  for(var i = 0; i < snakecount - 1; i++){
  if(snakes[snakecount - 1].x == snakes[i].x && snakes[snakecount - 1].y == snakes[i].y){
  clearInterval(interval);
  alert("Game Over!");
  }
  }
  }
  // 启动函数
  window.onload = function(){
  c = document.getElementById(‘canvas‘).getContext(‘2d‘);
  oMark = document.getElementById(‘mark_con‘);
  start();
  interval = setInterval(move,100);
  document.onkeydown = function(event){
  var event = event || window.event;
  keydown(event.keyCode);
  }
  }
  </script>
  </head>
  <body>
  <div id="page">
  <div id="yard"><canvas id="canvas" height="600px" width="800px"></canvas></div>
  <div id="help">
  <div id="mark">得分:<span id="mark_con"></span></div>
  <div id="helper">
  <table>
  <tr>
  <td></td>
  <td><button onclick="keydown(38);">上</button></td>
  <td></td>
  </tr>
  <tr>
  <td><button onclick="keydown(37);">左</button></td>
  <td><button onclick="keydown(80);" id="pause">暂停</button></td>
  <td><button onclick="keydown(39);">右</button></td>
  </tr>
  <tr>
  <td></td>
  <td><button onclick="keydown(40);">下</button></td>
  <td></td>
  </tr>
  </table><a href="index.html">再玩一次</a>
  </div>
  </div>
  </div>
  <div style="text-align:center;">
   
  </div>
   
   
  </body>
  </html>
时间: 2024-10-11 12:22:59

技术博客HTML的相关文章

手把手教你建github技术博客by hexo

适合人群 喜欢写Blog的人 有一定的编程基础 爱折腾的人 熟练使用版本控制Git 了解使用Github 熟悉基本的MarkDown语法 环境准备 安装Git 下载 msysgit 并执行即可完成安装. 安装Node.js 在 Windows 环境下安装 Node.js 非常简单,仅须下载安装文件并执行即可完成安装. 安装hexo 利用 npm 命令即可安装.(在任意位置点击鼠标右键,选择Git bash) npm install -g hexo 问题 * npm ERR! registry e

技术博客2015-11-03

今天在非常偶然的情况下点开了一个斯蒂芬库里第一次参加科比训练营的视频,本来只是抱着想看看科比怎么在当年还是年轻的库里面前倚老卖老的八卦新闻,没想到却看到了让我醍醐灌顶的超级励志大片.影片一开始一个“马后炮”的声音说当年第一次看到库里参加那个训练营,库里是如此的不起眼,甚至可以说是所有人里面最没有巨星气质的球员,却被他一眼看中,觉得这小伙骨骼惊奇,必有所为.一听就是事后诸葛亮,但此后的描述却让我对库里肃然起敬-希望说的是真的,或者我愿意相信是真的(1)当所有别的运动员都还在穿着拖鞋玩手机时,库里已

开始真正的技术博客之旅

想自己做个东西,小公司企业管理软件,借此地记录开发过程 操作系统:windows8.1 框架:struts2           版本struts-2.3.16.3 Hibernate4      版本hibernate-release-4.3.5.Final Spring            版本spring-framework-3.2.10 数据库:mysql          版本mysql-5.6.14 开发语言:Java         版本jdk-7u67-windows-x64

如何写出高质量的技术博客 这边文章出自http://www.jianshu.com/p/ae9ab21a5730 觉得不错直接拿过来了 好东西要大家分享嘛

    如何写出高质量的技术博客?答案是:如果你想,就一定能写出高质量的技术博客.看起来很唯心,但这就是事实.有足够愿力去做一件目标明确,有良好反馈系统的事情往往很简单.就是不停地训练,慢慢地,你自己就能找出规律和技巧.所以,要写出高质量的技术博客,首先要解决为什么要写的问题. 为什么要写 我一直很喜欢的一个学习方法是 Learning by teaching 一个课题,如果你能给不懂的人解释清楚,说明你对这个课题的理解足够深入.把一个课题展开来写,你可能会发现某些方面你还写不清楚,这往往说明你

程序猿的技术博客Android客户端--博客园篇

2015年尾了,闲了半年,也忙了半年 年尾了,趁着不忙的这段时间,好好梳理梳理 每天逛逛技术博客的习惯从大学一直延续到现在,博客园,csdn,iteye,51CTO,ITPUB之类的 浏览器里面一个个书签,每次打开又关上,一天天重复,一天天的了解着最新的技术资源 终于开始想着,开发一个Android的app来把这些资源整合起来,不仅能节约时间,还能趁机会好好检验下近一年来Android的技术 先上图,今天晚上才开始的 目前:暂时只有博客园首页的文章列表和文章详情的展示界面 主要涉及技术点: 1.

iOS大神技术博客

唐巧的技术博客 http://blog.devtang.com/atom.xml OneV's Den http://onevcat.com/atom.xml 破船之家 http://beyondvincent.com/atom.xml NSHipster http://nshipster.cn/feed.xml Limboy 无网不剩 http://feeds.feedburner.com/lzyy Lex iOS notes http://ios.lextang.com/rss 念茜的博客 

程序猿的技术博客Android客户端--CSDN篇

2016年了,新的一年,新的开始 技术博客Android客户端也在慢慢的完善着 先上图 主要新增: 1.CSDN博客文章列表和详情 2.侧滑新增系统设置 3.系统设置新增离线缓存,默认缓存50页数据 4.TextView中代码样式调整显示 主要涉及知识点: 1.本地数据缓存sqlite 2.本地缓存读取和清除系统缓存[应用缓存和内存占用和文件缓存以及数据库缓存] 待完成: 1.图片加载和禁用 2.文章评论列表 3.文章分享 4.文章本地收藏 本段代码对TextView中代码段的处理,摘选自网上一

论写技术博客与开源的关系

开源,代表着一种自信,好多公司不开源自己代码,除了涉密之外,很大程度上也有知道自己代码写的烂,不好意思开源的原因:同时开源也代表着一种无私,体现了对人类社会奉献的精神,比如Linus Benedict Torvalds开源了Linux: 而且我相信开源是技术发展的一种趋势,我坚信总会有一天,所有公司都将不再有涉密代码,所有代码全是开源,公司之间的竞争,将全部转移并体现在对资源的整合能力与对商品的营销上来. 其实在一定程度上来讲,写技术博客,也是一种开源:相信每一个写技术博客的同行,潜意识都有一种

UC技术博客开放通知

国内知名浏览器UC开放技术博客( http://tech.uc.cn/),技术博客所涵盖技术点有: Hadoop Linux MySQL 前端与客户端技术 图像处理 开发语言和框架 数据存储 数据结构与算法 服务器与代理服务器 网络编程 运维部署 如果大家想在技术上更多的与博文的作者交流,请关注新浪微博 @UC技术博客 UC技术博客开放通知,布布扣,bubuko.com

2015级同学建立技术博客

deadline 2017-03-31 12:00am 1.建立个人技术博客 在www.cnblogs.com上注册开设个人博客. 2.关于为何写技术博客请参考下述链接: http://www.cnblogs.com/rocedu/p/5145864.html http://www.cnblogs.com/xinz/p/3803035.html 3.写一篇随笔 根据上述两篇博客以及其中的跳转链接,任意选择一篇书写个人感想.