欢迎关注我的公众号【次烦】
(这个程序注释很少,不要问为什么,问就是忘了写,当我想起来后又懒得写了)
import pygame import sys from pygame.sprite import Group from snake import Snake, Body from fruit import Fruit import game_functions as gf from time import sleep def run_game():pygame.init()screen = pygame.display.set_mode((700,400))pygame.display.set_caption("贪吃蛇")bg_color = (230,230,230)snake = Snake(screen)bodys = Group()body = Body(screen)body.create(snake)bodys.add(body)fruits = Group()gf.create_fruit(screen,fruits,snake)while True:gf.check_events(snake)gf.update_screen(screen,snake, fruits, body,bodys)sleep(0.01/snake.speed_factor) run_game()
123456789101112131415161718192021222324252627282930313233343536import pygame from pygame.sprite import Sprite class Snake(Sprite):"""蛇头"""def __init__(self, screen):#屏幕中央创建一个蛇头super(Snake, self).__init__()self.screen = screen#中央创建self.rect = pygame.Rect(0,0,10,10)self.rect.centerx = screen.get_rect().centerxself.rect.centery = screen.get_rect().centeryself.color = (255,44,0)#表示移动方向,1234上右下左self.change = 2self.x = float(self.rect.centerx)self.y = float(self.rect.centery)self.foot = []self.length = 1self.score = 0# self.image = pygame.image.load('imagehead.png')self.sleep = 0self.speed_factor = 1# def blitme(self):#"""在指定的位置绘制head"""#此方法根据self.rect指定的位置将图像绘制到屏幕上#self.screen.blit(self.image,self.rect)def draw_snake(self):pygame.draw.rect(self.screen,self.color,self.rect) class Body(Sprite):"""docstring for Body"""def __init__(self, screen):super(Body, self).__init__()self.screen = screenself.rect = pygame.Rect(0,0,10,10)self.color = (255,88,44)self.change = 2#图像# self.image = pygame.image.load('imagebody.png')# def blitme(self):#"""在指定的位置绘制body"""#此方法根据self.rect指定的位置将图像绘制到屏幕上#self.screen.blit(self.image,self.rect)def create(self,snake):if snake.change == 1:self.rect.top = snake.rect.bottomself.rect.centerx = snake.rect.centerxself.change = 1elif snake.change == 2:self.rect.right = snake.rect.leftself.rect.centery = snake.rect.centeryself.change = 2elif snake.change == 3:self.rect.bottom = snake.rect.topself.rect.centerx = snake.rect.centerxself.change = 3elif snake.change == 4:self.rect.left = snake.rect.rightself.rect.centery = snake.rect.centeryself.change = 4# self.rect.right = snake.rect.left# self.rect.centery = snake.rect.centeryself.x = float(self.rect.centerx)self.y = float(self.rect.centery)def draw_body(self):pygame.draw.rect(self.screen,self.color,self.rect)pass
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788import pygame from pygame.sprite import Sprite import random class Fruit(Sprite):"""果实"""def __init__(self, screen):super(Fruit, self).__init__()self.screen = screenself.color = (44,255,12)self.rect = pygame.Rect(0,0,10,10)def draw_fruit(self):pygame.draw.rect(self.screen,self.color,self.rect)pass
1234567891011121314151617import sys import pygame import random from pygame.sprite import Group from snake import Snake, Body from fruit import Fruit from time import sleep def update_screen(screen,snake,fruits,body,bodys):screen.fill((230,230,230))snake.draw_snake()#snake.blitme()update_fruit(screen,fruits, snake, bodys)for body in bodys:snake_go(body)body.draw_body()# body.blitme()check_body(bodys, snake)for fruit in fruits:fruit.draw_fruit()head_body(snake, bodys)check_bdry(snake, bodys)check_sleep(snake)pygame.display.flip()pass def check_events(snake):for event in pygame.event.get():if event.type == pygame.QUIT:sys.exit()elif event.type == pygame.KEYDOWN:# if snake.change == 1:#snake.y = snake.y-snake.y%10# elif snake.change == 2:#snake.x = 10-snake.x%10+snake.x# elif snake.change == 3:#snake.y = 10-snake.y%10+snake.y# elif snake.change == 4:#snake.x = snake.x-snake.x%10if event.key == pygame.K_UP and snake.change != 3:snake.change = 1elif event.key == pygame.K_RIGHT and snake.change != 4:snake.change = 2elif event.key == pygame.K_DOWN and snake.change != 1:snake.change = 3elif event.key == pygame.K_LEFT and snake.change != 2:snake.change = 4elif event.key == pygame.K_q:sys.exit()elif event.key == pygame.K_p:snake.sleep = 1snake.foot.append((snake.rect.centerx,snake.rect.centery,snake.change))snake_go(snake) def snake_go(snake):if snake.change == 1:snake.y -= 1#0snake.rect.centery = snake.yelif snake.change == 2:snake.x += 1#0snake.rect.centerx = snake.xelif snake.change == 3:snake.y += 1#0snake.rect.centery = snake.yelif snake.change == 4:snake.x -= 1#0snake.rect.centerx = snake.xpass def create_fruit(screen,fruits,snake):new_fruit = Fruit(screen)if snake.score > 170:new_fruit.color = (255,0,0)snake.speed_factor = 15elif snake.score > 140:new_fruit.color = (255,100,0)snake.speed_factor = 10elif snake.score > 110:new_fruit.color = (255,200,0)snake.speed_factor = 8elif snake.score > 90:new_fruit.color = (255,255,0)snake.speed_factor = 5elif snake.score > 60:new_fruit.color = (200,255,0)snake.speed_factor = 4elif snake.score > 30:new_fruit.color = (100,255,0)snake.speed_factor = 2new_fruit.rect.centerx = random.randint(5,695)#//10*10new_fruit.rect.centery = random.randint(5,395)#//10*10fruits.add(new_fruit) def update_fruit(screen,fruits,snake,bodys):boom = pygame.sprite.spritecollideany(snake,fruits)if boom:fruits.empty()snake.score += 1create_fruit(screen,fruits,snake)num = 0for bd in bodys:num += 1# print("you got",snake.length)if num == snake.length :body = Body(screen)body.create(bd)snake.length += 1bodys.add(body)# print(snake.length)break def check_body(bodys,snake):num = 0for bd in bodys:num += 1for i in snake.foot:if (bd.rect.centerx == i[0]) and (bd.rect.centery == i[1]):bd.change = i[2]if num == snake.length :if snake.foot:snake.foot.pop(0)pass def head_body(snake,bodys):check_bodys = Group()num = 0for body in bodys:num += 1if num == 1:continuecheck_bodys.add(body)boom = pygame.sprite.spritecollideany(snake,check_bodys)if boom:print("Game Over!")print("Your Score:",snake.score)sys.exit() def check_bdry(snake,bodys):if snake.x > 700:snake.x = 0print(snake.x)elif snake.x < 0:snake.x = 700snake.rect.centerx = snake.xif snake.y > 400:snake.y = 0elif snake.y < 0:snake.y = 400snake.rect.centery = snake.yfor body in bodys:if body.x > 700:body.x = 0elif body.x < 0:body.x = 700body.rect.centerx = body.xif body.y > 400:body.y = 0elif body.y < 0:body.y = 400body.rect.centery = body.y def check_sleep(snake):while snake.sleep == 1:sleep(1)for event in pygame.event.get():if event.key == pygame.K_p:snake.sleep = 0break
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183有个小问题,就是如果蛇头刚刚到边界正好转向,蛇身就会与蛇头分离…
相关知识
pygame 写个简易贪吃蛇——pygame初次尝试
使用python pygame库写基础“贪吃蛇游戏”
用Python和Pygame写游戏
python+pygame 贪吃蛇游戏
Python 使用 Pygame 库实现 Tom 猫游戏:初始化游戏、创建 Tom 猫、添加互动功能
python 250行代码开发一个贪吃蛇
结队
Python 100行写个贪吃蛇
【py】python
python写的贪吃蛇改进版
网址: pygame 写个简易贪吃蛇——pygame初次尝试 https://m.mcbbbk.com/newsview710747.html
上一篇: 印象“三伯公”蛇 |
下一篇: 女人长痘离不开痘痘的护理三步骤 |