pygame庫實現移動底座彈球小遊戲
阿新 • • 發佈:2020-01-09
本文例項為大家分享了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()
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。