<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
import os import sys import cfg import pygame from modules import * from itertools import chain '''遊戲地圖''' class gameMap(): def __init__(self, num_cols, num_rows): self.walls = [] self.boxes = [] self.targets = [] self.num_cols = num_cols self.num_rows = num_rows '''增加遊戲元素''' def addElement(self, elem_type, col, row): if elem_type == 'wall': self.walls.append(elementSprite('wall.png', col, row, cfg)) elif elem_type == 'box': self.boxes.append(elementSprite('box.png', col, row, cfg)) elif elem_type == 'target': self.targets.append(elementSprite('target.png', col, row, cfg)) '''畫遊戲地圖''' def draw(self, screen): for elem in self.elemsIter(): elem.draw(screen) '''遊戲元素迭代器''' def elemsIter(self): for elem in chain(self.targets, self.walls, self.boxes): yield elem '''該關卡中所有的箱子是否都在指定位置, 在的話就是通關了''' def levelCompleted(self): for box in self.boxes: is_match = False for target in self.targets: if box.col == target.col and box.row == target.row: is_match = True break if not is_match: return False return True '''某位置是否可到達''' def isValidPos(self, col, row): if col >= 0 and row >= 0 and col < self.num_cols and row < self.num_rows: block_size = cfg.BLOCKSIZE temp1 = self.walls + self.boxes temp2 = pygame.Rect(col * block_size, row * block_size, block_size, block_size) return temp2.collidelist(temp1) == -1 else: return False '''獲得某位置的box''' def getBox(self, col, row): for box in self.boxes: if box.col == col and box.row == row: return box return None '''遊戲介面''' class gameInterface(): def __init__(self, screen): self.screen = screen self.levels_path = cfg.LEVELDIR self.initGame() '''匯入關卡地圖''' def loadLevel(self, game_level): with open(os.path.join(self.levels_path, game_level), 'r') as f: lines = f.readlines() # 遊戲地圖 self.game_map = gameMap(max([len(line) for line in lines]) - 1, len(lines)) # 遊戲surface height = cfg.BLOCKSIZE * self.game_map.num_rows width = cfg.BLOCKSIZE * self.game_map.num_cols self.game_surface = pygame.Surface((width, height)) self.game_surface.fill(cfg.BACKGROUNDCOLOR) self.game_surface_blank = self.game_surface.copy() for row, elems in enumerate(lines): for col, elem in enumerate(elems): if elem == 'p': self.player = pusherSprite(col, row, cfg) elif elem == '*': self.game_map.addElement('wall', col, row) elif elem == '#': self.game_map.addElement('box', col, row) elif elem == 'o': self.game_map.addElement('target', col, row) '''遊戲初始化''' def initGame(self): self.scroll_x = 0 self.scroll_y = 0 '''將遊戲介面畫出來''' def draw(self, *elems): self.scroll() self.game_surface.blit(self.game_surface_blank, dest=(0, 0)) for elem in elems: elem.draw(self.game_surface) self.screen.blit(self.game_surface, dest=(self.scroll_x, self.scroll_y)) '''因為遊戲介面面積>遊戲視窗介面, 所以需要根據人物位置捲動''' def scroll(self): x, y = self.player.rect.center width = self.game_surface.get_rect().w height = self.game_surface.get_rect().h if (x + cfg.SCREENSIZE[0] // 2) > cfg.SCREENSIZE[0]: if -1 * self.scroll_x + cfg.SCREENSIZE[0] < width: self.scroll_x -= 2 elif (x + cfg.SCREENSIZE[0] // 2) > 0: if self.scroll_x < 0: self.scroll_x += 2 if (y + cfg.SCREENSIZE[1] // 2) > cfg.SCREENSIZE[1]: if -1 * self.scroll_y + cfg.SCREENSIZE[1] < height: self.scroll_y -= 2 elif (y + 250) > 0: if self.scroll_y < 0: self.scroll_y += 2 '''某一關卡的遊戲主迴圈''' def runGame(screen, game_level): clock = pygame.time.Clock() game_interface = gameInterface(screen) game_interface.loadLevel(game_level) font_path = os.path.join(cfg.FONTDIR, 'simkai.ttf') text = '按R鍵重新開始本關' font = pygame.font.Font(font_path, 15) text_render = font.render(text, 1, (255, 255, 255)) while True: for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() sys.exit(0) elif event.type == pygame.KEYDOWN: if event.key == pygame.K_LEFT: next_pos = game_interface.player.move('left', is_test=True) if game_interface.game_map.isValidPos(*next_pos): game_interface.player.move('left') else: box = game_interface.game_map.getBox(*next_pos) if box: next_pos = box.move('left', is_test=True) if game_interface.game_map.isValidPos(*next_pos): game_interface.player.move('left') box.move('left') break if event.key == pygame.K_RIGHT: next_pos = game_interface.player.move('right', is_test=True) if game_interface.game_map.isValidPos(*next_pos): game_interface.player.move('right') else: box = game_interface.game_map.getBox(*next_pos) if box: next_pos = box.move('right', is_test=True) if game_interface.game_map.isValidPos(*next_pos): game_interface.player.move('right') box.move('right') break if event.key == pygame.K_DOWN: next_pos = game_interface.player.move('down', is_test=True) if game_interface.game_map.isValidPos(*next_pos): game_interface.player.move('down') else: box = game_interface.game_map.getBox(*next_pos) if box: next_pos = box.move('down', is_test=True) if game_interface.game_map.isValidPos(*next_pos): game_interface.player.move('down') box.move('down') break if event.key == pygame.K_UP: next_pos = game_interface.player.move('up', is_test=True) if game_interface.game_map.isValidPos(*next_pos): game_interface.player.move('up') else: box = game_interface.game_map.getBox(*next_pos) if box: next_pos = box.move('up', is_test=True) if game_interface.game_map.isValidPos(*next_pos): game_interface.player.move('up') box.move('up') break if event.key == pygame.K_r: game_interface.initGame() game_interface.loadLevel(game_level) game_interface.draw(game_interface.player, game_interface.game_map) if game_interface.game_map.levelCompleted(): return screen.blit(text_render, (5, 5)) pygame.display.flip() clock.tick(100) '''主函數''' def main(): pygame.init() pygame.mixer.init() pygame.display.set_caption('推箱子 —— 原始碼基地:#959755565#') screen = pygame.display.set_mode(cfg.SCREENSIZE) pygame.mixer.init() audio_path = os.path.join(cfg.AUDIODIR, 'EineLiebe.mp3') pygame.mixer.music.load(audio_path) pygame.mixer.music.set_volume(0.4) pygame.mixer.music.play(-1) startInterface(screen, cfg) for level_name in sorted(os.listdir(cfg.LEVELDIR)): runGame(screen, level_name) switchInterface(screen, cfg) endInterface(screen, cfg) '''run''' if __name__ == '__main__': main()
import sys import cfg import pygame import random '''滑雪者類''' class SkierClass(pygame.sprite.Sprite): def __init__(self): pygame.sprite.Sprite.__init__(self) # 滑雪者的朝向(-2到2) self.direction = 0 self.imagepaths = cfg.SKIER_IMAGE_PATHS[:-1] self.image = pygame.image.load(self.imagepaths[self.direction]) self.rect = self.image.get_rect() self.rect.center = [320, 100] self.speed = [self.direction, 6-abs(self.direction)*2] '''改變滑雪者的朝向. 負數為向左,正數為向右,0為向前''' def turn(self, num): self.direction += num self.direction = max(-2, self.direction) self.direction = min(2, self.direction) center = self.rect.center self.image = pygame.image.load(self.imagepaths[self.direction]) self.rect = self.image.get_rect() self.rect.center = center self.speed = [self.direction, 6-abs(self.direction)*2] return self.speed '''移動滑雪者''' def move(self): self.rect.centerx += self.speed[0] self.rect.centerx = max(20, self.rect.centerx) self.rect.centerx = min(620, self.rect.centerx) '''設定為摔倒狀態''' def setFall(self): self.image = pygame.image.load(cfg.SKIER_IMAGE_PATHS[-1]) '''設定為站立狀態''' def setForward(self): self.direction = 0 self.image = pygame.image.load(self.imagepaths[self.direction]) ''' Function: 障礙物類 Input: img_path: 障礙物圖片路徑 location: 障礙物位置 attribute: 障礙物類別屬性 ''' class ObstacleClass(pygame.sprite.Sprite): def __init__(self, img_path, location, attribute): pygame.sprite.Sprite.__init__(self) self.img_path = img_path self.image = pygame.image.load(self.img_path) self.location = location self.rect = self.image.get_rect() self.rect.center = self.location self.attribute = attribute self.passed = False '''移動''' def move(self, num): self.rect.centery = self.location[1] - num '''建立障礙物''' def createObstacles(s, e, num=10): obstacles = pygame.sprite.Group() locations = [] for i in range(num): row = random.randint(s, e) col = random.randint(0, 9) location = [col*64+20, row*64+20] if location not in locations: locations.append(location) attribute = random.choice(list(cfg.OBSTACLE_PATHS.keys())) img_path = cfg.OBSTACLE_PATHS[attribute] obstacle = ObstacleClass(img_path, location, attribute) obstacles.add(obstacle) return obstacles '''合併障礙物''' def AddObstacles(obstacles0, obstacles1): obstacles = pygame.sprite.Group() for obstacle in obstacles0: obstacles.add(obstacle) for obstacle in obstacles1: obstacles.add(obstacle) return obstacles '''顯示遊戲開始介面''' def ShowStartInterface(screen, screensize): screen.fill((255, 255, 255)) tfont = pygame.font.Font(cfg.FONTPATH, screensize[0]//5) cfont = pygame.font.Font(cfg.FONTPATH, screensize[0]//20) title = tfont.render(u'滑雪遊戲', True, (255, 0, 0)) content = cfont.render(u'按任意鍵開始遊戲', True, (0, 0, 255)) trect = title.get_rect() trect.midtop = (screensize[0]/2, screensize[1]/5) crect = content.get_rect() crect.midtop = (screensize[0]/2, screensize[1]/2) screen.blit(title, trect) screen.blit(content, crect) while True: for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() sys.exit() elif event.type == pygame.KEYDOWN: return pygame.display.update() '''顯示分數''' def showScore(screen, score, pos=(10, 10)): font = pygame.font.Font(cfg.FONTPATH, 30) score_text = font.render("Score: %s" % score, True, (0, 0, 0)) screen.blit(score_text, pos) '''更新當前幀的遊戲畫面''' def updateFrame(screen, obstacles, skier, score): screen.fill((255, 255, 255)) obstacles.draw(screen) screen.blit(skier.image, skier.rect) showScore(screen, score) pygame.display.update() '''主程式''' def main(): # 遊戲初始化 pygame.init() pygame.mixer.init() pygame.mixer.music.load(cfg.BGMPATH) pygame.mixer.music.set_volume(0.4) pygame.mixer.music.play(-1) # 設定螢幕 screen = pygame.display.set_mode(cfg.SCREENSIZE) pygame.display.set_caption('滑雪大冒險') # 遊戲開始介面 ShowStartInterface(screen, cfg.SCREENSIZE) # 範例化遊戲精靈 # --滑雪者 skier = SkierClass() # --建立障礙物 obstacles0 = createObstacles(20, 29) obstacles1 = createObstacles(10, 19) obstaclesflag = 0 obstacles = AddObstacles(obstacles0, obstacles1) # 遊戲clock clock = pygame.time.Clock() # 記錄滑雪的距離 distance = 0 # 記錄當前的分數 score = 0 # 記錄當前的速度 speed = [0, 6] # 遊戲主迴圈 while True: # --事件捕獲 for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() sys.exit() if event.type == pygame.KEYDOWN: if event.key == pygame.K_LEFT or event.key == pygame.K_a: speed = skier.turn(-1) elif event.key == pygame.K_RIGHT or event.key == pygame.K_d: speed = skier.turn(1) # --更新當前遊戲幀的資料 skier.move() distance += speed[1] if distance >= 640 and obstaclesflag == 0: obstaclesflag = 1 obstacles0 = createObstacles(20, 29) obstacles = AddObstacles(obstacles0, obstacles1) if distance >= 1280 and obstaclesflag == 1: obstaclesflag = 0 distance -= 1280 for obstacle in obstacles0: obstacle.location[1] = obstacle.location[1] - 1280 obstacles1 = createObstacles(10, 19) obstacles = AddObstacles(obstacles0, obstacles1) for obstacle in obstacles: obstacle.move(distance) # --碰撞檢測 hitted_obstacles = pygame.sprite.spritecollide(skier, obstacles, False) if hitted_obstacles: if hitted_obstacles[0].attribute == "tree" and not hitted_obstacles[0].passed: score -= 50 skier.setFall() updateFrame(screen, obstacles, skier, score) pygame.time.delay(1000) skier.setForward() speed = [0, 6] hitted_obstacles[0].passed = True elif hitted_obstacles[0].attribute == "flag" and not hitted_obstacles[0].passed: score += 10 obstacles.remove(hitted_obstacles[0]) # --更新螢幕 updateFrame(screen, obstacles, skier, score) clock.tick(cfg.FPS) '''run''' if __name__ == '__main__': main()
import cfg import cocos import struct from modules import * from cocos.sprite import Sprite from pyaudio import PyAudio, paInt16 '''定義聲控遊戲類''' class VCGame(cocos.layer.ColorLayer): def __init__(self): super(VCGame, self).__init__(255, 255, 255, 255, 800, 600) # frames_per_buffer self.num_samples = 1000 # 聲控條 self.vbar = Sprite(cfg.BLOCK_IMAGE_PATH) self.vbar.position = 20, 450 self.vbar.scale_y = 0.1 self.vbar.image_anchor = 0, 0 self.add(self.vbar) # 皮卡丘 self.pikachu = Pikachu(cfg.PIKACHU_IMAGE_PATH) self.add(self.pikachu) # 地面 self.floor = cocos.cocosnode.CocosNode() self.add(self.floor) position = 0, 100 for i in range(120): b = Block(cfg.BLOCK_IMAGE_PATH, position) self.floor.add(b) position = b.x + b.width, b.height # 聲音輸入 audio = PyAudio() self.stream = audio.open(format=paInt16, channels=1, rate=int(audio.get_device_info_by_index(0)['defaultSampleRate']), input=True, frames_per_buffer=self.num_samples) # 螢幕更新 self.schedule(self.update) '''碰撞檢測''' def collide(self): diffx = self.pikachu.x - self.floor.x for b in self.floor.get_children(): if (b.x <= diffx + self.pikachu.width * 0.8) and (diffx + self.pikachu.width * 0.2 <= b.x + b.width): if self.pikachu.y < b.height: self.pikachu.land(b.height) break '''定義遊戲規則''' def update(self, dt): # 獲取每幀的音量 audio_data = self.stream.read(self.num_samples) k = max(struct.unpack('1000h', audio_data)) self.vbar.scale_x = k / 10000.0 if k > 3000: self.floor.x -= min((k / 20.0), 150) * dt # 皮卡丘跳躍 if k > 8000: self.pikachu.jump((k - 8000) / 1000.0) # 碰撞檢測 self.collide() '''重置''' def reset(self): self.floor.x = 0 '''run''' if __name__ == '__main__': cocos.director.director.init(caption="xiaohei Go Go Go ") cocos.director.director.run(cocos.scene.Scene(VCGame()))
import sys import cfg import math import random import pygame from modules import * '''遊戲初始化''' def initGame(): # 初始化pygame, 設定展示視窗 pygame.init() pygame.mixer.init() screen = pygame.display.set_mode(cfg.SCREENSIZE) pygame.display.set_caption('兔子') # 載入必要的遊戲素材 game_images = {} for key, value in cfg.IMAGE_PATHS.items(): game_images[key] = pygame.image.load(value) game_sounds = {} for key, value in cfg.SOUNDS_PATHS.items(): if key != 'moonlight': game_sounds[key] = pygame.mixer.Sound(value) return screen, game_images, game_sounds '''主函數''' def main(): # 初始化 screen, game_images, game_sounds = initGame() # 播放背景音樂 pygame.mixer.music.load(cfg.SOUNDS_PATHS['moonlight']) pygame.mixer.music.play(-1, 0.0) # 字型載入 font = pygame.font.Font(None, 24) # 定義兔子 bunny = BunnySprite(image=game_images.get('rabbit'), position=(100, 100)) # 跟蹤玩家的精度變數, 記錄了射出的箭頭數和被擊中的獾的數量. acc_record = [0., 0.] # 生命值 healthvalue = 194 # 弓箭 arrow_sprites_group = pygame.sprite.Group() # 獾 badguy_sprites_group = pygame.sprite.Group() badguy = BadguySprite(game_images.get('badguy'), position=(640, 100)) badguy_sprites_group.add(badguy) # 定義了一個定時器, 使得遊戲裡經過一段時間後就新建一支獾 badtimer = 100 badtimer1 = 0 # 遊戲主迴圈, running變數會跟蹤遊戲是否結束, exitcode變數會跟蹤玩家是否勝利. running, exitcode = True, False clock = pygame.time.Clock() while running: # --在給螢幕畫任何東西之前用黑色進行填充 screen.fill(0) # --新增的風景也需要畫在螢幕上 for x in range(cfg.SCREENSIZE[0]//game_images['grass'].get_width()+1): for y in range(cfg.SCREENSIZE[1]//game_images['grass'].get_height()+1): screen.blit(game_images['grass'], (x*100, y*100)) for i in range(4): screen.blit(game_images['castle'], (0, 30+105*i)) # --倒計時資訊 countdown_text = font.render(str((90000-pygame.time.get_ticks())//60000)+":"+str((90000-pygame.time.get_ticks())//1000%60).zfill(2), True, (0, 0, 0)) countdown_rect = countdown_text.get_rect() countdown_rect.topright = [635, 5] screen.blit(countdown_text, countdown_rect) # --按鍵檢測 # ----退出與射擊 for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() sys.exit() elif event.type == pygame.MOUSEBUTTONDOWN: game_sounds['shoot'].play() acc_record[1] += 1 mouse_pos = pygame.mouse.get_pos() angle = math.atan2(mouse_pos[1]-(bunny.rotated_position[1]+32), mouse_pos[0]-(bunny.rotated_position[0]+26)) arrow = ArrowSprite(game_images.get('arrow'), (angle, bunny.rotated_position[0]+32, bunny.rotated_position[1]+26)) arrow_sprites_group.add(arrow) # ----移動兔子 key_pressed = pygame.key.get_pressed() if key_pressed[pygame.K_w]: bunny.move(cfg.SCREENSIZE, 'up') elif key_pressed[pygame.K_s]: bunny.move(cfg.SCREENSIZE, 'down') elif key_pressed[pygame.K_a]: bunny.move(cfg.SCREENSIZE, 'left') elif key_pressed[pygame.K_d]: bunny.move(cfg.SCREENSIZE, 'right') # --更新弓箭 for arrow in arrow_sprites_group: if arrow.update(cfg.SCREENSIZE): arrow_sprites_group.remove(arrow) # --更新獾 if badtimer == 0: badguy = BadguySprite(game_images.get('badguy'), position=(640, random.randint(50, 430))) badguy_sprites_group.add(badguy) badtimer = 100 - (badtimer1 * 2) badtimer1 = 20 if badtimer1>=20 else badtimer1+2 badtimer -= 1 for badguy in badguy_sprites_group: if badguy.update(): game_sounds['hit'].play() healthvalue -= random.randint(4, 8) badguy_sprites_group.remove(badguy) # --碰撞檢測 for arrow in arrow_sprites_group: for badguy in badguy_sprites_group: if pygame.sprite.collide_mask(arrow, badguy): game_sounds['enemy'].play() arrow_sprites_group.remove(arrow) badguy_sprites_group.remove(badguy) acc_record[0] += 1 # --畫出弓箭 arrow_sprites_group.draw(screen) # --畫出獾 badguy_sprites_group.draw(screen) # --畫出兔子 bunny.draw(screen, pygame.mouse.get_pos()) # --畫出城堡健康值, 首先畫了一個全紅色的生命值條, 然後根據城堡的生命值往生命條裡面新增綠色. screen.blit(game_images.get('healthbar'), (5, 5)) for i in range(healthvalue): screen.blit(game_images.get('health'), (i+8, 8)) # --判斷遊戲是否結束 if pygame.time.get_ticks() >= 90000: running, exitcode = False, True if healthvalue <= 0: running, exitcode = False, False # --更新螢幕 pygame.display.flip() clock.tick(cfg.FPS) # 計算準確率 accuracy = acc_record[0] / acc_record[1] * 100 if acc_record[1] > 0 else 0 accuracy = '%.2f' % accuracy showEndGameInterface(screen, exitcode, accuracy, game_images) '''run''' if __name__ == '__main__': main()
import sys import cfg import pygame from modules import * '''遊戲介面''' def GamingInterface(num_player, screen): # 初始化 pygame.mixer.music.load(cfg.SOUNDPATHS['Cool Space Music']) pygame.mixer.music.set_volume(0.4) pygame.mixer.music.play(-1) explosion_sound = pygame.mixer.Sound(cfg.SOUNDPATHS['boom']) fire_sound = pygame.mixer.Sound(cfg.SOUNDPATHS['shot']) font = pygame.font.Font(cfg.FONTPATH, 20) # 遊戲背景圖 bg_imgs = [cfg.IMAGEPATHS['bg_big'], cfg.IMAGEPATHS['seamless_space'], cfg.IMAGEPATHS['space3']] bg_move_dis = 0 bg_1 = pygame.image.load(bg_imgs[0]).convert() bg_2 = pygame.image.load(bg_imgs[1]).convert() bg_3 = pygame.image.load(bg_imgs[2]).convert() # 玩家, 子彈和小行星精靈組 player_group = pygame.sprite.Group() bullet_group = pygame.sprite.Group() asteroid_group = pygame.sprite.Group() # 產生小行星的時間間隔 asteroid_ticks = 90 for i in range(num_player): player_group.add(Ship(i+1, cfg)) clock = pygame.time.Clock() # 分數 score_1, score_2 = 0, 0 # 遊戲主迴圈 while True: for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() sys.exit() # --玩家一: ↑↓←→控制, j射擊; 玩家二: wsad控制, 空格射擊 pressed_keys = pygame.key.get_pressed() for idx, player in enumerate(player_group): direction = None if idx == 0: if pressed_keys[pygame.K_UP]: direction = 'up' elif pressed_keys[pygame.K_DOWN]: direction = 'down' elif pressed_keys[pygame.K_LEFT]: direction = 'left' elif pressed_keys[pygame.K_RIGHT]: direction = 'right' if direction: player.move(direction) if pressed_keys[pygame.K_j]: if player.cooling_time == 0: fire_sound.play() bullet_group.add(player.shot()) player.cooling_time = 20 elif idx == 1: if pressed_keys[pygame.K_w]: direction = 'up' elif pressed_keys[pygame.K_s]: direction = 'down' elif pressed_keys[pygame.K_a]: direction = 'left' elif pressed_keys[pygame.K_d]: direction = 'right' if direction: player.move(direction) if pressed_keys[pygame.K_SPACE]: if player.cooling_time == 0: fire_sound.play() bullet_group.add(player.shot()) player.cooling_time = 20 if player.cooling_time > 0: player.cooling_time -= 1 if (score_1 + score_2) < 500: background = bg_1 elif (score_1 + score_2) < 1500: background = bg_2 else: background = bg_3 # --向下移動背景圖實現飛船向上移動的效果 screen.blit(background, (0, -background.get_rect().height + bg_move_dis)) screen.blit(background, (0, bg_move_dis)) bg_move_dis = (bg_move_dis + 2) % background.get_rect().height # --生成小行星 if asteroid_ticks == 0: asteroid_ticks = 90 asteroid_group.add(Asteroid(cfg)) else: asteroid_ticks -= 1 # --畫飛船 for player in player_group: if pygame.sprite.spritecollide(player, asteroid_group, True, None): player.explode_step = 1 explosion_sound.play() elif player.explode_step > 0: if player.explode_step > 3: player_group.remove(player) if len(player_group) == 0: return else: player.explode(screen) else: player.draw(screen) # --畫子彈 for bullet in bullet_group: bullet.move() if pygame.sprite.spritecollide(bullet, asteroid_group, True, None): bullet_group.remove(bullet) if bullet.player_idx == 1: score_1 += 1 else: score_2 += 1 else: bullet.draw(screen) # --畫小行星 for asteroid in asteroid_group: asteroid.move() asteroid.rotate() asteroid.draw(screen) # --顯示分數 score_1_text = '玩家一得分: %s' % score_1 score_2_text = '玩家二得分: %s' % score_2 text_1 = font.render(score_1_text, True, (0, 0, 255)) text_2 = font.render(score_2_text, True, (255, 0, 0)) screen.blit(text_1, (2, 5)) screen.blit(text_2, (2, 35)) # --螢幕重新整理 pygame.display.update() clock.tick(60) '''主函數''' def main(): pygame.init() pygame.font.init() pygame.mixer.init() screen = pygame.display.set_mode(cfg.SCREENSIZE) pygame.display.set_caption('簡易版——飛機大戰 ') num_player = StartInterface(screen, cfg) if num_player == 1: while True: GamingInterface(num_player=1, screen=screen) EndInterface(screen, cfg) else: while True: GamingInterface(num_player=2, screen=screen) EndInterface(screen, cfg) '''run''' if __name__ == '__main__': main()
以上就是Python Pygame實戰之五款童年經典遊戲合集的詳細內容,更多關於Python Pygame遊戲的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45