processing源码分享(3)----身体模拟器

这篇文章介绍了如何在编程环境中利用fisica库创建一个简单的游戏场景,通过按键控制红细胞、白细胞和病毒的加入,以及通过鼠标操作改变物体的颜色和血液循环。代码展示了基本的物理引擎交互和颜色变化逻辑。
摘要由CSDN通过智能技术生成

按b加入红细胞

按n加入白细胞

按m加快血液循环

按鼠标加入病毒

'''
Fball = FCircle(20)�����ݣ����壩��FBox���������壩��FCompound�������壩
FLine��ֱ���壩��FPoly��������壩
'''
add_library('fisica')
def setup():
    frameRate(300)
    global world,f
    size(800, 800)
    Fisica.init(this)   # ��ʼ��fisica 
    world = FWorld()    # ����һ��fisica ����
    world.setEdges()    # ��fisica �������ñ߽�
    f=1
def draw():
    global ball,k,f
    background(255)
    world.draw()       # ��fisica ���续����
    world.setContactListener(ContactListener())
    world.step()   # ��fisica �����ݻ�һС��
    f=f+1
    '''
    k=''
    f=f+1
    if f%100==0:
        try:
            #if key=='b':
            ball = FCircle(20)
        #else:
            #pass#ball = FLine(a,b,0,100)  # ����һ�� �� ��뾶20
            fbody(ball,(random(0,800), 100),None,None,None,None,1.2,None,None,(255,0,0),None)# ������������
            world.add(ball)     # ��������������
        except:
            pass
    if f%110==0:
        #if key=='n':
        ball = FBox(20,20)  # ����һ�� �� ��뾶20
        fbody(ball,(random(300,500), 100),None,None,None,None,1.2,None,None,(255,255,255),None)# ������������
        world.add(ball)
        '''
def keyPressed():
    global ball,k
    #world.setEdges()
    if key=='z':
        a=0
        b=0
    if key=='x':
        a=0
        b=100
    if key=='c':
        a=100
        b=300
    if key=='v':
        a=300
        b=0
    if key=='m':
        ball = FBox(30,30)  # ����һ�� �� ��뾶20
        fbody(ball,(mouseX, mouseY),None,None,None,None,2,None,(255,255,255),(255,255,254),None)# ������������
        world.add(ball)
    
    try:
        if key=='b':
            ball = FCircle(20)
        #else:
            #pass#ball = FLine(a,b,0,100)  # ����һ�� �� ��뾶20
            fbody(ball,(mouseX, mouseY),None,None,None,None,random(0,1.7),None,None,(255,0,0),None)# ������������
            world.add(ball)     # ��������������
    except:
        pass
    if key=='n':
        ball = FBox(20,20)  # ����һ�� �� ��뾶20
        fbody(ball,(mouseX, mouseY),None,None,None,None,random(0,1.7),None,None,(255,255,255),None)# ������������
        world.add(ball)
        
def mousePressed():
    ball = FCircle(20)  # ����һ�� �� ��뾶20
    fbody(ball,(mouseX, mouseY),None,None,None,None,random(0,1.7),None,None,(1,0,0),None)# ������������
    world.add(ball)     # ��������������
def fbody(fbody,pos,v,f,dens,damp,rest,fric,stroke,fill,img):
    if pos:
        fbody.setPosition(*pos)
    if v:
        fbody.setVelocity(*v)
    if f:
        fbody.setForce(*f)
    if dens:
        fbody.setDensity(dens)
    if damp:
        fbody.setDamping(damp)
    if rest:
        fbody.setRestitution(rest)
    if fric:
        fbody.setFriction(fric)
    if stroke:
        fbody.setStroke(*stroke)
    if fill:
        fbody.setFill(*fill)
    if img:
        fbody.attachImage(img)
class ContactListener(FContactAdapter):
    def contactStarted(self, c):
        global f
        b1 = c.getBody1()
        b2 = c.getBody2()
        if not b1.isStatic(): 
            if b2.getFillColor()==color(1,0,0)or b2.getFillColor()==color(255,255,255):
                try:
                    if b2.getSize>0:
                        if b2.getFillColor()==color(1,0,0):
                            if not(b1.getFillColor()==color(255,255,255)):
                                if not(b1.getFillColor()==color(0,255,0)):
                                    if not(b1.getFillColor()==color(255,255,254)):
                                        b1.setFill(*(1,0,0))#b1.getFillColor()-10)
                        if b2.getFillColor()!=color(1,0,0):
                            if not(b2.getFillColor()==color(255,255,254)):
                                b1.setFill(*(255,0,0))#b1.getFillColor()-10
                except:
                    if b1.getFillColor()==color(1,0,0):
                        if not(b2.getFillColor()==color(0,0,0)):
                            if random(0,10)<0.5:
                                world.remove(b2)
                    if not(b1.getFillColor()==color(255,255,255)):
                        if not(b1.getFillColor()==color(0,255,0)):
                            if not(b1.getFillColor()==color(255,255,254)):
                                b1.setFill(*(255,0,0))#b1.getFillColor()-10
            if key=='v':
                if not(b1.getFillColor()==color(0,0,0)):
                    world.remove(b1)
        if not b2.isStatic(): 
            if b1.getFillColor()==color(1,0,0)or b1.getFillColor()==color(255,255,255):
                try:
                    
                    if b1.getSize>0:
                        if b1.getFillColor()==color(1,0,0):
                            if not(b2.getFillColor()==color(255,255,255)):
                                if not(b2.getFillColor()==color(0,255,0)):
                                    if not(b2.getFillColor()==color(255,255,254)):
                                        fill=(1,0,0)
                        if b1.getFillColor()!=color(1,0,0):
                            if not(b1.getFillColor()==color(255,255,254)):
                                fill=(255,0,0)
                        b2.setFill(*fill)#b2.getFillColor()-10)
                except:
                    if b2.getFillColor()==color(1,0,0):
                        if not(b1.getFillColor()==color(0,0,0)):
                            if random(0,10)<0.5:
                                world.remove(b1)
                    if not(b2.getFillColor()==color(255,255,255)):
                        if not(b2.getFillColor()==color(0,255,0)):
                            if not(b2.getFillColor()==color(255,255,254)):
                                fill=(255,0,0)
                                b2.setFill(*fill)#b2.getFillColor()-10)
            if key=='v':
                if not(b2.getFillColor()==color(0,0,0)):
                    world.remove(b2)
                    ''''''

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值