聊一聊丘丘等级及其图标显示的实现算法

最近一段时间,买了一台云服务器,申请了一个域名,开发了一个网站,名曰哆啦日记,只为记录生活的点点滴滴,做一个为大家记录生活的平台。虽然像QQ、微信、、、甚至soul、、、、这些有很多都可以记录,但我还是想着做一个自己的网站。

昨天突然就想到了为网站加上一个类似QQ等级的功能,因为之前就一直对QQ等级很感兴趣,也一直在努力提升QQ等级(虽然现在已经达到皇冠以上不再关心了),觉得这个功能很有意思。

我做的是要把用户写日记的天数用星星、月亮、太阳、皇冠来表示,而不是单纯的显示写多少天日记。(本来是想用连续写日记的天数,但一来是还没有想到思路,二来是连续写会很容易被清零,达不到吸引用户更新的效果,然后就想着把这个需求待定,等以后在做)如下图所示:

目前规则就是级别最高是皇冠,皇冠数量不限,但其他的如果达到四个以后就会被向上升一级。其实在我的设计中,这个跨度不一定是4,而是一个变量,这个变量定为几都可以,设计的比较灵活,下面就说一下如何用js实现这个算法吧。主要就是根据天数来计算出对应的图标的数量。

if(num==0){
				text="未写过日记呢";
			}else{
				if(num/n<=1){//少于4天,显示星星
//					text=getHtml(num,"star");
					text="<img src='image/star.png' style='width:16px;height:16px'>"+num;
				}else{
					if(num/(n*n)<=1){//小于16天,显示月亮和星星
//						text=getHtml(parseInt(num/n),"moon")+getHtml(num%n,"star");
						text="<img src='image/moon.png' style='width:16px;height:16px'>"+parseInt(num/n);
						if(num%n>0){
							text=text+"<img src='image/star.png' style='width:16px;height:16px'>"+num%n;
						}
					}else{
						if(num/(n*n*n)<=1){//小于64天,显示太阳、月亮和星星、例17
//							text=getHtml(parseInt(num/(n*n)),"sun")+getHtml(parseInt((num%(n*n))/n),"moon")+getHtml((num%(n*n))%n,"star");
							text="<img src='image/sun.png' style='width:16px;height:16px'>"+parseInt(num/(n*n));
							if(parseInt((num%(n*n))/n)>0){
								text=text+"<img src='image/moon.png' style='width:16px;height:16px'>"+parseInt((num%(n*n))/n);
							}
							if((num%(n*n))%n>0){
								text=text+"<img src='image/star.png' style='width:16px;height:16px'>"+(num%(n*n))%n;
							}
						}else{
//							text=getHtml(parseInt(num/(n*n*n)),"crown")+getHtml(parseInt((num%(n*n*n))/(n*n)),"sun")+getHtml(parseInt(((num%(n*n*n))%(n*n))/n),"moon")+getHtml(((num%(n*n*n))%(n*n))%n,"star");
							text="<img src='image/crown.png' style='width:16px;height:16px'>"+parseInt(num/(n*n*n));
							if(parseInt((num%(n*n*n))/(n*n))>0){
								text=text+"<img src='image/sun.png' style='width:16px;height:16px'>"+parseInt((num%(n*n*n))/(n*n));
							}
							if(parseInt(((num%(n*n*n))%(n*n))/n)>0){
								text=text+"<img src='image/moon.png' style='width:16px;height:16px'>"+parseInt(((num%(n*n*n))%(n*n))/n);
							}
							if(((num%(n*n*n))%(n*n))%n>0){
								text=text+"<img src='image/star.png' style='width:16px;height:16px'>"+((num%(n*n*n))%(n*n))%n;
							}
						}
					}
				}
			}

这里面被注释掉的是另一种显示方法,这种显示方法与QQ相同,比如64级就显示一个皇冠、63级就显示三个太阳三个月亮三个星星(一共显示9个图标),由于某些情况下显示的图标太多不美观,所以便采用了没被注释的写法:如果对应图标数量不为零则显示该图标及对应的数量,也就和上文图中一样了。

对于被注释掉的内容所调用的函数,这里我也做一下罗列,需要的可以借鉴:

/**
 * 根据数量和类型返回对应HTML
 * @param num	4个
 * @param type  星星
 * @returns {String}
 */
function getHtml(num,type){
	num=parseInt(num);
	var text="";
	for(var i=0;i<num;i++){
		text=text+"<img src='image/"+type+".png' style='width:16px;height:16px'>";
	}
	return text;
}

这个函数的功能就是根据图标数量和图标类型来获取对应的HTML代码并返回。

具体的算法代码都已经罗列了,具体也不做分析了,相信聪明的你一看就懂了,如果有不懂的地方可以留言提问。文末附上本人的哆啦日记网,欢迎你的加入,细细的使用一番,你会发现它很实用,也会很有趣。

发布了53 篇原创文章 · 获赞 50 · 访问量 6万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章