海水打鱼小游戏源码

3 篇文章 0 订阅
2 篇文章 0 订阅
<!DOCTYPE HTML>	
<html>

<head>
	<title>letter-FishGame</title>

	<style type="text/css">
		
		html{
			margin: 0;
			padding: 0;
			width: auto;
			height: 100%; /*宽度自动*/
		}
		img{
			padding: 0;
			margin: 0;
		}
		div{
			padding: 0;
			margin: 0;
		}
		body{
			background: url(img6/bk.jpg) no-repeat;
			background-size: cover;
		}
		.main{
			position: relative;
		}
		.logo{
			position: fixed;
			left: 35%;
			top: 5%;
		}
		.one{
			position: fixed;
			left: 37%;
			top: 60%;
		}
		.about{
			padding-right: 80px;
		}
		.ab_content{
			display: none;
			position: absolute;
			width: 200px;
		}
		.start{
			
		}
		.score{
			margin: 0;
			padding-top: 20px;
			width: 170px;
			height: 108px;
			background: url("img6/35.png") no-repeat;
			display: none;
			position: fixed;
			left: 1%;
			top: 2%;
			text-align: center;
			font-weight: bold;
			font-size: 45px;

		}
		.back{
			display: none;
			position: fixed;
			left: : 2%;
			bottom: 2%;
			width: 7%;
			min-width: 50px;
		}
		.two{
			display: none;
			position: fixed;
			width: 10%;
			right: 0;
			bottom: 1%;
		}
		.stop{
			width: 70%;
			min-width: 50px;
		}
		.set{
			width: 70%;
			min-width: 50px;
		}
		.speed{
			display: none;
			width: 60%;
			position: fixed;
			left: 80%;
			top: 48%;
		}
		.classic{
			width: 15%;
		}
		.challenge{
			width: 15%;
			position: absolute;
			top: 120%; 
			left: 0;
		}
		/*版本A:手动编写popo元素对应的css*/
		.popo1,.popo2,.popo3,.popo4,.popo5,.popo6,.popo11,.popo12,.popo13,.popo14,.popo15,.popo16{
			position: fixed;
			width: 3%; 
			margin-left: 10%; 
		}
		.popo1,.popo2,.popo3,.popo4,.popo5,.popo6{
			bottom: 0;
		}
		.popo11,.popo12,.popo13,.popo14,.popo15,.popo16{
			bottom: -50px;
		}
		.popo1,.popo11{
			left: 2%;
		}
		.popo2,.popo12{
			animation-timing-function: ease-in;
			animation-delay: 1s;
			left: 17%;
		}
		.popo3,.popo13{
			animation-timing-function: ease;
			left: 32%;
		}
		.popo4,.popo14{
			animation-timing-function: ease-out;
			animation-delay: 1s;
			left: 47%;
		}
		.popo5,.popo15{
			animation-timing-function: ease-in-out;
			left: 62%;
		}
		.popo6,.popo16{
			animation-delay: 1s;
			left: 77%;
		}
		.po_move{
			animation-name: popomove;
			animation-duration: 10s;
			animation-iteration-count: infinite;
		}
		.popo11,.popo13,.popo15{
			animation-delay: 5s;
		}
		.popo12,.popo13,.popo16{
			animation-delay: 6s;
		}
		@keyframes popomove{
			from{
				bottom: 0;
			}
			to{
				bottom: 100%;
			}
		}

		.fish{
			width: 163px;
			height: 117px;
			background: url('img/yu7.gif') no-repeat;
			color: black; 
			font-weight: bold;
			font-size: 40px;
			text-align: right;
			padding: 0px;  
			position: fixed;
			right: -163px;
			}
		.moveFish{	
			animation-name: moveFish;
			animation-duration: 5s;
			/*animation-iteration-count: infinite;*/
			animation-timing-function: linear;
			}
		@keyframes moveFish{
			from{
				right: 0;
			}
			to{
				right: 100%;
			}
		}

	</style>
</head>

