英雄难过棍子关(课本案例)

末蓝、 2022-04-23 10:44 255阅读 0赞

一.主界面静态页面

1.1用HTML标签排版

  1. <div class="set-text">
  2. <h2 class="play-title">关卡1</h2>
  3. <a href="index.html">主菜单</a>
  4. </div>
  5. <div class="container">
  6. <div class="stick"></div>
  7. <div class="man"><img src="img/stick_stand.png"/></div>
  8. <div class="well-box"></div>
  9. </div>

1.2使用css样式设置背景样式,关卡等样式

  1. *{padding:0;margin:0;}
  2. .btn-box{width:500px;margin:50px auto;float: left;}
  3. button{
  4. margin-right:50px;
  5. font-size:16px;
  6. width:80px;
  7. height:80px;
  8. text-align:center;
  9. line-height:80px;
  10. color:#fff;
  11. font-weight:bold;
  12. border-radius:50%;
  13. }
  14. .btnClick{
  15. display:block;
  16. width:100px;
  17. height:105px;
  18. background:url(../images/btn-bg.png) no-repeat;
  19. margin-left:60%;
  20. margin-top:68px;
  21. cursor: pointer;
  22. }
  23. .btnClick2{
  24. display:block;
  25. width:100px;
  26. height:105px;
  27. background:url(../images/btn-bg2.png) no-repeat;
  28. margin-left:60%;
  29. margin-top:68px;
  30. cursor: pointer;
  31. }
  32. .bg1{background:url(../images/1.jpg) no-repeat;}
  33. .btn-main{margin-top:20px;}
  34. .container{
  35. position:fixed;
  36. bottom:0;
  37. left:0;
  38. height:35%;
  39. width:100%;
  40. }
  41. .stick{
  42. position:absolute;
  43. left:40px;
  44. bottom:100%;
  45. height:5px;
  46. width:0;
  47. background:#096;
  48. transform:rotate(-90deg);
  49. -ms-transform:rotate(-90deg); /*IE9*/
  50. -moz-transform:rotate(-90deg); /*Firefox*/
  51. -webkit-transform:rotate(-90deg); /*Ssfari and Chrome*/
  52. -o-transform:rotate(-90deg); /*Opera*/
  53. transform-origin:0 100%;
  54. -ms-transform-origin:0 100%;
  55. -moz-transform-origin:0 100%;
  56. -webkit-transform-origin:0 100%;
  57. -o-transform-origin:0 100%;
  58. transition:transform 0.35s linear;
  59. -moz-transition:transform 0.35s linear;
  60. -webkit-transition:transform 0.35s linear;
  61. -o-transition:transform 0.35s linear;
  62. }
  63. .stickDown{
  64. transform:rotate(0deg);
  65. -ms-transform:rotate(0deg);
  66. -moz-transform:rotate(0deg);
  67. -webkit-transform:rotate(0deg);
  68. -o-transform:rotate(0deg);
  69. }
  70. .man{
  71. position:absolute;
  72. left:0px;
  73. bottom:98%;
  74. width:65px;
  75. height:97px;
  76. }
  77. .man img{
  78. position:absolute;
  79. left:0;
  80. top:0;
  81. }
  82. .well-box{
  83. position:absolute;
  84. height:100%;
  85. left: 0px;
  86. }
  87. .well{
  88. position:absolute;
  89. height:100%;
  90. background:#000;
  91. width: 40px;
  92. }
  93. .well-box div:first-of-type{left:0px;}
  94. /*.well-box div:last-of-type{left: 400px;}*/

二.黑色柱子的动态实现
动态创建黑色柱子,每次创建四个,柱子之间的距离随机获取,柱子的宽度固定
2.1定义全局变量:表示关卡,柱子宽度的等等参数

  1. var stop=true; //按钮是否可以点击
  2. var number=0; //用于计算 移动到第几个柱子
  3. var leval=1; //设置关卡
  4. var weWidth=100; //设置柱子宽度

2.2 使用for循环动态创建4个柱子,柱子宽度,高度一致,两个柱子之间的距离使用random()随机获取

  1. for(var i=0;i<4;i++){
  2. var w=parseInt(Math.random()*end)+min; //获取随机值
  3. if(i==0){
  4. param+=('<div class="well" style="left:0px;width:'+wh+'px"></div>');//第一个柱子对象
  5. }else if(i==1){
  6. second=wh+w;
  7. param+=('<div class="well" style="left:'+second+'px;width:'+wh+'px"></div>');//第二个柱子对象
  8. }else if(i==2){
  9. third=second+wh+w;
  10. param+=('<div class="well" style="left:'+third+'px;width:'+wh+'px"></div>');//第三个柱子对象
  11. }else{
  12. forth=third+wh+w;
  13. param+=('<div class="well" style="left:'+forth+'px;width:'+wh+'px"></div>');//第四个柱子对象
  14. }
  15. }

三.制作棍子动画
按下鼠标棍子变长,松开鼠标棍子停止增长,并且棍子垂直倒下

3.1 按下按钮,使用控制元素滑动或自定义动画的效果使棍子变长

  1. //鼠标按下棍子变长
  2. $(".btnClick").mousedown(function(){
  3. $(".stick").animate({"width":"500px"},2500);//棍子变长
  4. });

3.2松开鼠标,棍子停止变长,并用CSS的效果使棍子倒下,倒下后英雄开始奔跑过关

  1. $(".btnClick").mouseup(function(){
  2. if(stop){
  3. $(".stick").stop();//停止棍子正在变长的动画,棍子停止变长
  4. stop = false;
  5. $(".stick").addClass("stickDown");//棍子倒下
  6. moveMan();
  7. }
  8. });

