mc_low_res_old.py

Created by loic-azavant

Created on February 20, 2023

18.3 KB

Les textures sont bien plus petites et donc le jeu est beaucoup plus rapide, mais un peu moins beau, voir mc_high_res.py pour les touches


from kandinsky import draw_string, fill_rect
from ion import *
from time import sleep


bg_color=(100,200,220)

xMap=-400
yMap=-40

held_keys={KEY_SHIFT: False, KEY_ONE: False, KEY_TWO: False, KEY_LEFT: False, KEY_RIGHT: False}

block_size=40      

class Tool:
  
  def __init__(self):
    self.upgrade=0

  def draw_item(self, pos):
    fill_rect(pos[0]+10,pos[1]+13,14,5,(-(56+2/3)*self.upgrade**3+230*self.upgrade**2-(233+1/3)*self.upgrade+160,-(8+1/3)*self.upgrade**3+40*self.upgrade**2-(1+2/3)*self.upgrade+70,(6+2/3)*self.upgrade**3-40*self.upgrade**2+(133+1/3)*self.upgrade))
    fill_rect(pos[0]+15,pos[1]+18,4,10,(160,70,0))
  
  def draw(self, pos, x=0):
    fill_rect(pos[0],pos[1],block_size,int(block_size/4),(-(56+2/3)*(self.upgrade+x)**3+230*(self.upgrade+x)**2-(233+1/3)*(self.upgrade+x)+160,-(8+1/3)*(self.upgrade+x)**3+40*(self.upgrade+x)**2-(1+2/3)*(self.upgrade+x)+70,(6+2/3)*(self.upgrade+x)**3-40*(self.upgrade+x)**2+(133+1/3)*(self.upgrade+x)))
    fill_rect(pos[0]+16,pos[1]+int(block_size/4),8,int((block_size/4)*3),(160,70,0))

tool=Tool()

class Block:
  
  def __init__(self,number,colorA,colorB,texture,texture_size,durability):
    self.color=[colorA,colorB]
    self.texture=texture
    self.texture_size=texture_size
    self.inv=0
    self.durability=durability
    self.number=number

  def draw(self, pos):
    for i in range(self.texture_size):
      for j in range(self.texture_size):
        fill_rect(pos[0]+j*int(block_size/self.texture_size),pos[1]+i*int(block_size/self.texture_size),int(block_size/self.texture_size),int(block_size/self.texture_size),self.color[int(self.texture[i][j])])
    
  def draw_item(self, pos):
    fill_rect(pos[0]+16,pos[1]+16,8,8,self.color[0])


break_animation=["00300003",
                 "00030330",
                 "33002000",
                 "00220000",
                 "00010200",
                 "02201033",
                 "30002000",
                 "00000230"]

def draw_break_animation(step,pos):
  for i in range(8):
    for j in range(8):
      if 0<int(break_animation[i][j])<=step:
        fill_rect(pos[0]+j*5,pos[1]+i*5,5,5,(60,)*3)


terre=Block(2,
            (200,100,0),
            (0,0,0),
            ["0"],1,30)

air=Block(0,
          bg_color,
          (0,0,0),
          ["0"],1,1*10**1000)


herbe=Block(1,
            (80,200,50),
            (200,100,0),
            ["0"],1,30)


pierre=Block(3,
            (180,180,180),
            (200,200,200),
            ["0"],1,80)

bedrock=Block(4,
             (40,40,40),
             (60,60,60),
             ["0"],1,1*10**1000)

feuille=Block(6,
             (60,200,40),
             (50,180,30),
             ["0"],1,10)
 
tree=Block(5,
          (130,80,0),
          (100,60,0),
          ["0"],1,40)

planche=Block(7,
             (250,130,0),
             (230,100,0),
             ["0"],1,40)

fer=Block(8,
         (250,150,120),
         (180,180,180),
         ["0"],1,150)

diamant=Block(9,
             (0,200,220),
             (180,180,180),
             ["0"],1,200)


blocks=[air,herbe,terre,pierre,bedrock,tree,feuille,planche,fer,diamant]

terrain=["0000000000000000000000000000000000000",
         "0000066600000000666000000000006660000",
         "0000666660000006666600000000066666000",
         "0000005000000000050000000000000500000",
         "0000005000000000050000000111110500000",
         "1000111111100111111111111222221110000",
         "2111222222211222222222222222332221111",
         "2222222222222223333222233333333222222",
         "2222222223333333333333333333333333333",
         "3333222333883322223388833333833333333",
         "3338333333383222233333333333833333333",
         "3333333993333333333933333333333333993",
         "4444444444444444444444444444444444444",
         "4444444444444444444444444444444444444"]


try:
  try:
    g=open("minecraft.txt","r")
    terrain=g.readlines()
    for i in range(len(terrain)):
      terrain[i]=terrain[i][:-1]
  except:
    f=open("minecraft.txt","w")
    for i in range(len(terrain)):
      f.write(terrain[i]+"\n")
    print("created a save file!")
except :
  print("couldn't load or create a save file")



def draw_terrain():
  global new_printed_terrain
  global printed_terrain
  new_printed_terrain=[]
  for i in range(6):
    new_printed_terrain.append("")

  
  for i in range(6):
    for j in range(8):
      if terrain[i+int(yMap/block_size)*(-1)][j+int(xMap/block_size)*(-1)]==printed_terrain[i][j]:
        new_printed_terrain[i]=new_printed_terrain[i]+"a"
      else:
        new_printed_terrain[i]=new_printed_terrain[i]+terrain[i+int(yMap/block_size)*(-1)][j+int(xMap/block_size)*(-1)]
  
  for i in range(6):
    for j in range(8):
      if 47<ord(new_printed_terrain[i][j])<58:
        blocks[int(new_printed_terrain[i][j])].draw((j*block_size,i*block_size))
  
  define_printed_terrain()
  
def draw_printed_terrain():
  for i in range(6):
    for j in range(8):
      if 48<ord(printed_terrain[i][j])<58:
        blocks[int(printed_terrain[i][j])].draw((j*block_size,i*block_size))

def define_printed_terrain():
  global printed_terrain
  printed_terrain=[]
  for i in range(6):
    printed_terrain.append(terrain[i+int(yMap/block_size)*(-1)][(int(xMap/block_size)*(-1)):(int(xMap/block_size)*(-1)+8)])


player_pos=[13,2]
player_rect=[0,int(block_size/4),int(block_size/2),int(block_size/4)*3]
player_color=(255,0,0)
player_speed=4
player_state="nothing"
player_jump_height=20
player_jump_step=0
player_gravity=2
player_gravity_step=0
player_look=[0,0]
player_interact_look=player_look
player_walk=0
player_breaking_delay=0
player_held_item=0
player_held_block=[herbe,terre,tree,planche,feuille,tool,pierre,fer,diamant]
player_changing_item=False
player_in_inv=False
player_inv_menu=0

def draw_player():
  fill_rect(xMap+player_pos[0]*block_size+player_rect[0]+int(block_size/4),yMap+player_pos[1]*block_size+player_rect[1],player_rect[2],player_rect[3],player_color)

  fill_rect(xMap+player_pos[0]*block_size+player_rect[0]+int(block_size/4)+3,yMap+player_pos[1]*block_size+player_rect[1]+4,6,6,(255,)*3)
  fill_rect(xMap+player_pos[0]*block_size+player_rect[0]+int(block_size/4)+11,yMap+player_pos[1]*block_size+player_rect[1]+4,6,6,(255,)*3)

  fill_rect(xMap+player_pos[0]*block_size+player_rect[0]+int(block_size/4)+4+player_look[0],yMap+player_pos[1]*block_size+player_rect[1]+player_look[1]+5,4,4,(0,)*3)
  fill_rect(xMap+player_pos[0]*block_size+player_rect[0]+int(block_size/4)+12+player_look[0],yMap+player_pos[1]*block_size+player_rect[1]+5+player_look[1],4,4,(0,)*3)

  player_held_block[player_held_item].draw_item((xMap+player_pos[0]*block_size+player_rect[0]+int(block_size/4),yMap+player_pos[1]*block_size+player_rect[1]))
  
def hide_player():
  fill_rect(xMap+player_pos[0]*block_size+player_rect[0]+int(block_size/4),yMap+player_pos[1]*block_size+player_rect[1],player_rect[2]+4,player_rect[3],bg_color)

def player_collides_left():
  if 48<ord(terrain[player_pos[1]][player_pos[0]-1])<58:
    return True
  else:
    return False

