from random import * from kandinsky import * from ion import * from time import * def texture(x,y,n): if n=="grass": fill_rect(x*16,y*16,16,6,'green') fill_rect(x*16,y*16+6,16,10,'brown') if n=="dirt": fill_rect(x*16,y*16,16,16,'brown') if n=="stone": fill_rect(x*16,y*16,16,16,'gray') if n=="wood": fill_rect(x*16,y*16,4,16,(113,93,66)) fill_rect(x*16+4,y*16,4,16,'brown') fill_rect(x*16+8,y*16,4,16,(113,93,66)) fill_rect(x*16+12,y*16,4,16,'brown') def choice_h(): for i in range(40): if len(h)<2: h.append(h[-1]+choice([-1,0,0,1])) elif h[-1]+1==h[-2]: h.append(h[-1]+choice([0,0,-1,-1,-2])) elif h[-1]==h[-2]+1: h.append(h[-1]+choice([0,0,1,1,2])) elif h[-1]+2==h[-2]: h.append(h[-1]+choice([-1,-2])) elif h[-1]==h[-2]+2: h.append(h[-1]+choice([1,2])) else: h.append(h[-1]+choice([-1,0,0,1])) def block(): for j in range(15): for i in range(len(h)): if j==0:l.append([i,h[i]+j,"grass"]) elif j<4:l.append([i,h[i]+j,"dirt"]) else:l.append([i,h[i]+j,"stone"]) def arbres(n): global n1 n1=(l[-1][0]//n) draw_string(str(n1),0,0) for i in range(n1): for j in l: if j[2]=="grass" and j[0]%n1==0: l.append([j[0],j[1]-1,"wood"]) l.append([j[0],j[1]-2,"wood"]) l.append([j[0],j[1]-3,"wood"]) def new_chunck(): choice_h();block() def hotebar(): fill_rect(60,198,200,24,(100,100,100)) fill_rect(62,192,196,4,(80,80,0)) for i in range(9): fill_rect(i*22+62,200,20,20,(140,140,140)) for i in range(life): fill_rect(i*8+64,184,6,6,'red') for i in range(food): fill_rect(i*8+178,184,6,6,(230,168,84)) for i in range(len(inv)): if inv[i][0]=="dirt": if inv[i][1]<10:draw_string(str(str(inv[i][1])+" "),i*22+62,201,'white','brown') else:draw_string(str(inv[i][1]),i*22+62,201,'white','brown') if inv[i][0]=="grass": if inv[i][1]<10:draw_string(str(str(inv[i][1])+" "),i*22+62,201,'white','green') else:draw_string(str(inv[i][1]),i*22+62,201,'white','green') if inv[i][0]=="wood": if inv[i][1]<10:draw_string(str(str(inv[i][1])+" "),i*22+62,201,'white',(113,93,66)) else:draw_string(str(inv[i][1]),i*22+62,201,'white',(113,93,66)) def update_terrain(): fill_rect(0,0,320,222,(200,200,255)) for i in l: if -1<i[0]<20 and -1<i[1]<14:texture(i[0],i[1],i[2]) hotebar() def player(): fall();fill_rect(x*16+4,y*16,8,32,'blue');fill_rect(x*16,y*16+8,16,12,'blue') def no_player(): fill_rect(x*16,y*16,16,32,get_pixel(x*16,y*16)) def dead(): global test,x,y,life,food test=[l[10][0],l[10][1]] for i in l:i[0]+=10-test[0] for i in l:i[1]+=10-test[1] x,y,life,food=10,l[10][1]-2,10,10;update_terrain();test=False def fall(): global x,y,life test=False while test==False: for i in l: if i[0]==x and i[1]==y+2 and i[2]!="":test=True;break if test==False: if y==8: for i in l:i[1]-=1 update_terrain() else:y+=1 l1=[] for i in l:l1.append(i[1]) if max(l1)<0: life-=1 if life==0:dead() def select(): fill_rect(x1*16,y1*16,16,1,'white') fill_rect(x1*16,y1*16,1,16,'white') fill_rect(x1*16,y1*16+15,16,1,'white') fill_rect(x1*16+15,y1*16,1,16,'white') h,l,life,food,inv=[randint(11,12)],[],10,10,[] choice_h();block()#;arbres(randint(6,12)) while True: if l[10][1]<8: for i in range(len(l)):l[i][1]+=1 elif l[10][1]>8: for i in range(len(l)):l[i][1]-=1 else:break update_terrain();x,y,m=10,l[10][1]-2,monotonic();player() while True: if keydown(KEY_RIGHT): no_player() test=[True,True,True,True] for i in range(len(l)): if l[i][0]==x+1 and l[i][1]==y+1 and l[i][2]!="":test[0]=False if l[i][0]==x+1 and l[i][1]==y and l[i][2]!="":test[1]=False if l[i][0]==x+1 and l[i][1]==y-1 and l[i][2]!="":test[2]=False if l[i][0]==x and l[i][1]==y-1 and l[i][2]!="":test[3]=False if test[0] and test[1]:x+=1 if test[0]==False and test[1] and test[2] and test[3]: x+=1 if y!=2:y-=1 else: for i in l:i[1]+=1 update_terrain() if x==16: x-=1 for i in l:i[0]-=1 update_terrain() #new_chunck() player() while keydown(KEY_RIGHT) and monotonic()-m<0.3:continue if keydown(KEY_LEFT): no_player() test=[True,True,True,True] for i in range(len(l)): if l[i][0]==x-1 and l[i][1]==y+1 and l[i][2]!="":test[0]=False if l[i][0]==x-1 and l[i][1]==y and l[i][2]!="":test[1]=False if l[i][0]==x-1 and l[i][1]==y-1 and l[i][2]!="":test[2]=False if l[i][0]==x and l[i][1]==y-1 and l[i][2]!="":test[3]=False if test[0] and test[1]:x-=1 if test[0]==False and test[1] and test[2] and test[3]: x-=1 if y!=2:y-=1 else: for i in l:i[1]+=1 update_terrain() if x==2: x+=1 for i in l:i[0]+=1 update_terrain() #new_chunck() player() while keydown(KEY_LEFT) and monotonic()-m<0.3:continue if keydown(KEY_OK): x1,y1=x,y+2 select() while keydown(KEY_OK):continue while True: if keydown(KEY_LEFT) and x1>x-2: x1-=1 update_terrain();player();select() while keydown(KEY_LEFT):continue if keydown(KEY_RIGHT) and x1<x+2: x1+=1 update_terrain();player();select() while keydown(KEY_RIGHT):continue if keydown(KEY_UP) and y+3>y1>y-1: y1-=1 update_terrain();player();select() while keydown(KEY_UP):continue if keydown(KEY_DOWN) and y+2>y1>y-2: y1+=1 update_terrain();player();select() while keydown(KEY_DOWN):continue if keydown(KEY_OK): for i in range(len(l)): if l[i][0]==x1 and l[i][1]==y1 and l[i][2]!="": for j in range(1,4): fill_rect(x1*16+8-j*2,y1*16+8-j*2,j*4,j*4,'white') if l[i][2] in ("grass","dirt"):sleep(0.3) elif l[i][2]=="wood":sleep(0.7) else:sleep(1) del l[i] in_inv=False for j in inv: if j[0]==l[i][2] and j[1]!=64: j[1]+=1 in_inv=True break if in_inv==False:inv.append([l[i][2],1]) break break update_terrain();player() m=monotonic()