Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <!-- saved from url=(0031)https://aimojuhani.com/DEMO/89/ -->
- <html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"></head><body><h3>
- <title>Untitled Document</title>
- <meta name="viewport" content="width=device-width, initial-scale=1.0,user-scalable=no">
- <script src="./89_files/peer.min.js.lataus"></script>
- <style>
- body {
- margin:0;
- padding:0;
- }
- .wrapper {
- width:100vw;
- }
- #c {
- background-color:beige;
- }
- </style>
- <div class="wrapper">
- <canvas id="c" style="z-index: 1; position:absolute; left:0px; top:0px;" height="500px" width="500px">
- </canvas>
- <canvas id="layer2" style="z-index: 2; position:absolute; left:0px; top:0px;" height="500px" width="500px">
- </canvas>
- <div id="score" style="z-index: 3; position:absolute; color:blue;left:0px; top:0px;font-size:30px;font-family:monospace;">0</div>
- </div>
- <p style="
- position: relative;
- top: 500px;" id="display_key"></p>
- <script>
- var ice_color = "#63c4e8"
- var fire_color = "#ed3b3b"
- var wall_color = "#3d3d3d"
- var floor_color = "#c2c3c4"
- var player = {
- color: '#f44336',
- type: 'ice',
- size:10,
- x: 250,
- y: 200
- }
- //KEYBOARD CONTROL
- var dx, dy;
- dx = dy = 0
- var key_up, key_down, key_left, key_right
- document.addEventListener('keydown', function(event) {
- if(event.keyCode == 32){
- spacebar()
- }
- if(event.keyCode == 38) {
- //UP
- key_up = true
- }
- if(event.keyCode == 40) {
- //DOWN
- key_down = true
- }
- if(event.keyCode == 37) {
- //LEFT
- key_left = true
- }
- if(event.keyCode == 39) {
- //RIGHT
- key_right = true
- }
- });
- document.addEventListener("keyup", function(event) {
- if(event.keyCode == 38) {
- //UP
- key_up = false
- }
- if(event.keyCode == 40) {
- //DOWN
- key_down = false
- }
- if(event.keyCode == 37) {
- //LEFT
- key_left = false
- }
- if(event.keyCode == 39) {
- //RIGHT
- key_right = false
- }
- });
- // JOYSTICK
- //====================
- var canvas = document.getElementById("c")
- var ctx = c.getContext("2d")
- var ctx2 = layer2.getContext("2d")
- var x = canvas.width
- var y = canvas.height
- var opp_x, opp_y
- // LEVEL
- function level_gen() {
- window.data = JSON.parse(json)
- window.current_level = 'start'
- window.mobs = JSON.parse(mobsJSON)
- window.score = 0
- document.getElementById('c').style.backgroundColor = floor_color;
- set_player_type_ice()
- level = data['start']
- level['unit'] = 500/level['side']
- level['gap'] = level['unit']/2
- }
- function draw_level() {
- ctx2.clearRect(0, 0, canvas.width, canvas.height)
- ctx2.fillStyle = wall_color
- var rel_x
- var rel_y
- var cb
- for(var i = 0; i <= (level['side']); i++) {
- for(var t = 0; t <= (level['side']); t++) {
- if(level['grid'][t*level['side'] + i] == 1) {
- var pos_x = i*level['unit']
- var pos_y = t*level['unit']
- ctx2.fillRect(pos_x, pos_y, level['unit'], level['unit'])
- }
- }
- }
- }
- function current_box(x, y) {
- var w = Math.floor(y/level['unit'])*level['side']
- w += Math.ceil(x/level['unit'])
- //console.log('X:' + x + ', Y: ' + y + ' , cb: ' + w)
- return w
- }
- function check_x_collision(x, dx, cb, size) {
- size = size/2
- var sub_x = (x + dx) % level['unit'];
- if ((sub_x < size) || (sub_x > (level['unit']-size))) {
- if (dx > 0) {
- if (level['grid'][cb-1] == 1) {
- dx = 0
- }
- }
- if (dx < 0) {
- if (level['grid'][cb-1] == 1) {
- dx = 0
- }
- }
- }
- return dx
- }
- function check_y_collision(y, dy, cb, size) {
- size = size/2
- var sub_y = (y + dy) % level['unit'];
- if ((sub_y < size) || (sub_y > (level['unit']-size))) {
- if (dy > 0) {
- if (level['grid'][cb-1] == 1) {
- dy = 0
- }
- }
- if (dy <= 0) {
- if (level['grid'][cb-1] == 1) {
- dy = 0
- }
- }
- }
- return dy
- }
- function handle_teleport() {
- var y_switch = false
- var x_switch = false
- if((player['y'] <= 0 ) &&
- (y_switch == false)) {
- if(data[current_level]['portals']['north'] !== '') {
- current_level = data[current_level]['portals']['north']
- level = data[current_level]
- draw_level()
- player['y'] = 500
- y_switch = true
- }
- }else if((player['y'] >= 500) &&
- (y_switch == false)) {
- if(data[current_level]['portals']['south'] !== '') {
- current_level = data[current_level]['portals']['south']
- level = data[current_level]
- draw_level()
- player['y'] = 0
- y_switch = true
- }
- } else {
- y_switch = false;
- }
- if((player['x'] <= 0 ) &&
- (x_switch == false)) {
- if(data[current_level]['portals']['west'] !== '') {
- current_level = data[current_level]['portals']['west']
- level = data[current_level]
- draw_level()
- player['x'] = 500
- x_switch = true
- }
- }else if((player['x'] >= 500 ) &&
- (x_switch == false)) {
- if(data[current_level]['portals']['east'] !== '') {
- current_level = data[current_level]['portals']['east']
- level = data[current_level]
- draw_level()
- player['x'] = 0
- x_switch = true
- }
- } else {
- x_switch = false
- }
- }
- function move_self() {
- dx = dy = 0
- if (key_left == true) {
- dx += -3
- } else if (key_right == true) {
- dx += 3
- }
- if (key_up == true) {
- dy += -3
- } else if (key_down == true) {
- dy += 3
- }
- var cb = current_box(player['x']+dx, player['y']+dy)
- dx = check_x_collision(x, dx, cb, player['size'])
- dy = check_y_collision(y, dy, cb, player['size'])
- player['x'] += dx;
- player['y'] += dy;
- handle_teleport()
- }
- function check_for_wall(c, d) {
- return level['grid'][c][d]
- }
- function draw_square(self) {
- var pos_x = self['x'] - self['size']/2
- var pos_y = self['y'] - self['size']/2
- ctx.fillStyle = self['color']
- ctx.fillRect(pos_x, pos_y, self['size'], self['size'])
- }
- function dist(x,y,x2,y2) {
- return Math.sqrt( (x-x2)*(x-x2) + (y-y2)*(y-y2));
- }
- function does_collide(player, mob) {
- if(dist(player['x'],player['y'],mob['x'],mob['y']) - (player['size'] + mob['size'])/2 <= 0) {
- return true
- }
- }
- function set_player_type_ice() {
- player['color'] = ice_color
- player['type'] = "ice"
- }
- function set_player_type_fire() {
- player['color'] = fire_color
- player['type'] = "fire"
- }
- function spacebar() {
- player['type'] == "ice" ? set_player_type_fire() : set_player_type_ice()
- }
- function kill_mob(mob) {
- mob['dead'] = true
- window.score += 10
- document.getElementById('score').innerHTML = score
- }
- function game_over() {
- stop_loop()
- alert('Game over. Score: ' + score)
- }
- function stop_loop() {
- clearInterval(interval);
- }
- function start() {
- level_gen()
- draw_level()
- window.interval = setInterval(function() {
- ctx.clearRect(0, 0, canvas.width, canvas.height)
- move_self(player['x'], player['y'])
- draw_square(player)
- //ENEMIES
- if(data[current_level]['mobs'] == true) {
- for(var i = 0; i < Object.keys(mobs).length; i++) {
- var sel = mobs[i]
- if(sel['dead'] == null) {
- var temp
- //initialize colors
- if(typeof sel['color'] == 'undefined') {
- sel['type'] == "ice" ? sel['color'] = ice_color : sel['color'] = fire_color
- }
- //spaghetti code ahhead,too lazy to triangulate the hypotenuse with the A and B point so the enemies can only movie on one axis :/
- if(sel['a']['x'] != sel['b']['x']) {
- if(sel['x'] == sel['b']['x']) {
- temp = sel['a']['x']
- sel['a']['x'] = sel['b']['x']
- sel['b']['x'] = temp
- }
- if(sel['a']['x'] > sel['b']['x']) {
- sel['x'] -= sel['speed']
- } else {
- sel['x']+= sel['speed']
- }
- } else {
- if(sel['y'] == sel['b']['y']) {
- temp = sel['a']['y']
- sel['a']['y'] = sel['b']['y']
- sel['b']['y'] = temp
- }
- if(sel['a']['y'] > sel['b']['y']) {
- sel['y'] -= sel['speed']
- } else {
- sel['y']+= sel['speed']
- }
- }
- //enemy collision
- if (does_collide(player, sel) == true) {
- console.log('1')
- if(player['type'] == sel['type']) {
- console.log('2')
- game_over()
- } else {
- kill_mob(sel)
- if(Object.keys(mobs).length == null) {
- data[current_level]['mobs'] = false
- }
- }
- }
- draw_square(sel)
- }
- }
- }
- }, 10)
- }
- var mobsJSON = '{ "0": { "x": 200, "y": 200, "level": "start", "speed": 0.5, "size":10, "type": "ice", "a": { "x": 200, "y": 200 }, "b": { "x": 250, "y": 200 } },"1":{ "x":200, "y":200, "level":"start", "speed":2, "size":10, "type":"fire", "a":{ "x":150, "y":300 }, "b":{ "x":150, "y":380 } } }'
- var json = '{ "start": { "side": "5", "unit": 100,"mobs": true, "grid": [1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1], "portals": { "north": "", "south": "one", "west": "", "east": "" }}, "one": { "side": "5", "unit": 100, "grid": [1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1], "portals": { "north": "start", "south": "", "west": "", "east": "" } } } '
- start()
- </script>
- </h3></body></html>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement