here2share

# Brython -- snake game

May 7th, 2022 (edited)
557
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 5.18 KB | None | 0 0
  1. <!DOCTYPE html>
  2. <html lang="en">
  3.  
  4. <head>
  5.     <meta charset="UTF-8">
  6.     <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7.     <title>Brython Snake</title>
  8.     <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/brython@3.8.9/brython.min.js">
  9.     </script>
  10.     <script type="text/javascript"
  11.         src="https://cdn.jsdelivr.net/npm/brython@3.8.9/brython_stdlib.js">
  12.     </script>
  13.     <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css" integrity="sha384-9aIt2nRpC12Uk9gS9baDl411NQApFmC26EwAOH8WgZl5MYYxFfc+NcPb1dKGj7Sk" crossorigin="anonymous">
  14.  
  15.     <style>
  16.  
  17.         h1 {
  18.             margin-top: 8%;
  19.             color: rgb(83, 238, 36);
  20.         }
  21.  
  22.         h3 {
  23.             color:rgb(190, 187, 187);
  24.         }
  25.  
  26.         h6 {
  27.             color:rgb(117, 117, 117);
  28.         }
  29.  
  30.         a {
  31.             color: rgb(83, 238, 36);
  32.         }
  33.  
  34.         button {
  35.             display: block;
  36.             margin-left: auto;
  37.             margin-right: auto;
  38.             background-color: transparent !important;
  39.             border-color: rgb(155, 156, 155) !important;
  40.             color: rgb(155, 156, 155) !important;
  41.             font-size: 8px !important;
  42.             padding: 3px !important;
  43.         }
  44.  
  45.         button:hover {
  46.             border-color: rgb(68, 241, 68) !important;
  47.             color: rgb(194, 196, 194) !important;
  48.         }
  49.  
  50.         body {
  51.             background-color: black;
  52.         }
  53.  
  54.         canvas {
  55.             margin-top: 1%;
  56.             padding-left: 0;
  57.             padding-right: 0;
  58.             margin-left: auto;
  59.             margin-right: auto;
  60.             display: block;
  61.             border: 1px;
  62.             border-style: solid;
  63.             border-color: #535353;
  64.         }
  65.  
  66.     </style>
  67.  
  68. </head>
  69.  
  70. <body onload="brython()">
  71.  
  72.     <h1 class="text-center">Snake built with <a href="https://brython.info">Python!</a></h1>
  73.     <canvas id="game-board" width="400" height="400"></canvas>
  74.     <br>
  75.     <h3 id="score" class="text-center">Score: 0</h3>
  76.     <br>
  77.     <h6 id="high-score" class="text-center">High Score: 0</h6>
  78.     <br>
  79.     <div class="text-center">
  80.         <button id="instructions-btn" class="btn btn-info">Instructions</button>
  81.     </div>
  82.  
  83.  
  84.     <script type="text/python">
  85.  
  86.         from browser import document, html, window
  87.         import random
  88.  
  89.         score = 0
  90.         high_score = 0
  91.  
  92.         px = py = 10
  93.         gs = tc = 20
  94.         ax = ay = 15
  95.         xv = yv = 0
  96.         trail = []
  97.         tail = 5
  98.  
  99.         pre_pause = [0,0]
  100.         paused = False
  101.  
  102.         def game():
  103.             global px, py, tc, gs, ax, ay, trail, tail, score
  104.             px += xv
  105.             py += yv
  106.             if px < 0:
  107.                 px = tc-1
  108.             if px > tc-1:
  109.                 px = 0
  110.             if py < 0:
  111.                 py = tc-1
  112.             if py > tc-1:
  113.                 py = 0
  114.             ctx.fillStyle = "black"
  115.             ctx.fillRect(0, 0, canvas.width, canvas.height)
  116.             ctx.fillStyle = "lime"
  117.             for i in range(len(trail)):
  118.                 ctx.fillRect(trail[i][0]*gs, trail[i][1]*gs, gs-2, gs-2)
  119.                 if trail[i][0] == px and trail[i][1] == py:
  120.                     score = score if paused else 0
  121.                     tail = tail if paused else 5
  122.             trail.insert(0, [px, py])
  123.             while len(trail) > tail:
  124.                 trail.pop()
  125.  
  126.             if ax == px and ay == py:
  127.                 tail += 1
  128.                 ax = int(random.random()*tc)
  129.                 ay = int(random.random()*tc)
  130.                 score += 1
  131.             update_score(score)
  132.             ctx.fillStyle = "red"
  133.             ctx.fillRect(ax*gs, ay*gs, gs-2, gs-2)
  134.  
  135.         def update_score(new_score):
  136.             global high_score
  137.             document["score"].innerHTML = "Score: " + str(new_score)
  138.             if new_score > high_score:
  139.                 document["high-score"].innerHTML = "High Score: " + str(new_score)
  140.                 high_score = new_score
  141.  
  142.         def key_push(evt):
  143.             global xv, yv, pre_pause, paused
  144.             key = evt.keyCode
  145.             if key == 37 and not paused:
  146.                 xv = -1
  147.                 yv = 0
  148.             elif key == 38 and not paused:
  149.                 xv = 0
  150.                 yv = -1
  151.             elif key == 39 and not paused:
  152.                 xv = 1
  153.                 yv = 0
  154.             elif key == 40 and not paused:
  155.                 xv = 0
  156.                 yv = 1
  157.             elif key == 32:
  158.                 temp = [xv, yv]
  159.                 xv = pre_pause[0]
  160.                 yv = pre_pause[1]
  161.                 pre_pause = [*temp]
  162.                 paused = not paused
  163.  
  164.         def show_instructions(evt):
  165.             window.alert("Use the arrow keys to move and press spacebar to pause the game.")
  166.  
  167.         canvas = document["game-board"]
  168.         ctx = canvas.getContext("2d")
  169.         document.addEventListener("keydown", key_push)
  170.         game_loop = window.setInterval(game, 1000/10)
  171.         instructions_btn = document["instructions-btn"]
  172.         instructions_btn.addEventListener("click", show_instructions)
  173.  
  174.  
  175. </script>
  176.  
  177. </body>
  178.  
  179. </html>
Add Comment
Please, Sign In to add comment