您的位置:首页 > 编程语言 > Python开发

一次简单的python游戏编写

2016-05-04 14:35 856 查看
import pygame

import math

import random

from pygame.locals import *

#载入字典

pygame.init()

keys=[False,False,False,False]

playerpos=[100,100]

acc=[0,0]

pygame.display.set_caption(r'哇咔咔')

#该变量跟踪玩家的精度,本质是数字组成的列表

#记录射出的箭头数和被击中灌的数量

arrows=[]

badtimer=100

badtimer1=0

badguys=[[640,100]]

healthvalue=194

#定义一个定时器一段时间出现一只灌

width, height = 640, 480

pygame.mixer.init()

#预设画面的大小

screen=pygame.display.set_mode((width, height))

pygame.display.set_caption(r"by Mr.Drizzt")

arrow=pygame.image.load("resources/images/bullet.png")

badguyimg1=pygame.image.load("resources/images/badguy.png")

badguyimg=badguyimg1

player = pygame.image.load("resources/images/dude.png")

grass=pygame.image.load("resources/images/grass.png")

castle=pygame.image.load("resources/images/castle.png")

healthbar=pygame.image.load("resources/images/healthbar.png")

health=pygame.image.load("resources/images/health.png")

gameover=pygame.image.load("resources/images/gameover.png")

youwin=pygame.image.load("resources/images/youwin.png")

hit=pygame.mixer.Sound("resources/audio/explode.wav")

enemy=pygame.mixer.Sound("resources/audio/enemy.wav")

shoot=pygame.mixer.Sound("resources/audio/shoot.wav")

hit.set_volume(0.05)

enemy.set_volume(0.05)

shoot.set_volume(0.05)

pygame.mixer.music.load('resources/audio/moonlight.wav')

pygame.mixer.music.play(-1,0.0)

pygame.mixer.music.set_volume(0.25)

#定义图片

running=1

exitcode=0

while running:

    badtimer-=1

    screen.fill(0)

    #在给屏幕画东西之前用黑色填充

    for x in range(width/grass.get_width()+1):

        for y in range(height/grass.get_height()+1):

            screen.blit(grass,(x*100,y*100))

            #循环让草布满窗口,作为背景

    screen.blit(castle,(0,30))

    screen.blit(castle,(0,135))

    screen.blit(castle,(0,240))

    screen.blit(castle,(0,345))

    #定义兔子的城堡位置

    position=pygame.mouse.get_pos()

    #定义位置这个变量到鼠标所指的位置

    angle=math.atan2(position[1]-(playerpos[1]+32),position[0]-(playerpos[0]+26))

    playerrot=pygame.transform.rotate(player,360-angle*57.29)

    #乘以57.29是将弧度转为度数

    playerpos1=(play
4000
erpos[0]-playerrot.get_rect().width/2,playerpos[1]-playerrot.get_rect().height/2)

    screen.blit(playerrot, playerpos1)

    #设置玩家的初始位置

    for bullet in arrows:

        index=0

        velx=math.cos(bullet[0])*10

        vely=math.sin(bullet[0])*10

        #其中10为发射的箭的速度

        bullet[1]+=velx

        bullet[2]+=vely

        if bullet[1]<-64 or bullet[1]>640 or bullet[2]<-64 or bullet[2]>480:

            arrows.pop(index)

        #在箭离开屏幕后删除它们

        index+=1

        for projectile in arrows:

            arrow1=pygame.transform.rotate(arrow,360-projectile[0]*57.29)

            screen.blit(arrow1,(projectile[1],projectile[2]))

    if badtimer==0:

        badguys.append([640,random.randint(50,430)])

        badtimer=100-(badtimer1*2)

        if badtimer1>=35:

            badtimer1=35

        else:

            badtimer1+=5

    index=0

    for badguy in badguys:

        if badguy[0]<-64:

            badguys.pop(index)

        badguy[0]-=7

        #控制灌的速度

        badrect=pygame.Rect(badguyimg.get_rect())

        badrect.top=badguy[1]

        badrect.left=badguy[0]

        if badrect.left<64:

            hit.play()

            healthvalue-=random.randint(5,20)

            badguys.pop(index)

        index1=0

        for bullet in arrows:

            bullrect=pygame.Rect(arrow.get_rect())

            bullrect.left=bullet[1]

            bullrect.top=bullet[2]

            if badrect.colliderect(bullrect):

                enemy.play()

                acc[0]+=1

                badguys.pop(index)

                arrows.pop(index1)

            index1+=1

        index+=1

    for badguy in badguys:

        screen.blit(badguyimg,badguy)

    font=pygame.font.Font(None,24)

    survivedtext=font.render(str((90000-pygame.time.get_ticks())/60000)+":"+str((90000-pygame.time.get_ticks())/1000%60).zfill(2),True,(0,0,0))

    textRect=survivedtext.get_rect()

    textRect.topright=[635,5]

    screen.blit(survivedtext,textRect)

    screen.blit(healthbar,(5,5))

    for health1 in range(healthvalue):

        screen.blit(health,(health1+8,8))

    pygame.display.flip()

    #更新显示到屏幕表面

    for event in pygame.event.get():

        if event.type==pygame.QUIT:

            pygame.quit()

            exit(0)

        #检查是否使用了退出键

        if event.type==pygame.KEYDOWN:

            if event.key==K_w:

                keys[0]=True

            elif event.key==K_a:

                keys[1]=True

            elif event.key==K_s:

                keys[2]=True

            elif event.key==K_d:

                keys[3]=True

        if event.type==pygame.KEYUP:

            if event.key==pygame.K_w:

                keys[0]=False

            elif event.key==pygame.K_a:

                keys[1]=False

            elif event.key==pygame.K_s:

                keys[2]=False

            elif event.key==pygame.K_d:

                keys[3]=False

        #检查键盘的输入,按下和松开

        if event.type==pygame.MOUSEBUTTONDOWN:

            shoot.play()

            position=pygame.mouse.get_pos()

            acc[1]+=1

            arrows.append([math.atan2(position[1]-(playerpos1[1]+32),position[0]-(playerpos1[0]+26)),playerpos1[0]+32,playerpos1[1]+32])

            #根据光标位置和玩家位置的关系计算出箭头旋转角度,并存在arrow数组里

    if keys[0]:

        playerpos[1]-=5

    elif keys[2]:

        playerpos[1]+=5

    if keys[1]:

        playerpos[0]-=5

    elif keys[3]:

        playerpos[0]+=5

    #实现兔子的移动

    

    if pygame.time.get_ticks()>=90000:

        running=0

        exitcode=1

    if healthvalue<=0:

        running=0

        exitcode=0

    if acc[1]!=0:

        accuracy=acc[0]*1.0/acc[1]*100

    else:

        accuracy=0

if exitcode==0:

    pygame.font.init()

    font=pygame.font.Font(None,24)

    text=font.render("Accuracy: "+str(accuracy)+"%",True,(255,0,0))

    textRect=text.get_rect()

    textRect.centerx=screen.get_rect().centerx

    textRect.centery=screen.get_rect().centery+24

    screen.blit(gameover,(0,0))

    screen.blit(text,textRect)

else:

    pygame.font.init()

    font=pygame.font.Font(None,24)

    text=font.render("Accuracy: "+str(accuracy)+"%",True,(255,0,0))

    textRect=text.get_rect()

    textRect.centerx=screen.get_rect().centerx

    textRect.centery=screen.get_rect().centery+24

    screen.blit(youwin,(0,0))

    screen.blit(text,textRect)

while 1:

    for event in pygame.event.get():

        pygame.quit()

        exit(0)

    pygame.display.flip()

    

        

               
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: