javascript娱乐局——贪吃蛇

javascript娱乐局——贪吃蛇

累了,写了个小bug,阿呸。。。,小游戏,换换口味。

一共三个对象map,snake,food,代表的含义如名字。snake和food其实就是数组,表示位置,map来画图、判断得分、失败等等,直接上代码,可直接运行。

<!doctype html>
<html>

<body>
    <canvas id="map" width="400" height="400" style="background:Black"></canvas>
    <h1>Score:</h1>
    <h2 id="score">0</h2>

    <script>
        //地图
        function Map() {
            this.field = document.getElementById("map").getContext("2d"); //画布
            this.draw = function (something) { //画蛇或者食物
                this.field.fillStyle = something.color;
                var position;
                for (position in something.positions) {
                    this.field.fillRect(something.positions[position][0], something.positions[position][1], 20, 20);
                }
            }
             this.clear = function () { //清除画布
                this.field.clearRect(0, 0, 400, 400);
            }
            this.judge = function (snake, food) { //判断状态(得分、失败、普通)
                var snakeHeadX = snake.positions[0][0];
                var snakeHeadY = snake.positions[0][1];
                var foodX = food.positions[0][0];
                var foodY = food.positions[0][1];
                if ((snakeHeadX == foodX) && (snakeHeadY == foodY)) {  //吃食物
                    snake.positions.unshift([foodX, foodY]);
                    food.positions[0] = [Math.floor(Math.random() * 20) * 20, Math.floor(Math.random() * 20) * 20];
                    this.clear();
                    this.draw(food);
                    this.draw(snake);
                    var score = document.getElementById('score');
                        score.innerHTML = (Number(score.innerHTML)+1).toString();
                }
                else if ((snakeHeadX+20 > 400) || (snakeHeadX < 0) || (snakeHeadY+20 > 400) || (snakeHeadY < 0)) {
                    alert('GIME OVER!'); //撞墙
                }
                else {
                    this.clear();
                    this.draw(food);
                    this.draw(snake);
                }
            }
        }
        
        //蛇
        function Snake() {
            this.positions = [[40 + 20, 40], [40, 40], [40 - 20, 40]]; //蛇的躯干
            this.color = "Yellow";
            this.direction = [1,0]; //蛇头方向
            this.move = function () { //移动
                this.positions.unshift([this.positions[0][0] + this.direction[0] * 20, this.positions[0][1] + this.direction[1] * 20]);
                this.positions.pop();
            }
            this.obeyOrders = function (snake = this) { //等待键盘上下左右
                document.onkeydown = function (event) {
                    var e = event || window.event || arguments.callee.caller.arguments[0];
                    var order = e.keyCode;
                    console.log(snake.direction);
                    switch (order) {
                        case 37:
                            snake.direction[0] = -1;
                            snake.direction[1] = 0;
                            break;
                        case 38:
                            snake.direction[1] = -1;
                            snake.direction[0] = 0;
                            break;
                        case 39:
                            snake.direction[0] = 1;
                            snake.direction[1] = 0;
                            break;
                        case 40:
                            snake.direction[1] = 1;
                            snake.direction[0] = 0;
                            break;
                        default:
                            ;
                    }
                };
            }
        }

        //食物
        function Food() {
            this.positions = [[Math.floor(Math.random() * 20) * 20, Math.floor(Math.random() * 20) * 20]]; //随机位置
            this.color = 'Red';
        }


        //开始执行
        (function () {

            var map = new Map();
            var snake = new Snake();
            var food = new Food();
            map.draw(snake);
            map.draw(food);
            snake.obeyOrders();
            var t=0;
            var interval = setInterval(function () { //每0.5s走一步
                map.judge(snake, food);
                snake.move();
            }, 500);
        })()
    </script>


</body>

</html>

效果如图
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值