minecraft.py

Created by antarctus

Created on December 10, 2020

7.84 KB

COMMENT JOUER: 1) On se déplace avec les flèches. 2) On peut changer la direction du regard en appuyant sur le bouton off et la flèche voulue. 3) On peut ouvrir et fermer l’inventaire avec la touche “home” 4)On sélectionne quelque chose dans l’inventaire avec la touche correspondante parmi les trois premières lignes du clavier. 5)Pour changer le place d’un outil on sélectionne cet outil, on appuie sur “‘OK” et en même temps on appuie sur la touche correspondante à la case où vous voulez qu’il arrive.


from random import *
from kandinsky import *
from ion import *
from time import *

cx=-2
vie=100
armure=80
ex=(0,0)
direction=(0,0)

break_mode=(
(4,3,0,3,4),
(0,0,2,0,0),
(3,0,1,0,3),
(4,0,2,2,0),
(0,3,0,0,4),
)

map=[
[0,5,5,5,0,0,0,1,3 ,3 ,3 ,10,3,1 ,0,0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,0,0,0,0,0,1 ,2,3 ,11,3 ,2,1 ,0,0,0,0,0,0,0,0 ,0 ,0 ,0,0,0,0,5,5,5,5,0,0,0,0,1,0,0,0,0,0,15,16,16,14,16,16,16,16,16,16,16,16,16,16,16,16,16,16,15],
[0,5,4,5,0,0,1,2,3 ,11,3 ,3 ,3,10,1,1,0,1,1,1,0,0,0,0,0,0,5,5,4,5,5,0,0,0,1,2 ,3,3 ,9 ,3 ,3,2 ,1,0,0,0,0,0,1,13,13,13,1,0,0,5,5,4,4,5,5,0,0,1,2,1,0,0,0,0,15,16,0 ,14,0 ,16,16,0 ,0 ,0 ,0 ,0 ,16,16,16,16,16,16,15],
[1,0,4,0,0,1,2,3,10,9 ,3 ,11,3,3 ,3,2,1,2,2,2,1,0,0,0,1,0,0,0,4,0,0,0,1,1,2,10,3,12,3 ,10,3,3 ,2,1,0,0,0,1,2,2 ,13,13,2,1,0,0,0,4,4,0,0,0,1,2,3,2,1,0,0,0,15,16,0 ,14,0 ,0 ,0 ,0 ,16,16,16,16,16,16,16,16,16,16,15],
[2,1,2,1,1,3,3,3,3 ,3 ,12,3 ,3,11,3,3,2,3,3,2,2,1,1,1,2,1,1,1,1,1,1,1,2,2,3,11,3,11,3 ,3 ,3,10,3,2,1,1,1,2,2,14,15,13,3,2,1,1,1,1,1,1,1,1,2,3,3,3,2,1,1,1,15,16,16,16,16,16,16,16,16,14,14,14,16,16,16,16,16,16,15]
]

max_map=len(map[1])

blocks=(
("air",10000,0,1,1,((0,0,50,50,(130,230,255)),)),
("gazon",10,4,0,0,((0,10,50,40,(190,90,0)),(0,0,50,10,(0,220,0)))),
("terre",10,4,0,0,((0,0,50,50,(190,90,0)),)),
("pierre",40,2,0,0,((0,0,50,50,(180,180,180)),)),
("buche",20,3,0,0,(((0,0,50,50,(200,100,10)),(20,0,10,50,(210,110,20))))),
("feuille",2,3,0,0.75,((0,0,50,50,(100,120,0)),)),
(),#("table",15,3,0,0,()),
("planche",15,3,0,0,((0,0,50,50,(230,130,40)),(0,20,50,10,(210,110,20)),)),
(),#("four",30,2,0,0,()),
("torche",10,3,1,1,((0,0,50,50,(130,230,255)),(20,20,10,30,(200,100,10)),(20,20,10,10,(255,255,0)))),
("minerai_charbon",50,2,0,0,((0,0,50,50,(180,180,180)),(10,30,10,10,(20,20,20)),(30,10,10,10,(20,20,20)))),
("minerai_fer",50,2,0,0,((0,0,50,50,(180,180,180)),(10,30,10,10,(250,100,100)),(30,10,10,10,(250,100,100)))),
("diamant",40,2,0,0,((0,0,50,50,(180,180,180)),(10,30,10,10,(0,255,255)),(30,10,10,10,(0,255,255)))),
("eau",10000,5,0.75,0.5,((0,0,50,50,(0,0,180)),)),
("lave",10000,5,0.25,1,((0,0,50,50,(255,100,0)),)),
("obsidienne",200,2,0,0,((0,0,50,50,(0,0,20)),)),
("pierre_trefond",40,2,0,0,((0,0,50,50,(250,20,0)),)),
#("spawner",200,2,0,0,()),
#("pierre_ender",80,2,0,0,((0,0,50,50,(235,235,235)),)),
#("toile",20,1,0.2,0.9,((0,0,50,50,(130,230,255)),(0,10,40,10,(230,230,230)),(30,0,10,40,(230,230,230)),(10,30,40,10,(230,230,230)),(10,10,10,40,(230,230,230))))
)


inv=[
[0,1,2,3,4,13],
[31,41,51,32,42,52],
[9,7,61,62,63,64]
]

select=0
selectY=0

def casser(outil=0):
  if not -1<p.y+direction[1]<4:
    return
  block=blocks[map[p.y+direction[1]][(p.x+direction[0])%max_map]]
  outil_destine=block[2]
  temps=0.2*block[1]/10
  if outil!=0:
    if outil_destine==outil%10:
      temps/=2
    else:
      temps*=2
    temps/=(int(outil/10)-3)+1

  if block[1]==10000:
    return
  for h in range(1,5):
    for i in range(0,5):
      for j in range(0,5):
        if h==break_mode[i][j]:
          fill_rect(50*(p.x-cx+direction[0])+10*i,50*(p.y+direction[1])+10*j,10,10,(0,0,0))
    sleep(temps)

  map[p.y+direction[1]][(p.x+direction[0])%max_map]=0


class Perso():
  def __init__(self):
    self.x=0
    self.y=0

  def move(self,x,y):
    global direction,cx
    direction=(x,y)
    if keydown(KEY_ONOFF) or (self.y+y in (-1,4)):
      return
    if blocks[map[(self.y+y)%4][(self.x+x)%max_map]][3]>0:
      self.x+=x
      self.y+=y
    if cx+4<self.x or self.x<cx+1:
      cx+=x


  def draw(self):
    rx=(self.x-cx)*50
    ry=self.y*50
    fill_rect(rx+15,ry+10,20,40,(255,0,255))
    fill_rect(rx+15,ry,20,20,(250,160,130))

    fill_rect(rx+18,ry+5,5,5,(255,255,255))
    fill_rect(rx+27,ry+5,5,5,(255,255,255))

    fill_rect(rx+19+(direction[0]),ry+6+(direction[1]),3,3,(0,0,255))
    fill_rect(rx+28+(direction[0]),ry+6+(direction[1]),3,3,(0,0,255))
    
    if 0<inv[0][select%6]<20:
      block=blocks[inv[0][select]]
      for k in block[5]:
        fill_rect(int(30+rx+(k[0]*1/5)),int(30+ry+(k[1]*1/5)),int(k[2]*1/5),int(k[3]*1/5),k[4])
    if 30<inv[0][select%6]<70:
      draw_outil(30+rx,30+ry,1/5,inv[0][select%6]-30)

p=Perso()


def draw():
  if open_inv:
    draw_inv()
    bouger_inv()
    return
  else:
    for i in range(0,4):
      for j in range(0,7):
        block=blocks[map[i][(j+(cx))%max_map]]
        for k in block[5]:
          fill_rect(k[0]+(j*50),k[1]+(i*50),k[2],k[3],k[4])

    p.draw()

  if armure!=ex[0] or vie!=ex[1]:
    draw_life()

def draw_life():
  global ex
  ex=(armure,vie)
  fill_rect(0,200,320,22,(255,255,255))
  fill_rect(0,200,int(armure/100*320),22,(120,120,150))
  fill_rect(3,203,int(vie/100*314),16,(255,0,0))

drawed_inv=0

def draw_inv():
  global drawed_inv
  if drawed_inv:
    return

  fill_rect(20,20,280,160,(125,225,250))
  for i in range(0,6):
    for j in range(0,3):

      if i==select and j==selectY:
        fill_rect(27+i*45-5,10*(j!=0)+30+j*45-5,50,50,(220,200,200))

      if 0<=inv[j][i]<20:
        block=blocks[inv[j][i]]
        for k in block[5]:
          fill_rect(int(27+i*45+(k[0]*4/5)),int(10*(j!=0)+30+j*45+(k[1]*4/5)),int(k[2]*4/5),int(k[3]*4/5),k[4])
      elif 30<inv[j][i]<70:
        draw_outil(27+i*45,10*(j!=0)+30+j*45,4/5,inv[j][i]-30)
      else:
        fill_rect(27+i*45,10*(j!=0)+30+j*45,40,40,(0,0,0))
  drawed_inv=1

open_inv=0  

def draw_outil(x,y,scale,id):
  couleur=((200,100,10),(180,180,180),(235,235,235),(0,255,255))[int(id/10)]
  if id%10==1:
    fill_rect(x+int(15*scale),y+int(5*scale),int(20*scale),int(30*scale),couleur)
    fill_rect(x+int(20*scale),y+int(35*scale),int(10*scale),int(15*scale),(220,120,30))

  if id%10==2:
    fill_rect(x+int(5*scale),y+int(5*scale),int(40*scale),int(10*scale),couleur)
    fill_rect(x+int(20*scale),y+int(15*scale),int(10*scale),int(30*scale),(220,120,30))

  if id%10==3:
    fill_rect(x+int(20*scale),y,int(25*scale),int(10*scale),couleur)
    fill_rect(x+int(30*scale),y+int(10*scale),int(15*scale),int(10*scale),couleur)
    fill_rect(x+int(20*scale),y+int(10*scale),int(10*scale),int(35*scale),(220,120,30))

  if id%10==4:
    fill_rect(x+int(15*scale),y+int(5*scale),int(20*scale),int(20*scale),couleur)
    fill_rect(x+int(20*scale),y+int(25*scale),int(10*scale),int(25*scale),(220,120,30))


def bouger_inv():
  global select,selectY,drawed_inv
  if not open_inv:
    return
  for i in range(18):
    if keydown(i+12):
      if keydown(KEY_OK):
        inv[int(i/6)][i%6],inv[selectY][select]=inv[selectY][select],inv[int(i/6)][i%6]
      else:
        selectY=int(i/6)
        select=i%6
  for i in range(4):
    if keydown(i):
      select=(select+(-1,0,0,1)[i])%6
      selectY=(selectY+(0,-1,1,0)[i])%3

  drawed_inv=0
  draw_inv()

while True:
  draw()
  sleep(0.2)

  if keydown(KEY_HOME):
    drawed_inv=0
    open_inv=1-open_inv
  if open_inv:
    continue

  if p.y<3:
    if blocks[map[(p.y+1)%4][p.x%max_map]][3]==1 and p.y<3:
      p.y+=1
  if map[p.y][p.x%max_map]==14:
    vie-=10-(5*(vie<=armure))

  for i in range(6):
    if keydown(12+i):
      select=i

  if keydown(KEY_OK):
    if 0<inv[0][select%6]<20:
      if map[(p.y+direction[1])%4][(p.x+direction[0])%max_map] in (0,13,14):
        map[(p.y+direction[1])%4][(p.x+direction[0])%max_map]=inv[0][select]
    else:
      casser(inv[0][select%6])

  if keydown(KEY_UP) and (map[(p.y+1)%4][p.x%max_map]!=0 or p.y==3):
    p.move(0,-1)
  if keydown(KEY_DOWN):
    p.move(0,1)
  if keydown(KEY_LEFT):
    p.move(-1,0)
  if keydown(KEY_RIGHT):
    p.move(1,0)

#COMMENT JOUER: 
#1) On se deplace avec les fleches.

#2) On peut changer la direction du
# regard en appuyant sur le bouton off
# et la fleche voulue. 

#3) On peut ouvrir et fermer l'inventaire
# avec la touche "home"

#4)On selectionne quelque chose dans l'inventaire avec la touche correspondante parmi les trois premieres lignes du clavier.

#5)Pour changer le place d'un outil on selectionne cet outil, on appuie sur "'OK" et en même temps on appuie sur la touche correspondante à la case où vous voulez qu'il arrive.

#6)

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.