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

Змейка, не идет счет игры

15.06.2020, 13:22. Показов 1308. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день! Подскажите, где ошибка. Программа работает хорошо но счет игры не идет
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
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
from tkinter import Tk, Canvas
import random
 
WIDTH = 400  # 16
HEIGHT = 300  # 12
SEG_SIZE = 25
bi=0
Widt = WIDTH
hei = 50
IN_GAME = True
BL=int(0)
ri=0
fi=0
def create_block():
    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():
    global IN_GAME
    global BL
    global fi
    if IN_GAME:
        s.move()
        head_coords = c.coords(s.segments[-1].instance)
 
        x1, y1, x2, y2 = head_coords
        if x2 > WIDTH or x1 < 0 or y1 < 0 or y2 > HEIGHT:
            IN_GAME = False
 
 
        elif head_coords == c.coords(BLOCK):
            s.add_segment()
            c.delete(BLOCK)
            create_block()
            fi=fi+1
            print(fi,' = fi')
            for index in range(len(s.segments) - 1):
                if c.coords(BLOCK) == c.coords(s.segments[index].instance):
                    print('OVER----------')
                    c.delete(BLOCK)
                    create_block()
            
 
        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)
    else:
        set_state(restart_text, 'normal')
        set_state(game_over_text, 'normal')
 
 
''' создание  змейки'''
 
 
class Segment(object):
    def __init__(self, x, y):
        self.instance = c.create_rectangle(x, y,
                                           x + SEG_SIZE, y + SEG_SIZE,
                                           fill="blue")
 
 
'''управление змейкой на карте и создание яблок '''
 
 
class Snake(object):
    global BL
    global ri
    bi = int(0)
    def __init__(self, segments):
        self.segments = segments
        self.mapping = {"Down": (0, 1), "Right": (1, 0),
                        "Up": (0, -1), "Left": (-1, 0)}
        self.vector = self.mapping["Right"]
 
 
 
    def move(self):
        ri = len(self.segments)
 
        for BL in range(ri - 1):
            segment = self.segments[BL].instance
            x1, y1, x2, y2 = c.coords(self.segments[BL + 1].instance)
            c.coords(segment, x1, y1, x2, y2)
        print(BL-1 ,' = BL' ,'   ',ri,' = ri')
 
 
        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):
        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):
        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()
    c.bind("<KeyPress>", s.change_direction)
    main()
 
 
def create_snake():
    segments = [Segment(SEG_SIZE, SEG_SIZE),
                Segment(SEG_SIZE * 2, SEG_SIZE),
                Segment(SEG_SIZE * 3, SEG_SIZE)]
    return Snake(segments)
 
 
root = Tk()
root.title("Snake")
 
c = Canvas(root, width=WIDTH, height=HEIGHT, bg="#003300")
c.grid()
c.focus_set()
game_over_text = c.create_text(WIDTH / 2, HEIGHT / 2, text="GAME OVER!",
                               font='Arial 20', fill='red',
                               state='hidden')
restart_text = c.create_text(WIDTH / 2, HEIGHT - HEIGHT / 3,
                             font='Arial 30',
                             fill='white',
                             text="Click here to restart",
                             state='hidden')
c.tag_bind(restart_text, "<Button-1>", clicked)
S=Snake
b = Canvas(root, width=Widt, height=hei, bg="blue")
b.grid()
b.focus_set()
 
game_chet = b.create_text(Widt / 2+12, hei / 2, text=fi,
                          font='Arial 15', fill='red')
chet_zm = b.create_text(Widt / 4, hei / 2,
                        font='Arial 15',
                        fill='red',
                        text="Размер змейки(очки):")
 
start_game()
 
root.mainloop()
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
15.06.2020, 13:22
Ответы с готовыми решениями:

Неправильно идет счет счетчика
Всем привет, пишу самую простятскую игрушку на делфи, и при столкнулся с проблемой, при попадании снаряда в самолет начисляется +1 балл,...

Идет неправильный счет в запросе и отчете
Добрый вечер знатоки access`а! Прошу помочь разобраться в запросе, а именно когда в подчиненной форме &quot;Спецификации&quot; (она...

Почему идёт счёт со второй лексемы?
Такая проблема: поиск длины лексемы начинается со второй лексемы, а должна с первой Входные данные: str pop Лексемы: str pop ...

1
2 / 1 / 1
Регистрация: 12.06.2020
Сообщений: 5
17.06.2020, 18:14
Demon666_2017, дело в том, что вы счет никак не обновляете. Метод create_text(), грубо говоря, "рисует" текст, один раз, и поэтому счет не обновляется. Попробуйте написать функцию, которая каждый раз когда изменяется счет, обновляет счетчик.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
17.06.2020, 18:14
Помогаю со студенческими работами здесь

Во время игры Видеокарта идёт в пик до 100% Нагрузки после чего 0 и Вылет игры
Добрый вечер. Впервые пишу сюда, но не об этом. Столкнулся с проблемой. Купил на днях видеокарту Zotac GTX 1080 AMP! Extreme Edition...

Не понятно за счёт чего идёт хост страницы
Мне в руки попала raspberry, на которой я буду делать свой веб-проект, но у меня возникла вот такая проблема, при установки php я понял,...

Алгоритм игры змейка
Мне надо написать игрушку - Змейка ... неподскажете алгоритм... мыльте teem@netmail.kg

Реализация игры ,,Змейка,,
Всем привет :) У меня возникло несколько вопросов о реализации такой консольной игры. Можно ли сделать короткую паузу, потому что сама...

Змейка, завершение игры
Нужно сделать чтобы змейка ела 5 яблок и игра заканчивалась, но не могу понять как это сделать( Вот сам код #include...


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

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

Новые блоги и статьи
модель ЗдравоСохранения 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
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru