Python中寫一個乒乓球類的游戲
最近開始學(xué)Python,感覺挺好玩的,既有腳本語言的靈活性,又有豐富的類庫與面向?qū)ο蟮奶攸c,開發(fā)起來很方便。
 最近開始學(xué)Python,感覺挺好玩的,既有腳本語言的靈活性,又有豐富的類庫與面向?qū)ο蟮奶攸c,開發(fā)起來很方便。
游戲的規(guī)則和乒乓球一樣,如果妙蛙種子掉地上了就算輸,你可以用藍色的蹺蹺板彈它,使他不落到地面上。
Game Over后可按任意鍵繼續(xù)游戲或選擇退出。
代碼如下:
- import sys, pygame
 - from random import *
 - from pygame.locals import *
 - from pygame.font import *
 - class MyPlayer(pygame.sprite.Sprite):
 - def __init__(self, image_file, location, speed):
 - pygame.sprite.Sprite.__init__(self)
 - self.image = pygame.image.load(image_file)
 - self.rect = self.image.get_rect()
 - self.rect.left, self.rect.top = location
 - self.speed = speed
 - self.status = True
 - def move(self):
 - self.rect = self.rect.move(self.speed)
 - if self.rect.left < 0 or self.rect.right > width:
 - self.speed[0] = -self.speed[0]
 - if self.rect.top < 0:
 - self.speed[1] = -self.speed[1]
 - if self.rect.bottom > height:
 - #Game over
 - self.status = False
 - class Reflector(pygame.sprite.Sprite):
 - def __init__(self, image_file, location, speed):
 - pygame.sprite.Sprite.__init__(self)
 - self.image = pygame.image.load(image_file)
 - self.rect = self.image.get_rect()
 - self.rect.left, self.rect.top = location
 - self.speed = speed
 - def move(self):
 - self.rect = self.rect.move(self.speed)
 - if self.rect.left < 0 or self.rect.right > width:
 - self.speed[0] = -self.speed[0]
 - if self.rect.top < 0 or self.rect.bottom > height:
 - self.speed[1] = -self.speed[1]
 - def animate(players):
 - screen.fill([255,255,255])
 - for player in players:
 - player.move()
 - for player in players:
 - players.remove(player)
 - if pygame.sprite.spritecollide(player,players,False):
 - player.speed[0] = -player.speed[0]
 - player.speed[1] = -player.speed[1]
 - players.add(player)
 - player.move()
 - screen.blit(player.image,player.rect)
 - pygame.display.flip()
 - pygame.time.delay(10)
 - pygame.init()
 - size = width,height = 640,480
 - screen = pygame.display.set_mode(size)
 - screen.fill([255,255,255])
 - pygame.display.set_caption("MiaoWa Game")
 - def play():
 - img_player = "C:\Users\dswu\Desktop\player.png"
 - players = pygame.sprite.Group()
 - for row in range(0,1):
 - for column in range(0,1):
 - playerLocation = [column*250+10,row*250+10]
 - playerSpeed = [choice([-2,2]), choice([-2,2])]
 - player = MyPlayer(img_player, playerLocation, playerSpeed)
 - players.add(player)
 - img_ref_path = "C:\Users\dswu\Desktop\Reflector.png"
 - ref_pos = [0,464]
 - ref_speed = [0,0]
 - reflector = Reflector(img_ref_path, ref_pos, ref_speed)
 - players.add(reflector)
 - running = True
 - while running:
 - key_pressed = pygame.key.get_pressed()
 - for event in pygame.event.get():
 - if event.type == pygame.QUIT:
 - game.quit()
 - if event.type == KEYDOWN:
 - if event.key == K_LEFT:
 - ref_speed[0] = -2
 - elif event.key == K_RIGHT:
 - ref_speed[0] = +2
 - animate(players)
 - if player.status == False:
 - running = False
 - final_text = "Game Over!"
 - ft_font = pygame.font.Font(None, 100)
 - ft_surf = ft_font.render(final_text, 1, (0,0,0))
 - screen.blit(ft_surf, [screen.get_width()/2 - ft_surf.get_width()/2, 100])
 - tip_text = "Type any key to continue"
 - tip_font = pygame.font.Font(None, 50)
 - tip_surf = tip_font.render(tip_text, 1, (0,0,0))
 - screen.blit(tip_surf, [screen.get_width()/2 - tip_surf.get_width()/2, 200])
 - pygame.display.flip()
 - keepOn = True
 - while keepOn:
 - key_pressed = pygame.key.get_pressed()
 - for event in pygame.event.get():
 - if event.type == pygame.QUIT:
 - pygame.quit()
 - if event.type == KEYDOWN:
 - play()
 - play()
 
主要是通過pygame.sprite.Sprite類實現(xiàn)碰撞的監(jiān)控,通過事件的捕捉及判斷實現(xiàn)這種彈力球類的游戲,其中涉及到文字在界面上的顯示,游戲中的循環(huán)控制,以及重新開始游戲等。
把上面這段代碼貼到你的IDLE中,找到下面這兩行替換成你機器中的圖片路徑,按F5就可以運行了。
img_player = "C:\Users\dswu\Desktop\player.png"
img_ref_path = "C:\Users\dswu\Desktop\Reflector.png"
由于比較簡單,看看代碼運行一下應(yīng)該就差不多明白了,如果有不明白的地方請給我留言,方便一起學(xué)習(xí)與進步。
平時都在線,歡迎交流。
責(zé)任編輯:王雪燕 
                    來源:
                    博客園
 















 
 
 









 
 
 
 