96SEO 2026-02-20 06:26 0
。

其实#xff0c;大家有没有认真想过#xff0c;可能是我们的学习方法不对#xff1f;
比方说#xff0c;你有没有想过#xff0c;可以通过打游戏来学编程#xff1f;
今天我想跟大家分享几个Python小游…经常听到有朋友说学习编程是一件非常枯燥无味的事情。
其实大家有没有认真想过可能是我们的学习方法不对
今天我想跟大家分享几个Python小游戏教你如何通过边打游戏边学编程
pygame.display.set_mode(cfg.SCREENSIZE)pygame.display.set_caption(catch
images.append(pygame.image.load(item))game_images[key]
pygame.image.load(value)game_sounds
播放背景音乐pygame.mixer.music.load(cfg.AUDIO_PATHS[bgm])pygame.mixer.music.play(-1,
pygame.font.Font(cfg.FONT_PATH,
pygame.sprite.Group()generate_food_freq
os.path.exists(cfg.HIGHEST_SCORE_RECORD_FILEPATH)
int(open(cfg.HIGHEST_SCORE_RECORD_FILEPATH).read())#
--填充背景screen.fill(0)screen.blit(game_images[background],
countdown_text.get_rect()countdown_rect.topright
pygame.QUIT:pygame.quit()sys.exit()key_pressed
key_pressed[pygame.K_LEFT]:hero.move(cfg.SCREENSIZE,
key_pressed[pygame.K_RIGHT]:hero.move(cfg.SCREENSIZE,
generate_food_freq:generate_food_freq
cfg.SCREENSIZE)food_sprites_group.add(food)#
food_sprites_group.remove(food)#
pygame.sprite.collide_mask(food,
hero):game_sounds[get].play()food_sprites_group.remove(food)score
--画食物food_sprites_group.draw(screen)#
score_text.get_rect()score_rect.topleft
--更新屏幕pygame.display.flip()clock.tick(cfg.FPS)#
open(cfg.HIGHEST_SCORE_RECORD_FILEPATH,
w)fp.write(str(highest_score))fp.close()return
技术要学会分享、交流不建议闭门造车。
一个人走的很快、一堆人可以走的更远。
好的技术文章离不开粉丝的分享、推荐资料干货、资料分享、数据、技术交流提升均可加交流群获取群友已超过2000人添加时切记的备注方式为来源兴趣方向方便找到志同道合的朋友。
button_sizepygame.draw.line(screen,
pygame.QUIT:pygame.quit()sys.exit()if
button_1.collidepoint(pygame.mouse.get_pos()):return
button_2.collidepoint(pygame.mouse.get_pos()):return
2clock.tick(10)pygame.display.update()结束界面
pygame.QUIT:pygame.quit()sys.exit()if
pygame.K_ESCAPE:sys.exit()pygame.quit()for
pos)clock.tick(10)pygame.display.update()运行游戏Demo
pygame.mixer.Sound(cfg.HITSOUNDPATH)goal_sound
pygame.mixer.Sound(cfg.GOALSOUNDPATH)pygame.mixer.music.load(cfg.BGMPATH)pygame.mixer.music.play(-1,
pygame.QUIT:pygame.quit()sys.exit(-1)screen.fill((41,
pressed_keys[pygame.K_UP]:racket_right.move(UP)elif
pressed_keys[pygame.K_DOWN]:racket_right.move(DOWN)if
pressed_keys[pygame.K_w]:racket_left.move(UP)elif
pressed_keys[pygame.K_s]:racket_left.move(DOWN)else:racket_left.automove(ball)#
--拍racket_left.draw(screen)racket_right.draw(screen)#
--得分screen.blit(font.render(str(score_left),
10))screen.blit(font.render(str(score_right),
score_rightclock.tick(100)pygame.display.update()主函数
初始化pygame.init()pygame.mixer.init()screen
pygame.display.set_mode((cfg.WIDTH,
cfg.HEIGHT))pygame.display.set_caption(pingpong
runDemo(screen)endInterface(screen,
SkierClass(pygame.sprite.Sprite):def
__init__(self):pygame.sprite.Sprite.__init__(self)#
cfg.SKIER_IMAGE_PATHS[:-1]self.image
pygame.image.load(self.imagepaths[self.direction])self.rect
self.image.get_rect()self.rect.center
6-abs(self.direction)*2]改变滑雪者的朝向.
pygame.image.load(self.imagepaths[self.direction])self.rect
self.image.get_rect()self.rect.center
self.rect.centerx)self.rect.centerx
pygame.image.load(cfg.SKIER_IMAGE_PATHS[-1])设置为站立状态def
setForward(self):self.direction
pygame.image.load(self.imagepaths[self.direction])
ObstacleClass(pygame.sprite.Sprite):def
attribute):pygame.sprite.Sprite.__init__(self)self.img_path
pygame.image.load(self.img_path)self.location
self.image.get_rect()self.rect.center
locations:locations.append(location)attribute
random.choice(list(cfg.OBSTACLE_PATHS.keys()))img_path
cfg.OBSTACLE_PATHS[attribute]obstacle
attribute)obstacles.add(obstacle)return
obstacles0:obstacles.add(obstacle)for
obstacles1:obstacles.add(obstacle)return
screensize[1]/2)screen.blit(title,
pygame.QUIT:pygame.quit()sys.exit()elif
pygame.KEYDOWN:returnpygame.display.update()显示分数
255))obstacles.draw(screen)screen.blit(skier.image,
score)pygame.display.update()主程序
游戏初始化pygame.init()pygame.mixer.init()pygame.mixer.music.load(cfg.BGMPATH)pygame.mixer.music.set_volume(0.4)pygame.mixer.music.play(-1)#
pygame.display.set_mode(cfg.SCREENSIZE)pygame.display.set_caption(滑雪游戏
游戏开始界面ShowStartInterface(screen,
pygame.QUIT:pygame.quit()sys.exit()if
--更新当前游戏帧的数据skier.move()distance
obstacles0:obstacle.location[1]
obstacles:obstacle.move(distance)#
pygame.sprite.spritecollide(skier,
hitted_obstacles[0].passed:score
50skier.setFall()updateFrame(screen,
score)pygame.time.delay(1000)skier.setForward()speed
hitted_obstacles[0].passed:score
10obstacles.remove(hitted_obstacles[0])#
初始化pygame.mixer.music.load(cfg.SOUNDPATHS[Cool
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
cfg.IMAGEPATHS[seamless_space],
cfg.IMAGEPATHS[space3]]bg_move_dis
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()#
pygame.sprite.Group()bullet_group
pygame.sprite.Group()asteroid_group
range(num_player):player_group.add(Ship(i1,
pygame.QUIT:pygame.quit()sys.exit()#
enumerate(player_group):direction
pressed_keys[pygame.K_UP]:direction
pressed_keys[pygame.K_DOWN]:direction
pressed_keys[pygame.K_LEFT]:direction
pressed_keys[pygame.K_RIGHT]:direction
direction:player.move(direction)if
0:fire_sound.play()bullet_group.add(player.shot())player.cooling_time
pressed_keys[pygame.K_w]:direction
pressed_keys[pygame.K_s]:direction
pressed_keys[pygame.K_a]:direction
pressed_keys[pygame.K_d]:direction
direction:player.move(direction)if
pressed_keys[pygame.K_SPACE]:if
0:fire_sound.play()bullet_group.add(player.shot())player.cooling_time
--向下移动背景图实现飞船向上移动的效果screen.blit(background,
bg_move_dis))screen.blit(background,
90asteroid_group.add(Asteroid(cfg))else:asteroid_ticks
pygame.sprite.spritecollide(player,
3:player_group.remove(player)if
0:returnelse:player.explode(screen)else:player.draw(screen)#
pygame.sprite.spritecollide(bullet,
None):bullet_group.remove(bullet)if
asteroid_group:asteroid.move()asteroid.rotate()asteroid.draw(screen)#
--屏幕刷新pygame.display.update()clock.tick(60)主函数
main():pygame.init()pygame.font.init()pygame.mixer.init()screen
pygame.display.set_mode(cfg.SCREENSIZE)pygame.display.set_caption(飞机大战
True:GamingInterface(num_player1,
screenscreen)EndInterface(screen,
True:GamingInterface(num_player2,
screenscreen)EndInterface(screen,
initGame():pygame.init()pygame.mixer.init()screen
pygame.display.set_mode(cfg.SCREENSIZE)pygame.display.set_caption(打地鼠
加载背景音乐和其他音效pygame.mixer.music.load(cfg.BGM_PATH)pygame.mixer.music.play(-1)audios
pygame.mixer.Sound(cfg.COUNT_DOWN_SOUND_PATH),hammering:
pygame.mixer.Sound(cfg.HAMMERING_SOUND_PATH)}#
pygame.font.Font(cfg.FONT_PATH,
pygame.image.load(cfg.GAME_BG_IMAGEPATH)#
random.choice(cfg.HOLE_POSITIONS)change_hole_event
pygame.USEREVENTpygame.time.set_timer(change_hole_event,
random.choice(cfg.HOLE_POSITIONS)mole.reset()mole.setPosition(hole_pos)pygame.time.set_timer(change_hole_event,
random.choice(cfg.HOLE_POSITIONS)mole.reset()mole.setPosition(hole_pos)pygame.time.set_timer(change_hole_event,
pygame.QUIT:pygame.quit()sys.exit()elif
pygame.MOUSEMOTION:hammer.setPosition(pygame.mouse.get_pos())elif
random.choice(cfg.HOLE_POSITIONS)mole.reset()mole.setPosition(hole_pos)#
pygame.sprite.collide_mask(hammer,
is_hammer:audios[hammering].play()mole.setBeHammered()your_score
--绑定必要的游戏元素到屏幕(注意顺序)screen.blit(bg_img,
0))screen.blit(count_down_text,
8))screen.blit(your_score_text,
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
w)f.write(str(your_score))f.close()#
pygame.display.set_mode(cfg.SCREENSIZE)pygame.display.set_caption(九歌)#
cfg.AUDIO_PATHS.items():sounds[key]
游戏开始界面GameStartInterface(screen,
Scoreboard(cfg.IMAGE_PATHS[numbers],
bg_colorcfg.BACKGROUND_COLOR)highest_score
highest_scorehighest_score_board
Scoreboard(cfg.IMAGE_PATHS[numbers],
Dinosaur(cfg.IMAGE_PATHS[dino])ground
Ground(cfg.IMAGE_PATHS[ground],
cfg.SCREENSIZE[1]))cloud_sprites_group
pygame.sprite.Group()cactus_sprites_group
pygame.sprite.Group()ptera_sprites_group
pygame.sprite.Group()add_obstacle_timer
pygame.QUIT:pygame.quit()sys.exit()elif
pygame.K_UP:dino.jump(sounds)elif
pygame.K_DOWN:dino.unduck()screen.fill(cfg.BACKGROUND_COLOR)#
10:cloud_sprites_group.add(Cloud(cfg.IMAGE_PATHS[cloud],
7:cactus_sprites_group.add(Cactus(cfg.IMAGE_PATHS[cacti]))else:position_ys
cfg.SCREENSIZE[1]*0.20]ptera_sprites_group.add(Ptera(cfg.IMAGE_PATHS[ptera],
--更新游戏元素dino.update()ground.update()cloud_sprites_group.update()cactus_sprites_group.update()ptera_sprites_group.update()score_timer
cactus_sprites_group:item.speed
pygame.sprite.collide_mask(dino,
pygame.sprite.collide_mask(dino,
--将游戏元素画到屏幕上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)#
--更新屏幕pygame.display.update()clock.tick(cfg.FPS)#
pygame.display.set_mode(cfg.SCREENSIZE)pygame.display.set_caption(Gemgem
加载背景音乐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)#
pygame.mixer.Sound(os.path.join(cfg.ROOTDIR,
resources/audios/badswap.wav))sounds[match]
range(6):sounds[match].append(pygame.mixer.Sound(os.path.join(cfg.ROOTDIR,
pygame.font.Font(os.path.join(cfg.ROOTDIR,
8):gem_imgs.append(os.path.join(cfg.ROOTDIR,
pygame.K_ESCAPE):pygame.quit()sys.exit()elif
rect)pygame.display.update()game.reset()run
iconself.setWindowIcon(QIcon(os.path.join(os.getcwd(),
焦点self.setFocusPolicy(Qt.StrongFocus)#
InnerBoard()self.external_board
self.inner_board)layout_horizontal.addWidget(self.external_board)self.side_panel
self.inner_board)layout_horizontal.addWidget(self.side_panel)self.status_bar
self.statusBar()self.external_board.score_signal[str].connect(self.status_bar.showMessage)self.start()self.center()self.setWindowTitle(Tetris
九歌)self.show()self.setFixedSize(self.external_board.width()
self.status_bar.height())游戏界面移动到屏幕中间def
QDesktopWidget().screenGeometry()size
self.geometry()self.move((screen.width()
updateWindow(self):self.external_board.updateData()self.side_panel.updateData()self.update()开始def
self.is_started:returnself.is_started
Trueself.inner_board.createNewTetris()self.timer.start(self.fps,
self.is_started:returnself.is_paused
self.is_paused:self.timer.stop()self.external_board.score_signal.emit(Paused)else:self.timer.start(self.fps,
self)self.updateWindow()计时器事件def
self.timer.timerId():removed_lines
self.inner_board.moveDown()self.external_board.score
removed_linesself.updateWindow()else:super(TetrisGame,
self.inner_board.current_tetris
tetrisShape().shape_empty:super(TetrisGame,
self).keyPressEvent(event)returnkey
Qt.Key_Left:self.inner_board.moveLeft()#
Qt.Key_Right:self.inner_board.moveRight()#
Qt.Key_Up:self.inner_board.rotateAnticlockwise()#
Qt.Key_Space:self.external_board.score
self.inner_board.dropDown()else:super(TetrisGame,
self).keyPressEvent(event)self.updateWindow()run
TetrisGame()sys.exit(app.exec_())9、贪吃蛇
pygame.display.set_mode(cfg.SCREENSIZE)pygame.display.set_caption(Greedy
播放背景音乐pygame.mixer.music.load(cfg.BGMPATH)pygame.mixer.music.play(-1)#
pygame.QUIT:pygame.quit()sys.exit()elif
pygame.K_RIGHT]:snake.setDirection({pygame.K_UP:
screen)snake.draw(screen)apple.draw(screen)showScore(cfg,
--屏幕更新pygame.display.update()clock.tick(cfg.FPS)return
each.rect.collidepoint(mouse_pos):if
each.is_selected:each.is_selected
each.is_selected:selected.append(each.attribute)#
each.rect.collidepoint(mouse_pos):each.is_selected
Trueselected.append(each.attribute)#
ValueError(checkClicked.group_type
getNumberSpritesGroup(numbers):number_sprites_group
str(number))number_sprites_group.add(Card(*args))return
getOperatorSpritesGroup(operators):operator_sprites_group
str(operator))operator_sprites_group.add(Card(*args))return
getButtonSpritesGroup(buttons):button_sprites_group
str(button))button_sprites_group.add(Button(*args))return
str(eval(number1operator_map[operator]number2))return
str(Fraction(number1operator_map[operator]number2))except:return
font.size(text)screen.blit(text_render,
(rect.x(rect.width-font_size[0])/2,
rect.y(rect.height-font_size[1])/2))主函数
导入必要的游戏素材pygame.init()pygame.mixer.init()screen
pygame.display.set_mode(SCREENSIZE)pygame.display.set_caption(24
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,
game24Generator()game24_gen.generate()#
getNumberSpritesGroup(game24_gen.numbers_now)#
getOperatorSpritesGroup(OPREATORS)#
getButtonSpritesGroup(BUTTONS)#
pygame.time.Clock()selected_numbers
pygame.QUIT:pygame.quit()sys.exit(-1)elif
pygame.mouse.get_pos()selected_numbers
checkClicked(number_sprites_group,
checkClicked(operator_sprites_group,
checkClicked(button_sprites_group,
each.select_order)else:noselected_numbers.append(each.attribute)each.is_selected
operator_sprites_group:each.is_selected
1:lose_sound.play()else:warn_sound.play()selected_numbers
getNumberSpritesGroup(game24_gen.numbers_now)#
number_sprites_group:each.draw(screen,
operator_sprites_group:each.draw(screen,
selected_buttons[0]:each.is_selected
button_sprites_group)selected_buttons
is_win:showInfo(Congratulations,
screen)pygame.display.flip()clock.tick(30)run
breakoutClone(cfg)game.run()run
玩法这让我想起了魂斗罗那第几关的boss有点类似不过魂斗罗那个难度肯定高点。
45enemies_group.add(enemy)boomed_enemies_group
pygame.sprite.Group()en_bullets_group
bullet_colorcfg.WHITE)my_bullets_group
--改变移动方向(改变方向的同时集体下降一次)enemy_change_direction_count
0enemy_change_direction_interval
running:screen.fill(cfg.BLACK)for
pygame.QUIT:pygame.quit()sys.exit()if
pygame.K_ESCAPE:pygame.quit()sys.exit()#
pygame.MOUSEBUTTONDOWN:my_bullet
my_bullet:my_bullets_group.add(my_bullet)#
pygame.sprite.spritecollide(enemy,
None):boomed_enemies_group.add(enemy)enemies_group.remove(enemy)myaircraft.score
pygame.sprite.spritecollide(ufo,
enemy_shot_interval:enemy_shot_flag
random.choice(enemies_survive_list)enemy_shot_count
enemy_move_interval:enemy_move_count
enemy_max_rowenemy_change_direction_count
enemy_change_direction_interval:enemy_change_direction_count
enemy_move_rightenemy_need_down
----每次下降提高移动和射击速度enemy_move_interval
enemy_move_interval-3)enemy_shot_interval
enemy.shot()en_bullets_group.add(en_bullet)if
range((enemy_need_move_row-1)*11,
enemy_move_right:enemy.update(right,
cfg.SCREENSIZE[1])else:enemy.update(left,
cfg.SCREENSIZE[1])else:enemy.update(None,
1enemy.draw(screen)enemy_move_flag
boomed_enemy.boom(screen):boomed_enemies_group.remove(boomed_enemy)del
pygame.sprite.spritecollide(myaircraft,
myaircraft.boom(screen):myaircraft.resetBoom()myaircraft.num_life
----更新飞船myaircraft.update(cfg.SCREENSIZE[0])#
----画飞船myaircraft.draw(screen)if
ufo.boom(screen):ufo.has_boomed
----更新UFOufo.update(cfg.SCREENSIZE[0])#
bullet.update():my_bullets_group.remove(bullet)del
bulletelse:bullet.draw(screen)#
bullet.update(cfg.SCREENSIZE[1]):en_bullets_group.remove(bullet)del
bulletelse:bullet.draw(screen)if
myaircraft.old_score):myaircraft.old_score
myaircraft.scoremyaircraft.num_life
cfg.GREEN)pygame.display.update()clock.tick(cfg.FPS)with
f:f.write(str(highest_score))return
初始化pygame.init()pygame.display.set_caption(外星人入侵
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
startGame(screen)endInterface(screen,
玩法我打赌大家在课堂上肯定玩过这个想想当年和同桌玩这个废了好几本本子。
root.title(TIC-TAC-TOE---Project
digits:digits.remove(digit)##player1
markbutton1.config(textmark)count
markbutton2.config(textmark)count
markbutton3.config(textmark)count
markbutton4.config(textmark)count
markbutton5.config(textmark)count
markbutton6.config(textmark)count
markbutton7.config(textmark)count
markbutton8.config(textmark)count
markbutton9.config(textmark)count
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback