Форум программистов, компьютерный форум, киберфорум
Python: Tkinter
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
0 / 0 / 0
Регистрация: 29.09.2017
Сообщений: 167

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

15.06.2020, 13:22. Показов 1305. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru