Difference between revisions of "Team:Tianjin/hahaha"

(Created page with "<!doctype html> <html> <head> <meta charset="utf-8"> OVERRIDE IGEM SETTINGS: <style> #sideMenu, #top_title, #contentSub, #footer-box, #catlinks, #search-controls, #p-lo...")
 
(Blanked the page)
Line 1: Line 1:
<!doctype html>
 
<html>
 
<head>
 
<meta charset="utf-8">
 
  
/* OVERRIDE IGEM SETTINGS */
 
<style>
 
#sideMenu, #top_title, #contentSub, #footer-box, #catlinks, #search-controls, #p-logo, .printfooter, .firstHeading, .visualClear {display: none}
 
#content {width: 100%;  background: transparent; margin: 0; padding: 0; }
 
#bodyContent h1, #bodyContent h2, #bodyContent h3, #bodyContent h4, #bodyContent h5  { margin-bottom: 2px; }
 
        #top_menu_under {
 
                height: 0px;
 
                border-bottom: 0 none;
 
                display: none;
 
      }
 
 
        #top_menu_14 {
 
                height: 24px;
 
                border-bottom: 0 none;
 
      }
 
 
#globalWrapper, #content  {
 
width: 100%;
 
                margin:  0;
 
float:none
 
font-size: 100%;
 
                z-index: 0;
 
}
 
 
div[id=mw-content-text] > p {
 
display: none;
 
}
 
 
#sideMenu {
 
width: 200px;
 
}
 
 
#sideMenu .mainMenu_Title, #sideMenu .mainMenu_toggle, #sideMenu #MainPage_menu ul li li {
 
border: none;
 
}
 
 
#sideMenu .sideMenuTitle {
 
height: 35px;
 
}
 
 
#top_menu_inside .submenu {
 
width: auto;
 
}
 
</style>
 
<style>
 
::selection {
 
color:#FFFFFF;
 
background:transparent;
 
}
 
::-moz-selection {
 
color:#FFFFFF;
 
background:transparent;
 
}
 
* {
 
margin:0;
 
padding:0;
 
font-family:"VT323";
 
}
 
body {
 
background-color:#000000;
 
}
 
.wrap {
 
margin-left:auto;
 
margin-right:auto;
 
}
 
header {
 
width:340px;
 
font-size:0;
 
}
 
canvas {
 
display:none;
 
border-style:solid;
 
border-width:10px;
 
border-color:#FFFFFF;
 
}
 
canvas:focus {
 
outline:none;
 
}
 
/* Top Styles */
 
h1 {
 
display:inline-block;
 
width:100px;
 
font-size:32px;
 
color:#FFFFFF;
 
}
 
.score {
 
display:inline-block;
 
width:240px;
 
font-size:20px;
 
color:#FFFFFF;
 
text-align:right;
 
}
 
.score_value {
 
font-size:inherit;
 
}
 
/* All screens style */
 
#gameover a,#setting a,#menu a {
 
display:block;
 
}
 
#gameover a,#setting a:hover,#menu a:hover {
 
cursor:pointer;
 
}
 
#gameover a:hover::before,#setting a:hover::before,#menu a:hover::before {
 
content:">";
 
margin-right:10px;
 
}
 
/* Menu Screen Style */
 
#menu {
 
display:block;
 
width:340px;
 
padding-top:95px;
 
padding-bottom:95px;
 
font-size:40px;
 
margin-left:auto;
 
margin-right:auto;
 
text-align:center;
 
color:#FFF;
 
}
 
#menu h2 {
 
-webkit-animation:logo-ani 1000ms linear infinite;
 
animation:logo-ani 1000ms linear infinite;
 
margin-bottom:30px;
 
}
 
#menu a {
 
font-size:30px;
 
}
 
@-webkit-keyframes logo-ani {
 
50% {
 
-webkit-transform:scale(1.3,1.3);
 
}
 
100% {
 
-webkit-transform:scale(1.0,1.0);
 
}
 
}@keyframes logo-ani {
 
50% {
 
transform:scale(1.3,1.3);
 
}
 
100% {
 
transform:scale(1.0,1.0);
 
}
 
}/* Game Over Screen Style */
 
 
#gameover {
 
display:none;
 
width:340px;
 
padding-top:95px;
 
padding-bottom:95px;
 
margin-left:auto;
 
margin-right:auto;
 
text-align:center;
 
font-size:30px;
 
color:#FFF;
 
}
 
#gameover p {
 
margin-top:25px;
 
font-size:20px;
 
}
 
/* Settings Screen Style */
 
#setting {
 
display:none;
 
width:340px;
 
margin-left:auto;
 
margin-right:auto;
 
padding-top:85px;
 
padding-bottom:85px;
 
font-size:30px;
 
color:#FFF;
 
text-align:center;
 
}
 
#setting h2 {
 
margin-bottom:15px;
 
}
 
#setting p {
 
margin-top:10px;
 
}
 
#setting input {
 
display:none;
 
}
 
#setting label {
 
cursor:pointer;
 
}
 
#setting input:checked + label {
 
background-color:#FFF;
 
color:#000;
 
}
 
</style>
 
</head>
 
<body>
 
<header class="wrap">
 
    <h1>Snake</h1>
 
    <p class="score">Score: <span id="score_value">0</span></p>
 
</header>
 
<canvas class="wrap" id="snake" width="320" height="320" tabindex="1"></canvas>
 
 
<!-- Game Over Screen -->
 
<div id="gameover">
 
    <h2>Game Over</h2>
 
    <p>press <span style="background-color: #FFFFFF; color: #000000">space</span> to begin a</p>
 
    <a id="newgame_gameover">new game</a>
 
    <a id="setting_gameover">settings</a>
 
</div>
 
 
<!-- Setting screen -->
 
<div id="setting">
 
    <h2>Settings</h2>
 
 
    <a id="newgame_setting">new game</a>
 
 
    <p>Speed:
 
        <input id="speed1" type="radio" name="speed" value="120" checked/>
 
        <label for="speed1">Slow</label>
 
        <input id="speed2" type="radio" name="speed" value="75" />
 
        <label for="speed2">Normal</label>
 
        <input id="speed3" type="radio" name="speed" value="35" />
 
        <label for="speed3">Fast</label>
 
    </p>
 
 
    <p>Wall:
 
        <input id="wallon" type="radio" name="wall" value="1" checked/>
 
        <label for="wallon">On</label>
 
        <input id="walloff" type="radio" name="wall" value="0" />
 
        <label for="walloff">Off</label>
 
    </p>
 
 
</div>
 
 
<!-- Main Menu Screen -->
 
<div id="menu">
 
    <h2>Snake</h2>
 
 
    <a id="newgame_menu">new game</a>
 
    <a id="setting_menu">settings</a>
 
</div>
 
 
<!--
 
    <div id="debug" style="font-size: 16px; color: #FFF;"></div>
 
  --><script>
 
