一个有趣的前端小项目----新手练手小游戏 - Go语言中文社区

一个有趣的前端小项目----新手练手小游戏


    对于学前端的小伙伴们来说,最难的应该就是Javascript的理解与运用了,很重要,很有用,也很难真的掌握,但是对于这种难啃的骨头,多去啃一啃的话还是很有意思的~~不好意思,一不小心暴露了我吃货的本质,今天给大家分享的是一个小游戏,之前有在github上看见有大神做过一个类似的游戏,然后自己就花了一天的时间写了这个小游戏,废话不多说,先给大家看一下这个游戏的效果图:


1、大家看到的实在点击开始游戏后,会随机生成不同的水果,这个是将图片放在一个数组里面的,然后获取随机的图片就行

2、在点击图片之后,图片会左右晃动一下,然后变成衰的表情,这个不设置的话也挺好的

3、接下来给大家展示一下未点中的效果:


4、当未点击中图片的时候,图片会掉落下去,分数会扣一分,屏幕会震动一下,这个效果是参考了大神的,毕竟这个游戏很单一,这个效果会比较明显。

5、接下来给大家介绍一个封装好的js-----简易运动框架,这个很适合用来做这些简单的运动动画,这个小游戏就是我直接在网上找到的这个框架,然后直接调用的,封装不易,膜拜大佬,请大佬收下我的膝盖~


6、代码部分:

6.1大神做的:(此处表白大神死循环),但这个小游戏只用到了前三个封装的,hide和out没有用上

由于封装格式有问题,不能直接放上来,我就截图给大家看,大家可以看一下这个js下载网址:网址http://www.mamicode.com/info-detail-1612909.html 





6.2 看我写的,先叉会儿腰,可把我牛逼坏了

<!doctype html>
<html lang="en">

<head>
	<meta charset="UTF-8">
	<meta name="Generator" content="EditPlus®">
	<meta name="Author" content="">
	<meta name="Keywords" content="">
	<meta name="Description" content="">
	<title>收获水果大赛</title>
	<style>
		* {
			margin: 0px;
			padding: 0px;
		}

		body {
			background: pink;
		
		}

		#box {
			width: 920px;
			height: 600px;
			margin: 0px auto;
			position: relative;
			color: #f2f2f2;
		}

		#top {
			width: 100%;
			height: 145px;
		}

		#top .title {
			width: 100%;
			height: 50px;
			text-align: center;
			line-height: 70px;
			font-size: 25px;
			font-weight: 900;
		}

		#top .sm {
			width: 100%;
			height: 50px;
			text-align: center;
			line-height: 50px;
		}

		#top .but {
			width: 140px;
			height: 40px;
			outline: 0;
			border: 1px solid #241d13;
			background: #a73f2d;
			color: #fff;
			border-radius: 5px;
			box-shadow: 0 0 15px #7a2a1d;
			font-size: 16px;
			margin-left: 390px;
			cursor: pointer;
		}

		#middle {
			width: 100%;
			height: 455px;
			background: #fff;
			position: absolute;
			left: 0px;
			top: 165px;
			color: #333;
		}

		#middle .left {
			width: 125px;
			height: 55px;
			float: left;
			padding: 10px;
		}

		#middle .left p {
			width: 145px;
			line-height: 25px;
		}

		#middle .right {
			width: 771px;
			height: 455px;
			border-left: 2px solid #333;
			float: left;
			position: relative;
			overflow: hidden;
		}

		#middle .right img {
			width: 34px;
			height: 34px;
			cursor: pointer;
			position: absolute;
			left: 0px;
			top: 0px;
			display: none;
		}
		#middle p{
			font-size: 20px;
		}
		#middle span{
			color:#f10215;
		}
	</style>
	<script src="index.js"></script>
	<script>
		$(function () {
			var input = $('top').getElementsByTagName('input')[0];  //开始游戏模块
			var Span = $('middle').getElementsByTagName('span');    //左边计分模块
			var Div = $('middle').getElementsByTagName('div')[1];   //右边大模块
			var Img = $('middle').getElementsByTagName('img')[0];   //掉下来的图片
			var arrImg = ['img/1.png', 'img/2.png', 'img/3.png', 'img/4.png', 'img/5.png', 'img/6.png', 'img/7.png','img/8.png', 'img/9.png', 'img/10.png'];
			var sdNum = 1; //图片运行速度
			var onOff = true; //假设一个开关,后面要用来判断
			for (var i = 0; i < Span.length; i++) {
				Span[i].num = 0; //一开始就把所有的得分和失分都归0
			}
			//给开始游戏注册一个点击事件
			input.onclick = function () {
				this.value = '游戏进行中…'; //点击后,游戏开始变成游戏进行中……
				this.disabled = true; //游戏进行中的时候让开始按钮无法再次点击
				var width = parseInt(getStyle(Div, 'width')); //获取图片活动的宽度
				var height = parseInt(getStyle(Div, 'height')) - 50; //获取图片活动的高度,并且减去本身的高度
				Img.style.display = 'block'; //让水果能够显示出来
				auto(); //开始执行代码
				function auto() {
					onOff = true; //假设为true就表示水果落到最下面时会被扣分
					var n = Math.round(Math.random() * (arrImg.length - 1)); //获取数组里面随机的水果
					var positions = Math.round(Math.random() * (width - 50)); //随机获取水果的位置
					Img.src = arrImg[n]; //赋值
					Img.style.left = positions + 'px'; //赋值
					doMove(Img, 'top', sdNum, height, function () { //落下去的时候
						if (onOff == true) { //假设为true就表示水果落到最下面时会扣分
							shake($('middle'), 'top', function () { //掉下去后就会开始抖动窗口
								Img.style.top = '0px'; //让水果回到0px的位置
								Span[1].num++; //失分上面+1
								Span[1].innerHTML = Span[1].num; //显示在失分上面
								if (Span[1].num == 10) { //如果失去分大于了10
									//Img.style.display = 'none';	//如果游戏结束,将水果清除
									input.value = '开始游戏'; //可以重新点击开始游戏
									input.disabled = false; //让开始游戏显示出来
									alert('游戏结束,你共获得' + Span[0].num + '分'); //弹出游戏结束,并且显示得分
									for (var i = 0; i < Span.length; i++) {
										Span[i].num = 0; //得分和失分归零
									}
								} else {
									auto();
								}
							});
						}

					});
				}

				Img.onclick = function () {
					onOff = false; //如果为false,哪怕水果掉在最下面,也不会获得失分
					Img.src = 'img/qq.png'; //点击最后,水果变成哭的样子

					//这是一个Bug,直线增长会造成用户的体验感差,修改如下,引入对数函数
					// sdNum = sdNum + 0.2; //每一次点击,水果下降的速度增加0,
					// console.log(sdNum);

					shake(Img, 'left', function () { //点击之后开始抖
						Img.style.top = '0px'; //然后水果恢复到0px的位置
						Span[0].num++; //获得得分+1
						Span[0].innerHTML = Span[0].num; //获得得分一枚
						
						sdNum=sdNum+0.2*Math.LOG10E;
						console.log(sdNum);
						auto(); //继续执行代码
					});
				}
			}

		})
		
	</script>
</head>

<body>
	<div id="box">
		<div id="top">
			<p class="title">你的鼠标有多快?</p>
			<p class="sm">游戏说明:点击“开始游戏”,随机掉下水果,点中它,千万别让他掉下来!!</p>
			<input class="but" type="button" value="开始游戏">
		</div>
		<div id="middle">
			<div class="left">
				<p>得分:
					<span>0</span>分</p>
				<p>失分:
					<span>0</span>分</p>
			</div>
			<!-- 禁止选取 -->
			<div class="right" onselectstart="return false">
			<!-- 禁止鼠标在网页上拖动 -->
				<img οndragstart="return false" />
				
			</div>
		</div>
	</div>
</body>

</html>

6.3总结:

a.大家对于封装的函数如果想深入了解的话,可以参考该网址http://www.mamicode.com/info-detail-1612909.html 

b.我在写这个游戏的时候遇到的bug,这个对于一个前端来说,每个bug都将是我们走向人生巅峰的垫脚石,好了,废话不多说,

//这是一个Bug,直线增长会造成用户的体验感差,修改如下,引入对数函数
		 sdNum = sdNum + 0.2; //每一次点击,水果下降的速度增加0.2,
	         console.log(sdNum);

在最初,我设想的是让每张图片掉落后速度就增加0.2s,但是对于一个理科生来说,理想很丰满,现实很骨感哈~~~,这个的速度是呈直线增加的,我们会在慢速的时候突然加速,也就是我们常吐槽的,用户体验极差,在做了一系列深刻的反省之后,我跟我的数学老师说:我已经把知识全还给你了,你什么时候把学费还给我?数学老师反手就给了我一个对数函数,然后我的游戏就瞬间得到了升华,哈哈哈哈哈哈哈哈哈哈,都让开,我要膨胀了~~~~

	
						sdNum=sdNum+0.2*Math.LOG10E;
						console.log(sdNum);
最后的最后,希望大家能够一直秉持着:“js虐我千百遍,我待js如初恋”的初心,走上前端‘一去不复返’的康庄大道~~~·

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/qq_42181069/article/details/80434004
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-02-13 13:13:54
  • 阅读 ( 582 )
  • 分类:前端

0 条评论

请先 登录 后评论

官方社群

GO教程

推荐文章

猜你喜欢