0 / 0 / 0
Регистрация: 22.03.2020
Сообщений: 3

Змейка

22.03.2020, 21:37. Показов 2090. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В общем, сейчас решил научится программированию, скачиваю программы и лажу в коде.
Очередную программу я решил доработать, этой программой стала змейка.
Хотелось бы добавить задний фон(сейчас там зеленая заливка), а также счетчик.
Т.к. сам не знаю, как это сделать, то обращаюсь вам, чтоб вы мне помогли.
Программа ниже
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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
from tkinter import Tk, Canvas
import random
 
# Globals
WIDTH = 1800
HEIGHT = 900
SEG_SIZE = 15
IN_GAME = True
 
# Helper functions
def create_block():
    """ Creates an apple to be eaten """
    global BLOCK
    posx = SEG_SIZE * random.randint(1, (WIDTH-SEG_SIZE) / SEG_SIZE)
    posy = SEG_SIZE * random.randint(1, (HEIGHT-SEG_SIZE) / SEG_SIZE)
    BLOCK = c.create_oval(posx, posy,
                          posx+SEG_SIZE, posy+SEG_SIZE,
                          fill="red")
 
 
def main():
    """ Handles game process """
    global IN_GAME
    if IN_GAME:
        s.move()
        head_coords = c.coords(s.segments[-1].instance)
        x1, y1, x2, y2 = head_coords
        # Check for collision with gamefield edges
        if x2 > WIDTH or x1 < 0 or y1 < 0 or y2 > HEIGHT:
            IN_GAME = False
        # Eating apples
        elif head_coords == c.coords(BLOCK):
            s.add_segment()
            c.delete(BLOCK)
            create_block()
        # Self-eating
        else:
            for index in range(len(s.segments)-1):
                if head_coords == c.coords(s.segments[index].instance):
                    IN_GAME = False
        root.after(100, main)
    # Not IN_GAME -> stop game and print message
    else:
        set_state(restart_text, 'normal')
        set_state(game_over_text, 'normal')
 
 
class Segment(object):
    """ Single snake segment """
    def __init__(self, x, y):
        self.instance = c.create_rectangle(x, y,
                                           x+SEG_SIZE, y+SEG_SIZE,
                                           fill="yellow")
 
 
class Snake(object):
    """ Simple Snake class """
    def __init__(self, segments):
        self.segments = segments
        # possible moves
        self.mapping = {"Down": (0, 1), "Right": (1, 0),
                        "Up": (0, -1), "Left": (-1, 0)}
        # initial movement direction
        self.vector = self.mapping["Right"]
 
    def move(self):
        """ Moves the snake with the specified vector"""
        for index in range(len(self.segments)-1):
            segment = self.segments[index].instance
            x1, y1, x2, y2 = c.coords(self.segments[index+1].instance)
            c.coords(segment, x1, y1, x2, y2)
 
        x1, y1, x2, y2 = c.coords(self.segments[-2].instance)
        c.coords(self.segments[-1].instance,
                 x1+self.vector[0]*SEG_SIZE, y1+self.vector[1]*SEG_SIZE,
                 x2+self.vector[0]*SEG_SIZE, y2+self.vector[1]*SEG_SIZE)
 
    def add_segment(self):
        """ Adds segment to the snake """
        last_seg = c.coords(self.segments[0].instance)
        x = last_seg[2] - SEG_SIZE
        y = last_seg[3] - SEG_SIZE
        self.segments.insert(0, Segment(x, y))
 
    def change_direction(self, event):
        """ Changes direction of snake """
        if event.keysym in self.mapping:
            self.vector = self.mapping[event.keysym]
 
    def reset_snake(self):
        for segment in self.segments:
            c.delete(segment.instance)
 
 
def set_state(item, state):
    c.itemconfigure(item, state=state)
 
 
def clicked(event):
    global IN_GAME
    s.reset_snake()
    IN_GAME = True
    c.delete(BLOCK)
    c.itemconfigure(restart_text, state='hidden')
    c.itemconfigure(game_over_text, state='hidden')
    start_game()
 
 
def start_game():
    global s
    create_block()
    s = create_snake()
    # Reaction on keypress
    c.bind("<KeyPress>", s.change_direction)
    main()
 
 