def player_collides_right():
  if 48<ord(terrain[player_pos[1]][player_pos[0]+1])<58:
    return True
  else:
    return False
  
def player_on_ground():
  if 48<ord(terrain[player_pos[1]+1][player_pos[0]])<58:
    return True
  else:
    return False

def player_collides_above():
  if 48<ord(terrain[player_pos[1]-1][player_pos[0]])<58:
    return True
  else:
    return False


def draw_inv(x):
  fill_rect(30,30,260,160,(220,)*3)
  if x==0:
    for i in range(len(player_held_block)):
      player_held_block[i].draw((40+(i%5)*50,40+int(i/5)*75))
      if type(player_held_block[i])==Block:
        draw_string("x"+str(player_held_block[i].inv),50+(i%5)*50,85+int(i/5)*75,(255,)*3,(220,)*3)
    fill_rect(40+(player_held_item%5)*50,105+int(player_held_item/5)*75,40,5,(255,0,0))
  if x==1:
    draw_string("1)      x1 =      x4",40,50,(255,)*3,(220,)*3)
    tree.draw((70,40))
    planche.draw((170,40))
    if tool.upgrade<3:
      draw_string("2)      =      +      x3",40,110,(255,)*3,(220,)*3)
      tool.draw((70,100),x=1)
      tool.draw((140,100))
      blocks[-2*tool.upgrade**2+7*tool.upgrade+3].draw((210,100))
    

printed_terrain=[]
define_printed_terrain()
new_printed_terrain=[]

fill_rect(0,0,320,222,bg_color)
draw_printed_terrain()
draw_player()

while True:
  
  if player_in_inv==False:
    
#    if keydown(KEY_BACKSPACE) and held_keys[KEY_BACKSPACE]==False:
 #     player_held_item=(player_held_item+1)%len(player_held_block)
  #    draw_player()
   #   held_keys[KEY_BACKSPACE]=True
    #  if player_state=="breaking":
     #   blocks[int(terrain[player_pos[1]+player_interact_look[1]][player_pos[0]+player_interact_look[0]])].draw((xMap+player_pos[0]*40+player_interact_look[0]*40,yMap+player_interact_look[1]*40+player_pos[1]*40))
      #  player_state="nothing"

    if keydown(KEY_ONOFF):
      if player_state=="nothing" and int(terrain[player_pos[1]+player_look[1]][player_look[0]+player_pos[0]])!=0 and player_pos[1]+player_look[1]<len(terrain)-2:
        player_interact_look=player_look
        player_state="breaking"
        player_breaking_delay=0
        break_durability=blocks[int(terrain[player_pos[1]+player_look[1]][player_pos[0]+player_look[0]])].durability
        if type(player_held_block[player_held_item])==Tool:
          break_durability=int(break_durability/((player_held_block[player_held_item].upgrade+1)*2))
      if player_state=="breaking":
        if player_interact_look==player_look:
          player_breaking_delay+=1
          draw_break_animation(int((player_breaking_delay*3)/break_durability)+1,(xMap+player_pos[0]*block_size+player_look[0]*block_size,yMap+player_pos[1]*block_size+player_look[1]*block_size))
        else:
          blocks[int(terrain[player_pos[1]+player_interact_look[1]][player_pos[0]+player_interact_look[0]])].draw((xMap+player_pos[0]*40+player_interact_look[0]*40,yMap+player_interact_look[1]*40+player_pos[1]*40))
          player_breaking_delay=0
          player_state="nothing"
        if player_breaking_delay==break_durability:
          blocks[int(terrain[player_pos[1]+player_look[1]][player_pos[0]+player_look[0]])].inv+=1
          terrain[player_pos[1]+player_look[1]]=terrain[player_pos[1]+player_look[1]][:player_pos[0]+player_look[0]]+"0"+terrain[player_pos[1]+player_look[1]][(player_pos[0]+1+player_look[0]):]
          define_printed_terrain()
          air.draw((player_pos[0]*block_size+player_look[0]*block_size+xMap,player_pos[1]*block_size+yMap+player_look[1]*block_size))
          player_breaking_delay=0
          player_state="nothing"
  
    if not keydown(KEY_ONOFF) and player_state=="breaking":
      player_state="nothing"
      player_breaking_delay=0
      blocks[int(terrain[player_pos[1]+player_look[1]][player_pos[0]+player_look[0]])].draw((xMap+player_pos[0]*40+player_look[0]*40,yMap+player_look[1]*40+player_pos[1]*40))


    if keydown(KEY_HOME):
      if ((player_look==[0,1] and not player_on_ground()) or (player_look==[0,-1] and not player_collides_above()) or (player_look==[1,0] and not player_collides_right()) or (player_look==[-1,0] and not player_collides_left())) and player_held_block[player_held_item].inv>0:
        terrain[player_pos[1]+player_look[1]]=terrain[player_pos[1]+player_look[1]][:player_pos[0]+player_look[0]]+str(player_held_block[player_held_item].number)+terrain[player_pos[1]+player_look[1]][(player_pos[0]+1+player_look[0]):]
        draw_terrain()
        player_held_block[player_held_item].inv-=1
  
    if keydown(2):
      player_look=[0,1]
      draw_player()

    if keydown(0) and held_keys[KEY_LEFT]==False:
      if keydown(KEY_BACKSPACE):
        player_held_item=(player_held_item-1)%len(player_held_block)
        draw_player()
        held_keys[KEY_LEFT]=True
        if player_state=="breaking":
          blocks[int(terrain[player_pos[1]+player_interact_look[1]][player_pos[0]+player_interact_look[0]])].draw((xMap+player_pos[0]*40+player_interact_look[0]*40,yMap+player_interact_look[1]*40+player_pos[1]*40))
          player_state="nothing"
      else:
        player_look=[-1,0]
        draw_player()
        if player_rect[0]==0 and player_collides_left()==False and not keydown(KEY_OK) and player_state!="breaking" and player_pos[0]>1:
          player_walk=-1

    if keydown(3) and held_keys[KEY_RIGHT]==False:
      if keydown(KEY_BACKSPACE):
        player_held_item=(player_held_item+1)%len(player_held_block)
        draw_player()
        held_keys[KEY_RIGHT]=True
        if player_state=="breaking":
          blocks[int(terrain[player_pos[1]+player_interact_look[1]][player_pos[0]+player_interact_look[0]])].draw((xMap+player_pos[0]*40+player_interact_look[0]*40,yMap+player_interact_look[1]*40+player_pos[1]*40))
          player_state="nothing"
      else:
        player_look=[1,0]
        draw_player()
        if player_rect[0]==0 and player_collides_right()==False and not keydown(KEY_OK) and player_state!="breaking" and player_pos[0]<len(terrain[0])-2:
          player_walk=1
  
    if player_walk!=0:
      hide_player()
      player_rect[0]+=player_speed*player_walk
      draw_player()
      if abs(player_rect[0])==int(block_size/2):
        if (player_rect[0]==-20 and player_collides_left()) or (player_rect[0]==20 and player_collides_right()):
          hide_player()
          player_rect[0]=0
          player_walk=0
          draw_player()
          draw_printed_terrain()
        else:
          player_pos[0]+=player_walk
          player_rect[0]=-player_rect[0]
      if player_rect[0]==0:
        player_walk=0
  
    if keydown(1):
      player_look=[0,-1]
      draw_player()
      if player_state=="nothing" and not keydown(KEY_OK) and not player_collides_above() and player_pos[1]>1:
        player_state="jump"

    if player_state=="jump":
      hide_player()
      player_rect[1]-=player_jump_height
      draw_player()
      if player_jump_height==20:
        player_jump_height=10
      elif player_jump_height==10:
        player_jump_height=5
        player_jump_step=0
        player_pos[1]-=1
        player_rect[1]=20
      elif player_jump_step==3:
        if player_jump_height==5:
          player_jump_height=2
          player_jump_step=0
        elif player_jump_height==2:
          player_jump_height=0
          player_jump_step=0
        elif player_jump_height==0:
          player_jump_height=-2
          player_jump_step=0
        elif player_jump_height==-2:
          player_jump_height=-5
          player_jump_step=0
        elif player_jump_height==-5:
          player_jump_height=-10
          if player_on_ground():
            hide_player()
            player_rect[1]=10
            player_state="nothing"
            player_jump_step=0
            player_jump_height=20
            draw_player()
            draw_printed_terrain()
          else:
            player_pos[1]+=1
            player_rect[1]=-20
            player_look=[0,1]
      elif player_jump_height==-10:
        player_jump_height=-20
      elif player_jump_height==-20:
        if player_on_ground():
          player_state="nothing"
        else:
          player_gravity=40
          player_state="falling"
        player_jump_height=20
      player_jump_step+=1
  
    if player_state=="nothing" and player_on_ground()==False:
      player_state="falling"
      player_pos[1]+=1
      player_rect[1]=-30
      player_gravity_step=0
      player_look=[0,1]

    if player_state=="falling":
      hide_player()
      player_rect[1]+=player_gravity
      draw_player()
      player_gravity_step+=1
      if player_gravity_step==5 and player_gravity==2:
        player_gravity=5
        player_gravity_step=0
      if player_gravity_step==2 and player_gravity==5:
        player_gravity=20
      elif player_gravity==20 or player_gravity==40:
        try:
          if player_on_ground():
            player_state="nothing"
            player_gravity=2
            draw_printed_terrain()
          else:
            player_gravity=40
            player_pos[1]+=1
            player_rect[1]=-30
        except:
          player_pos[1]=0
          yMap=-40
          player_gravity=2
          player_state="nothing"
          terrain[-1]=terrain[-1][:player_pos[0]]+"2"+terrain[-1][player_pos[0]+1:]
  
    if player_pos[1]>len(terrain):
      player_pos[1]=1
      yMap=40
  
    if xMap+player_pos[0]*block_size>320-block_size*2:
      hide_player()
      xMap-=block_size
      draw_terrain()
      draw_player()
    if xMap+player_pos[0]*block_size<block_size:
      hide_player()
      xMap+=block_size
      draw_terrain()
      draw_player()
    if yMap+player_pos[1]*block_size>222-block_size*2:
      hide_player()
      yMap-=block_size
      draw_terrain()
      draw_player()
    if yMap+player_pos[1]*block_size<block_size:
      hide_player()
      yMap+=block_size
      draw_terrain()
      draw_player()

    if keydown(KEY_ANS):
      try:
        from os import remove
        remove("minecraft.txt")
        print("successfully deleted the save file!")
        break
      except:
        print("failed to delete a file..")
        break
  
    if keydown(KEY_EXE):
      try:
        g=open("minecraft.txt","w")
        for i in terrain:
          g.write(i+"\n")
        print("successfully saved!")
      except:
        print("failed to save")
      break
    
    if keydown(KEY_SHIFT) and held_keys[KEY_SHIFT]==False:
      held_keys[KEY_SHIFT]=True
      player_in_inv=True
      draw_inv(player_inv_menu)
      
    
  if player_in_inv:
    if keydown(KEY_SHIFT) and held_keys[KEY_SHIFT]==False:
      held_keys[KEY_SHIFT]=True
      fill_rect(0,0,320,222,bg_color)
      draw_printed_terrain()
      draw_player()
      player_in_inv=False
    
    if (keydown(KEY_LEFT) or keydown(KEY_RIGHT)) and held_keys[int((-1.5)*(keydown(KEY_LEFT)-keydown(KEY_RIGHT))+1.5)]==False:
      held_keys[int((-1.5)*(keydown(KEY_LEFT)-keydown(KEY_RIGHT))+1.5)]=True
      player_inv_menu=(player_inv_menu+1)%2
      draw_inv(player_inv_menu)
          
    if keydown(KEY_ONE) and held_keys[KEY_ONE]==False and tree.inv>0:
      held_keys[KEY_ONE]=True
      tree.inv-=1
      planche.inv+=4
      draw_inv(player_inv_menu)
      
    if keydown(KEY_TWO) and held_keys[KEY_TWO]==False and blocks[-2*tool.upgrade**2+7*tool.upgrade+3].inv>=3 and tool.upgrade<3:
      held_keys[KEY_TWO]=True
      blocks[-2*tool.upgrade**2+7*tool.upgrade+3].inv-=3
      tool.upgrade+=1
      draw_inv(player_inv_menu)
    
    for i in range(len(player_held_block)):
      if keydown(30+i+int(i/5)) and player_held_item!=i:
        player_held_item=i
        draw_inv(player_inv_menu)
    
  for i in held_keys:
    if not keydown(i) and held_keys[i]:
      held_keys[i]=False

  sleep(0.001)

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.