【pygame游戏开发】这几个经典游戏,小红书Python面试题目

pygame.time.set_timer(change_hole_event, 800)

地鼠

mole = Mole(cfg.MOLE_IMAGEPATHS, hole_pos)

锤子

hammer = Hammer(cfg.HAMMER_IMAGEPATHS, (500, 250))

时钟

clock = pygame.time.Clock()

分数

your_score = 0

flag = False

初始时间

init_time = pygame.time.get_ticks()

游戏主循环

while True:

–游戏时间为60s

time_remain = round((61000 - (pygame.time.get_ticks() - init_time)) / 1000.)

–游戏时间减少, 地鼠变位置速度变快

if time_remain == 40 and not flag:

hole_pos = random.choice(cfg.HOLE_POSITIONS)

mole.reset()

mole.setPosition(hole_pos)

pygame.time.set_timer(change_hole_event, 650)

flag = True

elif time_remain == 20 and flag:

hole_pos = random.choice(cfg.HOLE_POSITIONS)

mole.reset()

mole.setPosition(hole_pos)

pygame.time.set_timer(change_hole_event, 500)

flag = False

–倒计时音效

if time_remain == 10:

audios[‘count_down’].play()

–游戏结束

if time_remain < 0: break

count_down_text = font.render('Time: '+str(time_remain), True, cfg.WHITE)

–按键检测

for event in pygame.event.get():

if event.type == pygame.QUIT:

pygame.quit()

sys.exit()

elif event.type == pygame.MOUSEMOTION:

hammer.setPosition(pygame.mouse.get_pos())

elif event.type == pygame.MOUSEBUTTONDOWN:

if event.button == 1:

hammer.setHammering()

elif event.type == change_hole_event:

hole_pos = random.choice(cfg.HOLE_POSITIONS)

mole.reset()

mole.setPosition(hole_pos)

–碰撞检测

if hammer.is_hammering and not mole.is_hammer:

is_hammer = pygame.sprite.collide_mask(hammer, mole)

if is_hammer:

audios[‘hammering’].play()

mole.setBeHammered()

your_score += 10

–分数

your_score_text = font.render('Score: '+str(your_score), True, cfg.BROWN)

–绑定必要的游戏元素到屏幕(注意顺序)

screen.blit(bg_img, (0, 0))

screen.blit(count_down_text, (875, 8))

screen.blit(your_score_text, (800, 430))

mole.draw(screen)

hammer.draw(screen)

–更新

pygame.display.flip()

clock.tick(60)

读取最佳分数(try块避免第一次游戏无.rec文件)

try:

best_score = int(open(cfg.RECORD_PATH).read())

except:

best_score = 0

若当前分数大于最佳分数则更新最佳分数

if your_score > best_score:

f = open(cfg.RECORD_PATH, ‘w’)

f.write(str(your_score))

f.close()

结束界面

score_info = {‘your_score’: your_score, ‘best_score’: best_score}

is_restart = endInterface(screen, cfg.GAME_END_IMAGEPATH, cfg.GAME_AGAIN_IMAGEPATHS, score_info, cfg.FONT_PATH, [cfg.WHITE, cfg.RED], cfg.SCREENSIZE)

return is_restart

if name == ‘main’:

while True:

is_restart = main()

if not is_restart:

break

3、效果展示

在这里插入图片描述

三、滑雪游戏

================================================================

1、代码部分

导入模块

import sys

import cfg

import pygame

import random

滑雪者类

class SkierClass(pygame.sprite.Sprite):

def init(self):

pygame.sprite.Sprite.init(self)

滑雪者的朝向(-2到2)

self.direction = 0

self.imagepaths = cfg.SKIER_IMAGE_PATHS[:-1]

self.image = pygame.image.load(self.imagepaths[self.direction])

self.rect = self.image.get_rect()

self.rect.center = [320, 100]

self.speed = [self.direction, 6-abs(self.direction)*2]

‘’‘改变滑雪者的朝向. 负数为向左,正数为向右,0为向前’‘’

def turn(self, num):

self.direction += num

self.direction = max(-2, self.direction)

self.direction = min(2, self.direction)

