基于pygame的游戏基础

浪尽此生 提交于 2020-03-19 21:53:01

3 月,跳不动了?>>>

Pygame简介

Pygame是被设计用来写游戏的python模块集合,Pygame是在优秀的SDL库之上开发的功能性包。使用python可以导入pygame来开发具有全部特性的游戏和多媒体软件,Pygame是极度轻便的并且可以运行在几乎所有的平台和操作系统上。


1.创建一个Pygame窗口

参考代码

import pygame
from pygame.locals import *
import sys
def hello_world():
    pygame.init()
    pygame.display.set_mode((680,480))
    pygame.display.set_caption('Hello World!')
    while True:
        for event in pygame.event.get():
            if event.type == QUIT:
                pygame.quit()
                sys.exit()
        pygame.display.update()
if __name__ == '__main__':
    hello_world()

效果截图


2.创建一个能自由移动的角色

参考代码

import pygame,sys
from pygame.locals import *
def play_guai():
    pygame.init()
    window_size = (width,height)=(640,480)
    speed = [1,1]
    color_white = (255,255,255)
    screen = pygame.display.set_mode(window_size)
    pygame.display.set_caption("怪")
    girl_image = pygame.image.load('guai.png')
    girl_rect = girl_image.get_rect()
    while True:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                sys.exit()
        girl_rect = girl_rect.move(speed)
        if(girl_rect.left<0) or (girl_rect.right>width):
            speed[0] = -speed[0]
        if(girl_rect.top<0) or (girl_rect.bottom>height):
            speed[1] = -speed[1]
        screen.fill(color_white)
        screen.blit(girl_image,girl_rect)
        pygame.display.update()
if __name__ =='__main__':
    play_guai()

效果截图


3.创建一个用键盘操控的角色

参考代码

import os,sys,pygame
from pygame.locals import *
def control_guai(event):
    speed = [x,y] = [0,0]
    speed_offset = 10
    if event.type ==pygame.KEYDOWN:
        if event.key == pygame.K_a:
            speed[0] -= speed_offset
        if event.key == pygame.K_d:
            speed[0] = speed_offset
        if event.key == pygame.K_w:
            speed[1] -= speed_offset
        if event.key == pygame.K_s:
            speed[1] = speed_offset
    if event.type == pygame.KEYUP:
        if event.type in [pygame.K_a,pygame.K_d,pygame.K_w,pygame.K_s]:
            speed = [0,0]
    return speed
def play_guai():
    pygame.init()
    windows_size = Rect(0,0,960,587)
    speed = [1,1]
    color_whiht = (255,255,255)
    screen = pygame.display.set_mode(windows_size.size)
    pygame.display.set_caption('李白2.0')
    girl_image = pygame.image.load('guai.png')
    back_image = pygame.image.load('李白.jpg')
    girl_rect = girl_image.get_rect()
    while True:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                sys.exit()
        cur_speed = control_guai(event)
        girl_rect = girl_rect.move(cur_speed).clamp(windows_size)
        screen.blit(back_image,(0,0))
        screen.blit(girl_image,girl_rect)
        pygame.display.update()
if __name__ == '__main__':
    play_guai()

效果截图


4.创建一个精灵类测试

参考代码

import pygame
from pygame.locals import *
class MySprite(pygame.sprite.Sprite):
    def __init__(self,target):
        pygame.sprite.Sprite.__init__(self)
        self.sprite_surface=target
        self.image=None
        self.master_image=None
        self.rect=None
        self.topleft=0,0
        self.frame=0
        self.old_fram=-1
        self.fram_width=1
        self.fram_height=1
        self.first_fram=0
        self.last_fram=0
        self.columns=1
        self.last_time=0
    def load(self,filename,width,height,columns):
        self.master_image=pygame.image.load(filename).convert_alpha()
        self.fram_width=width
        self.fram_height=height
        self.rect=0,0,width,height
        self.columns=columns
        rect=self.master_image.get_rect()
        self.last_fram=(rect.width//width)*(rect.height//height)-1
    def update(self,current_time,rate=60):
        if current_time>self.last_time+rate:
            self.frame+=1
        if self.frame>self.last_fram:
            self.frame=self.first_fram
            self.last_time=current_time
        if self.frame!=self.old_fram:
            frame_x=(self.frame%self.columns)*self.fram_width
            frame_y=(self.frame//self.columns)*self.fram_height
            rect=(frame_x,frame_y,self.fram_width,self.fram_height)
            self.image=self.master_image.subsurface(rect)
            self.old_fram=self.frame

pygame.init()
screen=pygame.display.set_mode((400,300),0,32)
pygame.display.set_caption("精灵类测试")
font=pygame.font.Font(None,18)
framerate=pygame.time.Clock()
cat=MySprite(screen)
cat.load("sprite2.png",92,95,4)
group=pygame.sprite.Group()
group.add(cat)
while True:
    framerate.tick(10)
    ticks=pygame.time.get_ticks()
    for event in pygame.event.get():
        if event.type==pygame.QUIT:
            pygame.quit()
            exit()
        key=pygame.key.get_pressed()
        if key[pygame.K_ESCAPE]:
            exit()
    screen.fill((0,0,255))
    cat.update(ticks)
    screen.blit(cat.image,cat.rect)
    pygame.display.update()

效果截图


好啦,今天的基础就分享就到这啦

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!