1.找一幅星星的圖像,並在屏幕上顯示一系列整齊排列的星星dom
先建立一個star類;ide
#-*-coding:GBK-*- #-*-coding:utf-8-*- #星星類 import pygame from pygame.sprite import Sprite class Star(Sprite): def __init__(self,ai_settings,screen): super().__init__() self.screen=screen self.ai_settings=ai_settings self.image=pygame.image.load('images/star.bmp') self.rect=self.image.get_rect() self.rect.x=self.rect.width self.rect.y=self.rect.height #存儲星星的準確位置 self.x=float(self.rect.x) def blitme(self): self.screen.blit(self.image,self.rect)
設置類:idea
#-*-coding:GBK-*- #-*-coding:utf-8-*- #存儲做業例子的設置類 class Setting(): def __init__(self): self.screen_width=800 #設置屏幕高度寬度,背景顏色 self.screen_height=600 self.bg_color=(230,230,230)
功能模塊:spa
#-*-coding:GBK-*- #-*-coding:utf-8-*- #功能模塊,包括按鍵的設置檢測,退出遊戲設置 import pygame import sys from star import Star #檢測鼠標鍵盤事件 def check_events(screen): for event in pygame.event.get(): if event.type==pygame.QUIT: sys.exit() #計算每行能夠放入多少個星星 def star_number_x(ai_settings,star_width): available_space_x=ai_settings.screen_width-2*star_width number_stars=int(available_space_x/(2*star_width)) return number_stars #計算能夠放入多少行 def star_number_rows(ai_settings,star_height): available_space_y=ai_settings.screen_height-2*star_height rows_number=int(available_space_y/(2*star_height)) return rows_number #建立一個星星 def creat_star(ai_settings,screen,stars,star_number,row_number): star=Star(ai_settings,screen) star_width=star.rect.width star.x=star_width+2*star_width*star_number star.rect.x=star.x star.rect.y=star.rect.height+2*star.rect.height*row_number stars.add(star) #建立一羣星星 def creat_star_group(ai_settings,screen,stars): star=Star(ai_settings,screen) number_stars_x=star_number_x(ai_settings,star.rect.width) rows_number=star_number_rows(ai_settings,star.rect.height) for row_number in range(rows_number): for star_number in range(number_stars_x): creat_star(ai_settings,screen,stars,star_number,row_number) #更新屏幕: def update_screen(ai_settings,screen,stars): screen.fill(ai_settings.bg_color) stars.draw(screen) pygame.display.flip()
主程序:3d
#-*-coding:GBK-*- #-*-coding:utf-8-*- import sys #退出時須要這個模塊 import pygame #導入遊戲模塊 from setting import Setting #導入設置類 from star import Star #導入圖片類 from pygame.sprite import Group import game_functions as gf #導入功能模塊 def run_game(): pygame.init() #初始化,建立屏幕對象 ai_settings=Setting() #建立一個800*800的屏幕 screen=pygame.display.set_mode((ai_settings.screen_width,ai_settings.screen_height)) pygame.display.set_caption("13-1") #對於這個窗口的命名 stars=Group() gf.creat_star_group(ai_settings,screen,stars) "開始遊戲的主代碼循環" while True: gf.check_events(screen) gf.update_screen(ai_settings,screen,stars) run_game()
運行主程序後,結果以下:code
2.隨機分佈星星對象
在1的基礎上:blog
修改star類:遊戲
#-*-coding:GBK-*- #-*-coding:utf-8-*- #星星類 #星星類 import pygame from pygame.sprite import Sprite from random import randint class Star(Sprite): def __init__(self,ai_setings,screen): super().__init__() self.screen=screen self.random_number=randint(-10, 10) self.image=pygame.image.load('images/star.bmp') self.rect=self.image.get_rect() self.rect.x=self.rect.width+self.random_number self.rect.y=self.rect.height+self.random_number def blitme(self): self.screen.blit(self.image,self.rect)
修改功能模塊:事件
#-*-coding:GBK-*- #-*-coding:utf-8-*- #功能模塊,包括按鍵的設置檢測,退出遊戲設置 import pygame import sys from star import Star #檢測鼠標鍵盤事件 def check_events(screen): for event in pygame.event.get(): if event.type==pygame.QUIT: sys.exit() #計算每行能夠放入多少個星星 def star_number_x(ai_settings,star_width): available_space_x=ai_settings.screen_width-2*star_width number_stars=int(available_space_x/(2*star_width)) return number_stars #計算能夠放入多少行 def star_number_rows(ai_settings,star_height): available_space_y=ai_settings.screen_height-2*star_height rows_number=int(available_space_y/(2*star_height)) return rows_number #建立一個星星 def creat_star(ai_settings,screen,stars,star_number,row_number): star=Star(ai_settings,screen) star_width=star.rect.width star.x=star.rect.x+2*star.rect.x*star_number star.rect.x=star.x star.rect.y=star.rect.y+2*star.rect.y*row_number stars.add(star) #建立一羣星星 def creat_star_group(ai_settings,screen,stars): star=Star(ai_settings,screen) number_stars_x=star_number_x(ai_settings,star.rect.width) rows_number=star_number_rows(ai_settings,star.rect.height) for row_number in range(rows_number): for star_number in range(number_stars_x): creat_star(ai_settings,screen,stars,star_number,row_number) #更新屏幕: def update_screen(ai_settings,screen,stars): screen.fill(ai_settings.bg_color) stars.draw(screen) pygame.display.flip()
運行主程序:
3.尋找一幅雨滴的圖像,並建立一系列整齊排列的雨滴,讓這些雨滴往下落,直到屏幕底端就會消失
設置類:
#-*-coding:GBK-*- #-*-coding:utf-8-*- #存儲做業例子的設置類 class Setting(): def __init__(self): self.screen_width=800 #設置屏幕高度寬度,背景顏色 self.screen_height=600 self.bg_color=(200,230,230)
z增長一個雨滴類:
#-*-coding:GBK-*- #-*-coding:utf-8-*- #建立雨滴類 #雨滴類 import pygame from pygame.sprite import Sprite class Rain(Sprite): def __init__(self,ai_setings,screen): super().__init__() self.screen=screen self.rain_speed_factor=0.5 self.image=pygame.image.load('images/rain.bmp') self.rect=self.image.get_rect() self.rect.x=self.rect.width self.rect.y=self.rect.height self.y=float(self.rect.y) def update(self): self.y+=self.rain_speed_factor self.rect.y=self.y def blitme(self): self.screen.blit(self.image,self.rect)
功能模塊:
#-*-coding:GBK-*- #-*-coding:utf-8-*- #功能模塊,包括按鍵的設置檢測,退出遊戲設置 import pygame import sys from rain import Rain #檢測鼠標鍵盤事件 def check_events(screen): for event in pygame.event.get(): if event.type==pygame.QUIT: sys.exit() #計算每行能夠放入多少個雨滴 def rain_number_x(ai_settings,rain_width): available_space_x=ai_settings.screen_width-2*rain_width number_rains=int(available_space_x/(2*rain_width)) return number_rains #建立一個雨滴 def creat_rain(ai_settings,screen,rains,rain_number): rain=Rain(ai_settings,screen) rain_width=rain.rect.width rain.x=rain_width+2*rain_width*rain_number rain.rect.x=rain.x rains.add(rain) #建立一羣雨滴 def creat_rain_group(ai_settings,screen,rains): rain=Rain(ai_settings,screen) number_rains_x=rain_number_x(ai_settings,rain.rect.width) for rain_number in range(number_rains_x): creat_rain(ai_settings,screen,rains,rain_number) #更新雨滴位置 def update_rain(rains): rains.update() #更新屏幕: def update_screen(ai_settings,screen,rains): screen.fill(ai_settings.bg_color) rains.draw(screen) pygame.display.flip()
主程序以下:
#-*-coding:GBK-*- #-*-coding:utf-8-*- import sys #退出時須要這個模塊 import pygame #導入遊戲模塊 from setting import Setting #導入設置類 from rain import Rain #導入圖片類 from pygame.sprite import Group import game_functions as gf #導入功能模塊 def run_game(): pygame.init() #初始化,建立屏幕對象 ai_settings=Setting() #建立一個800*800的屏幕 screen=pygame.display.set_mode((ai_settings.screen_width,ai_settings.screen_height)) pygame.display.set_caption("13-2") #對於這個窗口的命名 rains=Group() gf.creat_rain_group(ai_settings,screen,rains) "開始遊戲的主代碼循環" while True: gf.check_events(screen) gf.update_rain(rains) gf.update_screen(ai_settings,screen,rains) run_game()
4.修改3的代碼,是的一行雨滴消失在屏幕底端,屏幕頂端又會出現新的雨滴
以3的代碼的基礎下,修改功能模塊:
#-*-coding:GBK-*- #-*-coding:utf-8-*- #功能模塊,包括按鍵的設置檢測,退出遊戲設置 import pygame import sys from rain import Rain #檢測鼠標鍵盤事件 def check_events(screen): for event in pygame.event.get(): if event.type==pygame.QUIT: sys.exit() #計算每行能夠放入多少個雨滴 def rain_number_x(ai_settings,rain_width): available_space_x=ai_settings.screen_width-2*rain_width number_rains=int(available_space_x/(2*rain_width)) return number_rains #建立一個雨滴 def creat_rain(ai_settings,screen,rains,rain_number): rain=Rain(ai_settings,screen) rain_width=rain.rect.width rain.x=rain_width+2*rain_width*rain_number rain.rect.x=rain.x rains.add(rain) #建立一羣雨滴 def creat_rain_group(ai_settings,screen,rains): rain=Rain(ai_settings,screen) number_rains_x=rain_number_x(ai_settings,rain.rect.width) for rain_number in range(number_rains_x): creat_rain(ai_settings,screen,rains,rain_number) #更新雨滴位置 def update_rain(ai_settings,rains,screen): rains.update() screen_rect=screen.get_rect() for rain in rains.copy(): if rain.rect.top>screen_rect.bottom: rains.remove(rain) if len(rains)==0: rains.empty() creat_rain_group(ai_settings,screen,rains) #更新屏幕: def update_screen(ai_settings,screen,rains): screen.fill(ai_settings.bg_color) rains.draw(screen) pygame.display.flip()
修改主程序:
#-*-coding:GBK-*- #-*-coding:utf-8-*- import sys #退出時須要這個模塊 import pygame #導入遊戲模塊 from setting import Setting #導入設置類 from rain import Rain #導入圖片類 from pygame.sprite import Group import game_functions as gf #導入功能模塊 def run_game(): pygame.init() #初始化,建立屏幕對象 ai_settings=Setting() #建立一個800*800的屏幕 screen=pygame.display.set_mode((ai_settings.screen_width,ai_settings.screen_height)) pygame.display.set_caption("13-4") #對於這個窗口的命名 rains=Group() gf.creat_rain_group(ai_settings,screen,rains) "開始遊戲的主代碼循環" while True: gf.check_events(screen) gf.update_rain(ai_settings,rains,screen) gf.update_screen(ai_settings,screen,rains) run_game()
5.建立一個遊戲,在屏幕底端放置一個玩家能夠左右移動的角色,讓一個球出如今屏幕頂端,且水平位置是隨機的,讓這個球以固定的速度下落。若是角色與球發生碰撞,就讓球消失,每當角色抓到球,或者由於球抵達到屏幕底端而消失後,都建立一個新球
設置類:
#-*-coding:GBK-*- #-*-coding:utf-8-*- #存儲做業例子的設置類 class Setting(): def __init__(self): self.screen_width=800 #設置屏幕高度寬度,背景顏色 self.screen_height=600 self.bg_color=(200,230,230) #圖片移動速度 self.picture_speed_factor=0.8 #星星降低速度 self.star_speed_factor=0.9
圖片類:
#-*-coding:GBK-*- #-*-coding:utf-8-*- #建立圖片類 #建立圖片類 import pygame class Picture(): def __init__(self,screen,ai_settings): self.screen=screen self.ai_settings=ai_settings #圖片存在images文件夾下,名字是picture.bmp self.image=pygame.image.load('images/picture.bmp') self.rect=self.image.get_rect() self.screen_rect=screen.get_rect() self.moving_right=False self.moving_left=False #設置屏幕底端 self.rect.bottom=self.screen_rect.bottom self.rect.centerx=self.screen_rect.centerx self.ship_place=float(self.rect.centerx) def update(self): if self.moving_right and self.rect.right<self.screen_rect.right: self.ship_place+=self.ai_settings.picture_speed_factor if self.moving_left and self.rect.left>0: self.ship_place-=self.ai_settings.picture_speed_factor self.rect.centerx=self.ship_place def blitme(self): self.screen.blit(self.image,self.rect)
星星類:
#-*-coding:GBK-*- #-*-coding:utf-8-*- #星星類 #星星類 import pygame from pygame.sprite import Sprite from random import randint class Star(Sprite): def __init__(self,ai_settings,screen): super().__init__() self.screen=screen self.ai_settings=ai_settings self.screen_rect=screen.get_rect() self.image=pygame.image.load('images/star.bmp') self.rect=self.image.get_rect() self.rect.x=randint(0, self.screen_rect.right-self.rect.right) self.rect.y=0 self.y=float(self.rect.y) def update(self): self.y+=self.ai_settings.star_speed_factor self.rect.y=self.y def blitme(self): self.screen.blit(self.image,self.rect)
功能模塊:
#-*-coding:GBK-*- #-*-coding:utf-8-*- #功能模塊,包括按鍵的設置檢測,退出遊戲設置 import pygame import sys from star import Star #對按鍵的響應 def check_keydown_events(event,picture): if event.key==pygame.K_RIGHT: picture.moving_right=True elif event.key==pygame.K_LEFT: picture.moving_left=True #鬆開鍵盤的響應 def check_keyup_events(event,picture): if event.key==pygame.K_RIGHT: picture.moving_right=False elif event.key==pygame.K_LEFT: picture.moving_left=False #檢測鼠標鍵盤事件 def check_events(screen,picture): for event in pygame.event.get(): if event.type==pygame.QUIT: sys.exit() elif event.type==pygame.KEYDOWN: check_keydown_events(event,picture) elif event.type==pygame.KEYUP: check_keyup_events(event,picture) #建立一個星星 def creat_star(ai_settings,screen,star): if len(star)==0: s=Star(ai_settings,screen) star.add(s) #重建星星 def again_star(ai_settings,screen,star): star.empty() creat_star(ai_settings,screen,star) #更新星星位置 def update_star(ai_settings,star,screen,picture): star.update() screen_rect=screen.get_rect() for s in star.copy(): if s.rect.bottom==screen_rect.bottom: star.empty() again_star(ai_settings,screen,star) elif pygame.sprite.spritecollideany(picture,star): again_star(ai_settings,screen,star) #更新屏幕: def update_screen(ai_settings,screen,star,picture): screen.fill(ai_settings.bg_color) star.draw(screen) picture.blitme() pygame.display.flip()
主程序:
#-*-coding:GBK-*- #-*-coding:utf-8-*- import sys #退出時須要這個模塊 import pygame #導入遊戲模塊 from setting import Setting #導入設置類 from star import Star #導入圖片類 from picture import Picture from pygame.sprite import Group import game_functions as gf #導入功能模塊 def run_game(): pygame.init() #初始化,建立屏幕對象 ai_settings=Setting() #建立一個800*800的屏幕 screen=pygame.display.set_mode((ai_settings.screen_width,ai_settings.screen_height)) pygame.display.set_caption("13-4") #對於這個窗口的命名 picture=Picture(screen,ai_settings) star=Group() gf.creat_star(ai_settings,screen,star) #"開始遊戲的主代碼循環" while True: gf.check_events(screen,picture) picture.update() gf.update_star(ai_settings,star,screen,picture) gf.update_screen(ai_settings,screen,star,picture) run_game()
輸出界面:
6.完成5的代碼,跟蹤玩家有多少次未將球接着,在未接着球的次數到達三次後,結束遊戲。
新建一個統計信息類:
#-*-coding:GBK-*- #-*-coding:utf-8-*- #建立一個統計信息類 class GameStats(): def __init__(self): self.game_active=True self.loss=0 def check_active(self): if self.loss == 3: self.game_active = False
再修改下功能:
#-*-coding:GBK-*- #-*-coding:utf-8-*- #功能模塊,包括按鍵的設置檢測,退出遊戲設置 import pygame import sys from star import Star #對按鍵的響應 def check_keydown_events(event,picture): if event.key==pygame.K_RIGHT: picture.moving_right=True elif event.key==pygame.K_LEFT: picture.moving_left=True #鬆開鍵盤的響應 def check_keyup_events(event,picture): if event.key==pygame.K_RIGHT: picture.moving_right=False elif event.key==pygame.K_LEFT: picture.moving_left=False #檢測鼠標鍵盤事件 def check_events(screen,picture): for event in pygame.event.get(): if event.type==pygame.QUIT: sys.exit() elif event.type==pygame.KEYDOWN: check_keydown_events(event,picture) elif event.type==pygame.KEYUP: check_keyup_events(event,picture) #建立一個星星 def creat_star(ai_settings,screen,star): if len(star)==0: s=Star(ai_settings,screen) star.add(s) #重建星星 def again_star(ai_settings,screen,star): star.empty() creat_star(ai_settings,screen,star) #更新星星位置 def update_star(ai_settings,star,screen,picture,stats): star.update() screen_rect=screen.get_rect() for s in star.copy(): if s.rect.bottom==screen_rect.bottom: star.empty() stats.loss+=1 again_star(ai_settings,screen,star) elif pygame.sprite.spritecollideany(picture,star): again_star(ai_settings,screen,star) #更新屏幕: def update_screen(ai_settings,screen,star,picture): screen.fill(ai_settings.bg_color) star.draw(screen) picture.blitme() pygame.display.flip()
主程序:
#-*-coding:GBK-*- #-*-coding:utf-8-*- import sys #退出時須要這個模塊 import pygame #導入遊戲模塊 from setting import Setting #導入設置類 from star import Star #導入圖片類 from picture import Picture from pygame.sprite import Group import game_functions as gf #導入功能模塊 from game_stats import GameStats def run_game(): pygame.init() #初始化,建立屏幕對象 ai_settings=Setting() #建立一個800*800的屏幕 screen=pygame.display.set_mode((ai_settings.screen_width,ai_settings.screen_height)) pygame.display.set_caption("13-4") #對於這個窗口的命名 picture=Picture(screen,ai_settings) star=Group() gf.creat_star(ai_settings,screen,star) stats=GameStats() #"開始遊戲的主代碼循環" while True: gf.check_events(screen,picture) stats.check_active() if stats.game_active: picture.update() gf.update_star(ai_settings,star,screen,picture,stats) gf.update_screen(ai_settings,screen,star,picture) run_game()
輸出結果:當三次未接到星星時。遊戲結束: