Форум программистов, компьютерный форум, киберфорум
Python: GUI, графика
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/21: Рейтинг темы: голосов - 21, средняя оценка - 4.86
0 / 0 / 0
Регистрация: 07.04.2019
Сообщений: 11

Змейка на python

16.11.2019, 20:23. Показов 4118. Ответов 5

Студворк — интернет-сервис помощи студентам
Не могу создать еду и сделать так что бы при съедании она увеличивалась, как это сделать?
И есть баг где при достижении края верхний и левой части игрового поля, змея может просто исчезнуть, как это исправить?
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
import pygame
from control import Control
from snake import Snake
 
pygame.init()
window = pygame.display.set_mode((441, 441))
pygame.display.set_caption("Snake")
control = Control()
snake = Snake()
 
var_speed = 0
 
flag_game = True
 
while control.flag_game:
    control.control()
    window.fill(pygame.Color("Black"))
    snake.draw_snake(window)
 
    if var_speed % 50 == 0 and control.flag_pause:
        snake.moove(control)
        snake.check_end_window()
        snake.animation()
 
    var_speed += 1
    pygame.display.flip()
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
import pygame
from pygame.locals import *
 
 
 
class Control:
    def __init__(self):
        self.flag_game = True
        self.flag_direction = "RIGHT"
        self.flag_pause = True
 
    def control(self):
        """Движение от флага"""
 
        for event in pygame.event.get():
            if event.type == QUIT:
                self.flag_game = False
            elif event.type == KEYDOWN:
                if event.key == K_RIGHT or event.key == ord('d') and self.flag_direction != "LEFT":
                    self.flag_direction = "RIGHT"
                elif event.key == K_LEFT or event.key == ord('a') and self.flag_direction != "RIGHT":
                    self.flag_direction = "LEFT"
                elif event.key == K_UP or event.key == ord('w') and self.flag_direction != "DOWN":
                    self.flag_direction = "UP"
                elif event.key == K_DOWN or event.key == ord('s') and self.flag_direction != "UP":
                    self.flag_direction = "DOWN"
                elif event.key == K_ESCAPE:
                    self.flag_game = False
                elif event.key == K_SPACE:
                    if self.flag_pause:
                        self.flag_pause = False
                    elif self.flag_pause == False:
                         self.flag_pause = True
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
import pygame
class Snake:
    def __init__(self):
        self.head = [45, 45]
        self.body = [[45,45],[34,45],[23,45]]
 
    def moove (self,control):
        """Движение змеи"""
        if control.flag_direction == "RIGHT":
            self.head[0] += 11
        elif control.flag_direction == "LEFT":
            self.head[0] -= 11
        elif control.flag_direction == "UP":
            self.head[1] -= 11
        elif control.flag_direction == "DOWN":
            self.head[1] += 11
 
 
    def animation(self):
        self.body.insert(0,list(self.head))
        self.body.pop()
 
 
 
 
    def draw_snake (self,window):
        """Отрисовка змеи на экране"""
        for segment in self.body:
            pygame.draw.rect(window,pygame.Color("Green"),pygame.Rect(segment[0],segment[1],10,10))
 
    def check_end_window(self):
        if self.head[0] == 441:
            self.head[0] = 1
        elif self.head[0] == 1:
            self.head[0] = 441
        elif self.head[1] == 1:
            self.head[1] = 441
        elif self.head[1] == 441:
            self.head[1] = 1
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
16.11.2019, 20:23
Ответы с готовыми решениями:

Змейка на Python
:cry:Я хочу сделать змейку. Ну хотя бы чтобы тело было квадратами, голова - кружочком.

Игра змейка на Python
Всем привет, я пишу курсовую работу на тему "Змейка на языке Python" Код почти готов. Но я не могу приложить ума как сделать кнопку которая...

Консольная змейка на python
Всем привет, разбираюсь со змейкой. Реализовал голову змейки, поле где она отображается и фрукт( когда голова его сьедает, то за головой...

5
1293 / 677 / 367
Регистрация: 07.01.2019
Сообщений: 2,302
16.11.2019, 22:18
Цитата Сообщение от Wurst Посмотреть сообщение
И есть баг где при достижении края верхний и левой части игрового поля, змея может просто исчезнуть, как это исправить?
У вас проверяется на строгое равенство, то есть сработает только если цифра именно такая, используйте больше либо равно и меньше либо равно

Python
1
2
3
4
5
6
7
8
9
def check_end_window(self):
        if self.head[0] >= 441:
            self.head[0] = 1
        elif self.head[0] <= 0:
            self.head[0] = 441
        elif self.head[1] <= 0:
            self.head[1] = 441
        elif self.head[1] >= 441:
            self.head[1] = 1
Добавлено через 13 минут
Цитата Сообщение от Wurst Посмотреть сообщение
Не могу создать еду и сделать так что бы при съедании она увеличивалась, как это сделать?
Вот пример

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
import pygame
class Snake:
    def __init__(self):
        self.head = [45, 45]
        self.body = [[45,45],[34,45],[23,45]]
        self.eat = False
 
    def moove (self,control):
        """Движение змеи"""
        if control.flag_direction == "RIGHT":
            self.head[0] += 11
        elif control.flag_direction == "LEFT":
            self.head[0] -= 11
        elif control.flag_direction == "UP":
            self.head[1] -= 11
        elif control.flag_direction == "DOWN":
            self.head[1] += 11
 
 
    def check_eat(self, food):
        if self.head == food:
            self.eat = True
 
 
    def animation(self):
        self.body.insert(0,list(self.head))
        if not self.eat:
            self.body.pop()
        else:
            self.eat = False
Python
1
2
3
4
5
6
7
    pygame.draw.rect(window,pygame.Color("Red"),pygame.Rect(100, 100, 10,10))
 
    if var_speed % 50 == 0 and control.flag_pause:
        snake.moove(control)
        snake.check_end_window()
        snake.animation()
        snake.check_eat([100, 100])
1
0 / 0 / 0
Регистрация: 07.04.2019
Сообщений: 11
17.11.2019, 10:20  [ТС]
Теперь еще одна проблема, как сделать так что бы при съедании, еда появилось в рандомном месте

Добавлено через 22 минуты
и при столкновении с телом игра вылетало
0
0 / 0 / 0
Регистрация: 07.04.2019
Сообщений: 11
17.11.2019, 18:06  [ТС]
Столкновение сделал
0
1293 / 677 / 367
Регистрация: 07.01.2019
Сообщений: 2,302
17.11.2019, 18:42
Лучший ответ Сообщение было отмечено Wurst как решение

Решение

Цитата Сообщение от Wurst Посмотреть сообщение
так что бы при съедании, еда появилось в рандомном месте
Вот так можно

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
import pygame
from control import Control
from snake import Snake
from random import randint
 
pygame.init()
window = pygame.display.set_mode((441, 441))
pygame.display.set_caption("Snake")
control = Control()
snake = Snake()
 
var_speed = 0
 
flag_game = True
 
class Food:
    def __init__(self):
        self.x = 100
        self.y = 100
 
    def draw(self):
        pygame.draw.rect(window,pygame.Color("Red"),pygame.Rect(self.x, self.y, 10,10))
 
    def pos(self):
        return [self.x, self.y]
 
    def set(self):
        self.x = 1 + randint(1, 40) * 11
        self.y = 1 + randint(1, 40) * 11
 
food = Food()
 
while control.flag_game:
    control.control()
    window.fill(pygame.Color("Black"))
    snake.draw_snake(window)
 
    food.draw()
 
    if var_speed % 50 == 0 and control.flag_pause:
        snake.moove(control)
        snake.check_end_window()
        snake.animation()
        snake.check_eat(food)
 
 
    var_speed += 1
    pygame.display.flip()
Python
1
2
3
4
    def check_eat(self, food):
        if self.head == food.pos():
            self.eat = True
            food.set()
1
0 / 0 / 0
Регистрация: 07.04.2019
Сообщений: 11
17.11.2019, 20:41  [ТС]
Спасибо тебе огромное!!! неделю не мог это сделать
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.11.2019, 20:41
Помогаю со студенческими работами здесь

Змейка на python с pygame (100 строчек начинающего)
Здравствуйте, уважаемые форумчане. Я бы очень хотел побольше критики (начиная от ошибок в этом тексте и заканчивая неправильно выбранной...

Python змейка
Вообщем, вот мой г@вно - код. Я не могу как исправить появление &quot;еды&quot; НА змейке. Может кто подскажет? from tkinter import * import...

опять змейка (Python+Pygame) Противный баг
Друг познакомил с чудесной библиотекой Pygame И я решил на скорую руку реализовать змейку Из разных статей и гайдов,я выяснил-что...

"Змейка": нужно, чтобы змейка проходила сквозь стены
import sys import random from PIL import Image, ImageTk from tkinter import Tk, Frame, Canvas, ALL, NW class Cons: ...

Игра "Змейка": чтобы змейка не съедала сама себя
Здравствуйте! Пишу змейку на VB 2010. Не получается составить условие того, что бы змейка не ползла в направлении обратному...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Вывод данных через динамический список в справочнике
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru