輸出結果
實作代碼
# -*- 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,255,0
white=255,255,255
dizuo=120, 63, 4 #底座顔色灰土色
pink=255, 0, 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,21,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,(x,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
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,120,white)
printtext(zt4,'總得分: '+str(fs),120,400,white)
pg.display.update()