用python實現(xiàn)打磚塊小游戲
更新時間:2022年05月11日 11:38:23 作者:彳余大膽
這篇文章主要為大家詳細(xì)介紹了用python實現(xiàn)打磚塊小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
本文實例為大家分享了python實現(xiàn)打磚塊小游戲的具體代碼,供大家參考,具體內(nèi)容如下
開發(fā)益智的打磚塊小游戲,你可以試一下能打幾塊
import pygame,sys,time,random from pygame.locals import *?? ??? ?# from static_params import * ? #引入所有靜態(tài)參數(shù) from GameClass import * pygame.init() ? #初始化游戲 mainclock = pygame.time.Clock() #時鐘設(shè)置 Exit =0 global Surface? Surface = pygame.display.set_mode([WindowWidth,WindowHeight],0,32) #窗口設(shè)置 pygame.display.set_caption('打磚塊游戲') ? ?#設(shè)置窗口標(biāo)題 def BeforeGame(): ?? ?StartImage = pygame.image.load('intro_Ball.png').convert_alpha() #開始圖像的界面 ?? ?button = Button(Surface,FontColor,TextLocation,'StartGame') ?? ?flag = True ?? ?while flag: ?? ??? ?for event in pygame.event.get(): ?? ??? ??? ?if event.type ==QUIT: ?? ??? ??? ??? ?Exit = 1 ?? ??? ??? ??? ?pygame.quit() ?? ??? ??? ??? ?exit() ?? ??? ??? ?if event.type == MOUSEBUTTONUP: ?? ??? ??? ??? ?if button.is_overed(): ?? ??? ??? ??? ??? ?flag = False ?? ??? ?Surface.blit(StartImage,ImageLocation) ?? ??? ?button.ButtonBlit() ?? ??? ?pygame.display.update() ?? ??? ?mainclock.tick(100) def Gaming(): ?? ?#設(shè)置一個暫停函數(shù) ?? ?def pause(): ?? ??? ?button = Button(Surface,FontColor,TextLocation,'Continue') ?? ??? ?Surface.fill((0,0,0)) ?? ??? ?flag = True ?? ??? ?while flag: ?? ??? ??? ?for event in pygame.event.get(): ?? ??? ??? ??? ?if event.type ==QUIT: ?? ??? ??? ??? ??? ?Exit = 1 ?? ??? ??? ??? ??? ?pygame.quit() ?? ??? ??? ??? ??? ?exit() ?? ??? ??? ??? ?if event.type == MOUSEBUTTONUP: ?? ??? ??? ??? ??? ?if button.is_overed(): ?? ??? ??? ??? ??? ??? ?flag = False ?? ??? ??? ?pygame.mouse.set_visible(True) ?? ??? ??? ?button.ButtonBlit() ?? ??? ??? ?pygame.display.update() ?? ??? ??? ?mainclock.tick(100) ?? ?Ball = ball(BallCenter,BallRadius,BallColor,BallSpeed,MoveAngle,Surface) ?? ?paddle = Paddle(0,WindowHeight-PaddleHeight,PaddleWidth,PaddleHeight,PaddleColor,Surface) ?? ?# 設(shè)置一個磚塊類的矩陣 ?? ?BrickMatrix = [[Brick(i,j,BrickWidth,BrickHeight,BrickHitNumber,BrickColor,Surface) for i in range(0,100,BrickWidth+3) if i+BrickWidth<640]\ ?? ?for j in range(0,50,BrickHeight+2)] ?? ?mouse_x,mouse_y = pygame.mouse.get_pos() ?? ?while True: ?? ??? ?for event in pygame.event.get(): ?? ??? ??? ?if event.type == QUIT: ?? ??? ??? ??? ?pygame.quit() ?? ??? ??? ??? ?exit() ?? ??? ??? ?if event.type == MOUSEMOTION: ?? ??? ??? ??? ?mouse_x, mouse_y = event.pos ?#判斷鼠標(biāo)的位置 ?? ??? ??? ?if event.type == KEYDOWN: ? #按下空格鍵暫停 ?? ??? ??? ??? ?if event.key == K_SPACE: ?? ??? ??? ??? ??? ?pause() ?? ??? ?Surface.fill((0,0,0)) ?? ??? ?#設(shè)置鼠標(biāo)為不可見狀態(tài) ?? ??? ?pygame.mouse.set_visible(False) ?? ??? ?#判斷球的運動 ?? ??? ?#判斷是否撞上了邊界或者擋板 ?? ??? ?if Ball.center[1]+Ball.radius+paddle.height > WindowHeight: ?? ??? ??? ?if Ball.center[0]>paddle.left and Ball.center[0]<paddle.left+paddle.width: ?? ??? ??? ??? ?Ball.rebound4() ?? ??? ?#判斷是否裝上了左邊界 ?? ??? ?elif Ball.center[0]-Ball.radius<interval: ?? ??? ??? ?Ball.rebound1() ?? ??? ?elif Ball.center[0]+Ball.radius>WindowWidth-interval: ?? ??? ??? ?Ball.rebound2() ?? ??? ?#判斷是否撞上了上邊界 ?? ??? ?elif Ball.center[1]-Ball.radius<interval: ?? ??? ??? ?Ball.rebound3() ?? ??? ?for brickline in BrickMatrix: ?? ??? ??? ?for brick in brickline:?? ? ?? ??? ??? ??? ?if brick.exist == 1:?? ? ?? ??? ??? ??? ??? ?if brick.top >Ball.center[1] and brick.top-Ball.center[1]-Ball.radius<interval and Ball.speedy>0 and Ball.center[0]>brick.left and Ball.center[0]<brick.right: ?? ??? ??? ??? ??? ??? ?print(1,Ball.center,brick.left,brick.right,brick.top,brick.bottom,Ball.radius) ?? ??? ??? ??? ??? ??? ?Ball.rebound4() ?? ??? ??? ??? ??? ??? ?brick.hitnumber =brick.hitnumber-1 ?? ??? ??? ??? ??? ?if Ball.center[1]>brick.bottom and Ball.center[1]-Ball.radius-brick.bottom<interval and Ball.speedy<0 and Ball.center[0]>brick.left and Ball.center[0]<brick.right: ?? ??? ??? ??? ??? ??? ?print(2,Ball.center,brick.left,brick.right,brick.top,brick.bottom,Ball.radius) ?? ??? ??? ??? ??? ??? ?Ball.rebound3() ?? ??? ??? ??? ??? ??? ?brick.hitnumber =brick.hitnumber-1 ?? ??? ??? ??? ??? ?if Ball.center[0]< brick.left and brick.left-Ball.center[0]-Ball.radius<interval and Ball.speedx>0 and Ball.center[1]>brick.top and Ball.center[1]<brick.bottom: ?? ??? ??? ??? ??? ??? ?print(3,Ball.center,brick.left,brick.right,brick.top,brick.bottom,Ball.radius) ?? ??? ??? ??? ??? ??? ?Ball.rebound2() ?? ??? ??? ??? ??? ??? ?brick.hitnumber =brick.hitnumber-1 ?? ??? ??? ??? ??? ?if Ball.center[0]>brick.right and Ball.center[0]-Ball.radius-brick.right<interval and Ball.speedx<0 and Ball.center[1]>brick.top and Ball.center[1]<brick.bottom: ?? ??? ??? ??? ??? ??? ?print(4,Ball.center,brick.left,brick.right,brick.top,brick.bottom,Ball.radius) ?? ??? ??? ??? ??? ??? ?Ball.rebound1() ?? ??? ??? ??? ??? ??? ?brick.hitnumber =brick.hitnumber-1 ?? ??? ??? ??? ??? ?if brick.hitnumber <= 0: ?? ??? ??? ??? ??? ??? ?brick.exist = 0 ?? ??? ?#所有的磚塊都不存在了,則游戲勝利 ?? ??? ?if all([not any([brick.exist for brick in line]) for line in BrickMatrix] ): ?? ??? ??? ?return 'Win' ?? ??? ?# print(brick.hitnumber,brick.exist) ?? ??? ?Ball.move() ?? ??? ?paddle.get_pos(mouse_x) ?? ??? ?if Ball.fall(): ?? ??? ??? ?return 'Fail' ?? ??? ?#畫出圖形 ?? ??? ?for brickline in BrickMatrix: ?? ??? ??? ?for brick in brickline: ?? ??? ??? ??? ?brick.draw() ?? ??? ?Ball.draw() ?? ??? ?paddle.draw() ?? ??? ?pygame.display.update() ?? ??? ?#每秒鐘執(zhí)行100次該代碼,用來控制游戲循環(huán)頻率 ?? ??? ?mainclock.tick(100) ?? ? def AfterGame(text): ?? ?result = pygame.font.SysFont('comicsansms',100).render(text,1,(0,255,0)) ?? ?Surface.blit(result,ImageLocation) ?? ?button1 = Button(Surface,FontColor,TextLocation,'PLAY IT AGAIN') ?? ?button2 = Button(Surface,FontColor,TextLocation2,'QUIT') ?? ?flag = True ?? ?while flag: ?? ??? ?pygame.mouse.set_visible(True) ?? ??? ?for event in pygame.event.get(): ?? ??? ??? ?if event.type == QUIT: ?? ??? ??? ??? ?Exit = 1 ?? ??? ??? ??? ?pygame.quit() ?? ??? ??? ??? ?exit() ?? ??? ??? ?if event.type == MOUSEBUTTONUP: ?? ??? ??? ??? ?if button1.is_overed(): ?? ??? ??? ??? ??? ?flag = False ?? ??? ??? ??? ?if button2.is_overed(): ?? ??? ??? ??? ??? ?Exit = 1 ?? ??? ??? ??? ??? ?pygame.quit() ?? ??? ??? ??? ??? ?exit() ?? ??? ?button1.ButtonBlit() ?? ??? ?button2.ButtonBlit() ?? ??? ?pygame.display.update() ?? ??? ?mainclock.tick(100) def main(): ?? ?#展示游戲開始前的信息 ?? ?BeforeGame() ?? ?print(Exit) ?? ?#開始游戲循環(huán) ?? ?while not Exit: ?? ??? ?com=Gaming() ?? ??? ?AfterGame(com) if __name__ =='__main__': ?? ?main()
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Windows下Python2與Python3兩個版本共存的方法詳解
這篇文章主要介紹了Windows下Python2與Python3兩個版本共存的方法,文中介紹的很詳細(xì),對大家具有一定的參考價值,有需要的朋友們下面來一起看看吧。2017-02-02對pandas將dataframe中某列按照條件賦值的實例講解
今天小編就為大家分享一篇對pandas將dataframe中某列按照條件賦值的實例講解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-11-11詳解如何使用Python實現(xiàn)刪除重復(fù)文件
這篇文章主要為大家詳細(xì)介紹了如何利用Python實現(xiàn)刪除重復(fù)文件功能,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)Python有一定幫助,需要的可以參考一下2022-10-10使用seaborn繪制強化學(xué)習(xí)中的圖片問題
這篇文章主要介紹了使用seaborn繪制強化學(xué)習(xí)中的圖片問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-01-01