0

首先我有这个脚本,它工作正常:

from scene import *
from random import *
class Particle(object):
        def __init__(self, wh):
                self.w = wh.w
                self.h = wh.h
                self.x = randint(0, self.w)
                self.y = randint(0, self.h)
                self.vx = randint(-10, 20)
                self.vy = randint(-10, 20)
                self.colour = Color(random(), random(), random())
                self.cells=Rect(self.x, self.y, 5, 5)
                cells=self.cells

        def update(self):
                self.x += self.vx
                self.y += self.vy
                self.vx *= 0
                self.vy *= 0
                if self.x > self.w:
                        self.x = self.w
                        self.vx *= -1
                if self.x < 0:
                        self.x = 0
                        self.vx *= -1
                if self.y > self.h:
                        self.y = self.h
                        self.vy *= -1
                if self.y < 0:
                        self.y = 0
                        self.vy *= -1

        def draw(self):
                fill(*self.colour)
                ellipse(*self.cells)

class Intro(Scene):
        def setup(self):
                self.psize=13
                global plocx
                global plocy
                plocx=240
                plocy=160
                self.player = Rect(plocx, plocy, 20, 20)
                self.colour = Color(random(), random(), random())

                self.particles = []
                for p in range(100):
                        self.particles.append(Particle(self.size))

        def touch_began(self, touch):
                global x1
                global y1
                x1=touch.location.x
                y1=touch.location.y


        def touch_moved(self, touch):
                global plocx
                global plocy
                global newplocx
                global newplocy
                x=touch.location.x
                y=touch.location.y
                if x > x1:
                        addx=(x-x1)/4
                        newplocx=plocx+addx

                if x < x1:
                        subx=(x-x1)/4
                        newplocx=plocx+subx

                if y > y1:
                        addy=(y-y1)/4
                        newplocy=plocy+addy

                if y < y1:
                        suby=(y-y1)/4
                        newplocy=plocy+suby

                xmin=215
                xmax=265
                ymin=140
                ymax=190

                while xmax > plocx and newplocx > plocx:
                        plocx = plocx + 1
                        self.player = Rect(plocx, plocy, 16, 16)

                while xmin < plocx and newplocx < plocx:
                        plocx = plocx - 1
                        self.player = Rect(plocx, plocy, 16, 16)

                while ymax > plocy and newplocy > plocy:
                        plocy = plocy + 1
                        self.player = Rect(plocx, plocy, 16, 16)

                while ymin < plocy and newplocy < plocy:
                        plocy = plocy - 1
                        self.player = Rect(plocx, plocy, 16, 16)

        def draw(self):
                background(0, 0.05, 0.2)
                self.player = Rect(plocx, plocy, self.psize, self.psize)
                for p in self.particles:
                        p.update()
                        p.draw()
                        cells = p.cells
                        if self.player.intersects(cells):
                                self.newpsize=self.psize+0.2
                                self.psize=self.newpsize
                                self.particles.remove(p)
                ellipse(*self.player)

run(Intro(), LANDSCAPE)

agar.io 的主脚本

然后是移动单元格的脚本:

from scene import *
from random import *

class Particle(object):
        def __init__(self, wh):
                self.w = wh.w
                self.h = wh.h
                self.x = randint(0, self.w)
                self.y = randint(0, self.h)
                self.vx = 0
                self.vy = 0
                self.colour = Color(random(), random(), random())

        def update(self):
                self.x += self.vx
                self.y += self.vy
                if self.x > self.w:
                        self.x = self.w
                        self.vx *= -1
                if self.x < 0:
                        self.x = 0
                        self.vx *= -1
                if self.y > self.h:
                        self.y = self.h
                        self.vy *= -1
                if self.y < 0:
                        self.y = 0
                        self.vy *= -1

        def draw(self):
                fill(*self.colour)
                rect(self.x, self.y, 8, 8)

