python 贪吃蛇

在这里插入图片描述

main.py

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import pygame  # 导入pygame模块

from  setting import Setting
import  startmain as sm
from  pygame.sprite import  Group



def InitGame():
    print("InitGame")
    pygame.init() #初始化pygame
    ai_settings = Setting()#创建类实例
    screen = pygame.display.set_mode((ai_settings.screen_width,ai_settings.screen_height))#元组填参
    pygame.display.set_caption("start")
    start = Group()
    moon = Group()
    sm.create_start(ai_settings, screen, start)
    sm.create_moon(ai_settings, screen, moon)



    while True:
        sm.check_events(ai_settings,screen,start,moon)
        sm.update_start(ai_settings,screen,start)
        sm.update_moon(ai_settings, screen, moon)
        sm.hit_fun(ai_settings, screen, start, moon)
        sm.update_screen(ai_settings,screen,start,moon)







InitGame()

seeting.py

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import sys
import pygame  # 导入pygame模块
class Setting():
    # 存储该项目所有设置的类

    def __init__(self):
        # 初始化游戏的设置
        # 屏幕设置
        self.screen_width = 1024
        self.screen_height = 850
        self.bg_color = (123 ,198 ,241)

        self.start_width = 10
        self.start_height = 10
        self.start_num = 5
        self.start_color = 178, 34, 34
        self.start_speed_min = -20
        self.start_speed_max = 20

        self.moon_speed = 1

startmain.py

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import sys
import pygame  # 导入pygame模块
from start import Start
from moon import Moon
from time import sleep
import random





def update_start(ai_settings, screen,start):
    #所有星星消失后 重新绘制星星
    if len(start) == 0:
        create_start(ai_settings, screen, start)
    # 更新星星位置
    # start.update()
    # sleep(1)



def create_start(ai_settings, screen,start):
    for a in range(ai_settings.start_num):
        new_start = Start(ai_settings, screen)
        new_start.rect.x = random.randint(0, ai_settings.screen_width)
        new_start.rect.y = random.randint(0, ai_settings.screen_height)
        start.add(new_start)

def check_keydown_events(event,ai_settings,screen,start,moon):
    if event.key == pygame.K_RIGHT:

        for m in moon.copy():
            m.moving_right = True
    elif event.key == pygame.K_LEFT:
        for m in moon.copy():
            m.moving_left = True

    elif event.key == pygame.K_UP:
        for m in moon.copy():
            m.moving_up = True

    elif event.key == pygame.K_DOWN:
        for m in moon.copy():
            m.moving_down = True


def check_keyup_events(event, ai_settings, screen, start, moon):
    if event.key == pygame.K_RIGHT:

        for m in moon.copy():
            m.moving_right = False
    elif event.key == pygame.K_LEFT:
        for m in moon.copy():
            m.moving_left = False

    elif event.key == pygame.K_UP:
        for m in moon.copy():
            m.moving_up = False

    elif event.key == pygame.K_DOWN:
        for m in moon.copy():
            m.moving_down = False

def check_events(ai_settings,screen,start,moon):
    for event in pygame.event.get():
        if event.type == pygame.QUIT:  # 玩家单击游戏窗口关闭按钮时检测到
            sys.exit()
        elif event.type == pygame.KEYDOWN:#按下按键
            if event.key == pygame.K_1:
                # 处理左键按下事件
                print("1 key pressed")
                sys.exit()
            else:
                # print(" key pressed")
                check_keydown_events(event,ai_settings,screen,start,moon)

        elif event.type == pygame.KEYUP:#释放按键
            check_keyup_events(event, ai_settings, screen, start, moon)





def create_moon(ai_settings, screen,moon):
    m = Moon(ai_settings,screen)
    m.rect.x = random.randint(0, ai_settings.screen_width)
    m.rect.y = random.randint(0, ai_settings.screen_height)
    moon.add(m)
def update_moon(ai_settings, screen,moon1):
    moon1.update()


def hit_fun(ai_settings, screen,start,moon):
    # 两个组相撞 是否消失
    collisions = pygame.sprite.groupcollide(start, moon, True, False)

def update_screen(ai_settings, screen,start,moon):
    screen.fill(ai_settings.bg_color)

    for start in start.sprites():
        start.start_draw()#自己绘制图形的绘制方式

    moon.draw(screen)#图片的绘制方式

    pygame.display.flip()



start.py

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import sys
import pygame  # 导入pygame模块
from start import Start
from moon import Moon
from time import sleep
import random





def update_start(ai_settings, screen,start):
    #所有星星消失后 重新绘制星星
    if len(start) == 0:
        create_start(ai_settings, screen, start)
    # 更新星星位置
    # start.update()
    # sleep(1)



def create_start(ai_settings, screen,start):
    for a in range(ai_settings.start_num):
        new_start = Start(ai_settings, screen)
        new_start.rect.x = random.randint(0, ai_settings.screen_width)
        new_start.rect.y = random.randint(0, ai_settings.screen_height)
        start.add(new_start)

def check_keydown_events(event,ai_settings,screen,start,moon):
    if event.key == pygame.K_RIGHT:

        for m in moon.copy():
            m.moving_right = True
    elif event.key == pygame.K_LEFT:
        for m in moon.copy():
            m.moving_left = True

    elif event.key == pygame.K_UP:
        for m in moon.copy():
            m.moving_up = True

    elif event.key == pygame.K_DOWN:
        for m in moon.copy():
            m.moving_down = True


def check_keyup_events(event, ai_settings, screen, start, moon):
    if event.key == pygame.K_RIGHT:

        for m in moon.copy():
            m.moving_right = False
    elif event.key == pygame.K_LEFT:
        for m in moon.copy():
            m.moving_left = False

    elif event.key == pygame.K_UP:
        for m in moon.copy():
            m.moving_up = False

    elif event.key == pygame.K_DOWN:
        for m in moon.copy():
            m.moving_down = False

def check_events(ai_settings,screen,start,moon):
    for event in pygame.event.get():
        if event.type == pygame.QUIT:  # 玩家单击游戏窗口关闭按钮时检测到
            sys.exit()
        elif event.type == pygame.KEYDOWN:#按下按键
            if event.key == pygame.K_1:
                # 处理左键按下事件
                print("1 key pressed")
                sys.exit()
            else:
                # print(" key pressed")
                check_keydown_events(event,ai_settings,screen,start,moon)

        elif event.type == pygame.KEYUP:#释放按键
            check_keyup_events(event, ai_settings, screen, start, moon)





def create_moon(ai_settings, screen,moon):
    m = Moon(ai_settings,screen)
    m.rect.x = random.randint(0, ai_settings.screen_width)
    m.rect.y = random.randint(0, ai_settings.screen_height)
    moon.add(m)
def update_moon(ai_settings, screen,moon1):
    moon1.update()


def hit_fun(ai_settings, screen,start,moon):
    # 两个组相撞 是否消失
    collisions = pygame.sprite.groupcollide(start, moon, True, False)

def update_screen(ai_settings, screen,start,moon):
    screen.fill(ai_settings.bg_color)

    for start in start.sprites():
        start.start_draw()#自己绘制图形的绘制方式

    moon.draw(screen)#图片的绘制方式

    pygame.display.flip()



moon.py

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import sys
import pygame  # 导入pygame模块
from pygame.sprite import Sprite
class Moon(Sprite):

    def __init__(self, ai_settings, screen):
        super(Moon, self).__init__()
        self.screen = screen
        self.ai_settings = ai_settings

        self.image = pygame.image.load('./img/moon2.png')
        self.rect = self.image.get_rect()

        self.screen_rect = screen.get_rect()

        # 放在屏幕底部中央
        self.rect.centerx = self.screen_rect.centerx
        self.rect.centery = self.screen_rect.centery
        self.centerx = float(self.rect.centerx)
        self.centery = float(self.rect.centery)

        # 移动标志
        self.moving_right = False
        self.moving_left = False
        self.moving_up = False
        self.moving_down = False

    def update(self):
        if self.moving_right and self.rect.right < self.screen_rect.right:  # 标志为True时向右移动
            self.centerx += self.ai_settings.moon_speed
        if self.moving_left and self.rect.left > 0:  # 标志为True时向左移动
            self.centerx -= self.ai_settings.moon_speed
        if self.moving_up and self.rect.top > 0:  # 标志为True时向右移动
            self.centery -= self.ai_settings.moon_speed
        if self.moving_down and self.rect.bottom <self.screen_rect.bottom:  # 标志为True时向左移动
            self.centery += self.ai_settings.moon_speed

        # 根据self.center更新rect对象
        self.rect.centerx = self.centerx
        self.rect.centery = self.centery




图片

在这里插入图片描述
这里自取更好
https://www.iconfont.cn/

  • 8
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

li星野

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值