Задача: создадим класс, создадим пустой set. Заполним set экземплярами созданного класса. Для примера пусть экземпляры будут случайным целым числом из диапазона 0-9. Теперь мы хотим удалить из set-а все экземпляры класса значения которых совпадают с "9" и "8"
Где это можно применить на практике? В gamedeveloping игра "Астероид", в set добавляем все летающие по экрану камни, пробегаемся по set-у и сверяем дистанцию между кораблем и камнями:
для этого вычисляем дистанцию между координатами центров фигур
>>> def dist(p, q):
>>> return math.sqrt((p[0] - q[0]) ** 2 + (p[1] - q[1]) ** 2)
и вычитаем радиус корабля и радиус камня, если получившееся значение <= 0 значит столкновение, то добавляем экземпляр класса камень во временный set. После окончания обхода set-а с камнями - удаляем из этого set-а временный set (один или более камней при столкновении) и уменьшаем счетчик жизней кораблю.
Показаны сообщения с ярлыком game. Показать все сообщения
Показаны сообщения с ярлыком game. Показать все сообщения
пятница, 13 декабря 2013 г.
четверг, 12 декабря 2013 г.
Python tic-tac-toe крестики-нолики 3Х3
Классические крестики нолики 3Х3. Функция должна возвращать в случае выигрыша символ победителя "Х" или "О". Если ничья (draw) - "D". На вход функции подается подобный 2-мерный массив список. Если клетка не заполнена, то символ "."
game_result = [
u"OOX",
u"XXO",
u"OXX"]
game_result = [
u"OOX",
u"XXO",
u"OXX"]
среда, 11 декабря 2013 г.
Python полезности для игры Астероид
Выход за границы области экрана
>>> self.pos[0] = (self.pos[0] + self.vel[0]) % WIDTH
>>> self.pos[1] = (self.pos[1] + self.vel[1]) % HEIGHT
pos - координаты центра движущейся фигуры
Увеличение скорости астероидов в зависимости от счета score
# increase rock's velocity using score
for rock in rock_group:
for i in range(2):
rock.vel[i] = rock.init_vel[i] + (rock.init_vel[i] * score * 0.03)
или
rock_vel[i] = rock_vel[i] * (1 + score / 3)
Столкновение спрайтов (p q - координаты центров сталкивающихся спрайтов, dist - расчет дистанции между спрайтами)
def dist(p, q):
return math.sqrt((p[0] - q[0]) ** 2 + (p[1] - q[1]) ** 2)
def collide(self, other_object):
return dist(self.pos, other_object.pos) <= self.radius + other_object.radius
>>> self.pos[0] = (self.pos[0] + self.vel[0]) % WIDTH
>>> self.pos[1] = (self.pos[1] + self.vel[1]) % HEIGHT
pos - координаты центра движущейся фигуры
Увеличение скорости астероидов в зависимости от счета score
# increase rock's velocity using score
for rock in rock_group:
for i in range(2):
rock.vel[i] = rock.init_vel[i] + (rock.init_vel[i] * score * 0.03)
или
rock_vel[i] = rock_vel[i] * (1 + score / 3)
Столкновение спрайтов (p q - координаты центров сталкивающихся спрайтов, dist - расчет дистанции между спрайтами)
def dist(p, q):
return math.sqrt((p[0] - q[0]) ** 2 + (p[1] - q[1]) ** 2)
def collide(self, other_object):
return dist(self.pos, other_object.pos) <= self.radius + other_object.radius
Подписаться на:
Сообщения (Atom)