def create_snake():
    # creating segments and snake
    segments = [Segment(SEG_SIZE, SEG_SIZE),
                Segment(SEG_SIZE*2, SEG_SIZE),
                Segment(SEG_SIZE*3, SEG_SIZE)]
    return Snake(segments)
 
 
# Setting up window
root = Tk()
root.title("PythonicWay Snake")
 
 
c = Canvas(root, width=WIDTH, height=HEIGHT, bg="#003300")
c.grid()
# catch keypressing
c.focus_set()
game_over_text = c.create_text(WIDTH/2, HEIGHT/2, text="ВЫ ПРОИГРАЛИ",
                               font='Arial 40', fill='red',
                               state='hidden')
restart_text = c.create_text(WIDTH/2, HEIGHT-HEIGHT/3,
                             font='Arial 20',
                             fill='white',
                             text="Нажмите на этот текст, чтоб начать сначала",
                             state='hidden')
c.tag_bind(restart_text, "<Button-1>", clicked)
start_game()
root.mainloop()
Сам уже искал в интернете, но там максимально не понятно. Хотелось бы увидеть код, я его сам разберу


Сейчас игра выглядит так:
https://i.yapx.ru/GyWqG.png
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
22.03.2020, 21:37
Ответы с готовыми решениями:

Змейка
Змейка «ползёт» по матрице по чётным строкам слева направо, а по нечётным – справа налево, заполняя матрицу последовательно натуральными...

Змейка
Змейка «ползёт» по матрице по чётным строкам слева направо, а по нечётным – справа налево, заполняя матрицу последовательно натуральными...

Игра змейка
Добрый день. Такой вопрос. Делаю приложение в tkinter. Два вопроса: 1) Через какую команду можно сделать паузу. Есть идея сделать...

5
 Аватар для codcw
815 / 527 / 214
Регистрация: 22.12.2017
Сообщений: 1,495
22.03.2020, 22:59
вот тут товарищ подробно рассказывает как добавить картинку на фон
0
0 / 0 / 0
Регистрация: 22.03.2020
Сообщений: 3
23.03.2020, 09:58  [ТС]
Добавлено через 1 минуту
Хорошо, но там используется PIL, при установке он мне выдает это, что делать?

Кликните здесь для просмотра всего текста

C:\Users\User>pip install Pillow= = 2.8.2
Invalid requirement: 'Pillow='= is not a valid operator. Did you mean == ?
You are using pip version 19.0.3, however version 20.0.2 is available.
You should consider upgrading via the 'python -m pip install --upgrade pip' command.

C:\Users\User>python -m pip install --upgrade pip
"python" не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.
0
Модератор
Эксперт Python
 Аватар для Fudthhh
2696 / 1602 / 513
Регистрация: 21.02.2017
Сообщений: 4,210
Записей в блоге: 1
23.03.2020, 10:01
Mpython,

Прочтите документацию к pillow.

Добавлено через 2 минуты
Единственное что могу дополнить: если нужно установить модуль определенной версии то используется == *__version__*, то бишь pip install pillow == x.x.x, а не как у вас pip install pillow= = x.x.x
0
0 / 0 / 0
Регистрация: 22.03.2020
Сообщений: 3
23.03.2020, 12:09  [ТС]
Можешь кодом написать? Не получается, я сам разберу код
0
Модератор
Эксперт Python
 Аватар для Fudthhh
2696 / 1602 / 513
Регистрация: 21.02.2017
Сообщений: 4,210
Записей в блоге: 1
23.03.2020, 16:31
Mpython, как ты разберешь код если документацию не можешь разобрать ¯\_(ツ)_/¯.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
23.03.2020, 16:31
Помогаю со студенческими работами здесь

Диагональная змейка
Подскажите, как мне сделать прямоугольную змейку. Квадратную сделала, а вот прямоугольную не могу понять как... n = int(input()) ...

Игра Змейка
import random import pygame size = 30 half_size = size // 2 ras = 750 ras = ras // size // 2 * 2 * size + size FPS = 25

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

Диагональная змейка наружу
Доброго времени суток! (Неправильно написала название темы, это спиральная квардатная змейка наружу) Всю голову уже сломала, сделала...

Столкновение с объектом в игре змейка
Здравствуйте, пишу игру змейка и столкнулся с проблемой реализации столкновения змеи с барьерами. Подскажите в чем у меня ошибка, все...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

Новые блоги и статьи
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определенном условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru