Network Security Internet Technology Development Database Servers Mobile Phone Android Software Apple Software Computer Software News IT Information

In addition to Weibo, there is also WeChat

Please pay attention

WeChat public account

Shulou

How to write the Python game code

2025-01-15 Update From: SLTechnology News&Howtos shulou NAV: SLTechnology News&Howtos > Development >

Share

Shulou(Shulou.com)06/01 Report--

< 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) #-draw bullet 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) #-draw asteroid for asteroid in asteroid_group: Asteroid.move () asteroid.rotate () asteroid.draw (screen) #-display score score_1_text = 'player 1 score:% s'% score_1 score_2_text = 'player 2 score:% 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)) #-screen refresh pygame.display.update () clock.tick (60)''main function' 'def main (): pygame.init () pygame.font.init () pygame.mixer.init () screen = pygame.display.set_mode (cfg.SCREENSIZE) pygame.display.set_caption (' aircraft Battle-Nine songs') 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 () 5, gopher

Source code sharing:

Import cfgimport sysimport pygameimport randomfrom modules import * 'Game initialization' 'def initGame (): pygame.init () pygame.mixer.init () screen = pygame.display.set_mode (cfg.SCREENSIZE) pygame.display.set_caption (' Gopher-Nine songs') return screen''main function' 'def main (): # initialize screen = initGame () # load background Music and other sound effects pygame.mixer.music.load (cfg.BGM_PATH) pygame.mixer.music.play (- 1) audios = {'count_down': pygame.mixer.Sound (cfg.COUNT_DOWN_SOUND_PATH) 'hammering': pygame.mixer.Sound (cfg.HAMMERING_SOUND_PATH)} # load font font = pygame.font.Font (cfg.FONT_PATH, 40) # load background picture bg_img = pygame.image.load (cfg.GAME_BG_IMAGEPATH) # start interface startInterface (screen Cfg.GAME_BEGIN_IMAGEPATHS) # timing of hamster changing position hole_pos = random.choice (cfg.HOLE_POSITIONS) change_hole_event = pygame.USEREVENT pygame.time.set_timer (change_hole_event, 800) # hamster mole = Mole (cfg.MOLE_IMAGEPATHS, hole_pos) # Hammer hammer = Hammer (cfg.HAMMER_IMAGEPATHS, # clock clock = pygame.time.Clock () # score your_score = 0 flag = False # initial time init_time = pygame.time.get_ticks () # Game main cycle while True: #-the game time is 60s time_remain = round ((61000-(pygame.time.get_ticks ()-init_time) / 1000.) #-reduced game time The hamster changes position faster if time_remain = = 40 and not flag: hole_pos = random.choice (cfg.HOLE_POSITIONS) mole.reset () mole.setPosition (hole_pos) pygame.time.set_timer (change_hole_event) Flag = True elif time_remain = = 20 and flag: hole_pos = random.choice (cfg.HOLE_POSITIONS) mole.reset () mole.setPosition (hole_pos) pygame.time.set_timer (change_hole_event Flag = False #-countdown sound if time_remain = 10: audios ['count_down'] .play () #-Game over if time_remain

< 0: break count_down_text = font.render('Time: '+str(time_remain), True, cfg.WHITE) # --按键检测 for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() sys.exit() elif event.type == pygame.MOUSEMOTION: hammer.setPosition(pygame.mouse.get_pos()) elif event.type == pygame.MOUSEBUTTONDOWN: if event.button == 1: hammer.setHammering() elif event.type == change_hole_event: hole_pos = random.choice(cfg.HOLE_POSITIONS) mole.reset() mole.setPosition(hole_pos) # --碰撞检测 if hammer.is_hammering and not mole.is_hammer: is_hammer = pygame.sprite.collide_mask(hammer, mole) if is_hammer: audios['hammering'].play() mole.setBeHammered() your_score += 10 # --分数 your_score_text = font.render('Score: '+str(your_score), True, cfg.BROWN) # --绑定必要的游戏元素到屏幕(注意顺序) screen.blit(bg_img, (0, 0)) screen.blit(count_down_text, (875, 8)) screen.blit(your_score_text, (800, 430)) mole.draw(screen) hammer.draw(screen) # --更新 pygame.display.flip() clock.tick(60) # 读取最佳分数(try块避免第一次游戏无.rec文件) try: best_score = int(open(cfg.RECORD_PATH).read()) except: best_score = 0 # 若当前分数大于最佳分数则更新最佳分数 if your_score >

Best_score: F = open (cfg.RECORD_PATH,'w') f.write (str (your_score)) f.close () # end interface score_info = {'your_score': your_score,' best_score': best_score} is_restart = endInterface (screen, cfg.GAME_END_IMAGEPATH, cfg.GAME_AGAIN_IMAGEPATHS, score_info, cfg.FONT_PATH, [cfg.WHITE, cfg.RED] Cfg.SCREENSIZE) return is_restart''run'''if _ _ name__ =' _ _ main__': while True: is_restart = main () if not is_restart: break6, Little Dinosaur

How to play: up and down control take-off to avoid

Source code sharing:

Import cfgimport sysimport randomimport pygamefrom modules import *''main'''def main (highest_score): # Game initialization pygame.init () screen = pygame.display.set_mode (cfg.SCREENSIZE) pygame.display.set_caption (' Nine songs') # Import all sound files sounds = {} for key Value in cfg.AUDIO_PATHS.items (): sounds [key] = pygame.mixer.Sound (value) # Game start interface GameStartInterface (screen, sounds, cfg) # define some necessary elements and variables in the game score = 0 score_board = Scoreboard (cfg.IMAGE_PATHS ['numbers'], position= (534,15) Bg_color=cfg.BACKGROUND_COLOR) highest_score = highest_score highest_score_board = Scoreboard (cfg.IMAGE_PATHS ['numbers'], position= (435,15), bg_color=cfg.BACKGROUND_COLOR, is_highest=True) dino = Dinosaur (cfg.IMAGE_PATHS [' dino']) ground = Ground (cfg.IMAGE_PATHS ['ground'], position= (0) Cfg.SCREENSIZE [1]) cloud_sprites_group = pygame.sprite.Group () cactus_sprites_group = pygame.sprite.Group () ptera_sprites_group = pygame.sprite.Group () add_obstacle_timer = 0 score_timer = 0 # Game main cycle clock = pygame.time.Clock () while True: for event in pygame.event.get (): if event.type = = pygame .qit: pygame.quit () sys.exit () elif event.type = = pygame.KEYDOWN: if event.key = = pygame.K_SPACE or event.key = = pygame.K_UP: dino.jump (sounds) elif event.key = = pygame.K_DOWN: dino. Duck () elif event.type = = pygame.KEYUP and event.key = = pygame.K_DOWN: dino.unduck () screen.fill (cfg.BACKGROUND_COLOR) #-add Cloud if len (cloud_sprites_group) randomly

< 5 and random.randrange(0, 300) == 10: cloud_sprites_group.add(Cloud(cfg.IMAGE_PATHS['cloud'], position=(cfg.SCREENSIZE[0], random.randrange(30, 75)))) # --随机添加仙人掌/飞龙 add_obstacle_timer += 1 if add_obstacle_timer >

Random.randrange (50150): add_obstacle_timer = 0 random_value = random.randrange (0,10) if random_value > = 5 and random_value (cfg.FPS//12): score_timer = 0 score + = 1 score = min (score) 99999) if score > highest_score: highest_score = score if score% 1000 = 0: sounds ['point'] .play () if score% 1000 = 0: ground.speed-= 1 for item in cloud_sprites_group: item.speed-= 1 For item in cactus_sprites_group: item.speed-= 1 for item in ptera_sprites_group: item.speed-= 1 #-- collision detection for item in cactus_sprites_group: if pygame.sprite.collide_mask (dino Item): dino.die (sounds) for item in ptera_sprites_group: if pygame.sprite.collide_mask (dino Item): dino.die (sounds) #-draw game elements onto the screen dino.draw (screen) ground.draw (screen) cloud_sprites_group.draw (screen) cactus_sprites_group.draw (screen) ptera_sprites_group.draw (screen) score_board.set (score) highest_score_board.set (highest_score) score_board.draw (screen) highest_score_board.draw (screen) #-Update screen pygame.display.update () clock.tick (cfg.FPS) #-whether the game is over if dino.is_dead: break # Game end interface return GameEndInterface (screen Cfg), highest_score''run'''if _ _ name__ =' _ _ main__': highest_score = 0 while True: flag, highest_score = main (highest_score) if not flag: break7, Xiaoxiole

How to play: it can be eliminated by connecting three.

Source code sharing:

Import osimport sysimport cfgimport pygamefrom modules import * 'Game main Program' 'def main (): pygame.init () screen = pygame.display.set_mode (cfg.SCREENSIZE) pygame.display.set_caption (' Gemgem-Nine songs') # load background music pygame.mixer.init () pygame.mixer.music.load (os.path.join (cfg.ROOTDIR) "resources/audios/bg.mp3") pygame.mixer.music.set_volume (0.6) pygame.mixer.music.play (- 1) # load sound sounds = {} sounds ['mismatch'] = pygame.mixer.Sound (os.path.join (cfg.ROOTDIR) 'resources/audios/badswap.wav')) sounds [' match'] = [] for i in range (6): sounds ['match'] .append (pygame.mixer.Sound (os.path.join (cfg.ROOTDIR,' resources/audios/match%s.wav'% I) # load font font = pygame.font.Font (os.path.join (cfg.ROOTDIR, 'resources/font/font.TTF')) 25) # Image loading gem_imgs = [] for i in range (1,8): gem_imgs.append (os.path.join (cfg.ROOTDIR, 'resources/images/gem%s.png'% I)) # main loop game = gemGame (screen, sounds, font, gem_imgs) Cfg) while True: score = game.start () flag = False # after a round of games, players choose to replay or exit while True: for event in pygame.event.get (): if event.type = = pygame.QUIT or (event.type = = pygame.KEYUP and event.key = = pygame.K_ESCAPE): pygame Pygame.K_r () sys.exit () elif event.type = = pygame.KEYUP and event.key = = pygame.K_r: flag = True if flag: break screen.fill 206235) text0 = 'Final score:% s'% score text1 = 'Press to restart the game.' Text2 = 'Press to quit the game.' Y = 150for idx, text in enumerate ([text0, text1, text2]): text_render = font.render (text, 1, (85,65,0)) rect = text_render.get_rect () if idx = 0: rect.left, rect.top = Y) elif idx = = 1: rect.left, rect.top = (122.5, y) else: rect.left, rect.top = (126.5, y) y + = 100screen.blit (text_render) Rect) pygame.display.update () game.reset ()''run'''if _ _ name__ = =' _ main__': main () 8, Tetris

How to play: childhood classic, ordinary mode is not interesting, when we were young, we all played with acceleration.

Source code sharing:

Import osimport sysimport randomfrom modules import * from PyQt5.QtGui import * from PyQt5.QtCore import * from PyQt5.QtWidgets import * 'define Tetris game category' 'class TetrisGame (QMainWindow): def _ init__ (self, parent=None): super (TetrisGame) Self). _ init__ (parent) # whether to pause ing self.is_paused = False # whether to start ing self.is_started = False self.initUI () 'interface initialization' def initUI (self): # icon self.setWindowIcon (QIcon (os.path.join (os.getcwd () 'resources/icon.jpg')) # Block size self.grid_size = 22 # Game frame rate self.fps = 200self.timer = QBasicTimer () # focus self.setFocusPolicy (Qt.StrongFocus) # horizontal layout layout_horizontal = QHBoxLayout () self.inner_board = InnerBoard () self.external_board = ExternalBoard (self Self.grid_size, self.inner_board) layout_horizontal.addWidget (self.external_board) self.side_panel = SidePanel (self, self.grid_size) Self.inner_board) layout_horizontal.addWidget (self.side_panel) self.status_bar = self.statusBar () self.external_board.score_ [str] .connect (self.status_bar.showMessage) self.start () self.center () self.setWindowTitle ('Tetris-- Nine songs') self.show () self.setFixedSize (self.external_ Board.width () + self.side_panel.width () Self.side_panel.height () + self.status_bar.height ()''the game interface moves to the middle of the screen' 'def center (self): screen = QDesktopWidget (). ScreenGeometry () size = self.geometry () self.move ((screen.width ()-size.width ()) / / 2 (screen.height ()-size.height ()) / / 2)''Update Interface' 'def updateWindow (self): self.external_board.updateData () self.side_panel.updateData () self.update ()' 'start' 'def start (self): if self.is_started: return self.is_started = True self.inner_board.createNewTetris () self.timer.start (self.fps Self)''pause / no pause' 'def pause (self): if not self.is_started: return self.is_paused = not self.is_paused if self.is_paused: self.timer.stop () self.external_board.score_signal.emit (' Paused') else: self.timer.start (self.fps) Self) self.updateWindow ()''timer event' 'def timerEvent (self, event): if event.timerId () = self.timer.timerId (): removed_lines = self.inner_board.moveDown () self.external_board.score + = removed_lines self.updateWindow () else: super (TetrisGame Self) .timerEvent (event)''keystroke event' 'def keyPressEvent (self, event): if not self.is_started or self.inner_board.current_tetris = = tetrisShape () .shape_empty: super (TetrisGame Self) .keyPressEvent (event) return key = event.key () # P key pause if key = = Qt.Key_P: self.pause () return if self.is_paused: return # left elif key = = Qt.Key_Left: self.inner_board.moveLeft () # right elif key = = Qt.Key_Right: self.inner_board.moveRight () # rotate elif key = = Qt.Key_Up: self.inner_board.rotateAnticlockwise () # Fast fall elif key = = Qt.Key_Space: self.external_board.score + = self.inner_board.dropDown () else: super (TetrisGame Self) .keyPressEvent (event) self.updateWindow ()''run'''if _ _ name__ = =' _ main__': app = QApplication ([]) tetris = TetrisGame () sys.exit (app.exec_ ()) 9, gluttonous snake

How to play: childhood classic, ordinary magic is not interesting, childhood play is also accelerated.

Source code sharing:

Import cfgimport sysimport pygamefrom modules import *''main function' 'def main (cfg): # Game initialization pygame.init () screen = pygame.display.set_mode (cfg.SCREENSIZE) pygame.display.set_caption (' Greedy Snake-- Nine songs') clock = pygame.time.Clock () # play background music pygame.mixer.music.load (cfg.BGMPATH) pygame.mixer.music.play ( -1) # Game main cycle snake = Snake (cfg) apple = Apple (cfg Snake.coords) score = 0 while True: screen.fill (cfg.BLACK) #-- key detection for event in pygame.event.get (): if event.type = = pygame.QUIT: pygame.quit () sys.exit () elif event.type = = pygame.KEYDOWN: if event.key in [pygame.K_UP Pygame.K_DOWN, pygame.K_LEFT, pygame.K_RIGHT]: snake.setDirection ({pygame.K_UP: 'up', pygame.K_DOWN:' down', pygame.K_LEFT: 'left', pygame.K_RIGHT:' right'} [event.key]) #-- Update Snake and Food if snake.update (apple): apple = Apple (cfg) Snake.coords) score + = 1 #-determine whether the game is over if snake.isgameover: break #-display the necessary elements in the game drawGameGrid (cfg, screen) snake.draw (screen) apple.draw (screen) showScore (cfg, score Screen) #-screen update pygame.display.update () clock.tick (cfg.FPS) return endInterface (screen, cfg)''run'''if _ _ name__ = =' _ _ main__': while True: if not main (cfg): break10, 24:00 Mini Game

Play: through the operation of addition, subtraction, multiplication and division, primary school students have no problem.

Source code sharing:

Import osimport sysimport pygamefrom cfg import * from modules import * from fractions import Fraction''check whether the control is clicked' 'def checkClicked (group, mouse_pos) Group_type='NUMBER'): selected = [] # Digital card / operator card if group_type= = GROUPTYPES [0] or group_type= = GROUPTYPES [1]: max_selected = 2 if group_type= = GROUPTYPES [0] else 1 num_selected = 0 for each in group: num_selected + = int (each.is_selected) for each in group: if each .origindepoint (mouse_pos): if each.is_selected: each.is_selected = not each.is_selected num_selected-= 1 each.select_order = None else: if num_selected

< max_selected: each.is_selected = not each.is_selected num_selected += 1 each.select_order = str(num_selected) if each.is_selected: selected.append(each.attribute) # 按钮卡片 elif group_type == GROUPTYPES[2]: for each in group: if each.rect.collidepoint(mouse_pos): each.is_selected = True selected.append(each.attribute) # 抛出异常 else: raise ValueError('checkClicked.group_type unsupport %s, expect %s, %s or %s...' % (group_type, *GROUPTYPES)) return selected '''获取数字精灵组'''def getNumberSpritesGroup(numbers): number_sprites_group = pygame.sprite.Group() for idx, number in enumerate(numbers): args = (*NUMBERCARD_POSITIONS[idx], str(number), NUMBERFONT, NUMBERFONT_COLORS, NUMBERCARD_COLORS, str(number)) number_sprites_group.add(Card(*args)) return number_sprites_group '''获取运算符精灵组'''def getOperatorSpritesGroup(operators): operator_sprites_group = pygame.sprite.Group() for idx, operator in enumerate(operators): args = (*OPERATORCARD_POSITIONS[idx], str(operator), OPERATORFONT, OPREATORFONT_COLORS, OPERATORCARD_COLORS, str(operator)) operator_sprites_group.add(Card(*args)) return operator_sprites_group '''获取按钮精灵组'''def getButtonSpritesGroup(buttons): button_sprites_group = pygame.sprite.Group() for idx, button in enumerate(buttons): args = (*BUTTONCARD_POSITIONS[idx], str(button), BUTTONFONT, BUTTONFONT_COLORS, BUTTONCARD_COLORS, str(button)) button_sprites_group.add(Button(*args)) return button_sprites_group '''计算'''def calculate(number1, number2, operator): operator_map = {'+': '+', '-': '-', '×': '*', '÷': '/'} try: result = str(eval(number1+operator_map[operator]+number2)) return result if '.' not in result else str(Fraction(number1+operator_map[operator]+number2)) except: return None '''在屏幕上显示信息'''def showInfo(text, screen): rect = pygame.Rect(200, 180, 400, 200) pygame.draw.rect(screen, PAPAYAWHIP, rect) font = pygame.font.Font(FONTPATH, 40) text_render = font.render(text, True, BLACK) font_size = font.size(text) screen.blit(text_render, (rect.x+(rect.width-font_size[0])/2, rect.y+(rect.height-font_size[1])/2)) '''主函数'''def main(): # 初始化, 导入必要的游戏素材 pygame.init() pygame.mixer.init() screen = pygame.display.set_mode(SCREENSIZE) pygame.display.set_caption('24 point -- 九歌') win_sound = pygame.mixer.Sound(AUDIOWINPATH) lose_sound = pygame.mixer.Sound(AUDIOLOSEPATH) warn_sound = pygame.mixer.Sound(AUDIOWARNPATH) pygame.mixer.music.load(BGMPATH) pygame.mixer.music.play(-1, 0.0) # 24点游戏生成器 game24_gen = game24Generator() game24_gen.generate() # 精灵组 # --数字 number_sprites_group = getNumberSpritesGroup(game24_gen.numbers_now) # --运算符 operator_sprites_group = getOperatorSpritesGroup(OPREATORS) # --按钮 button_sprites_group = getButtonSpritesGroup(BUTTONS) # 游戏主循环 clock = pygame.time.Clock() selected_numbers = [] selected_operators = [] selected_buttons = [] is_win = False while True: for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() sys.exit(-1) elif event.type == pygame.MOUSEBUTTONUP: mouse_pos = pygame.mouse.get_pos() selected_numbers = checkClicked(number_sprites_group, mouse_pos, 'NUMBER') selected_operators = checkClicked(operator_sprites_group, mouse_pos, 'OPREATOR') selected_buttons = checkClicked(button_sprites_group, mouse_pos, 'BUTTON') screen.fill(AZURE) # 更新数字 if len(selected_numbers) == 2 and len(selected_operators) == 1: noselected_numbers = [] for each in number_sprites_group: if each.is_selected: if each.select_order == '1': selected_number1 = each.attribute elif each.select_order == '2': selected_number2 = each.attribute else: raise ValueError('Unknow select_order %s, expect 1 or 2...' % each.select_order) else: noselected_numbers.append(each.attribute) each.is_selected = False for each in operator_sprites_group: each.is_selected = False result = calculate(selected_number1, selected_number2, *selected_operators) if result is not None: game24_gen.numbers_now = noselected_numbers + [result] is_win = game24_gen.check() if is_win: win_sound.play() if not is_win and len(game24_gen.numbers_now) == 1: lose_sound.play() else: warn_sound.play() selected_numbers = [] selected_operators = [] number_sprites_group = getNumberSpritesGroup(game24_gen.numbers_now) # 精灵都画到screen上 for each in number_sprites_group: each.draw(screen, pygame.mouse.get_pos()) for each in operator_sprites_group: each.draw(screen, pygame.mouse.get_pos()) for each in button_sprites_group: if selected_buttons and selected_buttons[0] in ['RESET', 'NEXT']: is_win = False if selected_buttons and each.attribute == selected_buttons[0]: each.is_selected = False number_sprites_group = each.do(game24_gen, getNumberSpritesGroup, number_sprites_group, button_sprites_group) selected_buttons = [] each.draw(screen, pygame.mouse.get_pos()) # 游戏胜利 if is_win: showInfo('Congratulations', screen) # 游戏失败 if not is_win and len(game24_gen.numbers_now) == 1: showInfo('Game Over', screen) pygame.display.flip() clock.tick(30) '''run'''if __name__ == '__main__': main()11、平衡木 玩法:也是小时候的经典游戏,控制左右就行,到后面才有一点点难度。 源码分享: import cfgfrom modules import breakoutClone '''主函数'''def main(): game = breakoutClone(cfg) game.run() '''run'''if __name__ == '__main__': main()12、外星人入侵 玩法:这让我想起了魂斗罗那第几关的boss,有点类似,不过魂斗罗那个难度肯定高点。 源码分享: import osimport sysimport cfgimport randomimport pygamefrom modules import * '''开始游戏'''def startGame(screen): clock = pygame.time.Clock() # 加载字体 font = pygame.font.SysFont('arial', 18) if not os.path.isfile('score'): f = open('score', 'w') f.write('0') f.close() with open('score', 'r') as f: highest_score = int(f.read().strip()) # 敌方 enemies_group = pygame.sprite.Group() for i in range(55): if i < 11: enemy = enemySprite('small', i, cfg.WHITE, cfg.WHITE) elif i < 33: enemy = enemySprite('medium', i, cfg.WHITE, cfg.WHITE) else: enemy = enemySprite('large', i, cfg.WHITE, cfg.WHITE) enemy.rect.x = 85 + (i % 11) * 50 enemy.rect.y = 120 + (i // 11) * 45 enemies_group.add(enemy) boomed_enemies_group = pygame.sprite.Group() en_bullets_group = pygame.sprite.Group() ufo = ufoSprite(color=cfg.RED) # 我方 myaircraft = aircraftSprite(color=cfg.GREEN, bullet_color=cfg.WHITE) my_bullets_group = pygame.sprite.Group() # 用于控制敌方位置更新 # --移动一行 enemy_move_count = 24 enemy_move_interval = 24 enemy_move_flag = False # --改变移动方向(改变方向的同时集体下降一次) enemy_change_direction_count = 0 enemy_change_direction_interval = 60 enemy_need_down = False enemy_move_right = True enemy_need_move_row = 6 enemy_max_row = 5 # 用于控制敌方发射子弹 enemy_shot_interval = 100 enemy_shot_count = 0 enemy_shot_flag = False # 游戏进行中 running = True is_win = False # 主循环 while running: screen.fill(cfg.BLACK) for event in pygame.event.get(): # --点右上角的X或者按Esc键退出游戏 if event.type == pygame.QUIT: pygame.quit() sys.exit() if event.type == pygame.KEYDOWN: if event.key == pygame.K_ESCAPE: pygame.quit() sys.exit() # --射击 if event.type == pygame.MOUSEBUTTONDOWN: my_bullet = myaircraft.shot() if my_bullet: my_bullets_group.add(my_bullet) # --我方子弹与敌方/UFO碰撞检测 for enemy in enemies_group: if pygame.sprite.spritecollide(enemy, my_bullets_group, True, None): boomed_enemies_group.add(enemy) enemies_group.remove(enemy) myaircraft.score += enemy.reward if pygame.sprite.spritecollide(ufo, my_bullets_group, True, None): ufo.is_dead = True myaircraft.score += ufo.reward # --更新并画敌方 # ----敌方子弹 enemy_shot_count += 1 if enemy_shot_count >

Enemy_shot_interval: enemy_shot_flag = True enemies_survive_list = [enemy.number for enemy in enemies_group] shot_number = random.choice (enemies_survive_list) enemy_shot_count = 0 #-enemy mobile enemy_move_count + = 1 if enemy_move_count > enemy_move_interval: Enemy_move_count = 0 enemy_move_flag = True enemy_need_move_row-= 1 if enemy_need_move_row = = 0: enemy_need_move_row = enemy_max_row enemy_change_direction_count + = 1 if enemy_change_direction_count > enemy_change_direction_interval: enemy_change_ Direction_count = 1 enemy_move_right = not enemy_move_right enemy_need_down = True #-increase movement and firing speed per drop enemy_move_interval = max (15 Enemy_move_interval-3) enemy_shot_interval = max (50 Enemy_move_interval-10) #-traversal updates for enemy in enemies_group: if enemy_shot_flag: if enemy.number = = shot_number: en_bullet = enemy.shot () en_bullets_group.add (en_bullet) if enemy_move_flag: If enemy.number in range ((enemy_need_move_row-1) * 11 Enemy_need_move_row*11): if enemy_move_right: enemy.update ('right', cfg.SCREENSIZE [1]) else: enemy.update (' left', cfg.SCREENSIZE [1]) else: enemy.update (None Cfg.SCREENSIZE [1]) if enemy_need_down: if enemy.update ('down' Cfg.SCREENSIZE [1]): running = False is_win = False enemy.change_count-= 1 enemy.draw (screen) enemy_move_flag = False enemy_need_down = False enemy_shot_flag = False #-enemy explosion special effect for boomed_enemy in boomed_enemies _ group: if boomed_enemy.boom (screen): boomed_enemies_group.remove (boomed_enemy) del boomed_enemy #-- collision detection of enemy bullets with our spacecraft if not myaircraft.one_dead: if pygame.sprite.spritecollide (myaircraft En_bullets_group, True, None): myaircraft.one_dead = True if myaircraft.one_dead: if myaircraft.boom (screen): myaircraft.resetBoom () myaircraft.num_life-= 1 if myaircraft.num_life

< 1: running = False is_win = False else: # ----更新飞船 myaircraft.update(cfg.SCREENSIZE[0]) # ----画飞船 myaircraft.draw(screen) if (not ufo.has_boomed) and (ufo.is_dead): if ufo.boom(screen): ufo.has_boomed = True else: # ----更新UFO ufo.update(cfg.SCREENSIZE[0]) # ----画UFO ufo.draw(screen) # --画我方飞船子弹 for bullet in my_bullets_group: if bullet.update(): my_bullets_group.remove(bullet) del bullet else: bullet.draw(screen) # --画敌方子弹 for bullet in en_bullets_group: if bullet.update(cfg.SCREENSIZE[1]): en_bullets_group.remove(bullet) del bullet else: bullet.draw(screen) if myaircraft.score >

Highest_score: highest_score = myaircraft.score #-for every 2000 increase in score, our ship adds one life if (myaircraft.score% 2000 = = 0) and (myaircraft.score > 0) and (myaircraft.score! = myaircraft.old_score): myaircraft.old_score = myaircraft.score myaircraft.num_life = min (myaircraft.num_life + 1) (myaircraft.max_num_life) #-if the enemy is all dead, if len (enemies_group)

< 1: is_win = True running = False # --显示文字 # ----当前得分 showText(screen, 'SCORE: ', cfg.WHITE, font, 200, 8) showText(screen, str(myaircraft.score), cfg.WHITE, font, 200, 24) # ----敌人数量 showText(screen, 'ENEMY: ', cfg.WHITE, font, 370, 8) showText(screen, str(len(enemies_group)), cfg.WHITE, font, 370, 24) # ----历史最高分 showText(screen, 'HIGHEST: ', cfg.WHITE, font, 540, 8) showText(screen, str(highest_score), cfg.WHITE, font, 540, 24) # ----FPS showText(screen, 'FPS: ' + str(int(clock.get_fps())), cfg.RED, font, 8, 8) # --显示剩余生命值 showLife(screen, myaircraft.num_life, cfg.GREEN) pygame.display.update() clock.tick(cfg.FPS) with open('score', 'w') as f: f.write(str(highest_score)) return is_win '''主函数'''def main(): # 初始化 pygame.init() pygame.display.set_caption('外星人入侵 -- 九歌') screen = pygame.display.set_mode(cfg.SCREENSIZE) pygame.mixer.init() pygame.mixer.music.load(cfg.BGMPATH) pygame.mixer.music.set_volume(0.4) pygame.mixer.music.play(-1) while True: is_win = startGame(screen) endInterface(screen, cfg.BLACK, is_win) '''run'''if __name__ == '__main__': main()13、井字棋888 玩法:我打赌大家在课堂上肯定玩过这个,想想当年和同桌玩这个废了好几本本子。 源码分享 from tkinter import *import tkinter.messagebox as msg root = Tk()root.title('TIC-TAC-TOE---Project Gurukul')# labelsLabel(root, text="player1 : X", font="times 15").grid(row=0, column=1)Label(root, text="player2 : O", font="times 15").grid(row=0, column=2) digits = [1, 2, 3, 4, 5, 6, 7, 8, 9] # for player1 sign = X and for player2 sign= Ymark = '' # counting the no. of clickcount = 0 panels = ["panel"] * 10 def win(panels, sign): return ((panels[1] == panels[2] == panels[3] == sign) or (panels[1] == panels[4] == panels[7] == sign) or (panels[1] == panels[5] == panels[9] == sign) or (panels[2] == panels[5] == panels[8] == sign) or (panels[3] == panels[6] == panels[9] == sign) or (panels[3] == panels[5] == panels[7] == sign) or (panels[4] == panels[5] == panels[6] == sign) or (panels[7] == panels[8] == panels[9] == sign)) def checker(digit): global count, mark, digits # Check which button clicked if digit == 1 and digit in digits: digits.remove(digit) ##player1 will play if the value of count is even and for odd player2 will play if count % 2 == 0: mark = 'X' panels[digit] = mark elif count % 2 != 0: mark = 'O' panels[digit] = mark button1.config(text=mark) count = count + 1 sign = mark if (win(panels, sign) and sign == 'X'): msg.showinfo("Result", "Player1 wins") root.destroy() elif (win(panels, sign) and sign == 'O'): msg.showinfo("Result", "Player2 wins") root.destroy() if digit == 2 and digit in digits: digits.remove(digit) if count % 2 == 0: mark = 'X' panels[digit] = mark elif count % 2 != 0: mark = 'O' panels[digit] = mark button2.config(text=mark) count = count + 1 sign = mark if (win(panels, sign) and sign == 'X'): msg.showinfo("Result", "Player1 wins") root.destroy() elif (win(panels, sign) and sign == 'O'): msg.showinfo("Result", "Player2 wins") root.destroy() if digit == 3 and digit in digits: digits.remove(digit) if count % 2 == 0: mark = 'X' panels[digit] = mark elif count % 2 != 0: mark = 'O' panels[digit] = mark button3.config(text=mark) count = count + 1 sign = mark if (win(panels, sign) and sign == 'X'): msg.showinfo("Result", "Player1 wins") root.destroy() elif (win(panels, sign) and sign == 'O'): msg.showinfo("Result", "Player2 wins") root.destroy() if digit == 4 and digit in digits: digits.remove(digit) if count % 2 == 0: mark = 'X' panels[digit] = mark elif count % 2 != 0: mark = 'O' panels[digit] = mark button4.config(text=mark) count = count + 1 sign = mark if (win(panels, sign) and sign == 'X'): msg.showinfo("Result", "Player1 wins") root.destroy() elif (win(panels, sign) and sign == 'O'): msg.showinfo("Result", "Player2 wins") root.destroy() if digit == 5 and digit in digits: digits.remove(digit) if count % 2 == 0: mark = 'X' panels[digit] = mark elif count % 2 != 0: mark = 'O' panels[digit] = mark button5.config(text=mark) count = count + 1 sign = mark if (win(panels, sign) and sign == 'X'): msg.showinfo("Result", "Player1 wins") root.destroy() elif (win(panels, sign) and sign == 'O'): msg.showinfo("Result", "Player2 wins") root.destroy() if digit == 6 and digit in digits: digits.remove(digit) if count % 2 == 0: mark = 'X' panels[digit] = mark elif count % 2 != 0: mark = 'O' panels[digit] = mark button6.config(text=mark) count = count + 1 sign = mark if (win(panels, sign) and sign == 'X'): msg.showinfo("Result", "Player1 wins") root.destroy() elif (win(panels, sign) and sign == 'O'): msg.showinfo("Result", "Player2 wins") root.destroy() if digit == 7 and digit in digits: digits.remove(digit) if count % 2 == 0: mark = 'X' panels[digit] = mark elif count % 2 != 0: mark = 'O' panels[digit] = mark button7.config(text=mark) count = count + 1 sign = mark if (win(panels, sign) and sign == 'X'): msg.showinfo("Result", "Player1 wins") root.destroy() elif (win(panels, sign) and sign == 'O'): msg.showinfo("Result", "Player2 wins") root.destroy() if digit == 8 and digit in digits: digits.remove(digit) if count % 2 == 0: mark = 'X' panels[digit] = mark elif count % 2 != 0: mark = 'O' panels[digit] = mark button8.config(text=mark) count = count + 1 sign = mark if (win(panels, sign) and sign == 'X'): msg.showinfo("Result", "Player1 wins") root.destroy() elif (win(panels, sign) and sign == 'O'): msg.showinfo("Result", "Player2 wins") root.destroy() if digit == 9 and digit in digits: digits.remove(digit) if count % 2 == 0: mark = 'X' panels[digit] = mark elif count % 2 != 0: mark = 'O' panels[digit] = mark button9.config(text=mark) count = count + 1 sign = mark if (win(panels, sign) and sign == 'X'): msg.showinfo("Result", "Player1 wins") root.destroy() elif (win(panels, sign) and sign == 'O'): msg.showinfo("Result", "Player2 wins") root.destroy() ###if count is greater then 8 then the match has been tied if (count >

8 and win (panels,'X') = False and win (panels,'O') = = False): msg.showinfo ("Result", "Match Tied") root.destroy () # define buttonsbutton1 = Button (root, width=15, font= ('Times 16 bold'), height=7, command=lambda: checker (1) button1.grid (row=1, column=1) button2 = Button (root, width=15, height=7, font= (' Times 16 bold'), command=lambda: checker (2)) button2.grid (row=1) Column=2) button3 = Button (root, width=15, height=7, font= ('Times 16 bold'), command=lambda: checker (3) button3.grid (row=1, column=3) button4 = Button (root, width=15, height=7, font= (' Times 16 bold'), command=lambda: checker (4) button4.grid (row=2, column=1) button5 = Button (root, width=15, height=7, font= ('Times 16 bold'), command=lambda: checker (5) checker (checker, button5.grid) button5.grid = button5.grid, button5.grid, (' button5.grid 16 bold') Command=lambda: checker (6) button6.grid (row=2, column=3) button7 = Button (root, width=15, height=7, font= ('Times 16 bold'), command=lambda: checker (7) button7.grid (row=3, column=1) button8 = Button (root, width=15, height=7, font= (' Times 16 bold'), command=lambda: checker (8) button8.grid (row=3, column=2) button9 = Button (root, width=15, width=15, height=7, height=7 ('font= 16 font=), Times: Times (9)) Column=3) root.mainloop () this is the end of the introduction on "how to write Python Game Code". Thank you for your reading. If you want to know more about the industry, you can follow the industry information channel. The editor will update different knowledge points for you every day.

Welcome to subscribe "Shulou Technology Information " to get latest news, interesting things and hot topics in the IT industry, and controls the hottest and latest Internet news, technology news and IT industry trends.

Views: 0

*The comments in the above article only represent the author's personal views and do not represent the views and positions of this website. If you have more insights, please feel free to contribute and share.

Share To

Development

Wechat

© 2024 shulou.com SLNews company. All rights reserved.

12
Report