【失业在家可以做什么之搭建个人博客】在博客主页上加入小游戏!

免责声明: 猫不可以喝咖啡

23届毕业生失业在家,准备搭建自己的个人博客,希望自己的博客可以是一个欢乐家园。大致的构思了一下,博客大概有“技术博客”、“游戏”、“生活”三个模块。

主页构想

我很喜欢像素风格的游戏,于是打算在主页放置一个CoffeeCat 游戏(自创的),就是猫咪可以随意移动,并且碰到咖啡后就可以把咖啡吃掉,一个非常简单的游戏。

实现效果如下:
在这里插入图片描述

主题风格

像素主题我使用的是NES.CSS帮助我实现这种风格
猫咪和咖啡是阿里巴巴矢量图标库中的-像素风图标

确定好风格以后就可以开始编写内容了。

HTML、CSS代码后续会贴出,本文主讲JS代码。

小猫移动

游戏的第一步就是让小猫在屏幕内移动:

  1. 获得屏幕的宽度
  2. 监听键盘的左键和右键
  3. 改变小猫的左右位置

小猫移动代码:

//获取小猫元素
var cat = document.getElementById("cat");
//获取屏幕的宽度
var screenWidth = window.innerWidth;
//获取小猫的位置
var catLeft = cat.getBoundingClientRect().left;
//监听键盘事件的<- 和 ->
document.onkeydown = function(e){
	var e = window.event || e;
	switch(e.keyCode){
		case 37:
                //判断是否到屏幕边界
                if (catLeft > 50) {
                    catLeft = catLeft - 20;
                }
                cat.style.left = catLeft + "px";
                break;
            case 39:
                //判断是否到屏幕的边界
                if (catLeft < screenWidth - 70) {
                    catLeft = catLeft + 20;
                }
                cat.style.left = catLeft + "px";
                break;
	}
}

在向右移动的时候为什么是catLeft < screenWidth - 70
这里为什么是70,在50的猫咪向右移动会带出多余的屏幕。猫咪的宽度是50px,当猫咪距离屏幕为60时,screenWidth-catLeft = 40 ,已经小于了50,屏幕会溢出。根据计算,70,不会溢出屏幕。

创建开发元素以及咖啡掉落

猫咪可以移动以后就是咖啡在屏幕随机位置掉落

  1. 在屏幕内随机选择一个位置创建一个咖啡
  2. 将创建的咖啡向下掉落
  3. 如果已经到了屏幕的底部,咖啡消失
    function createCoffee(){
        //创建咖啡元素
        var coffee = document.createElement("img");
        coffee.src = "../style/img/coffe.svg";
        coffee.style.position = "absolute";
        coffee.style.top = "0px";
        coffee.style.left = Math.floor(Math.random()*(screenWidth-64)) + "px";
        document.body.appendChild(coffee);

        //向下移动
        function dorpCoffee(){
            var currentTop = parseInt(coffee.style.top);
            var newTop = currentTop + 10;
            //检测咖啡是否掉到底部
            if(newTop > screenHeight - 64){
                document.body.removeChild(coffee);
                clearInterval(intervalId);
            }else{
                coffee.style.top = newTop + "px";
            }
        }
    
        var intervalId = setInterval(dorpCoffee,100);
    }

在创建咖啡元素中 coffee.style.left = Math.floor(Math.random()*(screenWidth-64)) + "px";为什么要减掉70也是和上面遇到屏幕溢出问题是相同的。

小猫吃咖啡

小猫吃掉咖啡应该是在咖啡掉落过程中,是否消失或继续下落的一个条件,所以我们要将这个对比加入到createCoffee()函数中:

    function createCoffee(){
        //创建咖啡元素
        var coffee = document.createElement("img");
        coffee.src = "../style/img/coffe.svg";
        coffee.style.position = "absolute";
        coffee.style.top = "0px";
        coffee.style.left = Math.floor(Math.random()*(screenWidth)) + "px";
        document.body.appendChild(coffee);

        //向下移动
        function dorpCoffee(){
            var currentTop = parseInt(coffee.style.top);
            var newTop = currentTop + 10;

            //检测猫咪是否碰撞到猫咪
            var coffeeRect = coffee.getBoundingClientRect();
            var catRect = cat.getBoundingClientRect();
            if(coffeeRect.bottom >= catRect.top && coffeeRect.left >= catRect.left && coffeeRect.right <= catRect.right){
                document.body.removeChild(coffee);
                clearInterval(intervalId);
            //检测咖啡是都到底部
            }else if(newTop > screenHeight - 64){
                document.body.removeChild(coffee);
                clearInterval(intervalId);
            }else{
                coffee.style.top = newTop + "px";
            }
        }
    
        var intervalId = setInterval(dorpCoffee,100);
    }

添加游戏激励

游戏如何变得让人能坚持的玩下去,主要还是来自于游戏的激励机制,在这里我添加了两个激励机制:计数和音乐。当然还有排名,时长等各种激励方式可以添加,这就看大家对游戏的制作自己添加了。

  1. 将吃掉的咖啡进行计数
  2. 在计数的时候发出激励音乐

因为是猫咪吃咖啡,所以我使用的是背景音乐是“哈基米”的一首纯音乐当背景,当猫咪吃到咖啡以后,就会发出猫咪叫声。

参考文章

css笔记:如何让一个div居于页面正中间
JS键盘事件及键盘控制上下左右移动

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值