Python小游戏(涂鸦射击)

本文介绍了一个使用Pygame开发的Python小游戏——涂鸦射击。玩家控制小人移动、跳跃、射击,目标是消灭敌方并躲避陷阱得分。游戏设有生命值和积分系统,撞到敌人或陷阱会导致游戏结束。文章涵盖了项目规划、Pygame安装、游戏效果展示以及游戏类的设计和方法实现。
摘要由CSDN通过智能技术生成

项目规划

首次尝试,使用Pygame,创建一个能够根据用户输入左右移动上下跳跃和射击的小人并且能够消灭敌方小人,躲避陷阱获取积分。
在游戏《涂鸦射击》中,玩家控制着一个出现在屏幕左下角的小人。玩家使用方向键对小人进行移动跳跃操作,使用鼠标左键进行设计。游戏开始时,敌方从屏幕右边陆续出现,陷阱也随着玩家的前进而逐渐出现。玩家的任务是消灭敌方小人,并且躲避沿路的陷阱获取积分,积分达成目标后通关。玩家每撞到敌方小人一次损失一次生命,触碰到陷阱则直接Game over。玩家损失五次生命后游戏结束。

安装Pygame

本次尝试使用的是在Microsoft windows 10系统下开发。关于Pygame包的安装略过

游戏效果展示

开始界面
游戏通关界面
游戏进行时

开始游戏项目

设置可能用到的全局变量和导入需要的模块

import pygame
import pygame.locals as locals
import random
import sys
pygame.font.init()
runningTime =0

score =0
life_img =[]
myFont = pygame.font.Font("./resource/shaoer.ttf",40)

surface = None
SURFACE_WIDTH =1265
SURFACE_HEIGHT=640
clock=None
FPS= 50
enemies =[]
bosss = []
boss_time = random.randint(1,6)*100
enemy_time = random.randint(1,6)*25
player_bullets = []
barriers = []
barriers1 = []
stab_time = random.randint(1, 6) * 25
hole_time = random.randint(1,6)*25

game_count = 0
is_game_over = False
over_img = pygame.image.load("./resource/gameover_m.png")

类声明

父类,公用方法聚集

class GameObject(object):
    def __init__(self):
        self.img = None
        self.width = None
        self.height = None
        self.x = None
        self.y = None
        self.is_alive = True

    def set_img(self, img_path):
        self.img = pygame.image.load(img_path)
        self.width = self.img.get_width()
        self.height = self.img.get_height()

    def update(self):
        pass

    def display(self):
        #pygame.draw.
        surface.blit(self.img,
                     (self.x - self.width / 2, self.y - self.height / 2))
    def isCrash(self, other):
        if self.x - self.width / 2 < other.x + 55 \
                and self.x + self.width / 2 > other.x - 55 \
                and self.y - self.height /3  < other.y + other.height/3 \
                and self.y + self.height  /3 > other.y - other.height/3:
            return True
        return False

背景类

class Background():
    def __init__(self):
        self.img = pygame.image.load("./resource/backgroundfinal.png")
        self.x1 = 0
        self.x2 = SURFACE_WIDTH
        self.speed = 8
    def update(self):
        self.x1 -= self.speed
        self.x2 -= self.speed
        if self.x1 <= -SURFACE_WIDTH:
            self.x1 = SURFACE_WIDTH
        if self.x2 <= -SURFACE_WIDTH:
            self.x2 = SURFACE_WIDTH
    def display(self):
        surface.blit(self.img, (self.x1, 0))
        surface.blit(self.img, (self.x2, 0))

玩家类创建了玩家的图像,规定了玩家移动,射击。一些方法继承自父类

class Player(GameObject):
    def __init__(self):
        super().__init__()
        super().set_img("./resource/playerfinal5.png")
        self.w = self.img.get_width() / 8
        self.h = self.img.get_height()

        #self.is_alive = True
        self.currentFrame = 0
        self.x = self.width / 4  # 初始位置
        self.y = SURFACE_HEIGHT - self.height*1.4   #初始位置

        self.life = 100      #生命值(待用)
        self.move_x = 0        #前进或者后退的初始距离
        self.runforward = False
        self.runback = False      #控制前进和后退

        self.needfire = False
        #self.state = 0     #0代表跑步状态,1代表跳跃状态
        self.G = 1     #重力加速度
        #self.life_frame = pygame.image.load("./resource/life_frame.png")
        self.vy = -20   #初始起跳速度
        #self.START_V_Y = -10
        self.needjump = False

    #控制开火
    def fire(self):
        self.needfire = True
        #b = Bullet(self.x+self.width/8, (SURFACE_HEIGHT-self.y)/4.2+self.y, 16, 0)
        #b.set_img("./resource/bullet_1.png")

        #b.damage = random.randint(3, 10)
        #player_bullets.append(b)
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值