center = self.rect.center

self.image = pygame.image.load(self.imagepaths[self.direction])

self.rect = self.image.get_rect()

self.rect.center = center

self.speed = [self.direction, 6-abs(self.direction)*2]

return self.speed

‘’‘移动滑雪者’‘’

def move(self):

self.rect.centerx += self.speed[0]

self.rect.centerx = max(20, self.rect.centerx)

self.rect.centerx = min(620, self.rect.centerx)

‘’‘设置为摔倒状态’‘’

def setFall(self):

self.image = pygame.image.load(cfg.SKIER_IMAGE_PATHS[-1])

‘’‘设置为站立状态’‘’

def setForward(self):

self.direction = 0

self.image = pygame.image.load(self.imagepaths[self.direction])

障碍物类

class ObstacleClass(pygame.sprite.Sprite):

def init(self, img_path, location, attribute):

pygame.sprite.Sprite.init(self)

self.img_path = img_path

self.image = pygame.image.load(self.img_path)

self.location = location

self.rect = self.image.get_rect()

self.rect.center = self.location

self.attribute = attribute

self.passed = False

‘’‘移动’‘’

def move(self, num):

self.rect.centery = self.location[1] - num

创建障碍物

def createObstacles(s, e, num=10):

obstacles = pygame.sprite.Group()

locations = []

for i in range(num):

row = random.randint(s, e)

col = random.randint(0, 9)

location = [col64+20, row64+20]

if location not in locations:

locations.append(location)

attribute = random.choice(list(cfg.OBSTACLE_PATHS.keys()))

img_path = cfg.OBSTACLE_PATHS[attribute]

obstacle = ObstacleClass(img_path, location, attribute)

obstacles.add(obstacle)

return obstacles

合并障碍物

def AddObstacles(obstacles0, obstacles1):

obstacles = pygame.sprite.Group()

for obstacle in obstacles0:

obstacles.add(obstacle)

for obstacle in obstacles1:

obstacles.add(obstacle)

return obstacles

显示游戏开始界面

def ShowStartInterface(screen, screensize):

screen.fill((255, 255, 255))

tfont = pygame.font.Font(cfg.FONTPATH, screensize[0]//5)

cfont = pygame.font.Font(cfg.FONTPATH, screensize[0]//20)

title = tfont.render(u’滑雪游戏’, True, (255, 0, 0))

content = cfont.render(u’按任意键开始游戏’, True, (0, 0, 255))

trect = title.get_rect()

trect.midtop = (screensize[0]/2, screensize[1]/5)

crect = content.get_rect()

crect.midtop = (screensize[0]/2, screensize[1]/2)

screen.blit(title, trect)

screen.blit(content, crect)

while True:

for event in pygame.event.get():

if event.type == pygame.QUIT:

pygame.quit()

sys.exit()

elif event.type == pygame.KEYDOWN:

return

pygame.display.update()

显示分数

def showScore(screen, score, pos=(10, 10)):

font = pygame.font.Font(cfg.FONTPATH, 30)

score_text = font.render(“Score: %s” % score, True, (0, 0, 0))

screen.blit(score_text, pos)

更新当前帧的游戏画面

def updateFrame(screen, obstacles, skier, score):

screen.fill((255, 255, 255))

obstacles.draw(screen)

screen.blit(skier.image, skier.rect)

showScore(screen, score)

pygame.display.update()

主程序

def main():

游戏初始化

pygame.init()

pygame.mixer.init()

pygame.mixer.music.load(cfg.BGMPATH)

pygame.mixer.music.set_volume(0.4)

pygame.mixer.music.play(-1)

设置屏幕

screen = pygame.display.set_mode(cfg.SCREENSIZE)

pygame.display.set_caption(‘滑雪游戏 —— 九歌’)

游戏开始界面

ShowStartInterface(screen, cfg.SCREENSIZE)

实例化游戏精灵

–滑雪者

skier = SkierClass()

–创建障碍物

obstacles0 = createObstacles(20, 29)

obstacles1 = createObstacles(10, 19)

obstaclesflag = 0

obstacles = AddObstacles(obstacles0, obstacles1)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值