Показаны сообщения с ярлыком game. Показать все сообщения
Показаны сообщения с ярлыком game. Показать все сообщения

пятница, 13 декабря 2013 г.

Python использование set с классом

Задача: создадим класс, создадим пустой 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 (один или более камней при столкновении) и уменьшаем счетчик жизней кораблю.

четверг, 12 декабря 2013 г.

Python tic-tac-toe крестики-нолики 3Х3

Классические крестики нолики 3Х3. Функция должна возвращать в случае выигрыша символ победителя "Х" или "О". Если ничья (draw) - "D". На вход функции подается подобный 2-мерный массив список. Если клетка не заполнена, то символ "."

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