项目规划
首次尝试,使用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)