crossy_oceans.py

Created by 1epauletteshark

Created on December 03, 2023

5.96 KB


from kandinsky import set_pixel, color, draw_string, fill_rect
from ion import keydown, KEY_LEFT, KEY_UP, KEY_DOWN, KEY_RIGHT, KEY_OK
from time import *
from random import randint, choice

level=1
playing=False

def game():  
  global level, playing
  
  playing=True
  
  COLORS={
  "o1":(250,153,50),
  "o2":(247,124,22),
  "o3":(245,104,22),
  "g1":(184,184,184),
  "g2":(110,115,118),
  "b1":(100,200,225),
  "b2":(0, 135, 211),
  "bg":(0,128,255),
  "b":(0,0,0),
  "w":(255,255,255)}  
  
  player_x=160
  player_y=205
  direction=1
  FISH_STEPS=4
  
  sharks = [{
  "x": randint(25, 310),
  "y": i*20,
  "dir": choice((-1,1)),
  "steps": randint(level,level*4)}
  for i in range(2,10)]
  
  def is_eaten():
    fish_width=14
    fish_height=8
    shark_width=21
    shark_height=10
  
    for shark in sharks:
      if (player_x<shark['x'] + shark_width and
          player_x + fish_width > shark['x'] and
          player_y < shark['y'] + shark_height and
          player_y + fish_height > shark['y']):
            reset(False)
  
  def clear_screen():
    fill_rect(0, 0, 320, 240, COLORS["bg"])

  
  def render_fish(fish_x, fish_y, dir, fish_type):
    def fish_pixel(x, y, color):
      set_pixel(fish_x + dir * x, fish_y + y, COLORS[color])

    fish_data={
      "clownfish":[
        (0, -3, "b"),(1, -3, "b"),(2, -3, "b"),(-2, -2, "b"),(-1, -2, "b"),
        (0, -2, "w"),(1, -2, "o1"),(2, -2, "o1"),(3, -2, "b"),(4, -2, "b"),
        (-6, -1, "b"),(-5, -1, "b"),(-3, -1, "b"),(-2, -1, "o1"),(-1, -1, "w"),
        (0, -1, "w"),(1, -1, "w"),(2, -1, "o2"),(3, -1, "o1"),(4, -1, "w"),
        (5, -1, "b"),(-7, 0, "b"),(-6, 0, "w"),(-5, 0, "o1"),(-4, 0, "b"),
        (-3, 0, "o1"),(-2, 0, "o2"),(-1, 0, "o2"),(0, 0, "w"),(1, 0, "w"),
        (2, 0, "o2"),(3, 0, "w"),(4, 0, "b"),(5, 0, "o1"),(6, 0, "b"),
        (-7, 1, "b"),(-6, 1, "w"),(-5, 1, "o2"),(-4, 1, "o2"),(-3, 1, "o2"),
        (-2, 1, "o2"),(-1, 1, "o2"),(0, 1, "w"),(1, 1, "o2"),(2, 1, "o2"),
        (3, 1, "w"),(4, 1, "o2"),(5, 1, "o2"),(6, 1, "b"),(-7, 2, "b"),
        (-6, 2, "g1"),(-5, 2, "o2"),(-4, 2, "b"),(-3, 2, "o3"),(-2, 2, "o3"),
        (-1, 2, "g1"),(0, 2, "o3"),(1, 2, "o3"),(2, 2, "o3"),(3, 2, "o2"),
        (4, 2, "g1"),(5, 2, "b"),(-6, 3, "b"),(-5, 3, "b"),(-3, 3, "b"),
        (-2, 3, "o2"),(-1, 3, "g1"),(0, 3, "b"),(1, 3, "b"),(2, 3, "o2"),
        (3, 3, "o2"),(4, 3, "b"),(-3, 4, "b"),(-2, 4, "b"),(-1, 4, "b"),
        (1, 4, "b"),(2, 4, "b"),(3, 4, "b")],
       
      "shark":[
        (0,-4,"b"),(1,-4,"b"),(-10,-3,"b"),(-9,-3,"b"),(0,-3,"b"),(1,-3,"g2"),
        (2,-3,"b"),(-9,-2,"b"),(-8,-2,"b"),(-3,-2,"b"),(-2,-2,"b"),(-1,-2,"b"),
        (0,-2,"b"),(1,-2,"g2"),(2,-2,"g2"),(3,-2,"b"),(4,-2,"b"),(5,-2,"b"),
        (6,-2,"b"),(-9,-1,"b"),(-8,-1,"g2"),(-7,-1,"b"),(-6,-1,"b"),(-5,-1,"b"),
        (-4,-1,"b"),(-3,-1,"g2"),(-2,-1,"g2"),(-1,-1,"g2"),(0,-1,"g2"),
        (1,-1,"g2"),(2,-1,"g2"),(3,-1,"g2"),(4,-1,"g2"),(5,-1,"w"),(6,-1,"w"),
        (7,-1,"b"),(8,-1,"b"),(9,-1,"b"),(10,-1,"b"),(-8,0,"b"),(-7,0,"g2"),
        (-6,0,"g2"),(-5,0,"g2"),(-4,0,"g2"),(-3,0,"g2"),(-2,0,"g2"),(-1,0,"g2"),
        (0,0,"g2"),(1,0,"g2"),(2,0,"g2"),(3,0,"g2"),(4,0,"g2"),(5,0,"w"),
        (6,0,"b"),(7,0,"g2"),(8,0,"g2"),(9,0,"g2"),(10,0,"b"),(-9,1,"b"),
        (-8,1,"g2"),(-7,1,"b"),(-6,1,"g1"),(-5,1,"g2"),(-4,1,"g2"),(-3,1,"g2"),
        (-2,1,"g2"),(-1,1,"g2"),(0,1,"g2"),(1,1,"g2"),(2,1,"g2"),(3,1,"w"),
        (4,1,"g2"),(5,1,"g2"),(6,1,"g2"),(7,1,"g2"),(8,1,"g2"),(9,1,"b"),
        (-9,2,"b"),(-8,2,"b"),(-6,2,"b"),(-5,2,"g1"),(-4,2,"g1"),(-3,2,"g1"),
        (-2,2,"g1"),(-1,2,"g1"),(0,2,"g1"),(1,2,"g2"),(2,2,"g2"),(3,2,"g2"),
        (4,2,"w"),(5,2,"w"),(6,2,"w"),(7,2,"w"),(8,2,"b"),(-10,3,"b"),
        (-9,3,"b"),(-5,3,"b"),(-4,3,"b"),(-3,3,"b"),(-2,3,"b"),(-1,3,"b"),
        (0,3,"g2"),(1,3,"g2"),(2,3,"g2"),(3,3,"g1"),(4,3,"g1"),(5,3,"w"),
        (6,3,"w"),(7,3,"b"),(-2,4,"b"),(-1,4,"g2"),(0,4,"g2"),(1,4,"b"),
        (2,4,"b"),(3,4,"b"),(4,4,"b"),(5,4,"b"),(6,4,"b"),(-1,5,"b"),(0,5,"b"),
        (2,5,"b"),(3,5,"b")]}
      
    pixels=fish_data[fish_type]
    for pixel in pixels:
      fish_pixel(pixel[0],pixel[1],pixel[2])
  
  def tick():
    nonlocal direction, player_x, player_y
    
    if keydown(KEY_UP):
      player_y -= FISH_STEPS
    if keydown(KEY_DOWN) and player_y < 215:
      player_y += FISH_STEPS
    if keydown(KEY_RIGHT) and player_x < 310:
      direction = 1
      player_x += FISH_STEPS
    if keydown(KEY_LEFT) and player_x > 10:
      direction = -1
      player_x -= FISH_STEPS
    
    if player_y<-5:
      reset(True)
    
    for shark in sharks:
      if shark['x'] <= 25:
        shark['dir'] = 1
      if shark['x'] >= 300:
        shark['dir'] = -1
      shark['x'] += shark['dir'] * shark['steps']
    
    is_eaten()
    
    clear_screen()
    for _ in range(2):
      size=randint(2,4)
      fill_rect(randint(15,310),randint(15,230),size,size,COLORS["b1"])
    for shark in sharks:
      render_fish(shark['x'],shark['y'],shark['dir'],"shark")
    render_fish(player_x, player_y, direction, "clownfish")
    
    count_down=round(15-(monotonic()-start_time))
    if count_down<=0:
      reset(False)
    draw_string(str(count_down),5,5,COLORS["b1"],COLORS["bg"])
    draw_string(str(level),295,7,COLORS["b1"],COLORS["bg"])
    
  def reset(won):
    global level
    global playing
    if won:
      level+=1
    else:
      level=1
    
    playing=False
  
  clear_screen()
  for _ in range(10):
    size=randint(2,4)
    fill_rect(randint(15,310),randint(15,230),size,size,COLORS["b1"])
  draw_string("Crossy Oceans",95,90,COLORS["b1"],COLORS["bg"])
  draw_string("press OK to continue",60,115,COLORS["b1"],COLORS["bg"])
  draw_string(str(level),295,7,COLORS["b1"],COLORS["bg"])
  render_fish(60,50,1,"shark")
  render_fish(260,170,-1,"clownfish")
  for i in range(2):
    render_fish(50,40+i*20,1,"shark")
    render_fish(270,163+i*15,-1,"clownfish")
  
  while not keydown(KEY_OK):
    pass
  start_time=monotonic()
  
  while playing:
    tick()
    sleep(0.06)

while True:
  if not playing:
    game()

During your visit to our site, NumWorks needs to install "cookies" or use other technologies to collect data about you in order to:

With the exception of Cookies essential to the operation of the site, NumWorks leaves you the choice: you can accept Cookies for audience measurement by clicking on the "Accept and continue" button, or refuse these Cookies by clicking on the "Continue without accepting" button or by continuing your browsing. You can update your choice at any time by clicking on the link "Manage my cookies" at the bottom of the page. For more information, please consult our cookies policy.