<body>
	<div class="main">
		<div class="one">
			<img src="img6/36.png" class="logo">
			<img src="img6/32.png" class="about" id="a">
			<img src="img6/33.png" class="start" >
			<img src="img6/30.png" class="ab_content">
		</div>
		<div class="two">
			<img src="img6/11.png" class="set">
			<img src="img6/10.png" class="stop">
		</div>
		<div class="speed">
			<img src="img6/23.png" class="classic">
			<img src="img6/24.png" class="challenge">
		</div>
			<div class="score"></div>
			<img src="img6/9.png" class="back">
		</div>
		<div class="allFish">
		</div>
	<!--版本A:手动插入popo,并用animation元素制作动画效果-->
		<div class="popo1 po_move" >
			<img src="img6/qp5.png">
			<img src="img6/qp6.png">
		</div>
		<div class="popo2 po_move" >
			<img src="img6/qp6.png">
			<img src="img6/qp7.png">
		</div>
		<div class="popo3 po_move" >
			<img src="img6/qp7.png">
		</div>
		<div class="popo4 po_move" >
			<img src="img6/qp7.png">
		</div>
		<div class="popo5 po_move" >
			<img src="img6/qp5.png">
			<img src="img6/qp6.png">
		</div>
		<div class="popo6 po_move" >
			<img src="img6/qp6.png">
			<img src="img6/qp7.png">
		</div>
		<div class="popo11 po_move" >
			<img src="img6/qp5.png">
			<img src="img6/qp6.png">
		</div>
		<div class="popo12 po_move" >
			<img src="img6/qp6.png">
			<img src="img6/qp7.png">
		</div>
		<div class="popo13 po_move" >
			<img src="img6/qp7.png">
		</div>
		<div class="popo14 po_move" >
			<img src="img6/qp7.png">
		</div>
		<div class="popo15 po_move" >
			<img src="img6/qp5.png">
			<img src="img6/qp6.png">
		</div>
		<div class="popo16 po_move" >
			<img src="img6/qp6.png">
			<img src="img6/qp7.png">
		</div>
	

<script type="text/javascript">
		var d1 = 0;
		var d2 = 0;
		var stop_switch = true;
		var speed_switch = 'classic';
		var ele_fish = new Array();
		var ab_content = document.getElementsByClassName('ab_content');
		var about = document.getElementsByClassName('about');
		var start = document.getElementsByClassName('start');
		var one = document.getElementsByClassName('one');
		var two = document.getElementsByClassName('two');
		var score = document.getElementsByClassName('score');
		var back = document.getElementsByClassName('back');
		var set = document.getElementsByClassName('set');
		var classic = document.getElementsByClassName('classic');
		var challenge = document.getElementsByClassName('challenge');
		var stop = document.getElementsByClassName('stop');
		var speed = document.getElementsByClassName('speed');
		var popo = document.getElementsByClassName('popo');
		var allFish = document.getElementsByClassName('allFish');
		var fish = document.getElementsByClassName('fish');
		var score_value = 0;

	    //鼠标移入时about的内容出现,移出时消失
		about[0].addEventListener('mouseover',function(){
			ab_content[0].style.cssText = 'display:block; right:95%; bottom:40%;';
		},false);
		about[0].addEventListener('mouseout',function () {
			ab_content[0].style.cssText = 'display:none';	
		},false);
		
		start[0].onclick = function(){
			my_show([two[0],score[0],back[0]]);
			my_hide([one[0]]);
			game_classic();
			score_value = 0;
			score[0].innerHTML = score_value;
		}
		back[0].onclick = function(){
			clearInterval(d1);
			clearInterval(d2);
			my_show([one[0]]);
			my_hide([two[0],score[0],back[0],ab_content[0],speed[0]]);
			allFish[0].innerHTML = '';
		}

		set[0].onclick = function(){
			if (stop_switch){
				clearInterval(d1);
				clearInterval(d2);
				for(var i=0;i<allFish[0].children.length;i++){
				fish[i].style.animationPlayState = "paused";
				}
				my_show([speed[0]]);
				stop_switch = false;
			}
			else{
				for(var i=0;i<allFish[0].children.length;i++){
				fish[i].style.animationPlayState = "running";
				}
				if(speed_switch == 'classic'){
					game_classic();
				}
				else{
					game_challenge();
				}
				my_hide([speed[0]]);
				stop_switch = true;
			}
		}
		classic[0].onclick = function(){
			my_hide([speed[0]]);
			allFish[0].innerHTML = '';
			score_value = 0;
			score[0].innerHTML = score_value;
			game_classic();
			speed_switch = 'classic';
			stop_switch = true;
		}
		challenge[0].onclick = function(){
			my_hide([speed[0]]);
			allFish[0].innerHTML = '';
			score_value = 0;
			score[0].innerHTML = score_value;
			game_challenge();
			speed_switch = 'challenge';
			stop_switch = true;
		}
		stop[0].onclick = function(){
			if (stop_switch){
				clearInterval(d1)
				clearInterval(d2)
				for(var i=0;i<allFish[0].children.length;i++){
				fish[i].style.animationPlayState = "paused";
				}
				stop_switch = false;
			}
			else{
				for(var i=0;i<allFish[0].children.length;i++){
				fish[i].style.animationPlayState = "running";
				}
				if(speed_switch = 'classic'){
					game_classic();
				}
				else{
					game_challenge();
				}
				//game_classic();
				stop_switch = true;
			}
		}
		window.onkeydown = function(event){
			var keyCode = event.keyCode;    //返回点击的按键的字符代码
			var key = String.fromCharCode(keyCode);  //将按键的字符代码转换为字符串
			var fish_value;
			for (var i = 0; i < fish.length; i++) {
				if(fish[i].innerHTML == key){
					allFish[0].removeChild(fish[i]);
					score_value += 10;
					score[0].innerHTML = score_value;
				}
			}
		}
		function my_show(arr){
			for(var i=0; i<arr.length ;i++){
				 arr[i].style.display = 'block';
			}
		}
		function my_hide(arr){
			for(var i=0;i<arr.length;i++){
				arr[i].style.display = 'none';
			}
		}
		function game_classic(){
				d1 = setInterval(creatFish,1500);      
		}
		function game_challenge(){
				d2 = setInterval(creatFish,900);
		}
		function creatFish(){
			var chars = "ABCDEFGHIGKLMNOPQRSTUVWXYZ";
			var num = Math.random()*chars.length;
			var randomNum = parseInt(num);
			var randomChar = chars.charAt(randomNum);
			var ele = document.createElement('div');
			allFish[0].appendChild(ele);
			ele.innerHTML = randomChar;
			ele.classList.add('moveFish','fish');
			var random_top = Math.random()*900;
			ele.style.top = random_top + 'px';
			if(allFish[0].children.length > 30) {	
				for (var i = 0; i < 10; i++) {
						allFish[0].removeChild(fish[i]);
					}
				}
		}
</script>
</body>
</html>
<!--
总结:本游戏是一个针对桌面的打字游戏,功能非常简单,
	 纯js,css,没有使用地第三方框架
	 大概思路如下:
	 1、设置每个按钮的事件,主要是点击后需要消失和显示元素,完成界面
	 2、设置鱼和气泡的动画,气泡的用了固定的div块去设计,也可以用动态js像做鱼一样去做
	   鱼在这里用了animation动画,还有一种动起来的方法就是不断去用js改变鱼的坐标,达到一个视觉移动的目的,但是那样做的话比较耗费资源,
	   而且连贯性不是很好,会有跳动的感觉
	 3、暂停设置的时候需要注意怎么让画面固定然后再恢复
	 4、设置按钮在点击时也需要画面静止,类似于停止按钮,所以两个函数大概相同,调用的一些元素属性有相同之处,这样造成点击了暂停后
	 	再点击设置按钮时,会出现混乱现象,所以采用了公用开关设置
	 5、等级设置,这个比较简单,就是改变创建节点的时间
	 注意:创建节点时一点要有一个清除机制,这里采用了让最大节点数不超过31来控制,否则节点不断产生,如果玩家开始后没有键盘输入,浏览器就尴尬了
	       会造成节点过多卡死
		   还有一点就是无论什么代码都要提前想好代码结构,否则经常会出现代码之间前后矛盾现象,造成开发时间周期过长
	 使用到的函数:
	 document.getElementsByClassName();获取含有某个class样式的元素数组,看清楚,是数组,所以用的时候要加数组下标
	 setInterval(),固定时间调用参数函数,两个参数,第一个是被调用函数,第二个为设置固定时间
	 clearInval(),取消setInterval()设置的固定
	 animation是css中的动画,很好用。

-->


https://download.csdn.net/download/xiaopihaisal/10490070

资源下载页面  附图

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值