雙人彈球小遊戲
哈喽大家好呀,我是滑稽君。我們之前發送過一篇文章名為pygame反彈小球的文章,這次我們帶來了它的雙人對戰版。
我們想實作的功能是螢幕兩側有兩個擋闆,當我們接住小球時,小球會被彈回去。若有一方沒有接住小球則遊戲結束,
我們需要解決的問題有小球的觸壁反彈,判定小球是否被我們接住以及球被接住之後的反彈。OK,确定了需求讓我們看看如何實作吧。
視訊講解:
源代碼:
import pygameimport sysimport timepygame.init()m = 1000n = 600size = width,height = m,n#視窗大小screen = pygame.display.set_mode(size)#繪制螢幕color = 255,255,255ball = pygame.image.load('ball.png')#導入小球圖檔ball = pygame.transform.scale(ball, (50, 50))ballrect = ball.get_rect()speed =[5,5]state_time = pygame.time.Clock()#rightrect = pygame.image.load('rect_1.png')#導入rect = pygame.transform.scale(rect, (30, 200))rectarea = rect.get_rect()x,y=m-30,n-200#leftbox = pygame.image.load('rect_2.png')#導入box = pygame.transform.scale(box, (30, 200))boxarea = box.get_rect()h,z=0,n-200move_h=move_z=0mRunning = Truewhile mRunning : # 死循環確定視窗一直顯示 for event in pygame.event.get(): # 周遊所有事件 if event.type == pygame.QUIT : # 如果單擊關閉視窗,則退出 mRunning = False #鍵盤響應部分 if event.type == pygame.KEYDOWN: if event.key == pygame.K_w: move_z = -10 elif event.key == pygame.K_s: move_z = 10 elif event.type == pygame.MOUSEMOTION: v,b = pygame.mouse.get_pos() y = b-100 elif event.type == pygame.KEYUP: move_z = 0 z += move_z state_time.tick(50) ballrect = ballrect.move(speed) screen.fill(color)#每次循環填充背景色 screen.blit(ball,ballrect) screen.blit(rect,(x,y)) screen.blit(box,(h,z)) pygame.display.flip() #小球碰壁反彈處理 if ballrect.top < 0 or ballrect.bottom > height: speed[1] = -speed[1] elif ballrect.right==m-30 and ballrect.top+50>=y and ballrect.top<=y+200 : speed[0] = -speed[0] elif ballrect.left==30 and ballrect.top+50>=z and ballrect.top<=z+200 : speed[0] = -speed[0] elif ballrect.left<0 or ballrect.left>m: mRunning = False pygame.quit()
可以看到我實作了預想的功能。需要大家重點了解的是小球是否被接住的條件判定部分。還有就是滑稽君在這裡使用鍵盤+滑鼠的玩法,有朋友會想,為什麼不讓右邊一方也使用方向鍵來控制呢?
原因是按鍵沖突,最先按壓鍵盤的一方會被後按壓鍵盤的一方打斷,也就是形成停頓,想象一下你在開車時突然有人搶你方向盤的那種感覺吧。而一方用鍵盤控制,一方用滑鼠則解決了這種尴尬的情況。
可能有小夥伴就喜歡兩個都用滑鼠玩,是否可以實作呢?考慮一下多線程吧,感興趣的小夥伴自己嘗試一下。
遊戲運作出來的樣子在視訊裡哦。
往期推薦:
pygame反彈的小球
THE END
主要的功能功能已經實作,想要DIY 的小夥伴,在代碼主體上進行增添或修改即可。最後我們思考一下接住小球的究竟是代碼,還是擋闆呢?