minecraft en 2d avec des textures les fleches pour bouger maintenir OK et bouger les fleches pour changer la vue maintenir ON_OFF pour casser des blocs appuyer sur HOME pour poser un bloc(si vous en avez) SHIFT pour rentrer dans l’inventaire les fleches gauche et droite pour changer de page 7, 8, 9, (, ), 4, 5, 6, * pour changer de slot 1 ou 2 pour crafter maintenir CLEAR et appuyer sur fleche droite ou fleche fauche pour changer de slot Sur OMEGA et UPSILON, appuyer sur EXE pour sauvegarder le monde, appuyer sur ANS pour supprimer la save
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), ["00000000", "00000000", "10010000", "11011001", "10111011", "11111101", "11111111", "11111111"],8,30) pierre=Block(3, (180,180,180), (200,200,200), ["00001110", "00111100", "00000111", "01110000", "00011110", "00000000", "10000111", "11100000"],8,80) bedrock=Block(4, (40,40,40), (60,60,60), ["00001110", "00111100", "00000111", "01110000", "00011110", "00000000", "10000111", "11100000"],8,1*10**1000) feuille=Block(6, (60,200,40), (50,180,30), ["11001011", "00010110", "10011001", "01101100", "00110101", "10101000", "00110110", "01100101"],8,10) tree=Block(5, (130,80,0), (100,60,0), ["00000010", "01001010", "01101011", "01001001", "00010010", "10110110", "10110100", "00100100"],8,40) planche=Block(7, (250,130,0), (230,100,0), ["11111111", "10000000", "11111111", "00000100", "11111111", "00100000", "11111111", "00010000"],8,40) fer=Block(8, (250,150,120), (180,180,180), ["11111111", "10110001", "11110001", "11011111", "11111111", "10011011", "10011111", "11111111"],8,150) diamant=Block(9, (0,200,220), (180,180,180), ["11111111", "10001111", "10001111", "11111101", "11011111", "11110011", "11100011", "11111111"],8,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)