def main():
    pygame.init()

    background = (0, 0, 0)
    screen = pygame.display.set_mode((640, 480), 0, 32)
    sprite = pygame.image.load('dennis_0.bmp').convert()

    script = [
        4, 5, 6, 7, 6, 5, 0
    ]
    idx = 0.0
    index = 0

    clock = pygame.time.Clock()

    pos = (Vector2(*screen.get_size()) - Vector2(*(80, 80))) / 2
    target = pos

    heading = Vector2()

    while True:

        for event in pygame.event.get():
            if event.type == QUIT:
                exit()

        time_passed = clock.tick()
        time_passed_seconds = time_passed / 1000.0

        screen.fill(background)
        screen.blit(sprite, pos, (script[index] * 80, 0, 80, 80))
        pygame.display.update()

        if pygame.mouse.get_pressed()[0]:
            target = Vector2( *pygame.mouse.get_pos() ) - Vector2( *(80, 80) ) / 2
        idx += 1 / 4.
        index = int(idx) % (len(script)-1)
      
        params_vector = Vector2.from_points(pos, target)

        if params_vector.get_length() < 5:
            idx = 0
            index = len(script) - 1
            target = pos


        ## Averagely
        params_vector.normalize()
        pos += params_vector * 150 * time_passed_seconds
        
        ## kind2
        # pos += params_vector * time_passed_seconds

        ## king3
        # params_vector.normalize()
        # heading = heading + (params_vector * 5)
        # pos += heading * time_passed_seconds

        pygame.display.update()
Beispiel #2
0
def main():
    pygame.init()

    background = (0, 0, 0)
    screen = pygame.display.set_mode((640, 480), 0, 32)
    sprite = pygame.image.load('dennis_0.bmp').convert()

    script = [4, 5, 6, 7, 6, 5, 0]
    idx = 0.0
    index = 0

    clock = pygame.time.Clock()

    pos = (Vector2(*screen.get_size()) - Vector2(*(80, 80))) / 2
    target = pos

    heading = Vector2()

    while True:

        for event in pygame.event.get():
            if event.type == QUIT:
                exit()

        time_passed = clock.tick()
        time_passed_seconds = time_passed / 1000.0

        screen.fill(background)
        screen.blit(sprite, pos, (script[index] * 80, 0, 80, 80))
        pygame.display.update()

        if pygame.mouse.get_pressed()[0]:
            target = Vector2(*pygame.mouse.get_pos()) - Vector2(*(80, 80)) / 2
        idx += 1 / 4.
        index = int(idx) % (len(script) - 1)

        params_vector = Vector2.from_points(pos, target)

        if params_vector.get_length() < 5:
            idx = 0
            index = len(script) - 1
            target = pos

        ## Averagely
        params_vector.normalize()
        pos += params_vector * 150 * time_passed_seconds

        ## kind2
        # pos += params_vector * time_passed_seconds

        ## king3
        # params_vector.normalize()
        # heading = heading + (params_vector * 5)
        # pos += heading * time_passed_seconds

        pygame.display.update()
Beispiel #3
0
def line_segment_intersect(line_a, line_b):
    """
    return True if line_a intersect with line_b else False
    params should be LineSegment object
    """

    p1 = line_a.a
    p2 = line_a.b
    p3 = line_b.a
    p4 = line_b.b

    vec_a = Vector2.from_points(p3, p1)
    vec_b = Vector2.from_points(p3, p4)
    d1 = cross_product(vec_a, vec_b)

    vec_a = Vector2.from_points(p3, p2)
    vec_b = Vector2.from_points(p3, p4)
    d2 = cross_product(vec_a, vec_b)

    vec_a = Vector2.from_points(p1, p3)
    vec_b = Vector2.from_points(p1, p2)
    d3 = cross_product(vec_a, vec_b)

    vec_a = Vector2.from_points(p1, p4)
    vec_b = Vector2.from_points(p1, p2)
    d4 = cross_product(vec_a, vec_b)

    # normal intersect
    if d1 * d2 < 0 and d3 * d4 < 0:
        return True

    def on_segment(pi, pj, pk):
        # pi, pj, pk have to be a tuple as (x, y)
        return min(pi[0], pj[0]) <= pk[0] <= max(pi[0], pj[0]) \
            and min(pi[1], pj[1]) <= pk[1] <= max(pi[1], pj[1])

    # abnormal intersect test
    if d1 == 0 and on_segment(p3, p4, p1):
        return True

    if d2 == 0 and on_segment(p3, p4, p2):
        return True

    if d3 == 0 and on_segment(p1, p2, p3):
        return True

    if d4 == 0 and on_segment(p1, p2, p4):
        return True

    return False
Beispiel #4
0
def cal_face_direct(start_point, end_point):
    best_direct = None
    cos_min = -1
    vec_to_target = Vector2.from_points(start_point, end_point)
    for vec_point, direct in cfg.Direction.VEC_TO_DIRECT.iteritems():
        vec = Vector2(vec_point)

        # cosine law for 2 vectors
        cos_current = cos_for_vec(vec, vec_to_target)
        if cos_current > cos_min:
            cos_min = cos_current
            best_direct = direct

    return best_direct
Beispiel #5
0
 def find_shoot(self, t):
     isdirection = [0, 0]
     global playerpos
     isdirection[0] = int(playerpos[0] / wallwide)
     isdirection[1] = int(playerpos[1] / wallheight)
     AB = Vector2.from_points((self.x, self.y),
                              (isdirection[0], isdirection[1]))
     if (isdirection[0] - self.x + 1) * (isdirection[1] - self.y +
                                         1) != 1:
         if (isdirection[0] == self.x or isdirection[1]
                 == self.y) and AB.get_normalized() == self.dir:
             if t > 0:
                 # print 1
                 self.shoot_tank()
Beispiel #6
0
def main():

	background_image_path=r'./picture/sushiplate.jpg'
	sprite_image_path='./picture/fugu.png'
	SCREEN_SIZE=(640,480)
	clock=pygame.time.Clock()
	position=Vector2(100.0,100.0)
	heading=Vector2()
	speed=100

	pygame.init()

	screen = pygame.display.set_mode(SCREEN_SIZE,0,32)
	pygame.display.set_caption("hello world")
	# font=pygame.font.SysFont('arial',16)
	# font_height=font.get_linesize()

	background=pygame.image.load(background_image_path).convert()
	sprite=pygame.image.load(sprite_image_path).convert_alpha()
	destination=Vector2(randint(0,640),randint(0,480))

	while True:

		for event in pygame.event.get():
			if event.type==QUIT:
				exit()

		screen.blit(background,(0,0))
		screen.blit(sprite,position)

		time_passed=clock.tick()
		time_passed_seconds=time_passed/1000.0

		

		vector_to_mouse=Vector2.from_points(position,destination)

		if vector_to_mouse.get_length() > 1:
			heading=vector_to_mouse.normalize()
			position+=heading*time_passed_seconds*speed
		else:
			destination=Vector2(randint(0,640),randint(0,480))

		pygame.display.update()
clock = pygame.time.Clock()

position = Vector2(100.0, 100.0)
speed = 250
heading = Vector2()

while True:

    for event in pygame.event.get():
        if event.type == QUIT:
            pygame.quit()
            exit()
        if event.type == MOUSEBUTTONDOWN:
            destination_x = event.pos[0] - sprite.get_width()/2.0 
            destination_y = event.pos[1] - sprite.get_height()/2.0 
            destination = (destination_x, destination_y)

            
            heading = Vector2.from_points(position, destination) 
            heading.normalize()

    screen.blit(background, (0,0))
    screen.blit(sprite, (position.x, position.y))

    time_passed = clock.tick()
    time_passed_seconds = time_passed / 1000.0

    distance_moved = time_passed_seconds * speed 
    position += heading * distance_moved 
    pygame.display.update()
Beispiel #8
0
screen = pygame.display.set_mode((640,480),0,32)
background = pygame.image.load(background_image_filename).convert()
sprite = pygame.image.load(sprite_image_filename).convert_alpha()

clock = pygame.time.Clock()

position = Vector2(100.0, 100.0)
heading = Vector2()

while True:
    
    for event in pygame.event.get():
        if event.type == QUIT:
            exit()

    screen.blit(background,(0,0))
    screen.blit(sprite,position)

    time_passed = clock.tick()
    time_passed_seconds = time_passed / 1000.0

    destination = Vector2(*pygame.mouse.get_pos()) - Vector2(*sprite.get_size())/2
    vector_to_mouse = Vector2.from_points(position, destination)
    vector_to_mouse .normalize()

    heading = heading + (vector_to_mouse * .6)

    position += heading * time_passed_seconds
    
    pygame.display.update()
Beispiel #9
0
sprite_pos = Vector2(200, 150)
sprite_speed = 300.
sprite_rotation = 0.
sprite_rotation_speed = 360.
star_position = Vector2(100.0, 100.0)
star_speed = 250.
star_heading = Vector2()
#

while True:
  for event in pygame.event.get():
    if event.type == QUIT:
      exit()
    if event.type == MOUSEBUTTONDOWN:
      star_destination = Vector2(*event.pos) - Vector2(*star.get_size())/2
      star_heading = Vector2.from_points(star_position, star_destination)
      star_heading.normalize()
  pressed_keys = pygame.key.get_pressed()
  rotation_direction = 0.
  movement_direction = 0.
  
  if pressed_keys[K_LEFT]:
    rotation_direction=+1.
  elif pressed_keys[K_RIGHT]:
    rotation_direction=-1.
  if pressed_keys[K_UP]:
    movement_direction=-1.
  elif pressed_keys[K_DOWN]:
    movement_direction = +1.
    
  screen.blit(background, (0,0))
Beispiel #10
0
sprite = pygame.image.load(sprite_image_filename).convert_alpha()

clock = pygame.time.Clock()

position = Vector2(100.0, 100.0)  # 小鱼所在的初始位置
heading = Vector2()

while True:
    for event in pygame.event.get():
        if event.type == QUIT:
            exit()

    screen.blit(background, (0, 0))
    screen.blit(sprite, position)

    time_passed = clock.tick()
    time_passed_seconds = time_passed / 1000.0

    # 参数前面加*意味着把列表或元组展开
    desitination = Vector2( *pygame.mouse.get_pos() ) \
        - Vector2( *sprite.get_size()) / 2
    # 计算鱼儿当前位置到鼠标位置的向量
    vector_to_mouse = Vector2.from_points(position, desitination)
    vector_to_mouse.normalize()

    # 这个heading可以看做是鱼的速度。在没有到达鼠标时,加速运动,超过以后则减速
    heading = heading + (vector_to_mouse * 0.5)

    position += heading * time_passed_seconds
    pygame.display.update()
 def _heading(self):
     return Vector2.from_points(self._position, self._destination)
def getText(msg,color=blue):
    font = pygame.font.SysFont('bitstreamveraserif',20)
    textsurf = font.render(msg,True,color) # font.render(text,antialias,fg,bg)
    return textsurf

# X coordinate of our sprite
fps = 60
# Speed in pixels per seconds
speed = 250.0
position = Vector2(100,100)
heading = Vector2()

while True:
    for event in pygame.event.get():
        if event.type == QUIT or event.type == KEYDOWN and event.key == K_ESCAPE:
            pygame.quit(); exit()
        if event.type == MOUSEBUTTONDOWN:
            destination = Vector2(*event.pos) - Vector2(*spritesurf.get_size())/2.0
            heading = Vector2.from_points(position,destination)
            heading.normalize()

    screen.blit(bgsurf,(0,0))
    screen.blit(spritesurf, position)

    # time passed(milliseconds) = clock.tick()
    timepassed = clock.tick(fps)/1000.0
    distancemoved = timepassed * speed
    position += distancemoved * heading
    pygame.display.update()