1. 程式人生 > 程式設計 >pygame庫實現移動底座彈球小遊戲

pygame庫實現移動底座彈球小遊戲

本文例項為大家分享了pygame實現移動底座彈球的具體程式碼,供大家參考,具體內容如下

輸出結果:

實現程式碼:

# -*- coding: utf-8 -*-
 
#Py之pygame:有趣好玩——利用pygame庫實現一個移動底座彈球的小遊戲
 
import pygame as pg
from pygame.locals import *  #將pygame所有常量匯入,如後面的QUIT
from time import sleep
import sys
 
#設定基本螢幕引數
pg.init()             #初始化,如果沒有的話字型會報錯等等
scr=pg.display.set_mode((600,550))  #設定螢幕大小
pg.display.set_caption(("移動底座彈球的小遊戲"))  #設定螢幕標題
pp=255,255,0     #red是一個元組,表示乒乓球橙色
green=0,0
white=255,255
dizuo=120,63,4    #底座顏色灰土色
pink=255,255
cs=225,121,21      #乒乓球顏色,橙色
 
#設計一下乒乓球的運動方式,乒乓球在螢幕內運動
x=120 #乒乓球的座標設定為(x,y)
y=120
vx=3  #設定初速度vx,vy,當乒乓球到達螢幕邊緣的時候速度取反,也就是乒乓球到達左右兩邊緣的時候vx取反,上下邊緣的時候vy取反。
vy=3
a=200 #a代表乒乓板的x座標值,因為乒乓板y座標值是固定的
 
My_font=pg.font.Font(None,40) #40是字的大小,設定字型,None表示沒有,代指pygame預設的字型,但是這樣的字型缺點是不能打印出中文。
zt1=pg.font.SysFont('華文楷體',24) #楷體,a=pg.font.get_fonts() #獲得系統自帶的字型
zt2=pg.font.SysFont('華文楷體',20)
zt21=pg.font.SysFont('幼圓',29)
 
def printtext(font,text,x,y,color): #設計一個函式,在遊戲螢幕上列印文字,程式碼表示先把文字轉換成一個位圖然後列印在螢幕上,列印文字需要列印的具體座標和文字顏色,字型等引數。
  img=font.render(text,True,color)  #轉換為點陣圖
  scr.blit(img,(x,y))
  
#設定得分,基礎記分量,為什麼設定基礎記分量?我想的是經過一段時間後乒乓球會加速,從而逐漸增加遊戲難度,當然,基礎記分量也要翻倍。
c=0  #c是加速器,如果接了10次,那麼加速
fs=0  #fs是分數,接到一次乒乓球就加分
k=1 #基礎加分量
 
#遊戲的主要程式碼了,pygame採用幀和輪詢的方式,幀是指會不斷重新整理,也就是while True迴圈,輪詢是不斷的詢問使用者的輸入。
#在下面程式碼中,會不斷獲取滑鼠具體座標和QUIT事件是否發生。Scr.fill會用RGB值為(199,21,133)的顏色重新整理螢幕,
#以後畫圓寫字都在這基礎上,下一次迴圈後又重新整理。因此在螢幕中乒乓球和乒乓板就會動態呈現出來。
while True:
  scr.fill((199,133)) #遊戲背景色
  background = pg.image.load('F:/File_Python/Resources/00102.jpg').convert()
  scr.blit(background,(0,0)) 
  for eve in pg.event.get():
    if eve.type == QUIT:  #點選左上角的×
      sys.exit()     #如果無效,可以試試exit()函式
  mx,my=pg.mouse.get_pos()   #獲得滑鼠的x,y座標
  a=mx  #滑鼠x座標就是乒乓板的座標,因此移動滑鼠乒乓板也移動
  #畫乒乓球和畫乒乓板了,我們可以簡化為圓形和矩形
  pg.draw.circle(scr,pp,y),40,0)
  pg.draw.rect(scr,dizuo,(a,530,100,20),0)
  #考慮乒乓球的運動,如果乒乓球碰到左右螢幕邊緣,vx取反,碰到上邊緣或者碰到乒乓板的時候,vy取反,其餘情況表示乒乓板沒有接觸到乒乓球,跳出迴圈,遊戲結束。
  x=x+vx
  y=y+vy
  if x>550 or x<40:
    vx=-vx
  if y<40:
    vy=-vy
  if y>510 and abs(a-x+50)<50:
    if vy>0:
      vy=-vy
    else:pass
    c=c+1   #每接到3次後乒乓球加速
    fs=fs+k  #加分
    if c>=3:
      c=0
      k=k+k #乒乓球加速後記分量雙倍
      if vx>0: #加速
        vx=vx+1
      else:
        vx=vx-1
    else:pass
  elif y>510 and abs(a-x+50)>50:
    break
  #在while迴圈最後,我寫一下得分,規則,還有重新整理,重新整理很重要!
  sleep(0.005) #休眠一定時間,不然乒乓球速度依然很快
  printtext(zt21,"移動滑鼠控制底座左右移動",120,20,pink)
  printtext(zt2,"得分",550,12,green)
  printtext(zt2,str(fs),560,32,green)
  pg.display.update()
#在迴圈結束後就是前面乒乓板沒有接觸到乒乓球后發生的情況,最後是遊戲結束的程式碼,畢竟這遊戲靠看得分看成敗
scr.fill((28,69,135))  #遊戲結束後全屏改變顏色
zt3=pg.font.SysFont('華文楷體',60)
zt4=pg.font.SysFont('華文楷體',40)
printtext(zt3,"你好,遊戲結束",60,white)
printtext(zt4,'總得分: '+str(fs),400,white)
pg.display.update() 

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。