四. 制作英雄过关
技术分析

  1. 计算棍子长度,英雄沿着棍子开始奔跑,使用attr()设置图像,使用animate()设置英雄奔跑效果
  2. 如果棍子长度小于两个柱子之间的距离或者大于两个柱子之间的距离与柱子宽度之和,过关失败,否则过关成功。
  3. 过关失败,直接调用过关失败的函数
  4. 过关成功,柱子移动完毕调用过关成功的函数

    function moveMan() {

    1. var stickW = $(".stick").width();//获取倒下棍子的长度
    2. setTimeout(function () {
    3. $(".man").find("img").attr("src", "../images/stick.gif");
    4. $(".man").find("img").animate({"left": stickW + "px"}, 1000, function () {
    5. var wellL = $(".well").eq(1).offset().left;//柱子距离屏幕左侧的距离
    6. var wellO = $(".well").eq(0).offset().left;//柱子距离屏幕左侧的距离
    7. colWidth = $(".well").eq(0).width();
    8. var range = wellL - wellO - colWidth;//获取两个柱子之间的距离
    9. if ((stickW < range) || (stickW > wellL)) {//判断人物是否落下
    10. $(".man").animate({"bottom": "0px"});
    11. } else {//如果成功;人物变为初始
    12. $(".man").find("img").attr("src", "../images/stick_stand.png").css({"left": 0}).hide();
    13. $(".stick").removeClass("stickDown").width(0);//棍子变为初始值
    14. var oldL = $(".well-box").offset().left;
    15. $(".well-box").animate({"left": -wellL + oldL}, 500, function () {//柱子移动
    16. $(".man").find("img").show();
    17. stop = false;//按钮不可单击
    18. });
    19. }
    20. });
    21. }, 600);

    }

五.制作英雄过关成败的提示框
技术分析

5.1定义过关成功显示的文本数组和过关失败显示的文本数组

  1. var success = [
  2. '勇敢坚毅真正之才智乃刚毅之志向。 —— 拿破仑',
  3. '志向不过是记忆的奴隶,生气勃勃地降生,但却很难成长。 —— 莎士比亚',
  4. '骏马是跑出来的,强兵是打出来的。',
  5. '平时没有跑发卫千米,占时就难以进行一百米的冲刺。'
  6. ];
  7. var fail = [
  8. '志在峰巅的攀登者,不会陶醉在沿途的某个脚印之中。',
  9. '海浪为劈风斩浪的航船饯行,为随波逐流的轻舟送葬。',
  10. '努力和效果之间,永远有这样一段距离。成功和失败的唯一区别是,你能不能坚持挺过这段无法估计的距离。'
  11. ];

5.2过关成功,用随机函数获取成功数组中显示的文本,传递给显示提示框函数

  1. function successEvent(){
  2. var num=parseInt(Math.random()*5); //获取随机数0到5
  3. dialog(success[num],true); //调用弹框函数
  4. }

5.3过关失败,用随机函数获取失败数组中显示的文本,传递给显示提示框函数,并用CSS的动画使英雄掉下来。

  1. //判断人物是否落下
  2. var wellL=$(".well").eq(num+1).offset().left; //柱子距离屏幕左侧的距离
  3. var range=wellL-play.wellW; //获取两个柱子之间的距离
  4. if((stickW<range)||(stickW>wellL)){
  5. play.faildEvent(); //如果落下,调用失败数组
  6. }else{
  7. //成功
  8. }

六.重新玩本关游戏

  1. $(".play-agin").live("click",function(){
  2. play.initWell(weWidth);
  3. var num=parseInt(Math.random()*19+1);
  4. $("body").removeAttr("class");
  5. $("body").addClass("bg"+num);
  6. });

七.继续下一关的实现

  • 当前提示框隐藏,英雄和棍子都变为初始状态
  • 背景图片改变
  • 关卡加一

    $(“.go-next”).live(“click”,function(){

    1. ...
    2. $(".play-title").text("关卡"+leval);
    3. var num=parseInt(Math.random()*19+1);// 随机获取背景图片
    4. $("body").removeAttr("class");
    5. $("body").addClass("bg"+num); //改变背景样式

    });

本代码为《jQuery前端开发之网页特效》英雄难过棍子关所有,仅有关键代码,仅供参考。

从csdn上下了一个英雄难过棍子关的源码,有需要的人可以参考下。
链接:https://pan.baidu.com/s/1lFYe5TulxkTFrAvLIzjJZA
提取码:nxzr
复制这段内容后打开百度网盘手机App,操作更方便哦

下面的是用java实现的小程序
链接:https://pan.baidu.com/s/1EubKDQaNOQoN8qUmhC8vBQ
提取码:zn6w
复制这段内容后打开百度网盘手机App,操作更方便哦

发表评论

表情:
评论列表 (有 0 条评论,255人围观)

还没有评论,来说两句吧...

相关阅读

    相关 英雄会,会英雄,CSDN大会有感

      今天应CSDN之邀参加CSDN英雄大会。自己不敢妄称英雄,但是还是很想认识一下慕名已久的英雄们。也很想念一些老同事。借此机会与大家聚一聚。   早上匆忙起来,穿上CSDN

    相关 棍子

         Stan有n根不同长度的棍子。他随机地一次性将它们扔到地上,扔完后,Stan想找到那些顶层的棍子,也就是那些没有其他棍子压在上面的棍子。他注意到最后扔的棍子总是顶层的

    相关 棍子

    【问题描述】        Stan有n根不同长度的棍子。他随机地一次性将它们扔到地上,扔完后,Stan想找到那些顶层的棍子,也就是那些没有其他棍子压在上面的棍子。他注意到最

    相关 C++函数(课本

    函数 C++有两种程序模块:函数(function)和类(class) 任何c++的应用程序都是由各种标准库提供的模块和程序员自定义的模块组装而成。 函数概念:功能的