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)