(function() {
 
    /////////////////////////////////////////////////////////////
 
 
    // Canvas & Context
 
    var canvas;
 
    var ctx;
 
 
    // Snake
 
    var snake;
 
    var snake_dir;
 
    var snake_next_dir;
 
    var snake_speed;
 
 
    // Food
 
    var food = {
 
        x: 0,
 
        y: 0
 
    };
 
 
    // Score
 
    var score;
 
 
    // Wall
 
    var wall;
 
 
    // HTML Elements
 
    var screen_snake;
 
    var screen_menu;
 
    var screen_setting;
 
    var screen_gameover;
 
    var button_newgame_menu;
 
    var button_newgame_setting;
 
    var button_newgame_gameover;
 
    var button_setting_menu;
 
    var button_setting_gameover;
 
    var ele_score;
 
    var speed_setting;
 
    var wall_setting;
 
 
    /////////////////////////////////////////////////////////////
 
 
    var activeDot = function(x, y) {
 
        ctx.fillStyle = "#FFFFFF";
 
        ctx.fillRect(x * 10, y * 10, 10, 10);
 
    }
 
 
 
    /////////////////////////////////////////////////////////////
 
 
    var changeDir = function(key) {
 
 
        if (key == 38 && snake_dir != 2) {
 
            snake_next_dir = 0;
 
        } else {
 
 
            if (key == 39 && snake_dir != 3) {
 
                snake_next_dir = 1;
 
            } else {
 
 
                if (key == 40 && snake_dir != 0) {
 
                    snake_next_dir = 2;
 
                } else {
 
 
                    if (key == 37 && snake_dir != 1) {
 
                        snake_next_dir = 3;
 
                    }
 
                }
 
            }
 
        }
 
 
    }
 
 
    /////////////////////////////////////////////////////////////
 
 
    var addFood = function() {
 
        food.x = Math.floor(Math.random() * ((canvas.width / 10) - 1));
 
        food.y = Math.floor(Math.random() * ((canvas.height / 10) - 1));
 
        for (var i = 0; i < snake.length; i++) {
 
            if (checkBlock(food.x, food.y, snake[i].x, snake[i].y)) {
 
                addFood();
 
            }
 
        }
 
    }
 
 
    /////////////////////////////////////////////////////////////
 
 
    var checkBlock = function(x, y, _x, _y) {
 
        return (x == _x && y == _y) ? true : false;
 
    }
 
 
    /////////////////////////////////////////////////////////////
 
 
    var altScore = function(score_val) {
 
        ele_score.innerHTML = String(score_val);
 
    }
 
 
    /////////////////////////////////////////////////////////////
 
 
    var mainLoop = function() {
 
 
        var _x = snake[0].x;
 
        var _y = snake[0].y;
 
        snake_dir = snake_next_dir;
 
 
        // 0 - Up, 1 - Right, 2 - Down, 3 - Left
 
        switch (snake_dir) {
 
            case 0:
 
                _y--;
 
                break;
 
            case 1:
 
                _x++;
 
                break;
 
            case 2:
 
                _y++;
 
                break;
 
            case 3:
 
                _x--;
 
                break;
 
        }
 
 
        snake.pop();
 
        snake.unshift({
 
            x: _x,
 
            y: _y
 
        });
 
 
 
        // --------------------
 
 
        // Wall
 
 
        if (wall == 1) {
 
            // On
 
            if (snake[0].x < 0 || snake[0].x == canvas.width / 10 || snake[0].y < 0 || snake[0].y == canvas.height / 10) {
 
                showScreen(3);
 
                return;
 
            }
 
        } else {
 
            // Off
 
            for (var i = 0, x = snake.length; i < x; i++) {
 
                if (snake[i].x < 0) {
 
                    snake[i].x = snake[i].x + (canvas.width / 10);
 
                }
 
                if (snake[i].x == canvas.width / 10) {
 
                    snake[i].x = snake[i].x - (canvas.width / 10);
 
                }
 
                if (snake[i].y < 0) {
 
                    snake[i].y = snake[i].y + (canvas.height / 10);
 
                }
 
                if (snake[i].y == canvas.height / 10) {
 
                    snake[i].y = snake[i].y - (canvas.height / 10);
 
                }
 
            }
 
        }
 
 
        // --------------------
 
 
        // Autophagy death
 
        for (var i = 1; i < snake.length; i++) {
 
            if (snake[0].x == snake[i].x && snake[0].y == snake[i].y) {
 
                showScreen(3);
 
                return;
 
            }
 
        }
 
 
        // --------------------
 
 
        // Eat Food
 
        if (checkBlock(snake[0].x, snake[0].y, food.x, food.y)) {
 
            snake[snake.length] = {
 
                x: snake[0].x,
 
                y: snake[0].y
 
            };
 
            score += 1;
 
            altScore(score);
 
            addFood();
 
            activeDot(food.x, food.y);
 
        }
 
 
        // --------------------
 
 
        ctx.beginPath();
 
        ctx.fillStyle = "#000000";
 
        ctx.fillRect(0, 0, canvas.width, canvas.height);
 
 
        // --------------------
 
 
        for (var i = 0; i < snake.length; i++) {
 
            activeDot(snake[i].x, snake[i].y);
 
        }
 
 
        // --------------------
 
 
        activeDot(food.x, food.y);
 
 
        // Debug
 
        //document.getElementById("debug").innerHTML = snake_dir + " " + snake_next_dir + " " + snake[0].x + " " + snake[0].y;
 
 
        setTimeout(mainLoop, snake_speed);
 
    }
 
 
    /////////////////////////////////////////////////////////////
 
 
    var newGame = function() {
 
 
        showScreen(0);
 
        screen_snake.focus();
 
 
        snake = [];
 
        for (var i = 4; i >= 0; i--) {
 
            snake.push({
 
                x: i,
 
                y: 15
 
            });
 
        }
 
 
        snake_next_dir = 1;
 
 
        score = 0;
 
        altScore(score);
 
 
        addFood();
 
 
        canvas.onkeydown = function(evt) {
 
            evt = evt || window.event;
 
            changeDir(evt.keyCode);
 
        }
 
        mainLoop();
 
 
    }
 
 
    /////////////////////////////////////////////////////////////
 
 
    // Change the snake speed...
 
    // 150 = slow
 
    // 100 = normal
 
    // 50 = fast
 
    var setSnakeSpeed = function(speed_value) {
 
        snake_speed = speed_value;
 
    }
 
 
    /////////////////////////////////////////////////////////////
 
    var setWall = function(wall_value) {
 
        wall = wall_value;
 
        if (wall == 0) {
 
            screen_snake.style.borderColor = "#606060";
 
        }
 
        if (wall == 1) {
 
            screen_snake.style.borderColor = "#FFFFFF";
 
        }
 
    }
 
 
    /////////////////////////////////////////////////////////////
 
 
    // 0 for the game
 
    // 1 for the main menu
 
    // 2 for the settings screen
 
    // 3 for the game over screen
 
    var showScreen = function(screen_opt) {
 
        switch (screen_opt) {
 
 
            case 0:
 
                screen_snake.style.display = "block";
 
                screen_menu.style.display = "none";
 
                screen_setting.style.display = "none";
 
                screen_gameover.style.display = "none";
 
                break;
 
 
            case 1:
 
                screen_snake.style.display = "none";
 
                screen_menu.style.display = "block";
 
                screen_setting.style.display = "none";
 
                screen_gameover.style.display = "none";
 
                break;
 
 
            case 2:
 
                screen_snake.style.display = "none";
 
                screen_menu.style.display = "none";
 
                screen_setting.style.display = "block";
 
                screen_gameover.style.display = "none";
 
                break;
 
 
            case 3:
 
                screen_snake.style.display = "none";
 
                screen_menu.style.display = "none";
 
                screen_setting.style.display = "none";
 
                screen_gameover.style.display = "block";
 
                break;
 
        }
 
    }
 
 
    /////////////////////////////////////////////////////////////
 
 
    window.onload = function() {
 
 
        canvas = document.getElementById("snake");
 
        ctx = canvas.getContext("2d");
 
 
        // Screens
 
        screen_snake = document.getElementById("snake");
 
        screen_menu = document.getElementById("menu");
 
        screen_gameover = document.getElementById("gameover");
 
        screen_setting = document.getElementById("setting");
 
 
        // Buttons
 
        button_newgame_menu = document.getElementById("newgame_menu");
 
        button_newgame_setting = document.getElementById("newgame_setting");
 
        button_newgame_gameover = document.getElementById("newgame_gameover");
 
        button_setting_menu = document.getElementById("setting_menu");
 
        button_setting_gameover = document.getElementById("setting_gameover");
 
 
        // etc
 
        ele_score = document.getElementById("score_value");
 
        speed_setting = document.getElementsByName("speed");
 
        wall_setting = document.getElementsByName("wall");
 
 
        // --------------------
 
 
        button_newgame_menu.onclick = function() {
 
            newGame();
 
        };
 
        button_newgame_gameover.onclick = function() {
 
            newGame();
 
        };
 
        button_newgame_setting.onclick = function() {
 
            newGame();
 
        };
 
        button_setting_menu.onclick = function() {
 
            showScreen(2);
 
        };
 
        button_setting_gameover.onclick = function() {
 
            showScreen(2)
 
        };
 
 
        setSnakeSpeed(150);
 
        setWall(1);
 
 
        showScreen("menu");
 
 
        // --------------------
 
        // Settings
 
 
        // speed
 
        for (var i = 0; i < speed_setting.length; i++) {
 
            speed_setting[i].addEventListener("click", function() {
 
                for (var i = 0; i < speed_setting.length; i++) {
 
                    if (speed_setting[i].checked) {
 
                        setSnakeSpeed(speed_setting[i].value);
 
                    }
 
                }
 
            });
 
        }
 
 
        // wall
 
        for (var i = 0; i < wall_setting.length; i++) {
 
            wall_setting[i].addEventListener("click", function() {
 
                for (var i = 0; i < wall_setting.length; i++) {
 
                    if (wall_setting[i].checked) {
 
                        setWall(wall_setting[i].value);
 
                    }
 
                }
 
            });
 
        }
 
 
        document.onkeydown = function(evt) {
 
            if (screen_gameover.style.display == "block") {
 
                evt = evt || window.event;
 
                if (evt.keyCode == 32) {
 
                    newGame();
 
                }
 
            }
 
        }
 
    }
 
 
})();</script>
 
</body>
 
</html>
 

Revision as of 12:15, 1 November 2017