class Intro(Scene):
        def setup(self):
                self.particles = []
                for p in xrange(100):
                        self.particles.append(Particle(self.size))

        def draw(self):
                background(0.00, 0.05, 0.20)
                for p in self.particles:
                        p.update()
                        p.draw()

        def touch_began(self, touch):
                global x1
                global y1
                x1=touch.location.x
                y1=touch.location.y


        def touch_moved(self, touch):
                x=touch.location.x
                y=touch.location.y

                for p in self.particles:
                        if x1 > x:
                                p.vx = 1
                        if x1 < x:
                                p.vx = -1
                        if y1 > y:
                                p.vy = 1
                        if y1 < y:
                                p.vy = -1
                        if x1 == x:
                                p.vx = 0
                        if y1 == y:
                                p.vy = 0

        def touch_ended(self, touch):
                for p in self.particles:
                        p.vx = 0
                        p.vy = 0

run(Intro())

然后我把这两个放在一起:

from scene import *
from random import *
class Particle(object):
        def __init__(self, wh):
                self.w = wh.w
                self.h = wh.h
                self.x = randint(0, self.w)
                self.y = randint(0, self.h)
                self.vx = 0
                self.vy = 0
                self.colour = Color(random(), random(), random())
                self.cells=Rect(self.x, self.y, 5, 5)
                cells=self.cells

        def update(self):
                self.x += self.vx
                self.y += self.vy
                if self.x > self.w:
                        self.x = self.w
                        self.vx *= -1
                if self.x < 0:
                        self.x = 0
                        self.vx *= -1
                if self.y > self.h:
                        self.y = self.h
                        self.vy *= -1
                if self.y < 0:
                        self.y = 0
                        self.vy *= -1

        def draw(self):
                fill(*self.colour)
                ellipse(*self.cells)

class Intro(Scene):
        def setup(self):
                self.psize=13
                global plocx
                global plocy
                plocx=240
                plocy=160
                self.player = Rect(plocx, plocy, 20, 20)
                self.colour = Color(random(), random(), random())

                self.particles = []
                for p in range(100):
                        self.particles.append(Particle(self.size))

        def touch_began(self, touch):
                global x1
                global y1
                x1=touch.location.x
                y1=touch.location.y


        def touch_moved(self, touch):
                global plocx
                global plocy
                global newplocx
                global newplocy
                x=touch.location.x
                y=touch.location.y

                for p in self.particles:
                        if x1 > x:
                                p.vx = 1
                                subx=(x-x1)/4
                                newplocx=plocx+subx
                        if x1 < x:
                                p.vx = -1
                                addx=(x-x1)/4
                                newplocx=plocx+addx
                        if y1 > y:
                                p.vy = 1
                                suby=(y-y1)/4
                                newplocy=plocy+suby
                        if y1 < y:
                                p.vy = -1
                                addy=(y-y1)/4
                                newplocy=plocy+addy
                        if x1 == x:
                                p.vx = 0
                        if y1 == y:
                                p.vy = 0

                xmin=215
                xmax=265
                ymin=140
                ymax=190

                while xmax > plocx and newplocx > plocx:
                        plocx = plocx + 1
                        self.player = Rect(plocx, plocy, 16, 16)

                while xmin < plocx and newplocx < plocx:
                        plocx = plocx - 1
                        self.player = Rect(plocx, plocy, 16, 16)

                while ymax > plocy and newplocy > plocy:
                        plocy = plocy + 1
                        self.player = Rect(plocx, plocy, 16, 16)

                while ymin < plocy and newplocy < plocy:
                        plocy = plocy - 1
                        self.player = Rect(plocx, plocy, 16, 16)

        def touch_ended(self, touch):
                for p in self.particles:
                        p.vx = 0
                        p.vy = 0

        def draw(self):
                background(0, 0.05, 0.2)
                self.player = Rect(plocx, plocy, self.psize, self.psize)
                for p in self.particles:
                        p.update()
                        p.draw()
                        cells = p.cells
                        if self.player.intersects(cells):
                                self.newpsize=self.psize+0.2
                                self.psize=self.newpsize
                                self.particles.remove(p)
                ellipse(*self.player)

run(Intro(), LANDSCAPE)

但它不会移动细胞。有人可以帮我解决我做错了什么,因为我似乎无法弄清楚。

提前致谢!

Ps 这是使用pythonista制作的,显然我不应该在pythonista论坛上发布这个,我必须在这里发布。因此,如果人们没有 pythonista 应用程序,我不知道这将如何工作。

4

0 回答 0