mirror of
https://github.com/LingDong-/Hermit.git
synced 2026-02-06 10:56:44 +00:00
Organization
This commit is contained in:
parent
7012ec1bd3
commit
3c5bf8a16f
@ -20,12 +20,11 @@ def filter(array,t = 0):
|
||||
x[...] = (x-35+twave*44)/(1.3-twave*0.3)
|
||||
|
||||
for x in np.nditer(array[2],op_flags=['readwrite'],flags = ['external_loop']):
|
||||
|
||||
x[...] = (x-25+twave*25)/(1.3-twave*0.3)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
screen = pygame.display.set_mode([640,320])
|
||||
clock = pygame.time.Clock()
|
||||
@ -35,20 +34,19 @@ if __name__ == "__main__":
|
||||
t += 100
|
||||
for event in pygame.event.get():
|
||||
if event.type == pygame.QUIT: sys.exit()
|
||||
|
||||
|
||||
array = []
|
||||
screen.fill([200,200,200])
|
||||
|
||||
screen.fill([200,200,200])
|
||||
|
||||
u.circle(screen,(100,100,100),[50,50],50)
|
||||
|
||||
|
||||
clock.tick()
|
||||
u.text(screen,10,10,"FPS: %.1f" % clock.get_fps(),(150,150,150))
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
array = [pygame.surfarray.pixels_red(screen),pygame.surfarray.pixels_green(screen),pygame.surfarray.pixels_blue(screen)]
|
||||
|
||||
filter(array,t)
|
||||
#pygame.surfarray.blit_array(screen,array)
|
||||
pygame.display.flip()
|
||||
|
||||
|
||||
591
src/lib/foo.py
591
src/lib/foo.py
@ -1 +1,590 @@
|
||||
#Testing stuff goes here.
|
||||
""" by Lingdong Huang
|
||||
"""
|
||||
|
||||
# import modules
|
||||
|
||||
import pygame
|
||||
import sys
|
||||
import math
|
||||
import thread
|
||||
import random
|
||||
import numpy
|
||||
import string
|
||||
import os
|
||||
import pygame._view
|
||||
|
||||
import lib.noise as noise
|
||||
import lib.tree as tree
|
||||
import lib.creature as creature
|
||||
import lib.utilities as u
|
||||
import lib.filter as filter
|
||||
import lib.parse as parse
|
||||
|
||||
import lib.pattern as pattern
|
||||
import lib.particle as particle
|
||||
import lib.font as font
|
||||
import lib.settings as settings
|
||||
|
||||
# initialization
|
||||
pygame.init()
|
||||
settings.init()
|
||||
|
||||
# setting up variables
|
||||
size = width, height = 1280, 320
|
||||
buff = 200
|
||||
screen = pygame.display.set_mode([width/2,height+50])#,pygame.FULLSCREEN )
|
||||
canvas = pygame.Surface([width/2,height])
|
||||
pygame.display.set_caption("")
|
||||
|
||||
x = 0
|
||||
treeDensity = 32
|
||||
landDensity = 32
|
||||
|
||||
|
||||
SPEED = 0.5
|
||||
|
||||
allloads = width/treeDensity
|
||||
loaded = 0
|
||||
|
||||
Ls = [None]*4
|
||||
Lrs = [None]*4
|
||||
|
||||
gamestart = False
|
||||
|
||||
COLOR_KEY = [255,0,255]
|
||||
|
||||
fullscreen = False
|
||||
|
||||
terrain = [0]*4
|
||||
|
||||
lspds = [0.1,0.2,0.5,1]
|
||||
totalMade = [0]*4
|
||||
|
||||
scheme = [(70,69,63),(225,225,210)]
|
||||
|
||||
icon = pygame.Surface([512,512])
|
||||
icon.set_colorkey(COLOR_KEY)
|
||||
|
||||
def Icon():
|
||||
global icon, scheme
|
||||
iconhorse = creature.Horse(200,0)
|
||||
iconhorse.yo = 240
|
||||
iconhorse.color = scheme[0]
|
||||
iconhorse.s=7
|
||||
iconman = creature.Man(250,0)
|
||||
iconman.yo = 250
|
||||
iconman.s=6
|
||||
iconman.color = scheme[0]
|
||||
iconman.mount(iconhorse)
|
||||
for i in range(0,200):
|
||||
iconman.animate()
|
||||
iconhorse.animate()
|
||||
icon.fill(scheme[1])
|
||||
pygame.draw.rect(icon,scheme[0],[0,0,512,512],50)
|
||||
iconman.draw(icon)
|
||||
iconhorse.draw(icon)
|
||||
pygame.display.set_icon(icon)
|
||||
|
||||
Icon()
|
||||
#pygame.image.save(icon,"icon.png")
|
||||
|
||||
def makeBGLayer(n):
|
||||
global loaded, allloads, terrain, lspds, totalMade
|
||||
print "Making Background..."
|
||||
l = pygame.Surface([width+buff*2,height])
|
||||
l.fill(COLOR_KEY)
|
||||
l.set_colorkey(COLOR_KEY)
|
||||
|
||||
|
||||
|
||||
if terrain[n] == 0:
|
||||
treesum = width/(0.0+len(Ls)*treeDensity)
|
||||
for i in range(0,int(treesum)):
|
||||
thetree = [ random.choice([tree.tree2]),
|
||||
random.choice([tree.tree1,tree.tree1,tree.tree2]),
|
||||
random.choice([tree.tree1,tree.tree4,tree.tree3]),
|
||||
random.choice([tree.tree1,tree.tree4,tree.tree3]) ][n]
|
||||
thetree(l,random.random()*width+buff,height,(120-n*30)+random.randrange(-10,10))
|
||||
loaded += 1
|
||||
elif terrain[n] == 1:
|
||||
|
||||
treesum = (width/(0.0+len(Ls)*treeDensity))
|
||||
for i in range(0,int(math.ceil(treesum/2.0))):
|
||||
thetree = [ random.choice([tree.tree1,tree.tree3]),
|
||||
random.choice([tree.tree1,tree.tree3]),
|
||||
random.choice([tree.tree1,tree.tree3]),
|
||||
random.choice([tree.tree1,tree.tree3]) ][n]
|
||||
thetree(l,random.random()*width+buff,height,(120-n*30)+random.randrange(-10,10))
|
||||
loaded += 2
|
||||
if n != 3:
|
||||
poly = []
|
||||
poly.append([0,height])
|
||||
for i in range(buff,width+buff,landDensity):
|
||||
poly.append([i,height-makeLand(i*0.05,n*0.5,500-n*90)])
|
||||
poly[1][1] = (poly[1][1]-height)/2.0+height
|
||||
poly[-1][1] = (poly[-1][1]-height)/2.0+height
|
||||
poly.append([width+buff*2,height])
|
||||
pygame.draw.polygon(l,(210-n*20,210-n*20,210-n*20),poly)
|
||||
|
||||
totalMade[n] += 1
|
||||
if totalMade[n]%int(lspds[n]*10) == 0:
|
||||
terrain[n] = (terrain[n]+1) % 2
|
||||
|
||||
|
||||
print(str(loaded)+"/"+str(allloads))
|
||||
return l
|
||||
|
||||
|
||||
def mt(LN,*args):
|
||||
global Ls, Lrs, loaded, allloads
|
||||
allloads = len(args)*(width/(len(Ls)*treeDensity))
|
||||
loaded = 0
|
||||
if LN == 1:
|
||||
for a in args:
|
||||
Ls[a] = makeBGLayer(a)
|
||||
elif LN == 2:
|
||||
for a in args:
|
||||
Lrs[a] = makeBGLayer(a)
|
||||
|
||||
vine = pattern.Vine(0,160)
|
||||
|
||||
screen.fill([240,240,240])
|
||||
def loadscreen():
|
||||
while loaded < allloads-1 and not gamestart:
|
||||
#screen.fill([240,240,240])
|
||||
for i in range(2):
|
||||
vine.grow(screen)
|
||||
pygame.draw.rect(screen,(240,240,240),[0,170,100,20])
|
||||
u.text(screen,10,height/2+15,"Loading... "+str(loaded)+"/"+str(allloads),(180,180,180))
|
||||
#u.text(screen,100,height/2-14,"Loading... "+str(loaded)+"/"+str(allloads),(250,250,250))
|
||||
#u.text(screen,100,height/2-15,"Loading... "+str(loaded)+"/"+str(allloads),(180,180,180))
|
||||
u.line(screen,(180,180,180),[0,height/2],[(float(loaded)/allloads)*width/2,height/2],1)
|
||||
#u.line(screen,(250,250,250),[0,height/2+1],[(float(loaded)/allloads)*width/2,height/2+1],1)
|
||||
pygame.display.flip()
|
||||
|
||||
|
||||
locs = [0,0,0,0]
|
||||
locrs = [width,width,width,width]
|
||||
|
||||
clock = pygame.time.Clock()
|
||||
|
||||
horse = creature.Horse(100,0)
|
||||
horse.yo = height
|
||||
horse.s = 1
|
||||
horse.aspd = 0.09
|
||||
horse.color = (140,140,140)
|
||||
|
||||
birds = []
|
||||
deers = []
|
||||
cranes = []
|
||||
|
||||
arrows = []
|
||||
|
||||
man = creature.Man(150,0)
|
||||
man.yo = height
|
||||
man.s = 0.7
|
||||
man.color = (140,140,140)
|
||||
man.arrows = arrows
|
||||
man.walk()
|
||||
|
||||
pctrl = particle.ParticleCtrl()
|
||||
|
||||
def makeBirds(n):
|
||||
global birds
|
||||
for i in range(0,n):
|
||||
b = creature.Bird(random.randrange(width/2+10,width/2+60),0)
|
||||
b.s = 0.5
|
||||
b.aspd = 0.3
|
||||
b.yo = height
|
||||
b.color = (140,140,140)
|
||||
b.dir = random.choice([1,-1])
|
||||
birds.append(b)
|
||||
|
||||
def makeDeers(n):
|
||||
global deers
|
||||
for i in range(0,n):
|
||||
r = random.randrange(-5,5)
|
||||
deer = creature.Deer(width/2+landDensity+50+r*10,0,color = (160+r,160+r,160+r))
|
||||
deer.yo = height
|
||||
deer.s = 1.1
|
||||
deer.aspd = 0.15
|
||||
deers.append(deer)
|
||||
|
||||
|
||||
def makeCranes(n):
|
||||
global cranes
|
||||
for j in range(0,n):
|
||||
r = random.randrange(-5,5)
|
||||
crane = creature.Crane(width/2+landDensity+random.randrange(0,200),0)
|
||||
crane.color = (180+r,180+r,180+r)
|
||||
crane.yo = height-150-120*random.random()
|
||||
crane.s = 0.5+random.random()*0.2
|
||||
crane.aspd = 0.05
|
||||
crane.dir = -1
|
||||
crane.t = (j/5.0)*200
|
||||
cranes.append(crane)
|
||||
|
||||
makeBirds(10)
|
||||
|
||||
def makeLand(n,m=0,maxheight = 20):
|
||||
return max(noise.noise(n*0.1,m*0.5)*maxheight,2)-2
|
||||
#landDensity = 64 #inited before!
|
||||
land = [0]*(((width)/2)/landDensity+2)
|
||||
landloc = 0
|
||||
landni = 0
|
||||
for landni in range(0,len(land)):
|
||||
land[landni]=makeLand(landni,maxheight=20+terrain[3]*120)
|
||||
|
||||
def onLandY(instx):
|
||||
if x== 0:ep = -0.01
|
||||
else:ep = 0.01
|
||||
lastAlt = land[int(((x-ep)%landDensity + instx)//landDensity)]
|
||||
nextAlt = land[int(((x-ep)%landDensity + instx)//landDensity)+1]
|
||||
return lastAlt+(nextAlt-lastAlt)*((((x-ep)%landDensity + instx)%landDensity)/landDensity)
|
||||
|
||||
|
||||
gfont = font.GFont(10,2,)
|
||||
|
||||
box = pygame.Surface([240,50])
|
||||
box.fill([0,0,0])
|
||||
box.set_alpha(50,pygame.RLEACCEL)
|
||||
|
||||
keyseq = []
|
||||
commandlist = ["set time","set speed","spawn","fullscreen","restart","set terrain","set tree density","eval"]
|
||||
T = 0
|
||||
|
||||
|
||||
def exe(command):
|
||||
global T, SPEED,fullscreen,terrain,totalMade,landni,land, treeDensity
|
||||
try:
|
||||
com = parse.parse(command.split("-")[0],commandlist)[0]
|
||||
par = command.split("-")[1:]
|
||||
for i in range(0,len(par)):
|
||||
par[i] = par[i].strip()
|
||||
|
||||
if com == "set time":
|
||||
T = int(par[0])
|
||||
settings.msg = ["TIME SET TO "+par[0]+".",settings.msgt]
|
||||
elif com == "set speed":
|
||||
SPEED = float(par[0])
|
||||
settings.msg = ["SPEED SET TO "+par[0]+".",settings.msgt]
|
||||
elif com == "restart":
|
||||
#os.execv(__file__, sys.argv)
|
||||
python = sys.executable
|
||||
os.execl(python, python, * sys.argv)
|
||||
elif com == "fullscreen":
|
||||
if len(par) == 0:
|
||||
fullscreen = not fullscreen
|
||||
else:
|
||||
fullscreen = [False,True][int(par[0])]
|
||||
if fullscreen:
|
||||
pygame.display.set_mode([width/2,height+50],pygame.FULLSCREEN)
|
||||
|
||||
else:
|
||||
pygame.display.set_mode([width/2,height+50])
|
||||
pygame.display.set_caption("")
|
||||
settings.msg = ["FULLSCREEN "+["OFF.","ON."][fullscreen],settings.msgt]
|
||||
elif com == "spawn":
|
||||
animal = par[0]
|
||||
xn = int(par[1])
|
||||
if animal == "bird":
|
||||
makeBirds(xn)
|
||||
elif animal == "deer":
|
||||
makeDeers(xn)
|
||||
elif animal == "crane":
|
||||
makeCranes(xn)
|
||||
elif animal == "unicorn":
|
||||
for i in range(xn):
|
||||
r = random.randrange(-5,5)
|
||||
unicorn = creature.Unicorn(width/2+landDensity+50+r*10,0)
|
||||
unicorn.yo = height
|
||||
unicorn.s = 1.0
|
||||
unicorn.aspd = 0.2
|
||||
unicorn.dir = -1
|
||||
unicorn.spd = 2
|
||||
deers.append(unicorn)
|
||||
settings.msg = [str(xn)+" "+animal+" SPAWNED.",settings.msgt]
|
||||
elif com == "set terrain":
|
||||
#settings.msg = ["PLEASE WAIT",settings.msgt]
|
||||
if int(par[0]) > 1:
|
||||
raise
|
||||
terrain = [int(par[0])]*4
|
||||
totalMade = [0]*4
|
||||
for landni in range(0,len(land)):
|
||||
land[landni]=makeLand(landni,maxheight=20+terrain[3]*120)
|
||||
mt(1, 3,2,1,0)
|
||||
mt(2, 3,2,1,0)
|
||||
settings.msg = ["TERRAIN SET TO "+par[0]+".",settings.msgt]
|
||||
elif com == "set tree density":
|
||||
print terrain
|
||||
terrain = [terrain[3]]*4
|
||||
totalMade = [0]*4
|
||||
for landni in range(0,len(land)):
|
||||
land[landni]=makeLand(landni,maxheight=20+terrain[3]*120)
|
||||
treeDensity = int(width/float(par[0]))
|
||||
mt(1, 3,2,1,0)
|
||||
mt(2, 3,2,1,0)
|
||||
elif com == "eval":
|
||||
settings.msg = [str(eval(par[0])),settings.msgt]
|
||||
except Exception, e:
|
||||
print "%s" % e
|
||||
settings.msg = ["COMMAND NOT EXECUTED.",settings.msgt]
|
||||
|
||||
def main():
|
||||
global x, lspds, locs, gamestart, landloc, landni, fullscreen, birds, terrain, keyseq, T
|
||||
gamestart = True
|
||||
showconsole = False
|
||||
while 1:
|
||||
canvas.fill([240,240,240])
|
||||
for event in pygame.event.get():
|
||||
if event.type == pygame.QUIT: sys.exit()
|
||||
man.keyupdowncontrol(event,horse)
|
||||
|
||||
if event.type == pygame.KEYDOWN:
|
||||
if showconsole:
|
||||
k = pygame.key.name(event.key)
|
||||
#print k
|
||||
if k == "return":
|
||||
exe("".join(keyseq))
|
||||
showconsole = False
|
||||
elif k == "space":
|
||||
keyseq.append(" ")
|
||||
elif k == "-":
|
||||
keyseq.append("-")
|
||||
elif len(k) == 1:
|
||||
keyseq.append(k)
|
||||
elif event.key == pygame.K_BACKSPACE :
|
||||
if len(keyseq) > 0:
|
||||
keyseq.pop()
|
||||
|
||||
if event.key == pygame.K_SLASH:
|
||||
showconsole = not showconsole
|
||||
if showconsole:
|
||||
settings.msg = ["CONSOLE READY.",settings.msgt]
|
||||
else:
|
||||
settings.msg = ["",settings.msgt]
|
||||
keyseq = []
|
||||
if event.key == pygame.K_f and not showconsole:
|
||||
fullscreen = not fullscreen
|
||||
if fullscreen:
|
||||
pygame.display.set_mode([width/2,height+50],pygame.FULLSCREEN)
|
||||
else:
|
||||
pygame.display.set_mode([width/2,height+50])
|
||||
pygame.display.set_caption("")
|
||||
#print(pygame.key.get_pressed())
|
||||
for i in range(0,len(Ls)):
|
||||
if i == 2:
|
||||
for c in cranes:
|
||||
c.draw(canvas)
|
||||
if i == 3:#+terrain:
|
||||
"""
|
||||
gfont.s = 10
|
||||
|
||||
gfont.w = 1
|
||||
gfont.color = (120,120,120)
|
||||
|
||||
gfont.drawStr(canvas,"Hermit",300-x*0.7,260)
|
||||
|
||||
gfont.s = 5
|
||||
gfont.w = 1
|
||||
gfont.color = (120,120,120)
|
||||
gfont.drawStr(canvas,"by lingdong",450-x*0.7,280)
|
||||
|
||||
"""
|
||||
for d in deers:
|
||||
d.draw(canvas)
|
||||
|
||||
horse.draw(canvas)
|
||||
man.draw(canvas)
|
||||
for a in arrows:
|
||||
a.draw(canvas)
|
||||
for b in birds:
|
||||
b.simpDraw(canvas)
|
||||
|
||||
pctrl.draw(canvas)
|
||||
|
||||
if Ls[i] != None:
|
||||
canvas.blit(Ls[i],[locs[i]-x*lspds[i]-buff,0])
|
||||
|
||||
if locs[i]-x*lspds[i] < -width-buff:
|
||||
locs[i] += width*2
|
||||
Ls[i] = None
|
||||
thread.start_new_thread(mt,(1, i))
|
||||
|
||||
|
||||
if Lrs[i] != None:
|
||||
canvas.blit(Lrs[i],[locrs[i]-x*lspds[i]-buff,0])
|
||||
|
||||
if locrs[i]-x*lspds[i] < -width-buff:
|
||||
locrs[i] += width*2
|
||||
Lrs[i] = None
|
||||
thread.start_new_thread(mt,(2, i))
|
||||
clock.tick()
|
||||
T += 1
|
||||
u.text(canvas,10,10,"FPS: %.1f" % clock.get_fps(),(160,160,160))
|
||||
|
||||
man.keyholdcontrol()
|
||||
|
||||
if (0 or pygame.key.get_pressed()[pygame.K_RIGHT]) and not man.status[0].endswith("ing"):
|
||||
for a in arrows:
|
||||
a.x -= SPEED
|
||||
for b in birds:
|
||||
b.x -= SPEED
|
||||
for p in pctrl.particles:
|
||||
p.x -= SPEED
|
||||
for d in deers:
|
||||
d.x-=SPEED*0.5
|
||||
for c in cranes:
|
||||
c.x-=SPEED
|
||||
x+=SPEED
|
||||
horse.walk()
|
||||
|
||||
if random.random()<0.0005:
|
||||
makeBirds(random.randrange(6,12))
|
||||
if random.random() < 0.0005 and terrain[3] == 0:
|
||||
makeDeers(1)
|
||||
if random.random() < 0.001 and terrain[3] == 1:
|
||||
makeCranes(random.randrange(1,5))
|
||||
|
||||
|
||||
else:
|
||||
horse.rest()
|
||||
|
||||
|
||||
u.polygon(canvas,(130,130,130),[[0,height]]+[[landloc-x+i*landDensity,height-land[i]] for i in range(0,len(land))]+[[width/2,height]])
|
||||
|
||||
|
||||
if -x+landloc<-landDensity:
|
||||
landni += 1
|
||||
land.append(makeLand(landni,maxheight=20+terrain[3]*120))
|
||||
land.pop(0)
|
||||
landloc += landDensity
|
||||
|
||||
|
||||
man.yo = height-20-onLandY(man.x)
|
||||
horse.yo = height-30-onLandY(horse.x)
|
||||
|
||||
|
||||
|
||||
for d in deers:
|
||||
|
||||
d.yo = height-30-onLandY(max(min(d.x,width/2),0))
|
||||
|
||||
if noise.noise(T*0.001,deers.index(d))<0.5:
|
||||
d.x -= d.spd
|
||||
d.walk()
|
||||
else:
|
||||
d.rest()
|
||||
|
||||
if d.x<-100:
|
||||
deers.remove(d)
|
||||
|
||||
for c in cranes:
|
||||
c.x -= 2*c.s
|
||||
c.fly()
|
||||
if c.x<-100:
|
||||
cranes.remove(c)
|
||||
|
||||
|
||||
for a in arrows:
|
||||
#a.fly()
|
||||
#print(a.x)
|
||||
if a.x > width/2 or a.x < -10 or height-onLandY(a.x) >= a.calcHead()[1]:
|
||||
a.fly()
|
||||
else:
|
||||
a.v[0] = 0
|
||||
a.v[1] = 0
|
||||
a.flicker = 0
|
||||
if a.x > width/2:
|
||||
arrows.remove(a)
|
||||
|
||||
for b in birds:
|
||||
if b.health > 0:
|
||||
if ((abs(man.x - b.x) < 100 and random.random()<0.05) or random.random()<0.0002) and b.on == 0:
|
||||
b.on = 1
|
||||
ra = math.pi/20.0+random.random()*math.pi/6.0*2.1
|
||||
rl = random.choice([3,4,5])
|
||||
b.v=[rl*math.cos(ra),-rl*math.sin(ra)]
|
||||
if b.on == 1:
|
||||
b.simpFly()
|
||||
|
||||
if abs(man.x - b.x) > 160 and random.random()<1:
|
||||
b.v[1] = min(b.v[1]+0.05,0.4)
|
||||
if b.y >= 2:
|
||||
b.on = 0
|
||||
|
||||
else:
|
||||
b.rest()
|
||||
if 0 < b.x < width/2:
|
||||
b.yo=height-3-onLandY(b.x)
|
||||
|
||||
for a in arrows:
|
||||
#print(u.dist(a.x,a.y,b.x,b.y+b.yo))
|
||||
if u.dist(a.x,a.y,b.x,b.y+b.yo) < b.s*30 and a.v[0] > 0:
|
||||
a.v[0]/= 2
|
||||
b.arrow = a
|
||||
b.health = 0
|
||||
b.x = a.calcFeather()[0]
|
||||
b.y = a.calcFeather()[1] - b.yo
|
||||
for i in range(0,12):
|
||||
pctrl.particles.append(particle.Particle(a.calcFeather()[0],a.calcFeather()[1],[8*(random.random()-0.5),8*(random.random()-0.3)]))
|
||||
|
||||
if b.x<0 or b.x>width or b.yo<0:
|
||||
birds.remove(b)
|
||||
else:
|
||||
b.fall()
|
||||
pctrl.emit()
|
||||
|
||||
|
||||
man.animate()
|
||||
horse.animate()
|
||||
#array = []
|
||||
#screen.unlock()
|
||||
screen.blit(canvas,[0,0])
|
||||
|
||||
|
||||
|
||||
reflection = canvas#pygame.transform.flip(canvas,False,True)
|
||||
pygame.draw.rect(screen,(180,180,180),[0,height,width/2,50])
|
||||
for i in range(0,2*(screen.get_height()-height),2):
|
||||
screen.blit(reflection,[(math.sin(i*0.5))*i*0.5+(noise.noise(pygame.time.get_ticks()*0.001,i*0.2)-0.5)*20,height+i-1],(0,height-i,width/2,1))
|
||||
|
||||
|
||||
|
||||
if settings.msg[0] != "":
|
||||
screen.blit(box,[5,height+33-showconsole*20])
|
||||
u.text(screen,10,height+35-showconsole*20,settings.msg[0],(240,240,240))
|
||||
|
||||
|
||||
if settings.msg[1] <= 0 and not showconsole:
|
||||
settings.msg[0] = ""
|
||||
else:
|
||||
settings.msg[1]-=1
|
||||
|
||||
if showconsole:
|
||||
input = "".join(keyseq)
|
||||
u.text(screen,10,height+25,">"+input.lower(),(240,240,240))
|
||||
u.text(screen,10,height+35," "+" | ".join(parse.parse(input.split("-")[0],commandlist)[:3]),(240,240,240))
|
||||
array = [pygame.surfarray.pixels_red(screen),pygame.surfarray.pixels_green(screen),pygame.surfarray.pixels_blue(screen)]
|
||||
filter.filter(array,T)
|
||||
array = []
|
||||
|
||||
#icon.blit(screen,[0,0],[0,0,512,512])
|
||||
#pygame.display.set_icon(icon)
|
||||
pygame.display.flip()
|
||||
#t1 = thread.start_new_thread( loadscreen, () )
|
||||
#mt(1, 3,2,1,0)
|
||||
|
||||
t1 = thread.start_new_thread( mt, (1, 3,2,1,0) )
|
||||
loadscreen()
|
||||
|
||||
while loaded<allloads:
|
||||
pass
|
||||
|
||||
print('loaded')
|
||||
|
||||
treeDensity = 16
|
||||
|
||||
t3 = thread.start_new_thread(mt, (2, 3,2,1,0))
|
||||
|
||||
main()
|
||||
|
||||
679
src/main.py
679
src/main.py
@ -1,70 +1,134 @@
|
||||
""" by Lingdong Huang
|
||||
"""
|
||||
|
||||
# import modules
|
||||
# ============================================================================
|
||||
# IMPORT MODULES
|
||||
# =============================================================================
|
||||
|
||||
import pygame
|
||||
## built-in modules
|
||||
import sys
|
||||
import math
|
||||
import thread
|
||||
import random
|
||||
import numpy
|
||||
import string
|
||||
import os
|
||||
import pygame._view
|
||||
|
||||
## dependencies
|
||||
import pygame
|
||||
import pygame._view
|
||||
import numpy
|
||||
|
||||
## custom modules
|
||||
import lib.noise as noise
|
||||
import lib.tree as tree
|
||||
import lib.creature as creature
|
||||
import lib.utilities as u
|
||||
import lib.filter as filter
|
||||
import lib.parse as parse
|
||||
|
||||
import lib.pattern as pattern
|
||||
import lib.particle as particle
|
||||
import lib.font as font
|
||||
import lib.settings as settings
|
||||
|
||||
# initialization
|
||||
|
||||
# =============================================================================
|
||||
# INITIALIZATION
|
||||
# =============================================================================
|
||||
pygame.init()
|
||||
settings.init()
|
||||
|
||||
# setting up variables
|
||||
# =============================================================================
|
||||
# VARIABLES
|
||||
# =============================================================================
|
||||
|
||||
## window
|
||||
## ----------------------------------------------------------------------------
|
||||
size = width, height = 1280, 320
|
||||
buff = 200
|
||||
screen = pygame.display.set_mode([width/2,height+50])#,pygame.FULLSCREEN )
|
||||
canvas = pygame.Surface([width/2,height])
|
||||
pygame.display.set_caption("")
|
||||
fullscreen = False
|
||||
|
||||
x = 0
|
||||
box = pygame.Surface([240,50])
|
||||
box.fill([0,0,0])
|
||||
box.set_alpha(50,pygame.RLEACCEL)
|
||||
|
||||
|
||||
## terrain
|
||||
## ----------------------------------------------------------------------------
|
||||
treeDensity = 32
|
||||
landDensity = 32
|
||||
|
||||
|
||||
SPEED = 0.5
|
||||
|
||||
allloads = width/treeDensity
|
||||
loaded = 0
|
||||
|
||||
Ls = [None]*4
|
||||
Lrs = [None]*4
|
||||
|
||||
gamestart = False
|
||||
|
||||
COLOR_KEY = [255,0,255]
|
||||
|
||||
fullscreen = False
|
||||
|
||||
terrain = [0]*4
|
||||
|
||||
lspds = [0.1,0.2,0.5,1]
|
||||
terrain = [0]*4
|
||||
totalMade = [0]*4
|
||||
|
||||
scheme = [(70,69,63),(225,225,210)]
|
||||
locs = [0,0,0,0]
|
||||
locrs = [width,width,width,width]
|
||||
|
||||
land = [0]*(((width)/2)/landDensity+2)
|
||||
landloc = 0
|
||||
landni = 0
|
||||
|
||||
## style
|
||||
## ----------------------------------------------------------------------------
|
||||
COLOR_KEY = [255,0,255]
|
||||
scheme = [(70,69,63),(225,225,210)]
|
||||
gfont = font.GFont(10,2,)
|
||||
screen.fill([240,240,240])
|
||||
|
||||
## game
|
||||
## ----------------------------------------------------------------------------
|
||||
x = 0
|
||||
SPEED = 0.5
|
||||
gamestart = False
|
||||
clock = pygame.time.Clock()
|
||||
icon = pygame.Surface([512,512])
|
||||
icon.set_colorkey(COLOR_KEY)
|
||||
|
||||
keyseq = []
|
||||
commandlist = ["set time","set speed","spawn","fullscreen","restart","set terrain","set tree density","eval"]
|
||||
showconsole = False
|
||||
T = 0
|
||||
|
||||
## objects
|
||||
## ----------------------------------------------------------------------------
|
||||
vine = pattern.Vine(0,160)
|
||||
pctrl = particle.ParticleCtrl()
|
||||
|
||||
birds = []
|
||||
deers = []
|
||||
cranes = []
|
||||
arrows = []
|
||||
|
||||
horse = creature.Horse(100,0)
|
||||
horse.yo = height
|
||||
horse.s = 1
|
||||
horse.aspd = 0.09
|
||||
horse.color = (140,140,140)
|
||||
|
||||
man = creature.Man(150,0)
|
||||
man.yo = height
|
||||
man.s = 0.7
|
||||
man.color = (140,140,140)
|
||||
man.arrows = arrows
|
||||
man.walk()
|
||||
|
||||
|
||||
|
||||
# =============================================================================
|
||||
# Functions
|
||||
# =============================================================================
|
||||
|
||||
## icon
|
||||
## ----------------------------------------------------------------------------
|
||||
|
||||
def Icon():
|
||||
global icon, scheme
|
||||
iconhorse = creature.Horse(200,0)
|
||||
@ -85,18 +149,17 @@ def Icon():
|
||||
iconhorse.draw(icon)
|
||||
pygame.display.set_icon(icon)
|
||||
|
||||
Icon()
|
||||
#pygame.image.save(icon,"icon.png")
|
||||
|
||||
## making terrain
|
||||
## ----------------------------------------------------------------------------
|
||||
|
||||
def makeBGLayer(n):
|
||||
global loaded, allloads, terrain, lspds, totalMade
|
||||
print "Making Background..."
|
||||
#print "Making Background..."
|
||||
l = pygame.Surface([width+buff*2,height])
|
||||
l.fill(COLOR_KEY)
|
||||
l.set_colorkey(COLOR_KEY)
|
||||
|
||||
|
||||
|
||||
if terrain[n] == 0:
|
||||
treesum = width/(0.0+len(Ls)*treeDensity)
|
||||
for i in range(0,int(treesum)):
|
||||
@ -129,12 +192,9 @@ def makeBGLayer(n):
|
||||
totalMade[n] += 1
|
||||
if totalMade[n]%int(lspds[n]*10) == 0:
|
||||
terrain[n] = (terrain[n]+1) % 2
|
||||
|
||||
|
||||
print(str(loaded)+"/"+str(allloads))
|
||||
#print(str(loaded)+"/"+str(allloads))
|
||||
return l
|
||||
|
||||
|
||||
def mt(LN,*args):
|
||||
global Ls, Lrs, loaded, allloads
|
||||
allloads = len(args)*(width/(len(Ls)*treeDensity))
|
||||
@ -146,48 +206,27 @@ def mt(LN,*args):
|
||||
for a in args:
|
||||
Lrs[a] = makeBGLayer(a)
|
||||
|
||||
vine = pattern.Vine(0,160)
|
||||
def makeLand(n,m=0,maxheight = 20):
|
||||
return max(noise.noise(n*0.1,m*0.5)*maxheight,2)-2
|
||||
|
||||
for landni in range(0,len(land)):
|
||||
land[landni]=makeLand(landni,maxheight=20+terrain[3]*120)
|
||||
|
||||
|
||||
## loading
|
||||
## ----------------------------------------------------------------------------
|
||||
|
||||
screen.fill([240,240,240])
|
||||
def loadscreen():
|
||||
while loaded < allloads-1 and not gamestart:
|
||||
#screen.fill([240,240,240])
|
||||
for i in range(2):
|
||||
vine.grow(screen)
|
||||
pygame.draw.rect(screen,(240,240,240),[0,170,100,20])
|
||||
u.text(screen,10,height/2+15,"Loading... "+str(loaded)+"/"+str(allloads),(180,180,180))
|
||||
#u.text(screen,100,height/2-14,"Loading... "+str(loaded)+"/"+str(allloads),(250,250,250))
|
||||
#u.text(screen,100,height/2-15,"Loading... "+str(loaded)+"/"+str(allloads),(180,180,180))
|
||||
u.line(screen,(180,180,180),[0,height/2],[(float(loaded)/allloads)*width/2,height/2],1)
|
||||
#u.line(screen,(250,250,250),[0,height/2+1],[(float(loaded)/allloads)*width/2,height/2+1],1)
|
||||
pygame.display.flip()
|
||||
|
||||
|
||||
locs = [0,0,0,0]
|
||||
locrs = [width,width,width,width]
|
||||
|
||||
clock = pygame.time.Clock()
|
||||
|
||||
horse = creature.Horse(100,0)
|
||||
horse.yo = height
|
||||
horse.s = 1
|
||||
horse.aspd = 0.09
|
||||
horse.color = (140,140,140)
|
||||
|
||||
birds = []
|
||||
deers = []
|
||||
cranes = []
|
||||
|
||||
arrows = []
|
||||
|
||||
man = creature.Man(150,0)
|
||||
man.yo = height
|
||||
man.s = 0.7
|
||||
man.color = (140,140,140)
|
||||
man.arrows = arrows
|
||||
man.walk()
|
||||
|
||||
pctrl = particle.ParticleCtrl()
|
||||
## spawning
|
||||
## ----------------------------------------------------------------------------
|
||||
|
||||
def makeBirds(n):
|
||||
global birds
|
||||
@ -224,16 +263,8 @@ def makeCranes(n):
|
||||
crane.t = (j/5.0)*200
|
||||
cranes.append(crane)
|
||||
|
||||
makeBirds(10)
|
||||
|
||||
def makeLand(n,m=0,maxheight = 20):
|
||||
return max(noise.noise(n*0.1,m*0.5)*maxheight,2)-2
|
||||
#landDensity = 64 #inited before!
|
||||
land = [0]*(((width)/2)/landDensity+2)
|
||||
landloc = 0
|
||||
landni = 0
|
||||
for landni in range(0,len(land)):
|
||||
land[landni]=makeLand(landni,maxheight=20+terrain[3]*120)
|
||||
## calculation
|
||||
## ----------------------------------------------------------------------------
|
||||
|
||||
def onLandY(instx):
|
||||
if x== 0:ep = -0.01
|
||||
@ -243,16 +274,79 @@ def onLandY(instx):
|
||||
return lastAlt+(nextAlt-lastAlt)*((((x-ep)%landDensity + instx)%landDensity)/landDensity)
|
||||
|
||||
|
||||
gfont = font.GFont(10,2,)
|
||||
## object control
|
||||
## ----------------------------------------------------------------------------
|
||||
def deerCtrl():
|
||||
global deers
|
||||
for d in deers:
|
||||
d.yo = height-30-onLandY(max(min(d.x,width/2),0))
|
||||
if noise.noise(T*0.001,deers.index(d))<0.5:
|
||||
d.x -= d.spd
|
||||
d.walk()
|
||||
else:
|
||||
d.rest()
|
||||
if d.x<-100:
|
||||
deers.remove(d)
|
||||
|
||||
box = pygame.Surface([240,50])
|
||||
box.fill([0,0,0])
|
||||
box.set_alpha(50,pygame.RLEACCEL)
|
||||
def craneCtrl():
|
||||
global cranes
|
||||
for c in cranes:
|
||||
c.x -= 2*c.s
|
||||
c.fly()
|
||||
if c.x<-100:
|
||||
cranes.remove(c)
|
||||
|
||||
keyseq = []
|
||||
commandlist = ["set time","set speed","spawn","fullscreen","restart","set terrain","set tree density","eval"]
|
||||
T = 0
|
||||
def arrowCtrl():
|
||||
global arrows
|
||||
for a in arrows:
|
||||
if a.x > width/2 or a.x < -10 or height-onLandY(a.x) >= a.calcHead()[1]:
|
||||
a.fly()
|
||||
else:
|
||||
a.v[0] = 0
|
||||
a.v[1] = 0
|
||||
a.flicker = 0
|
||||
if a.x > width/2:
|
||||
arrows.remove(a)
|
||||
|
||||
def birdCtrl():
|
||||
global birds, arrows, pctrl
|
||||
for b in birds:
|
||||
if b.health > 0:
|
||||
if ((abs(man.x - b.x) < 100 and random.random()<0.05) or random.random()<0.0002) and b.on == 0:
|
||||
b.on = 1
|
||||
ra = math.pi/20.0+random.random()*math.pi/6.0*2.1
|
||||
rl = random.choice([3,4,5])
|
||||
b.v=[rl*math.cos(ra),-rl*math.sin(ra)]
|
||||
if b.on == 1:
|
||||
b.simpFly()
|
||||
|
||||
if abs(man.x - b.x) > 160 and random.random()<1:
|
||||
b.v[1] = min(b.v[1]+0.05,0.4)
|
||||
if b.y >= 2:
|
||||
b.on = 0
|
||||
|
||||
else:
|
||||
b.rest()
|
||||
if 0 < b.x < width/2:
|
||||
b.yo=height-3-onLandY(b.x)
|
||||
|
||||
for a in arrows:
|
||||
if u.dist(a.x,a.y,b.x,b.y+b.yo) < b.s*30 and a.v[0] > 0:
|
||||
a.v[0]/= 2
|
||||
b.arrow = a
|
||||
b.health = 0
|
||||
b.x = a.calcFeather()[0]
|
||||
b.y = a.calcFeather()[1] - b.yo
|
||||
for i in range(0,12):
|
||||
pctrl.particles.append(particle.Particle(a.calcFeather()[0],a.calcFeather()[1],[8*(random.random()-0.5),8*(random.random()-0.3)]))
|
||||
|
||||
if b.x<0 or b.x>width or b.yo<0:
|
||||
birds.remove(b)
|
||||
else:
|
||||
b.fall()
|
||||
|
||||
## console command handling
|
||||
## ----------------------------------------------------------------------------
|
||||
|
||||
def exe(command):
|
||||
global T, SPEED,fullscreen,terrain,totalMade,landni,land, treeDensity
|
||||
@ -269,9 +363,8 @@ def exe(command):
|
||||
SPEED = float(par[0])
|
||||
settings.msg = ["SPEED SET TO "+par[0]+".",settings.msgt]
|
||||
elif com == "restart":
|
||||
#os.execv(__file__, sys.argv)
|
||||
python = sys.executable
|
||||
os.execl(python, python, * sys.argv)
|
||||
os.execl(python, python, "-B", * sys.argv)
|
||||
elif com == "fullscreen":
|
||||
if len(par) == 0:
|
||||
fullscreen = not fullscreen
|
||||
@ -330,261 +423,221 @@ def exe(command):
|
||||
print "%s" % e
|
||||
settings.msg = ["COMMAND NOT EXECUTED.",settings.msgt]
|
||||
|
||||
|
||||
## keyboard controls
|
||||
## ----------------------------------------------------------------------------
|
||||
|
||||
def keyupdowncontrol(event):
|
||||
global keyseq, showconsole, fullscreen
|
||||
if event.type == pygame.QUIT: sys.exit()
|
||||
man.keyupdowncontrol(event,horse)
|
||||
|
||||
if event.type == pygame.KEYDOWN:
|
||||
if showconsole:
|
||||
k = pygame.key.name(event.key)
|
||||
#print k
|
||||
if k == "return":
|
||||
exe("".join(keyseq))
|
||||
showconsole = False
|
||||
elif k == "space":
|
||||
keyseq.append(" ")
|
||||
elif k == "-":
|
||||
keyseq.append("-")
|
||||
elif len(k) == 1:
|
||||
keyseq.append(k)
|
||||
elif event.key == pygame.K_BACKSPACE :
|
||||
if len(keyseq) > 0:
|
||||
keyseq.pop()
|
||||
|
||||
if event.key == pygame.K_SLASH:
|
||||
showconsole = not showconsole
|
||||
if showconsole:
|
||||
settings.msg = ["CONSOLE READY.",settings.msgt]
|
||||
else:
|
||||
settings.msg = ["",settings.msgt]
|
||||
keyseq = []
|
||||
|
||||
if event.key == pygame.K_f and not showconsole:
|
||||
fullscreen = not fullscreen
|
||||
if fullscreen:
|
||||
pygame.display.set_mode([width/2,height+50],pygame.FULLSCREEN)
|
||||
else:
|
||||
pygame.display.set_mode([width/2,height+50])
|
||||
pygame.display.set_caption("")
|
||||
|
||||
def keyholdcontrol():
|
||||
global x
|
||||
man.keyholdcontrol()
|
||||
if (0 or pygame.key.get_pressed()[pygame.K_RIGHT]) and not man.status[0].endswith("ing"):
|
||||
for a in arrows:
|
||||
a.x -= SPEED
|
||||
for b in birds:
|
||||
b.x -= SPEED
|
||||
for p in pctrl.particles:
|
||||
p.x -= SPEED
|
||||
for d in deers:
|
||||
d.x-=SPEED*0.5
|
||||
for c in cranes:
|
||||
c.x-=SPEED
|
||||
x+=SPEED
|
||||
horse.walk()
|
||||
|
||||
if random.random()<0.0005:
|
||||
makeBirds(random.randrange(6,12))
|
||||
if random.random() < 0.0005 and terrain[3] == 0:
|
||||
makeDeers(1)
|
||||
if random.random() < 0.001 and terrain[3] == 1:
|
||||
makeCranes(random.randrange(1,5))
|
||||
else:
|
||||
horse.rest()
|
||||
|
||||
|
||||
## drawing
|
||||
## ----------------------------------------------------------------------------
|
||||
|
||||
def drawTitle():
|
||||
gfont.s = 10
|
||||
gfont.w = 1
|
||||
gfont.color = (120,120,120)
|
||||
gfont.drawStr(canvas,"Hermit",300-x*0.7,260)
|
||||
gfont.s = 5
|
||||
gfont.w = 1
|
||||
gfont.color = (120,120,120)
|
||||
gfont.drawStr(canvas,"by lingdong",450-x*0.7,280)
|
||||
|
||||
def drawLand():
|
||||
global landni, land, landloc
|
||||
if -x+landloc<-landDensity:
|
||||
landni += 1
|
||||
land.append(makeLand(landni,maxheight=20+terrain[3]*120))
|
||||
land.pop(0)
|
||||
landloc += landDensity
|
||||
|
||||
u.polygon(canvas,(130,130,130),[[0,height]]+[[landloc-x+i*landDensity,height-land[i]] for i in range(0,len(land))]+[[width/2,height]])
|
||||
|
||||
|
||||
def drawReflection():
|
||||
reflection = canvas
|
||||
pygame.draw.rect(screen,(180,180,180),[0,height,width/2,50])
|
||||
for i in range(0,2*(screen.get_height()-height),2):
|
||||
screen.blit(reflection,[(math.sin(i*0.5))*i*0.5+(noise.noise(pygame.time.get_ticks()*0.001,i*0.2)-0.5)*20,height+i-1],(0,height-i,width/2,1))
|
||||
|
||||
|
||||
def drawConsole():
|
||||
if settings.msg[0] != "":
|
||||
screen.blit(box,[5,height+33-showconsole*20])
|
||||
u.text(screen,10,height+35-showconsole*20,settings.msg[0],(240,240,240))
|
||||
|
||||
if settings.msg[1] <= 0 and not showconsole:
|
||||
settings.msg[0] = ""
|
||||
else:
|
||||
settings.msg[1]-=1
|
||||
|
||||
if showconsole:
|
||||
input = "".join(keyseq)
|
||||
u.text(screen,10,height+25,">"+input.lower(),(240,240,240))
|
||||
u.text(screen,10,height+35," "+" | ".join(parse.parse(input.split("-")[0],commandlist)[:3]),(240,240,240))
|
||||
|
||||
|
||||
def drawFilter():
|
||||
array = [pygame.surfarray.pixels_red(screen),pygame.surfarray.pixels_green(screen),pygame.surfarray.pixels_blue(screen)]
|
||||
filter.filter(array,T)
|
||||
array = []
|
||||
|
||||
def draw():
|
||||
global Ls, Lrs, locs, locrs, x
|
||||
canvas.fill([240,240,240])
|
||||
for i in range(0,len(Ls)):
|
||||
if i == 2:
|
||||
for c in cranes:
|
||||
c.draw(canvas)
|
||||
if i == 3:
|
||||
drawTitle()
|
||||
|
||||
for d in deers:
|
||||
d.draw(canvas)
|
||||
|
||||
horse.draw(canvas)
|
||||
man.draw(canvas)
|
||||
for a in arrows:
|
||||
a.draw(canvas)
|
||||
for b in birds:
|
||||
b.simpDraw(canvas)
|
||||
|
||||
pctrl.draw(canvas)
|
||||
|
||||
if Ls[i] != None:
|
||||
canvas.blit(Ls[i],[locs[i]-x*lspds[i]-buff,0])
|
||||
|
||||
if locs[i]-x*lspds[i] < -width-buff:
|
||||
locs[i] += width*2
|
||||
Ls[i] = None
|
||||
thread.start_new_thread(mt,(1, i))
|
||||
|
||||
|
||||
if Lrs[i] != None:
|
||||
canvas.blit(Lrs[i],[locrs[i]-x*lspds[i]-buff,0])
|
||||
|
||||
if locrs[i]-x*lspds[i] < -width-buff:
|
||||
locrs[i] += width*2
|
||||
Lrs[i] = None
|
||||
thread.start_new_thread(mt,(2, i))
|
||||
drawLand()
|
||||
|
||||
|
||||
|
||||
|
||||
# =============================================================================
|
||||
# MAIN
|
||||
# =============================================================================
|
||||
|
||||
## main loop
|
||||
## ----------------------------------------------------------------------------
|
||||
|
||||
def main():
|
||||
global x, lspds, locs, gamestart, landloc, landni, fullscreen, birds, terrain, keyseq, T
|
||||
global T
|
||||
gamestart = True
|
||||
showconsole = False
|
||||
while 1:
|
||||
canvas.fill([240,240,240])
|
||||
for event in pygame.event.get():
|
||||
if event.type == pygame.QUIT: sys.exit()
|
||||
man.keyupdowncontrol(event,horse)
|
||||
|
||||
if event.type == pygame.KEYDOWN:
|
||||
if showconsole:
|
||||
k = pygame.key.name(event.key)
|
||||
#print k
|
||||
if k == "return":
|
||||
exe("".join(keyseq))
|
||||
showconsole = False
|
||||
elif k == "space":
|
||||
keyseq.append(" ")
|
||||
elif k == "-":
|
||||
keyseq.append("-")
|
||||
elif len(k) == 1:
|
||||
keyseq.append(k)
|
||||
elif event.key == pygame.K_BACKSPACE :
|
||||
if len(keyseq) > 0:
|
||||
keyseq.pop()
|
||||
|
||||
if event.key == pygame.K_SLASH:
|
||||
showconsole = not showconsole
|
||||
if showconsole:
|
||||
settings.msg = ["CONSOLE READY.",settings.msgt]
|
||||
else:
|
||||
settings.msg = ["",settings.msgt]
|
||||
keyseq = []
|
||||
if event.key == pygame.K_f and not showconsole:
|
||||
fullscreen = not fullscreen
|
||||
if fullscreen:
|
||||
pygame.display.set_mode([width/2,height+50],pygame.FULLSCREEN)
|
||||
else:
|
||||
pygame.display.set_mode([width/2,height+50])
|
||||
pygame.display.set_caption("")
|
||||
#print(pygame.key.get_pressed())
|
||||
for i in range(0,len(Ls)):
|
||||
if i == 2:
|
||||
for c in cranes:
|
||||
c.draw(canvas)
|
||||
if i == 3:#+terrain:
|
||||
"""
|
||||
gfont.s = 10
|
||||
|
||||
gfont.w = 1
|
||||
gfont.color = (120,120,120)
|
||||
|
||||
gfont.drawStr(canvas,"Hermit",300-x*0.7,260)
|
||||
|
||||
gfont.s = 5
|
||||
gfont.w = 1
|
||||
gfont.color = (120,120,120)
|
||||
gfont.drawStr(canvas,"by lingdong",450-x*0.7,280)
|
||||
|
||||
"""
|
||||
for d in deers:
|
||||
d.draw(canvas)
|
||||
|
||||
horse.draw(canvas)
|
||||
man.draw(canvas)
|
||||
for a in arrows:
|
||||
a.draw(canvas)
|
||||
for b in birds:
|
||||
b.simpDraw(canvas)
|
||||
|
||||
pctrl.draw(canvas)
|
||||
|
||||
if Ls[i] != None:
|
||||
canvas.blit(Ls[i],[locs[i]-x*lspds[i]-buff,0])
|
||||
|
||||
if locs[i]-x*lspds[i] < -width-buff:
|
||||
locs[i] += width*2
|
||||
Ls[i] = None
|
||||
thread.start_new_thread(mt,(1, i))
|
||||
|
||||
|
||||
if Lrs[i] != None:
|
||||
canvas.blit(Lrs[i],[locrs[i]-x*lspds[i]-buff,0])
|
||||
|
||||
if locrs[i]-x*lspds[i] < -width-buff:
|
||||
locrs[i] += width*2
|
||||
Lrs[i] = None
|
||||
thread.start_new_thread(mt,(2, i))
|
||||
keyupdowncontrol(event)
|
||||
keyholdcontrol()
|
||||
draw()
|
||||
clock.tick()
|
||||
T += 1
|
||||
u.text(canvas,10,10,"FPS: %.1f" % clock.get_fps(),(160,160,160))
|
||||
|
||||
man.keyholdcontrol()
|
||||
|
||||
if (0 or pygame.key.get_pressed()[pygame.K_RIGHT]) and not man.status[0].endswith("ing"):
|
||||
for a in arrows:
|
||||
a.x -= SPEED
|
||||
for b in birds:
|
||||
b.x -= SPEED
|
||||
for p in pctrl.particles:
|
||||
p.x -= SPEED
|
||||
for d in deers:
|
||||
d.x-=SPEED*0.5
|
||||
for c in cranes:
|
||||
c.x-=SPEED
|
||||
x+=SPEED
|
||||
horse.walk()
|
||||
|
||||
if random.random()<0.0005:
|
||||
makeBirds(random.randrange(6,12))
|
||||
if random.random() < 0.0005 and terrain[3] == 0:
|
||||
makeDeers(1)
|
||||
if random.random() < 0.001 and terrain[3] == 1:
|
||||
makeCranes(random.randrange(1,5))
|
||||
|
||||
|
||||
else:
|
||||
horse.rest()
|
||||
|
||||
|
||||
u.polygon(canvas,(130,130,130),[[0,height]]+[[landloc-x+i*landDensity,height-land[i]] for i in range(0,len(land))]+[[width/2,height]])
|
||||
|
||||
|
||||
if -x+landloc<-landDensity:
|
||||
landni += 1
|
||||
land.append(makeLand(landni,maxheight=20+terrain[3]*120))
|
||||
land.pop(0)
|
||||
landloc += landDensity
|
||||
|
||||
|
||||
man.yo = height-20-onLandY(man.x)
|
||||
horse.yo = height-30-onLandY(horse.x)
|
||||
|
||||
|
||||
|
||||
for d in deers:
|
||||
|
||||
d.yo = height-30-onLandY(max(min(d.x,width/2),0))
|
||||
|
||||
if noise.noise(T*0.001,deers.index(d))<0.5:
|
||||
d.x -= d.spd
|
||||
d.walk()
|
||||
else:
|
||||
d.rest()
|
||||
|
||||
if d.x<-100:
|
||||
deers.remove(d)
|
||||
|
||||
for c in cranes:
|
||||
c.x -= 2*c.s
|
||||
c.fly()
|
||||
if c.x<-100:
|
||||
cranes.remove(c)
|
||||
|
||||
|
||||
for a in arrows:
|
||||
#a.fly()
|
||||
#print(a.x)
|
||||
if a.x > width/2 or a.x < -10 or height-onLandY(a.x) >= a.calcHead()[1]:
|
||||
a.fly()
|
||||
else:
|
||||
a.v[0] = 0
|
||||
a.v[1] = 0
|
||||
a.flicker = 0
|
||||
if a.x > width/2:
|
||||
arrows.remove(a)
|
||||
|
||||
for b in birds:
|
||||
if b.health > 0:
|
||||
if ((abs(man.x - b.x) < 100 and random.random()<0.05) or random.random()<0.0002) and b.on == 0:
|
||||
b.on = 1
|
||||
ra = math.pi/20.0+random.random()*math.pi/6.0*2.1
|
||||
rl = random.choice([3,4,5])
|
||||
b.v=[rl*math.cos(ra),-rl*math.sin(ra)]
|
||||
if b.on == 1:
|
||||
b.simpFly()
|
||||
|
||||
if abs(man.x - b.x) > 160 and random.random()<1:
|
||||
b.v[1] = min(b.v[1]+0.05,0.4)
|
||||
if b.y >= 2:
|
||||
b.on = 0
|
||||
|
||||
else:
|
||||
b.rest()
|
||||
if 0 < b.x < width/2:
|
||||
b.yo=height-3-onLandY(b.x)
|
||||
|
||||
for a in arrows:
|
||||
#print(u.dist(a.x,a.y,b.x,b.y+b.yo))
|
||||
if u.dist(a.x,a.y,b.x,b.y+b.yo) < b.s*30 and a.v[0] > 0:
|
||||
a.v[0]/= 2
|
||||
b.arrow = a
|
||||
b.health = 0
|
||||
b.x = a.calcFeather()[0]
|
||||
b.y = a.calcFeather()[1] - b.yo
|
||||
for i in range(0,12):
|
||||
pctrl.particles.append(particle.Particle(a.calcFeather()[0],a.calcFeather()[1],[8*(random.random()-0.5),8*(random.random()-0.3)]))
|
||||
|
||||
if b.x<0 or b.x>width or b.yo<0:
|
||||
birds.remove(b)
|
||||
else:
|
||||
b.fall()
|
||||
pctrl.emit()
|
||||
|
||||
|
||||
man.animate()
|
||||
horse.animate()
|
||||
#array = []
|
||||
#screen.unlock()
|
||||
|
||||
deerCtrl()
|
||||
craneCtrl()
|
||||
arrowCtrl()
|
||||
birdCtrl()
|
||||
|
||||
pctrl.emit()
|
||||
|
||||
screen.blit(canvas,[0,0])
|
||||
drawReflection()
|
||||
drawConsole()
|
||||
drawFilter()
|
||||
|
||||
|
||||
|
||||
reflection = canvas#pygame.transform.flip(canvas,False,True)
|
||||
pygame.draw.rect(screen,(180,180,180),[0,height,width/2,50])
|
||||
for i in range(0,2*(screen.get_height()-height),2):
|
||||
screen.blit(reflection,[(math.sin(i*0.5))*i*0.5+(noise.noise(pygame.time.get_ticks()*0.001,i*0.2)-0.5)*20,height+i-1],(0,height-i,width/2,1))
|
||||
|
||||
|
||||
|
||||
if settings.msg[0] != "":
|
||||
screen.blit(box,[5,height+33-showconsole*20])
|
||||
u.text(screen,10,height+35-showconsole*20,settings.msg[0],(240,240,240))
|
||||
|
||||
|
||||
if settings.msg[1] <= 0 and not showconsole:
|
||||
settings.msg[0] = ""
|
||||
else:
|
||||
settings.msg[1]-=1
|
||||
|
||||
if showconsole:
|
||||
input = "".join(keyseq)
|
||||
u.text(screen,10,height+25,">"+input.lower(),(240,240,240))
|
||||
u.text(screen,10,height+35," "+" | ".join(parse.parse(input.split("-")[0],commandlist)[:3]),(240,240,240))
|
||||
array = [pygame.surfarray.pixels_red(screen),pygame.surfarray.pixels_green(screen),pygame.surfarray.pixels_blue(screen)]
|
||||
filter.filter(array,T)
|
||||
array = []
|
||||
|
||||
#icon.blit(screen,[0,0],[0,0,512,512])
|
||||
#pygame.display.set_icon(icon)
|
||||
pygame.display.flip()
|
||||
#t1 = thread.start_new_thread( loadscreen, () )
|
||||
#mt(1, 3,2,1,0)
|
||||
|
||||
## run program
|
||||
## ----------------------------------------------------------------------------
|
||||
|
||||
Icon()
|
||||
makeBirds(10)
|
||||
|
||||
t1 = thread.start_new_thread( mt, (1, 3,2,1,0) )
|
||||
loadscreen()
|
||||
|
||||
while loaded<allloads:
|
||||
pass
|
||||
|
||||
print('loaded')
|
||||
|
||||
treeDensity = 16
|
||||
|
||||
t3 = thread.start_new_thread(mt, (2, 3,2,1,0))
|
||||
|
||||
main()
|
||||
|
||||
Loading…
Reference in New Issue
Block a user