Загрузка данных


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()