about summary refs log tree commit diff stats
path: root/js/starting-place/game.js
blob: 4c9fe74509fe7fae9e29a236db59e474809c8db9 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
// Get the canvas and context
const canvas = document.getElementById('game');
canvas.width = window.innerWidth;
canvas.height = window.innerHeight;
canvas.style.backgroundColor = '#f0f0f0';
const ctx = canvas.getContext('2d');

(function(){

    // Define game colors
    const COLORS = {
        player: '#2d2d2d',
        particles: '#2d2d2d',
        objects: '#2d2d2d',
        terrain: '#2d2d2d'
    };

    // Define game physics
    const physics = {
        gravity: 1,
        jumpForce: 0.5
    };

    // Define player properties
    const player = {
        x: 200,
        y: 0,
        vx: 0,
        vy: 10,
        vm: 32,
        jumpForce: physics.gravity + physics.jumpForce,
        onGround: false,
        width: 20,
        height: 20,
        distanceTraveled: 0
    };

    // Define terrain properties
    const terrain = {
        start: { x: 0, y: canvas.height - 40 },
        end: { x: canvas.width, y: canvas.height },
        height: 8
    };

    // Define game objects
    const objects = [];

    // Update game state
    function update() {
        // Update player
        player.x += player.vx;
        player.y += player.vy;

        // Check collision with terrain
        if (player.y + player.height >= terrain.start.y) {
            player.y = terrain.start.y - player.height;
            player.vy = 0;
            player.onGround = true;
        } else {
            player.onGround = false;
        }

        // Update objects
        for (let object of objects) {
            object.y += physics.gravity;
        }
    }

    // Render game state
    function draw() {
        // Clear canvas
        ctx.clearRect(0, 0, canvas.width, canvas.height);

        // Draw player
        ctx.fillStyle = COLORS.player;
        ctx.fillRect(player.x, player.y, player.width, player.height);

        // Draw terrain
        ctx.fillStyle = COLORS.terrain;
        ctx.fillRect(terrain.start.x, terrain.start.y, terrain.end.x - terrain.start.x, terrain.height);

        // Draw objects
        for (let object of objects) {
            ctx.fillStyle = COLORS.objects;
            ctx.fillRect(object.x, object.y, object.width, object.height);
        }
    }

    // Handle keydown event
    document.addEventListener('keydown', function(event) {
        if (event.code === 'Space' || event.code === 'ArrowUp') {
            if (player.onGround) {
                player.vy = -player.jumpForce;
                player.onGround = false;
            }
        }
    });

    // Game loop
    function gameLoop() {
        update();
        draw();

        // Request next frame
        requestAnimationFrame(gameLoop);
    }

    // Start game loop
    gameLoop();

})();