Форум программистов, компьютерный форум, киберфорум
Python: PyGame
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/9: Рейтинг темы: голосов - 9, средняя оценка - 5.00
2 / 2 / 0
Регистрация: 22.12.2017
Сообщений: 34

Pygame Проверка условий

15.07.2018, 17:54. Показов 2070. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день, в предыдущих темах была рассмотрена тема с игрой таракан. Я решил попытаться перенести её на pygame.Я решил Усложнить задачу. Усложнение заключается в том, что таракан(квадрат в данном коде) должен двигаться только при нажатии любой кнопки направления(стрелок) или при движении мышки игроком и при этом оставлять свой след на экране. Подскажите, как правильно прописать данные условия и как оставлять след за объектом. Приложу код на питоне, как пример, что должно быть, а ниже, что я написал на pygame

Python
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
""" ТАРАКАН """
from random import randint
import time
import os #множество функций для работы с операционной системой
 
pos = [10,10]
 
direction = 'up'
 
step = 0
full_way = []
way = [[0 for y in range(21)]for x in range(21)]
 
while step < 40:
    if direction == 'up':
        pos[0] -= 1
    if direction == 'down':
        pos[0] += 1
    if direction == 'left':
        pos[1] -= 1
    if direction == 'right':
        pos[1] += 1
 
    if pos[0] > 20:
        pos[0] = 0
    if pos[0] < 0:
        pos[0] = 20
    if pos[1] > 20:
        pos[1] = 0
    if pos[1] < 0:
        pos[1] = 20
 
    chance = randint(1, 10)
    if chance == 2 or chance == 8:
        if direction in 'up':
            direction = ['left', 'right'][randint(0,1)]
        elif direction in ['left', 'right']:
            direction = 'up'
 
    way[pos[0]][pos[1]] = 1
    print('\n'.join([' '.join([str(cell) for cell in row]) for row in way]))
    print('---------------------------------------------')
    clear = lambda: os.system('cls')#Очистка
    #time.sleep(1) #Для удобного контроля движения. Для быстрого вывода результата, достаточно закомментировать данную строку
    full_way.append((pos[0],pos[1]))#Добавление координат в список
    step += 1 #Новый ход
    print(full_way)#Список с координатами
с pygame
Python
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
import pygame
from random import randint
pygame.init()
 
screen_width, screen_heigth = 640, 640
screen = pygame.display.set_mode((screen_width, screen_heigth)) #окно игры
 
x = screen_width /2
y = screen_heigth/2
 
 
direction = 'up'
width = 10
heigth = 10
speed = 10
step = 0
runtime = True
 
while runtime:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            runtime = False
    keys = pygame.key.get_pressed()
 
    while step < 40:
        if (keys[pygame.K_LEFT] or keys[pygame.K_RIGHT] or keys[pygame.K_UP] or keys[pygame.K_DOWN]) and direction == 'up':
            y -= speed
        if (keys[pygame.K_LEFT] or keys[pygame.K_RIGHT] or keys[pygame.K_UP] or keys[pygame.K_DOWN]) and direction == 'down':
            y += speed
        if (keys[pygame.K_LEFT] or keys[pygame.K_RIGHT] or keys[pygame.K_UP] or keys[pygame.K_DOWN]) and direction == 'left':
            x -= speed
        if (keys[pygame.K_LEFT] or keys[pygame.K_RIGHT] or keys[pygame.K_UP] or keys[pygame.K_DOWN]) and direction == 'right':
            x += speed
 
        if y > screen_heigth:
            y = 0
        if y < 0:
            y = screen_heigth - heigth
        if x > screen_width:
            x = 0
        if x < 0:
            x = screen_width - width
        chance = randint(1, 10)
        if chance == 2 or chance == 8:
            if direction in 'up':
                direction == ['left', 'right'][randint(0,1)]
            elif direction in ['left', 'right']:
                direction = 'up'
        step += 1
 
    screen.fill((0,0,0))
    pygame.draw.rect(screen, (255,255,0), (x, y, width, heigth))
    pygame.display.update()
    pygame.display.flip()
 
pygame.QUIT()
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
15.07.2018, 17:54
Ответы с готовыми решениями:

Попиксельная проверка столкновений. Pygame
Здравствуйте, я хочу сделать проверку столкновений спрайтов, но при этом нужно чтобы белый(прозрачный) фон спрайта не засчитывался. К...

При импорте pygame пишет что нет модуля pygame.base
Устанавливаю для kivy.Всё есть (sython,gsstreamer,kivy,pyscripter,python) , а вот фраем. pygame не работает.Почему?Что ещё надо для работы...

Ошибка в pygame AttributeError: 'pygame.Rect' object has no attribute 'blit'
Создаю игру, крестики нолики Почему возникает ошибка и как ее исправить? AttributeError: 'pygame.Rect' object has no attribute 'blit' ...

1
1741 / 913 / 480
Регистрация: 05.12.2013
Сообщений: 3,074
15.07.2018, 19:10
Лучший ответ Сообщение было отмечено Reywal как решение

Решение

так например
Python
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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
import pygame
from random import randint
pygame.init()
 
screen_width, screen_heigth = 640, 640
screen = pygame.display.set_mode((screen_width, screen_heigth)) #окно игры
 
x = screen_width /2
y = screen_heigth/2
 
clock=pygame.time.Clock()
 
direction = 'up'
width = 10
heigth = 10
speed = 10
step = 0
runtime = True
 
moving = False
count = False
 
moves = []
moves.append([x, y, width, heigth])
 
oldx = -1
oldy = -1
 
while runtime:
        chance = randint(1, 10)
        for e in pygame.event.get():
            if e.type == pygame.QUIT or e.type == pygame.KEYDOWN and e.key == pygame.K_ESCAPE:
                    runtime = False
            if e.type == pygame.KEYDOWN:
                if e.key == pygame.K_LEFT or e.key == pygame.K_RIGHT or e.key == pygame.K_UP or e.key == pygame.K_DOWN:
                    moving = True
                    count = True
            if e.type == pygame.KEYUP:
                moving = False
                count = False
        if count:
            step += 1
        print(step)
 
        if chance == 2 or chance == 8:
            if direction == 'up':
                direction = ['left', 'right'][randint(0,1)]
            elif direction in ['left', 'right']:
                direction = 'up'
        
 
        if step == 40:
            runtime = False
                    
 
        if moving:
            if direction == 'up':
                y -= speed
            if direction == 'down':
                y += speed
            if direction == 'left':
                x -= speed
            if  direction == 'right':
                x += speed
 
        if y > screen_heigth:
            y = 0
        if y < 0:
            y = screen_heigth - heigth
        if x > screen_width:
            x = 0
        if x < 0:
            x = screen_width - width
 
        if oldx != x or oldy != y:
            moves.append([x, y, width, heigth])
 
        screen.fill((0,0,0))
        for move in moves:
            pygame.draw.rect(screen, (255,255,0), move)
 
        oldx = x 
        oldy = y
        pygame.display.flip()
        clock.tick(1)
 
pygame.quit()
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
15.07.2018, 19:10
Помогаю со студенческими работами здесь

pygame.error: cannot convert without pygame.display initialized
Только начал изучать спрайты Выдаёт ошибку: Traceback (most recent call last): File &quot;D:/project1/OCode.py&quot;, line 18, in...

Pygame ошибка module ‘pygame’ has no ‘init’ member
Всем здравствуйте. Недавно начал работать с VS code и выдает такая ошибка. Прикрепляю полностью скрин. Нашел решение перед каждой...

Проверка условий
Задача тривиальна. Скрипт принимает данные и что-то с ними делает, если они не пустые. А вот одна или несколько переменных пусты, то...

проверка условий
как проверить в каком формате производится запрос даты для фильтра по условию: model -&gt; setFilter (&quot;date = currApp()&quot;); ...

Проверка условий
Доброго времени суток, уважаемые форумчане) столкнулся с проблемой проверки условий в базе данных, а именно нужно проверить при добавлении...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru