Загрузка данных
import pygame as pyg
import random
pyg.init()
fps = pyg.time.Clock() #база
info = pyg.display.Info()
W, H = info.current_w, info.current_h
screen = pyg.display.set_mode((W, H))
pyg.display.set_caption("Змея!")
zmeya = [(0, 0), (0, 0), (0, 0)] #корды
foodXY = ((random.randint(0, W//100))*100, (random.randint(0, H//100))*100)
shagX = 0
shagY = 0
steni = [] #делаем список стен
nx = 0
for qw in range(W//100//2):
steni.append((nx, H//100//2*100))
nx += 100
ny = H//100//3*100
for qe in range(H//100//3):
steni.append(((W-(W//5))//100*100, ny))
ny += 100
#Текст
font = pyg.font.Font(None, 100)#Шрифты
failWINfont = pyg.font.Font(None, 200)
failStenafont = pyg.font.Font(None, 180)
new_rec_font = pyg.font.Font(None, 200)
apple_spawn = font.render("Яблоко спавн", False, (255, 255, 255)) #Текста
gde_yabloko = font.render("Яблоко", False, (255, 180, 180))
fail = failWINfont.render("Поражение!!", False, (255, 255, 255))
failStena = failStenafont.render("!Попадание в стену!", True, (255, 0, 0))
WIN = failWINfont.render("!!!!Победа!!!!", False, (255, 255, 255))
new_record = new_rec_font.render("!!Новый рекорд!!", True, (255, 255, 150))
count = 0 #счëт
ckokaREC = 0 #рекорд
ckokaREC2 = 0
with open('recordZMEYA.txt', 'r') as doc:
ckokaREC = int(doc.read())
ckokaREC2 += ckokaREC
c_n_r = False #отображать надпись "Рекорд побит"?(новый рекорд)?
apple_v_stene = False
apple_v_zmee = False
run = True
while run:
for event in pyg.event.get():
if event.type == pyg.QUIT:
run = False #Управление
if event.type == pyg.FINGERDOWN:
if (200<=event.x*W<=400)and(H-600<=event.y*H<=H-400): #ВВерх
if shagY == 0:
shagY -= 100
shagX = 0
if (400<=event.x*W<=600)and(H-400<=event.y*H<=H-200): #Вправо
if shagX == 0:
shagX += 100
shagY = 0
if (200<=event.x*W<=400)and(H-200<=event.y*H<=H): #Вниз
if shagY == 0:
shagY += 100
shagX = 0
if (0<=event.x*W<=200)and(H-400<=event.y*H<=H-200)and shagX == 0:
shagX -= 100 #Влево
shagY = 0
if (200<=event.x*W<=400)and(H-400<=event.y*H<=H-200): #Стоп
shagX, shagY = 0, 0
if (W-530<=event.x*W<=W)and(0<=event.y*H<=H+200):
foodXY = ((random.randint(0, W//100))*100, (random.randint(0, H//100))*100) #Спавн яблоко в рандом месте
#Движение
new_golova = (zmeya[0][0]+shagX, zmeya[0][1]+shagY)
zmeya.insert(0, new_golova)
if new_golova == foodXY:
foodXY = ((random.randint(0, W//100))*100, (random.randint(0, H//100))*100)
count += 1
if count > ckokaREC2:
ckokaREC2 += 1
c_n_r = True
else:
zmeya.pop()
#Текст победы и поражения
#Или когда просрали/победили
win2 = failWINfont.render(f"Счëт: {count} очков!!", False, (255, 255, 255))
if (zmeya[0][0]>W or zmeya[0][0] < 0)or(zmeya[0][1]>H or zmeya[0][1] <0):
screen.blit(fail, (W//2-430, H//2-250))
screen.blit(win2, (W//2-500, H//2-100))
pyg.display.update()
pyg.time.delay(1500)
run = False
if count == (W//100)*(H//100):
screen.blit(WIN, (W//2-500, H//2-250))
screen.blit(win2, (W//2-500, H//2-100))
pyg.display.update()
pyg.time.delay(1500)
run = False
#Чтоб яблоко не в змее было
#И не в стенах
for x, y in zmeya: # В змее?
if x == foodXY[0] and y == foodXY[1]:
apple_v_zmee = True
while apple_v_zmee:
for x, y in zmeya: #Где, перегенерим!
if x == foodXY[0] and y == foodXY[1]:
foodXY = ((random.randint(0, W//100))*100, (random.randint(0, H//100))*100)
else: #Не в змее
apple_v_zmee = False
for xStena, yStena in steni: #В стене?
if xStena==foodXY[0] and yStena==foodXY[1]:
apple_v_stene = True
while apple_v_stene: #Где, ща перегенерю!
for xStena, yStena in steni:
if xStena==foodXY[0] and yStena==foodXY[1]:
foodXY = ((random.randint(0, W//100))*100, (random.randint(0, H//100))*100)
else:
apple_v_stene = False
#Проверка на попадание в стену
for xStena, yStena in steni:
if (zmeya[0][0] == xStena)and(zmeya[0][1] == yStena):
screen.blit(fail, (W//2-430, H//2-250))
screen.blit(win2, (W//2-500, H//2-100))
screen.blit(failStena, (W//2-620, H//2-370))
pyg.display.update()
pyg.time.delay(2500)
run = False
screen.fill((0, 200, 0)) # РИСУЕМ
pyg.draw.rect(screen, (100, 100, 255), (W-530, 0, 530, 200))#яблоко спавн-тык
pyg.draw.rect(screen, (220, 180, 0), (200,
H-800, 200, 200)) #4 Жëлтых кнопки
pyg.draw.rect(screen, (220, 180, 0), (400, H-600, 200, 200))
pyg.draw.rect(screen, (220, 180, 0), (200, H-400, 200, 200))
pyg.draw.rect(screen, (220, 180, 0), (0, H-600, 200, 200))
pyg.draw.rect(screen, (255, 0, 0), (foodXY[0], foodXY[1], 100, 100)) #еда
for x, y in zmeya: #змея
pyg.draw.rect(screen, (0, 0, 255), (x, y, 100, 100))
for xStena, yStena in steni: #стены
pyg.draw.rect(screen, (0, 70, 176), (xStena, yStena, 100, 100))
chet = font.render(f"Счëт: {count} яблок", False, (255, 255, 255))#динамический рендер(текст коьорый меняется с кадром(-ми))
record = font.render(f"Рекорд: {ckokaREC2} очков.", False, (255, 255, 0))
screen.blit(chet, (50, 20))
screen.blit(apple_spawn, (W-500, 60))
screen.blit(gde_yabloko, (foodXY[0]-80, foodXY[1]+15))
screen.blit(record, (50, 100))
if c_n_r: # Надпись, типа "рекорд побиь, скока: ...."
screen.blit(new_record, (W//23, H//4))
new_record_ckoka = new_rec_font.render(f'!!{count} ОЧКА!!', True, (255, 255, 150))
screen.blit(new_record_ckoka, (W//12,H//6))
pyg.display.update()
speed = 6 + count // 5 # каждые 5 яблок — +1 к скорости
fps.tick(speed)
#обнова рекорда
if ckokaREC2 > ckokaREC:
with open('recordZMEYA.txt', 'r+') as RECold:
line = RECold.read()
RECnew = line.replace(str(ckokaREC), str(ckokaREC2))
RECold.seek(0)
RECold.write(RECnew)
RECold.truncate()