-
Notifications
You must be signed in to change notification settings - Fork 0
/
Item.py
57 lines (49 loc) · 2.32 KB
/
Item.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
import numpy as np
import random
from PIL import Image, ImageDraw, ImageFont
import math
class Item:
def __init__(self):
self.size = 25
self.state = None
self.image = Image.open("/home/kau-esw/esw/TA-ESW/game/png/aid-kit.png").resize((self.size, self.size))
self.name = ""
# 랜덤으로 이미지 선택
self.rand_image = random.randint(1, 3)
if self.rand_image == 1:
self.image = Image.open("/home/kau-esw/esw/TA-ESW/game/png/aid-kit.png").resize((self.size, self.size))
self.name = "life"
elif self.rand_image == 2:
self.image = Image.open("/home/kau-esw/esw/TA-ESW/game/png/energy.png").resize((self.size, self.size))
self.name = "energy"
elif self.rand_image == 3:
self.image = Image.open("/home/kau-esw/esw/TA-ESW/game/png/shield.png").resize((self.size, self.size))
self.name = "shield"
# 아이템 위치를 무작위로 생성 (위치에 따라 방향 변화)
self.rand_x = random.randint(0, 240 - self.size)
self.rand_y = random.randint(0, 240 - self.size)
self.position = np.array([self.rand_x, self.rand_y, self.rand_x + self.size, self.rand_y + self.size])
# 캐릭터와 충돌했는지를 체크
def collision_check(self, character):
collision = self.overlap(self.position, character.position)
if collision:
self.state = 'hit'
if self.name == 'life':
if character.life + 25 >= 100:
character.life = 100
else:
character.life += 25
elif self.name == 'energy':
character.energy += 1
elif self.name == 'shield':
character.shield = True
# object의 위치와 other의 위치가 겹치면 True 반환
def overlap(self, ego, other):
ego_center = np.array([(ego[0] + ego[2]) / 2, (ego[1]+ ego[3]) / 2])
other_center = np.array([(other[0] + other[2]) / 2, (other[1]+ other[3]) / 2])
distance = math.sqrt((other_center[0] - ego_center[0]) ** 2 + (other_center[1] - ego_center[1]) ** 2)
r_r = ((ego[2] - ego[0]) / 2) + ((other[2] - other[0]) / 2)
if distance <= r_r - 4:
return True
else:
return False