用Python编写小游戏

用Pycharm编写一款小游戏

一、概述
开发环境为:Pycharm2020版、用到了Python里面的Pygame包这个模块的相关功能、并且开发了一个较为简单的打飞机的小游戏界面,实现了游戏的可视化及不错的效果。

二、程序详细设计
通过百度下载了该游戏所需要的素材,包括自己的飞机、敌人的飞机、游戏的背景图片以及游戏中所需要的音效等。

代码展示:

import math  #引用数学模块
import random
import pygame

#初始化
pygame.init()
screen=pygame.display.set_mode((1800,900))
pygame.display.set_caption('打飞机')
icon=pygame.image.load('飞机2.png')
pygame.display.set_icon(icon)
bgImg=pygame.image.load('背景3.jpeg')

#分数
score=0
font=pygame.font.Font('freesansbold.ttf',32)

#游戏结束
is_over=False
over_font=pygame.font.Font('freesansbold.ttf',80)
def check_is_over():
    if is_over:
       text="Game Over"
       render = over_font.render(text, True,(255,0,0))
       screen.blit(render, (650, 450))



def show_score():
    text=f"Score:{score}"
    score_render=font.render(text,True,(0,255,0))
    screen.blit(score_render,(10,10))



#添加音效
pygame.mixer.music.load('bgm1.wav')
pygame.mixer.music.play(-1)
#添加射中音效
bao_sound=pygame.mixer.Sound('击中bgm1.mp3')

#飞机
playerImg=pygame.image.load('飞机2.png')
playX=300
playY=750
playStop=0

#敌人类
number_of_enemies=6
class Enemy():
    def __init__(self):
        self.img=pygame.image.load('敌人飞机.png')
        self.x=random.randint(200,900)
        self.y=random.randint(50,200)
        self.step=random.randint(1,2)

    def reset(self):
        self.x=random.randint(200,900)
        self.y=random.randint(50,200)
enemies=[]  #保存所有的敌人
for i in range(number_of_enemies):
    enemies.append(Enemy())
def distance(bx,by,ex,ey):
    a=bx-ex
    b=by-ey
    return  math.sqrt(a*a+b*b)
print(distance(1,1,4,5))   #开根号

#子弹类
class Bullet():
    def __init__(self):
        self.img=pygame.image.load('子弹4.png')
        self.x=playX+39
        self.y=playY+30
        self.step=2

    def hit(self):
        global  score
        for e in enemies:
            if(distance(self.x,self.y,e.x,e.y)<20):
                bao_sound.play()
                bullets.remove(self)
                e.reset()
                score+=1
                print(score)

bullets=[] #保存现有的子弹

#显示子弹偏移
def show_bullets():
    for b in bullets:
        screen.blit(b.img,(b.x,b.y))
        b.hit()
        b.y-=b.step
        if b.y<0:
        #如果子弹出了界面,就移除
            bullets.remove(b)

#显示敌人,并且实现敌人的移动和下沉
def show_enemy():
    global  is_over
    for e in enemies:
        screen.blit(e.img, (e.x, e.y))
        e.x+= e.step
        if (e.x > 1603 or e.x < 0):
            e.step *= -1
            e.y += 70  #飞机移动速度,需要更改
            if e.y>735:
                is_over=True
                print("游戏结束!")
                enemies.clear()



def move_player():
    global  playX
    playX += playStop
    # 防止飞机出界
    if playX > 1681:
        playX = 1681
    if playX < 0:
        playX = 0
#游戏主循环
while 1:
    screen.blit(bgImg,(0,0))
    show_score()  #显示分数
    for event in pygame.event.get():
        if event.type==pygame.QUIT:
            running=False
    #键盘控制移动
        if event.type==pygame.KEYDOWN:
            if event.key==pygame.K_RIGHT:
                playStop=0.8
            elif event.key==pygame.K_LEFT:
                playStop=-0.8
            elif event.key==pygame.K_SPACE:
                print("发射子弹...")
                # 创建一颗子弹
                bullets.append(Bullet())

        if event.type==pygame.KEYUP:
            playStop=0

    screen.blit(playerImg,(playX,playY))
    move_player()#移动玩家
    show_enemy()
    show_bullets()
    check_is_over()

    pygame.display.update()

三、运行效果图

在这里插入图片描述
在这里插入图片描述

四、总结
通过此次动手设计小游戏,体会到了很多的快乐,尤其是游戏设计完成的那一刻,以及在游戏开发过程中解决问题所带来的愉悦感。在设计的过程中,也学到了很多的知识,例如如何设计颜色以及设计游戏的背景图和音效等等,而且在设计的过程中,代码都是从头到尾做到自己操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值