当前位置: 首页 > article >正文

python编写小游戏的代码,python游戏编程代码大全

大家好,小编为大家解答python游戏编程入门游戏代码的问题。很多人还不知道python编写小游戏的代码,现在让我们一起来看看吧!

e89e28975f5d25088ec4795f49fa9e5d.gif

大家好,我是小F~

经常听到有朋友说,学习编程是一件非常枯燥无味的事情。其实,大家有没有认真想过,可能是我们的学习方法不对?

比方说,你有没有想过,可以通过打游戏来学编程?

今天我想跟大家分享30个Python小游戏,教你如何通过边打游戏边学编程!

相关文件及代码都已上传,公众号回复【游戏】即可获取python用海龟库画笑脸。

接下来就一起来看看吧~

1、飞机大战

42eafd0d93328ca02763f59f398701ac.png

源码分享:

import random
import pygame
from objects import Background, Player, Enemy, Bullet, Explosion, Fuel, \Powerup, Button, Message, BlinkingTextpygame.init()
SCREEN = WIDTH, HEIGHT = 288, 512info = pygame.display.Info()
width = info.current_w
height = info.current_hif width >= height:win = pygame.display.set_mode(SCREEN, pygame.NOFRAME)
else:win = pygame.display.set_mode(SCREEN, pygame.NOFRAME | pygame.SCALED | pygame.FULLSCREEN)clock = pygame.time.Clock()
FPS = 60# COLORS **********************************************************************WHITE = (255, 255, 255)
BLUE = (30, 144,255)
RED = (255, 0, 0)
GREEN = (0, 255, 0)
BLACK = (0, 0, 20)# IMAGES **********************************************************************plane_img = pygame.image.load('Assets/plane.png')
logo_img = pygame.image.load('Assets/logo.png')
fighter_img = pygame.image.load('Assets/fighter.png')
clouds_img = pygame.image.load('Assets/clouds.png')
clouds_img = pygame.transform.scale(clouds_img, (WIDTH, 350))home_img = pygame.image.load('Assets/Buttons/homeBtn.png')
replay_img = pygame.image.load('Assets/Buttons/replay.png')
sound_off_img = pygame.image.load("Assets/Buttons/soundOffBtn.png")
sound_on_img = pygame.image.load("Assets/Buttons/soundOnBtn.png")# BUTTONS *********************************************************************home_btn = Button(home_img, (24, 24), WIDTH // 4 - 18, HEIGHT//2 + 120)
replay_btn = Button(replay_img, (36,36), WIDTH // 2  - 18, HEIGHT//2 + 115)
sound_btn = Button(sound_on_img, (24, 24), WIDTH - WIDTH // 4 - 18, HEIGHT//2 + 120)# FONTS ***********************************************************************game_over_font = 'Fonts/ghostclan.ttf'
tap_to_play_font = 'Fonts/BubblegumSans-Regular.ttf'
score_font = 'Fonts/DalelandsUncialBold-82zA.ttf'
final_score_font = 'Fonts/DroneflyRegular-K78LA.ttf'game_over_msg = Message(WIDTH//2, 230, 30, 'Game Over', game_over_font, WHITE, win)
score_msg = Message(WIDTH-50, 28, 30, '0', final_score_font, RED, win)
final_score_msg = Message(WIDTH//2, 280, 30, '0', final_score_font, RED, win)
tap_to_play_msg = tap_to_play = BlinkingText(WIDTH//2, HEIGHT-60, 25, "Tap To Play",tap_to_play_font, WHITE, win)# SOUNDS **********************************************************************player_bullet_fx = pygame.mixer.Sound('Sounds/gunshot.wav')
click_fx = pygame.mixer.Sound('Sounds/click.mp3')
collision_fx = pygame.mixer.Sound('Sounds/mini_exp.mp3')
blast_fx = pygame.mixer.Sound('Sounds/blast.wav')
fuel_fx = pygame.mixer.Sound('Sounds/fuel.wav')pygame.mixer.music.load('Sounds/Defrini - Spookie.mp3')
pygame.mixer.music.play(loops=-1)
pygame.mixer.music.set_volume(0.1)# GROUPS & OBJECTS ************************************************************bg = Background(win)
p = Player(144, HEIGHT - 100)enemy_group = pygame.sprite.Group()
player_bullet_group = pygame.sprite.Group()
enemy_bullet_group = pygame.sprite.Group()
explosion_group = pygame.sprite.Group()
fuel_group = pygame.sprite.Group()
powerup_group = pygame.sprite.Group()# FUNCTIONS *******************************************************************def shoot_bullet():x, y = p.rect.center[0], p.rect.yif p.powerup > 0:for dx in range(-3, 4):b = Bullet(x, y, 4, dx)player_bullet_group.add(b)p.powerup -= 1else:b = Bullet(x-30, y, 6)player_bullet_group.add(b)b = Bullet(x+30, y, 6)player_bullet_group.add(b)player_bullet_fx.play()def reset():enemy_group.empty()player_bullet_group.empty()enemy_bullet_group.empty()explosion_group.empty()fuel_group.empty()powerup_group.empty()p.reset(p.x, p.y)# VARIABLES *******************************************************************level = 1
plane_destroy_count = 0
plane_frequency = 5000
start_time = pygame.time.get_ticks()moving_left = False
moving_right = Falsehome_page = True
game_page = False
score_page = Falsescore = 0
sound_on = Truerunning = True
while running:for event in pygame.event.get():if event.type == pygame.QUIT:running = Falseif event.type == pygame.KEYDOWN:if event.key == pygame.K_ESCAPE or event.key == pygame.K_q:running = Falseif event.type == pygame.KEYDOWN and game_page:if event.key == pygame.K_LEFT:moving_left = Trueif event.key == pygame.K_RIGHT:moving_right = Trueif event.key == pygame.K_SPACE:shoot_bullet()if event.type == pygame.MOUSEBUTTONDOWN:if home_page:home_page = Falsegame_page = Trueclick_fx.play()elif game_page:x, y = event.posif p.rect.collidepoint((x,y)):shoot_bullet()elif x <= WIDTH // 2:moving_left = Trueelif x > WIDTH // 2:moving_right = Trueif event.type == pygame.KEYUP:moving_left = Falsemoving_right = Falseif event.type == pygame.MOUSEBUTTONUP:moving_left = Falsemoving_right = Falseif home_page:win.fill(BLACK)win.blit(logo_img, (30, 80))win.blit(fighter_img, (WIDTH//2 - 50, HEIGHT//2))pygame.draw.circle(win, WHITE, (WIDTH//2, HEIGHT//2 + 50), 50, 4)tap_to_play_msg.update()if score_page:win.fill(BLACK)win.blit(logo_img, (30, 50))game_over_msg.update()final_score_msg.update(score)if home_btn.draw(win):home_page = Truegame_page = Falsescore_page = Falsereset()click_fx.play()plane_destroy_count = 0level = 1score = 0if replay_btn.draw(win):score_page = Falsegame_page = Truereset()click_fx.play()plane_destroy_count = 0score = 0if sound_btn.draw(win):sound_on = not sound_onif sound_on:sound_btn.update_image(sound_on_img)pygame.mixer.music.play(loops=-1)else:sound_btn.update_image(sound_off_img)pygame.mixer.music.stop()if game_page:current_time = pygame.time.get_ticks()delta_time = current_time - start_timeif delta_time >= plane_frequency:if level == 1:type = 1elif level == 2:type = 2elif level == 3:type = 3elif level == 4:type = random.randint(4, 5)elif level == 5:type = random.randint(1, 5)x = random.randint(10, WIDTH - 100)e = Enemy(x, -150, type)enemy_group.add(e)start_time = current_timeif plane_destroy_count:if plane_destroy_count % 5 == 0 and level < 5:level += 1plane_destroy_count = 0p.fuel -= 0.05bg.update(1)win.blit(clouds_img, (0, 70))p.update(moving_left, moving_right, explosion_group)p.draw(win)player_bullet_group.update()player_bullet_group.draw(win)enemy_bullet_group.update()enemy_bullet_group.draw(win)explosion_group.update()explosion_group.draw(win)fuel_group.update()fuel_group.draw(win)powerup_group.update()powerup_group.draw(win)enemy_group.update(enemy_bullet_group, explosion_group)enemy_group.draw(win)if p.alive:player_hit = pygame.sprite.spritecollide(p, enemy_bullet_group, False)for bullet in player_hit:p.health -= bullet.damagex, y = bullet.rect.centerexplosion = Explosion(x, y, 1)explosion_group.add(explosion)bullet.kill()collision_fx.play()for bullet in player_bullet_group:planes_hit = pygame.sprite.spritecollide(bullet, enemy_group, False)for plane in planes_hit:plane.health -= bullet.damageif plane.health <= 0:x, y = plane.rect.centerrand = random.random()if rand >= 0.9:power = Powerup(x, y)powerup_group.add(power)elif rand >= 0.3:fuel = Fuel(x, y)fuel_group.add(fuel)plane_destroy_count += 1blast_fx.play()x, y = bullet.rect.centerexplosion = Explosion(x, y, 1)explosion_group.add(explosion)bullet.kill()collision_fx.play()player_collide = pygame.sprite.spritecollide(p, enemy_group, True)if player_collide:x, y = p.rect.centerexplosion = Explosion(x, y, 2)explosion_group.add(explosion)x, y = player_collide[0].rect.centerexplosion = Explosion(x, y, 2)explosion_group.add(explosion)p.health = 0p.alive = Falseif pygame.sprite.spritecollide(p, fuel_group, True):p.fuel += 25if p.fuel >= 100:p.fuel = 100fuel_fx.play()if pygame.sprite.spritecollide(p, powerup_group, True):p.powerup += 2fuel_fx.play()if not p.alive or p.fuel <= -10:if len(explosion_group) == 0:game_page = Falsescore_page = Truereset()score += 1score_msg.update(score)fuel_color = RED if p.fuel <= 40 else GREENpygame.draw.rect(win, fuel_color, (30, 20, p.fuel, 10), border_radius=4)pygame.draw.rect(win, WHITE, (30, 20, 100, 10), 2, border_radius=4)pygame.draw.rect(win, BLUE, (30, 32, p.health, 10), border_radius=4)pygame.draw.rect(win, WHITE, (30, 32, 100, 10), 2, border_radius=4)win.blit(plane_img, (10, 15))pygame.draw.rect(win, WHITE, (0,0, WIDTH, HEIGHT), 5, border_radius=4)clock.tick(FPS)pygame.display.update()pygame.quit()

2、愤怒的墙

7d7c9eaa34401b50ca051a06b15d0a5b.png

源码分享:

import pygame
import randomfrom objects import Player, Bar, Ball, Block, ScoreCard, Message, Particle, generate_particlespygame.init()
SCREEN = WIDTH, HEIGHT = 288, 512info = pygame.display.Info()
width = info.current_w
height = info.current_hif width >= height:win = pygame.display.set_mode(SCREEN, pygame.NOFRAME)
else:win = pygame.display.set_mode(SCREEN, pygame.NOFRAME | pygame.SCALED | pygame.FULLSCREEN)clock = pygame.time.Clock()
FPS = 45# COLORSRED = (255, 0, 0)
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
GRAY = (54, 69, 79)
c_list = [RED, BLACK, WHITE]# Fontspygame.font.init()
score_font = pygame.font.Font('Fonts/BubblegumSans-Regular.ttf', 50)# Soundscoin_fx = pygame.mixer.Sound('Sounds/coin.mp3')
death_fx = pygame.mixer.Sound('Sounds/death.mp3')
move_fx = pygame.mixer.Sound('Sounds/move.mp3')# backgroundsbg_list = []
for i in range(1,5):if i == 2:ext = "jpeg"else:ext = "jpg"img = pygame.image.load(f"Assets/Backgrounds/bg{i}.{ext}")img = pygame.transform.scale(img, (WIDTH, HEIGHT))bg_list.append(img)home_bg = pygame.image.load(f"Assets/Backgrounds/home.jpeg")bg = home_bg# objects
bar_group = pygame.sprite.Group()
ball_group = pygame.sprite.Group()
block_group = pygame.sprite.Group()
destruct_group = pygame.sprite.Group()
win_particle_group = pygame.sprite.Group()
bar_gap = 120particles = []p = Player(win)
score_card = ScoreCard(140, 40, win)# Functionsdef destroy_bird():x, y = p.rect.centerfor i in range (50):c = random.choice(c_list)particle = Particle(x,y, 1,c, win)destruct_group.add(particle)def win_particles():for x,y in [(40, 120), (WIDTH - 20, 240), (15, HEIGHT - 30)]:for i in range(10):particle = Particle (x,y, 2, WHITE, win)win_particle_group.add(particle)# Messages
title_font = "Fonts/Robus-BWqOd.otf"
dodgy = Message(134, 90, 100, "Angry",title_font, WHITE, win)
walls = Message(164, 145, 80, "Walls",title_font, WHITE, win)tap_to_play_font = "Fonts/DebugFreeTrial-MVdYB.otf"
tap_to_play = Message(144, 400, 32, "TAP TO PLAY",tap_to_play_font, WHITE, win)
tap_to_replay = Message(144, 400, 30, "Tap to Replay",tap_to_play_font, WHITE, win)# Variablesbar_width_list = [i for i in range (40,150,10)]
bar_frequency = 1200
bar_speed = 4
touched = False
pos = None
home_page = True
score_page = False
bird_dead = False
score = 0
high_score = 0
move_left = False
move_right = True
prev_x = 0
p_count = 0running = True
while running:win.blit(bg, (0,0))for event in pygame.event.get():if event.type == pygame.QUIT:running = Falseif event.type == pygame.KEYDOWN:if event.key == pygame.K_ESCAPE:running = Falseif event.type == pygame.MOUSEBUTTONDOWN and (home_page or score_page):home_page = Falsescore_page = Falsewin_particle_group.empty()bg = random.choice(bg_list)particles = []last_bar = pygame.time.get_ticks() - bar_frequencynext_bar = 0bar_speed = 4bar_frequency = 1200bird_dead = Falsescore = 0p_count = 0score_list = []for _ in range(15):x = random.randint(30, WIDTH - 30)y = random.randint(60, HEIGHT - 60)max = random.randint(8,16)b = Block(x,y,max, win)block_group.add(b)if event.type == pygame.MOUSEBUTTONDOWN and not home_page:if p.rect.collidepoint(event.pos):touched = Truex, y = event.posoffset_x = p.rect.x - xif event.type == pygame.MOUSEBUTTONUP and not home_page:touched = Falseif event.type == pygame.MOUSEMOTION and not home_page:if touched:x, y = event.posif move_right and prev_x > x:move_right = Falsemove_left = Truemove_fx.play()if move_left and  prev_x < x:move_right = Truemove_left = Falsemove_fx.play()prev_x = xp.rect.x =  x + offset_xif home_page:bg = home_bgparticles = generate_particles(p, particles, WHITE, win)dodgy.update()walls.update()tap_to_play.update()p.update()elif score_page:bg = home_bgparticles = generate_particles(p, particles, WHITE, win)tap_to_replay.update()p.update()score_msg.update()score_point.update()if p_count % 5 == 0:win_particles()p_count += 1win_particle_group.update()else:next_bar = pygame.time.get_ticks()if next_bar - last_bar >= bar_frequency and not bird_dead:bwidth = random.choice(bar_width_list)b1prime = Bar(0,0,bwidth+3,GRAY, win)b1 = Bar(0,-3,bwidth,WHITE,win)b2prime = Bar(bwidth+bar_gap+3, 0, WIDTH - bwidth - bar_gap, GRAY, win)b2 = Bar(bwidth+bar_gap, -3, WIDTH - bwidth - bar_gap, WHITE, win)bar_group.add(b1prime)bar_group.add(b1)bar_group.add(b2prime)bar_group.add(b2)color = random.choice(["red", "white"])pos = random.choice([0,1])if pos == 0:x = bwidth + 12elif pos == 1:x = bwidth + bar_gap - 12ball = Ball(x, 10, 1, color, win)ball_group.add(ball)last_bar = next_barfor ball in ball_group:if ball.rect.colliderect(p):if ball.color == "white":ball.kill()coin_fx.play()score += 1if score > high_score:high_score += 1score_card.animate = Trueelif ball.color == "red":if not bird_dead:death_fx.play()destroy_bird()bird_dead = Truebar_speed = 0if pygame.sprite.spritecollide(p, bar_group, False):if not bird_dead:death_fx.play()destroy_bird()bird_dead = Truebar_speed = 0block_group.update()bar_group.update(bar_speed)ball_group.update(bar_speed)if bird_dead:destruct_group.update()score_card.update(score)if not bird_dead:particles = generate_particles(p, particles, WHITE, win)p.update()if score and score % 10 == 0:rem = score // 10if rem not in score_list:score_list.append(rem)bar_speed += 1bar_frequency -= 200if bird_dead and len(destruct_group) == 0:score_page = Truefont =  "Fonts/BubblegumSans-Regular.ttf"if score < high_score:score_msg = Message(144, 60, 55, "Score",font, WHITE, win)else:score_msg = Message(144, 60, 55, "New High",font, WHITE, win)score_point = Message(144, 110, 45, f"{score}", font, WHITE, win)if score_page:block_group.empty()bar_group.empty()ball_group.empty()p.reset()clock.tick(FPS)pygame.display.update()pygame.quit()

3、圆弧冲刺

86f717c40518946ebaf62710004defa1.png

源码分享:

import random
import pygamefrom objects import Player, Balls, Dot, Shadow, Particle, Message, BlinkingText, Buttonpygame.init()
SCREEN = WIDTH, HEIGHT = 288, 512
CENTER = WIDTH //2, HEIGHT // 2info = pygame.display.Info()
width = info.current_w
height = info.current_hif width >= height:win = pygame.display.set_mode(SCREEN, pygame.NOFRAME)
else:win = pygame.display.set_mode(SCREEN, pygame.NOFRAME | pygame.SCALED | pygame.FULLSCREEN)clock = pygame.time.Clock()
FPS = 60# COLORS **********************************************************************RED = (255,0,0)
GREEN = (0,177,64)
BLUE = (30, 144,255)
ORANGE = (252,76,2)
YELLOW = (254,221,0)
PURPLE = (155,38,182)
AQUA = (0,103,127)
WHITE = (255,255,255)
BLACK = (0,0,0)color_list = [RED, GREEN, BLUE, ORANGE, YELLOW, PURPLE]
color_index = 0
color = color_list[color_index]# FONTS ***********************************************************************title_font = "Fonts/Aladin-Regular.ttf"
tap_to_play_font = "Fonts/BubblegumSans-Regular.ttf"
score_font = "Fonts/DalelandsUncialBold-82zA.ttf"
game_over_font = "Fonts/ghostclan.ttf"# MESSAGES ********************************************************************arc = Message(WIDTH-90, 200, 80, "Arc", title_font, WHITE, win)
dash = Message(80, 300, 60, "Dash", title_font, WHITE, win)
tap_to_play = BlinkingText(WIDTH//2, HEIGHT-60, 20, "Tap To Play", tap_to_play_font, WHITE, win)
game_msg = Message(80, 150, 40, "GAME", game_over_font, BLACK, win)
over_msg = Message(210, 150, 40, "OVER!", game_over_font, WHITE, win)
score_text = Message(90, 230, 20, "SCORE", None, BLACK, win)
best_text = Message(200, 230, 20, "BEST", None, BLACK, win)score_msg = Message(WIDTH-60, 50, 50, "0", score_font, WHITE, win)
final_score_msg = Message(90, 280, 40, "0", tap_to_play_font, BLACK, win)
high_score_msg = Message(200, 280, 40, "0", tap_to_play_font, BLACK, win)# SOUNDS **********************************************************************score_fx = pygame.mixer.Sound('Sounds/point.mp3')
death_fx = pygame.mixer.Sound('Sounds/dead.mp3')
score_page_fx = pygame.mixer.Sound('Sounds/score_page.mp3')pygame.mixer.music.load('Sounds/hk.mp3')
pygame.mixer.music.play(loops=-1)
pygame.mixer.music.set_volume(0.5)# Button imageshome_img = pygame.image.load('Assets/homeBtn.png')
replay_img = pygame.image.load('Assets/replay.png')
sound_off_img = pygame.image.load("Assets/soundOffBtn.png")
sound_on_img = pygame.image.load("Assets/soundOnBtn.png")# Buttonshome_btn = Button(home_img, (24, 24), WIDTH // 4 - 18, 390)
replay_btn = Button(replay_img, (36,36), WIDTH // 2  - 18, 382)
sound_btn = Button(sound_on_img, (24, 24), WIDTH - WIDTH // 4 - 18, 390)# GAME VARIABLES **************************************************************MAX_RAD = 120
rad_delta = 50# OBJECTS *********************************************************************ball_group = pygame.sprite.Group()
dot_group = pygame.sprite.Group()
shadow_group = pygame.sprite.Group()
particle_group = pygame.sprite.Group()
p = Player(win)ball_positions = [(CENTER[0]-105, CENTER[1]), (CENTER[0]+105, CENTER[1]),(CENTER[0]-45, CENTER[1]), (CENTER[0]+45, CENTER[1]),(CENTER[0], CENTER[1]-75), (CENTER[0], CENTER[1]+75)]
for index, pos in enumerate(ball_positions):if index in (0,1):type_ = 1inverter = 5if index in (2,3):type_ = 1inverter = 3if index in (4,5):type_ = 2inverter = 1ball = Balls(pos, type_, inverter, win)ball_group.add(ball)dot_list = [(CENTER[0], CENTER[1]-MAX_RAD+3), (CENTER[0]+MAX_RAD-3, CENTER[1]),(CENTER[0], CENTER[1]+MAX_RAD-3), (CENTER[0]-MAX_RAD+3, CENTER[1])]
dot_index = random.choice([1,2,3,4])
dot_pos = dot_list[dot_index-1]
dot = Dot(*dot_pos, win)
dot_group.add(dot)shadow = Shadow(dot_index, win)
shadow_group.add(shadow)# VARIABLES *******************************************************************clicked = False
num_clicks = 0
player_alive = True
sound_on = Truescore = 0
highscore = 0home_page = True
game_page = False
score_page = Falserunning = True
while running:win.fill(color)for event in pygame.event.get():if event.type == pygame.QUIT:running = Falseif event.type == pygame.KEYDOWN:if event.key == pygame.K_ESCAPE or \event.key == pygame.K_q:running = Falseif event.type == pygame.MOUSEBUTTONDOWN and home_page:home_page = Falsegame_page = Truescore_page = Falserad_delta = 50clicked = Truescore = 0num_clicks = 0player_alive = Trueif event.type == pygame.MOUSEBUTTONDOWN and game_page:if not clicked:clicked = Truefor ball in ball_group:if num_clicks % ball.inverter == 0:ball.dtheta *= -1p.set_move(dot_index)num_clicks += 1if num_clicks % 5 == 0:color_index += 1if color_index > len(color_list) - 1:color_index = 0color = color_list[color_index]if event.type == pygame.MOUSEBUTTONDOWN and game_page:clicked = Falseif home_page:for radius in [30, 60, 90, 120]:pygame.draw.circle(win, (0,0,0), CENTER, radius, 8)pygame.draw.circle(win, (255,255,255), CENTER, radius, 5)pygame.draw.rect(win, color, [CENTER[0]-10, CENTER[1]-MAX_RAD, MAX_RAD+50, MAX_RAD])pygame.draw.rect(win, color, [CENTER[0]-MAX_RAD, CENTER[1]-10, MAX_RAD, MAX_RAD+50])arc.update()dash.update()tap_to_play.update()if score_page:game_msg.update()over_msg.update()score_text.update(shadow=False)best_text.update(shadow=False)final_score_msg.update(score, shadow=False)high_score_msg.update(highscore, shadow=False)if home_btn.draw(win):home_page = Truescore_page = Falsegame_page = Falsescore = 0score_msg = Message(WIDTH-60, 50, 50, "0", score_font, WHITE, win)if replay_btn.draw(win):home_page = Falsescore_page = Falsegame_page = Trueplayer_alive = Truescore = 0score_msg = Message(WIDTH-60, 50, 50, "0", score_font, WHITE, win)p = Player(win)if sound_btn.draw(win):sound_on = not sound_onif sound_on:sound_btn.update_image(sound_on_img)pygame.mixer.music.play(loops=-1)else:sound_btn.update_image(sound_off_img)pygame.mixer.music.stop()if game_page:for radius in [30 + rad_delta, 60 + rad_delta, 90 + rad_delta, 120 + rad_delta]:if rad_delta > 0:radius -= 1rad_delta -= 1pygame.draw.circle(win, (0,0,0), CENTER, radius, 5)pygame.draw.rect(win, color, [CENTER[0]-10, CENTER[1]-MAX_RAD, 20, MAX_RAD*2])pygame.draw.rect(win, color, [CENTER[0]-MAX_RAD, CENTER[1]-10, MAX_RAD*2, 20])if rad_delta <= 0:p.update(player_alive, color, shadow_group)shadow_group.update()ball_group.update()dot_group.update()particle_group.update()score_msg.update(score)for dot in dot_group:if dot.rect.colliderect(p):dot.kill()score_fx.play()score += 1if highscore <= score:highscore = scoreif pygame.sprite.spritecollide(p, ball_group, False) and player_alive:death_fx.play()x, y = p.rect.centerfor i in range(20):particle = Particle(x, y, WHITE, win)particle_group.add(particle)player_alive = Falsep.reset()if p.can_move and len(dot_group) == 0 and player_alive:dot_index = random.randint(1,4)dot_pos = dot_list[dot_index-1]dot = Dot(*dot_pos, win)dot_group.add(dot)shadow_group.empty()shadow = Shadow(dot_index, win)shadow_group.add(shadow)if not player_alive and len(particle_group) == 0:game_page = Falsescore_page = Truedot_group.empty()shadow_group.empty()for ball in ball_group:ball.reset()score_page_fx.play()pygame.draw.rect(win, WHITE, (0, 0, WIDTH, HEIGHT), 5, border_radius=10)clock.tick(FPS)pygame.display.update()pygame.quit()

4、行星游戏

bf8f4cedab9e0b8358b3815b54f75343.png

源码分享:

import random
import pygame
from pygame.locals import KEYDOWN, QUIT, K_ESCAPE, K_SPACE, K_q, K_efrom objects import Rocket, Asteroid, Bullet, Explosion### SETUP *********************************************************************
SIZE = SCREEN_WIDTH, SCREEN_HEIGHT = 500, 500pygame.mixer.init()
pygame.init()
clock = pygame.time.Clock()
win = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
pygame.display.set_caption('Asteroids')gunshot_sound = pygame.mixer.Sound("music/laser.wav")
explosion_sound = pygame.mixer.Sound("music/explosion.mp3")font = pygame.font.Font('freesansbold.ttf', 32)
# text = font.render('', True, green, blue)### Objects & Events **********************************************************
ADDAST1 = pygame.USEREVENT + 1
ADDAST2 = pygame.USEREVENT + 2
ADDAST3 = pygame.USEREVENT + 3
ADDAST4 = pygame.USEREVENT + 4
ADDAST5 = pygame.USEREVENT + 5
pygame.time.set_timer(ADDAST1, 2000)
pygame.time.set_timer(ADDAST2, 6000)
pygame.time.set_timer(ADDAST3, 10000)
pygame.time.set_timer(ADDAST4, 15000)
pygame.time.set_timer(ADDAST5, 20000)rocket = Rocket(SIZE)asteroids = pygame.sprite.Group()
bullets = pygame.sprite.Group()
explosions = pygame.sprite.Group()
all_sprites = pygame.sprite.Group()
all_sprites.add(rocket)backgrounds = [f'assets/background/bg{i}s.png' for i in range(1,5)]
bg = pygame.image.load(random.choice(backgrounds))startbg = pygame.image.load('assets/start.jpg')### Game **********************************************************************
if __name__ == '__main__':score = 0running = TruegameStarted = FalsemusicStarted = Falsewhile running:if not gameStarted:if not musicStarted:pygame.mixer.music.load('music/Apoxode_-_Electric_1.mp3')pygame.mixer.music.play(loops=-1)musicStarted = Truefor event in pygame.event.get():if event.type == QUIT:running = Falseif event.type == KEYDOWN:if event.key == K_SPACE:gameStarted = TruemusicStarted = Falsewin.blit(startbg, (0,0))        else:if not musicStarted:pygame.mixer.music.load('music/rpg_ambience_-_exploration.ogg')pygame.mixer.music.play(loops=-1)musicStarted = Truefor event in pygame.event.get():if event.type == QUIT:running = Falseif event.type == KEYDOWN:if event.key == K_ESCAPE:running = Falseif event.key == K_SPACE:pos = rocket.rect[:2]bullet = Bullet(pos, rocket.dir, SIZE)bullets.add(bullet)all_sprites.add(bullet)gunshot_sound.play()if event.key == K_q:rocket.rotate_left()if event.key == K_e:rocket.rotate_right()elif event.type == ADDAST1:ast = Asteroid(1, SIZE)asteroids.add(ast)all_sprites.add(ast)elif event.type == ADDAST2:ast = Asteroid(2, SIZE)asteroids.add(ast)all_sprites.add(ast)elif event.type == ADDAST3:ast = Asteroid(3, SIZE)asteroids.add(ast)all_sprites.add(ast)elif event.type == ADDAST4:ast = Asteroid(4, SIZE)asteroids.add(ast)all_sprites.add(ast)elif event.type == ADDAST5:ast = Asteroid(5, SIZE)asteroids.add(ast)all_sprites.add(ast)pressed_keys = pygame.key.get_pressed()rocket.update(pressed_keys)asteroids.update()bullets.update()explosions.update()win.blit(bg, (0,0))explosions.draw(win)for sprite in all_sprites:win.blit(sprite.surf, sprite.rect)win.blit(rocket.surf, rocket.rect)if pygame.sprite.spritecollideany(rocket, asteroids):rocket.kill()score = 0for sprite in all_sprites:sprite.kill()all_sprites.empty()rocket = Rocket(SIZE)all_sprites.add(rocket)gameStarted = FalsemusicStarted = Falsefor bullet in bullets:collision = pygame.sprite.spritecollide(bullet, asteroids, True)if collision:pos = bullet.rect[:2]explosion = Explosion(pos)explosions.add(explosion)score += 1explosion_sound.play()bullet.kill()bullets.remove(bullet)text = font.render('Score : ' + str(score), 1, (200,255,0))win.blit(text, (340, 10))pygame.display.flip()clock.tick(30)pygame.quit()

5、弹跳的球

b64cce1c70ece4bcf927fd2d0f755ae5.png

源码分享:

import os
import pygamefrom player import Ball
from world import World, load_level
from texts import Text, Message
from button import Button, LevelButtonpygame.init()
WIDTH, HEIGHT = 192, 212
win = pygame.display.set_mode((WIDTH, HEIGHT), pygame.NOFRAME)
pygame.display.set_caption('Bounce')clock = pygame.time.Clock()
FPS = 30# GAME VARIABLES **************************************************************
ROWS = 12
MAX_COLS = 150
TILE_SIZE = 16
MAX_LEVEL = 8# COLORS **********************************************************************BLUE = (175, 207, 240)
BLUE2 = (0, 0, 255)
WHITE = (255, 255, 255)# FONTS ***********************************************************************health_font = "Fonts/ARCADECLASSIC.TTF"level_text = Text(health_font, 24)
health_text = Message(40, WIDTH + 10, 19, "x3", health_font, WHITE, win)
select_level_text = Message(WIDTH//2, 20, 24, "Select  Level", health_font, BLUE2, win)
current_level_text = Message(WIDTH - 40, WIDTH + 10, 20, "Level 1", health_font, WHITE, win)
you_win = Message(WIDTH //2, HEIGHT//2, 40, "You  Win", health_font, BLUE2, win)# SOUNDS **********************************************************************click_fx = pygame.mixer.Sound('Sounds/click.mp3')
life_fx = pygame.mixer.Sound('Sounds/gate.mp3')
checkpoint_fx = pygame.mixer.Sound('Sounds/checkpoint.mp3')pygame.mixer.music.load('Sounds/track1.wav')
pygame.mixer.music.play(loops=-1)
pygame.mixer.music.set_volume(0.4)# LOADING IMAGES **************************************************************ball_image = pygame.image.load('Assets/ball.png')
splash_img = pygame.transform.scale(pygame.image.load('Assets/splash_logo.png'),(2*WIDTH, HEIGHT))
bounce_img = pygame.image.load('Assets/menu_logo.png')
game_lost_img = pygame.image.load('Assets/lose.png')
game_lost_img = pygame.transform.scale(game_lost_img, (WIDTH//2, 80))
level_locked_img = pygame.image.load('Assets/level_locked.png')
level_locked_img = pygame.transform.scale(level_locked_img, (40, 40))
level_unlocked_img = pygame.image.load('Assets/level_unlocked.png')
level_unlocked_img = pygame.transform.scale(level_unlocked_img, (40, 40))play_img = pygame.image.load('Assets/play.png')
restart_img = pygame.image.load('Assets/restart.png')
menu_img = pygame.image.load('Assets/menu.png')
sound_on_img = pygame.image.load('Assets/SoundOnBtn.png')
sound_off_img = pygame.image.load('Assets/SoundOffBtn.png')
game_won_img = pygame.image.load('Assets/game won.png')# BUTTONS *********************************************************************play_btn = Button(play_img, False, 45, 130)
sound_btn = Button(sound_on_img, False, 45, 170)
restart_btn = Button(restart_img, False, 45, 130)
menu_btn = Button(menu_img, False, 45, 170)# LEVEL TEXT & BUTTONS ********************************************************level_btns = []
for level in range(MAX_LEVEL):text = level_text.render(f'{level+1}', (255, 255, 255))r = level // 3c = level % 3btn = LevelButton(level_locked_img, (40, 40), 20 + c * 55, 50 + r * 55, text)level_btns.append(btn)# GROUPS **********************************************************************spikes_group = pygame.sprite.Group()
inflator_group = pygame.sprite.Group()
deflator_group = pygame.sprite.Group()
enemy_group = pygame.sprite.Group()
exit_group = pygame.sprite.Group()
checkpoint_group = pygame.sprite.Group()
health_group = pygame.sprite.Group()objects_groups = [spikes_group, inflator_group, deflator_group, enemy_group, exit_group, checkpoint_group, health_group]
collision_groups = [inflator_group, deflator_group]# RESET ***********************************************************************def reset_level_data(level):for group in objects_groups:group.empty()# LOAD LEVEL WORLDworld_data, level_length = load_level(level)w = World(objects_groups)w.generate_world(world_data, win)return world_data, level_length, wdef reset_player_data(level):if level == 1:x, y = 64, 50if level == 2:x, y = 65, 50if level == 3:x, y = 64, 50if level == 4:x, y = 63, 50if level == 5:x, y = 64, 50if level == 6:x, y = 48, 50if level == 7:x, y = 78, 80if level == 8:x, y = 112,100p = Ball(x, y)moving_left = Falsemoving_right = Falsereturn p, moving_left, moving_right# VARIABLES *******************************************************************moving_left = False
moving_right = FalseSCROLL_THRES = 80
screen_scroll = 0
level_scroll = 0
level = 1
next_level = False
reset_level = Falsecheckpoint = None
health = 3
splash_count = 0
sound_on = Truelogo_page = True
home_page = False
level_page = False
game_page = False
restart_page = False
win_page = Falserunning = True
while running:win.fill(BLUE)pygame.draw.rect(win, (255, 255,255), (0, 0, WIDTH, HEIGHT), 1, border_radius=5)for event in pygame.event.get():if event.type == pygame.QUIT:running = Falseif event.type == pygame.KEYDOWN:if event.key == pygame.K_ESCAPE or \event.key == pygame.K_q:running = Falseif event.type == pygame.KEYDOWN:if event.key == pygame.K_LEFT:moving_left = Trueif event.key == pygame.K_RIGHT:moving_right = Trueif event.key == pygame.K_UP:if not p.jump:p.jump = Trueif event.type == pygame.KEYUP:if event.key == pygame.K_LEFT:moving_left = Falseif event.key == pygame.K_RIGHT:moving_right = Falseif logo_page:win.blit(splash_img, (-100,0))splash_count += 1if splash_count % 50 == 0:logo_page = Falsehome_page = Trueif home_page:win.blit(bounce_img, (10,10))if play_btn.draw(win):click_fx.play()home_page = Falselevel_page = Trueif sound_btn.draw(win):click_fx.play()sound_on = not sound_onif sound_on:sound_btn.update_image(sound_on_img)pygame.mixer.music.play(loops=-1)else:sound_btn.update_image(sound_off_img)pygame.mixer.music.stop()if level_page:select_level_text.update(shadow=False)for index, btn in enumerate(level_btns):if index < level:if not btn.unlocked:btn.unlocked = Truebtn.update_image(level_unlocked_img)if btn.draw(win):if index < level:click_fx.play()level_page = Falsegame_page = Truelevel = index + 1screen_scroll = 0level_scroll = 0health = 3world_data, level_length, w = reset_level_data(level)p, moving_left, moving_right = reset_player_data(level)if restart_page:win.blit(game_lost_img, (45,20))if restart_btn.draw(win):click_fx.play()world_data, level_length, w = reset_level_data(level)p, moving_left, moving_right = reset_player_data(level)level_scroll = 0screen_scroll = 0health = 3checkpoint = Nonerestart_page = Falsegame_page = Trueif menu_btn.draw(win):click_fx.play()home_page = Truerestart_page = Falseif win_page:win.blit(game_won_img, (45, 20))you_win.update()if menu_btn.draw(win):click_fx.play()home_page = Truewin_page = Falserestart_page = Falseif game_page:w.update(screen_scroll)w.draw(win)spikes_group.update(screen_scroll)spikes_group.draw(win)health_group.update(screen_scroll)health_group.draw(win)inflator_group.update(screen_scroll)inflator_group.draw(win)deflator_group.update(screen_scroll)deflator_group.draw(win)exit_group.update(screen_scroll)exit_group.draw(win)checkpoint_group.update(screen_scroll)checkpoint_group.draw(win)enemy_group.update(screen_scroll)enemy_group.draw(win)screen_scroll = 0p.update(moving_left, moving_right, w, collision_groups)p.draw(win)if ((p.rect.right >= WIDTH - SCROLL_THRES) and level_scroll < (level_length * 16) - WIDTH) \or ((p.rect.left <= SCROLL_THRES) and level_scroll > 0):dx = p.dxp.rect.x -= dxscreen_scroll = -dxlevel_scroll += dxif len(exit_group) > 0:exit = exit_group.sprites()[0]if not exit.open:if abs(p.rect.x - exit.rect.x) <= 80 and len(health_group) == 0:exit.open = Trueif p.rect.colliderect(exit.rect) and exit.index == 11:checkpoint = Nonecheckpoint_fx.play()level += 1if level < MAX_LEVEL:checkpoint = Falsereset_level = Truenext_level = Trueelse:checkpoint = Nonewin_page = Truecp = pygame.sprite.spritecollide(p, checkpoint_group, False)if cp:checkpoint = cp[0]if not checkpoint.catched:checkpoint_fx.play()checkpoint.catched = Truecheckpoint_pos = p.rect.centercheckpoint_screen_scroll = screen_scrollcheckpoint_level_scroll = level_scrollif pygame.sprite.spritecollide(p, spikes_group, False):reset_level = Trueif pygame.sprite.spritecollide(p, health_group, True):health += 1life_fx.play()if pygame.sprite.spritecollide(p, enemy_group, False):reset_level = Trueif reset_level:if health > 0:if next_level:world_data, level_length, w = reset_level_data(level)p, moving_left, moving_right = reset_player_data(level)level_scroll = 0health = 3checkpoint = Nonenext_level = Falseelif checkpoint:checkpoint_dx = level_scroll - checkpoint_level_scrollw.update(checkpoint_dx)for group in objects_groups:group.update(checkpoint_dx)p.rect.center = checkpoint_poslevel_scroll = checkpoint_level_scrollelse:w.update(level_scroll)for group in objects_groups:group.update(level_scroll)p, moving_left, moving_right = reset_player_data(level)level_scroll = 0screen_scroll = 0reset_level = Falsehealth -= 1else:restart_page = Truegame_page = Falsereset_level = False# Drawing info barpygame.draw.rect(win, (25, 25, 25), (0, HEIGHT-20, WIDTH, 20))pygame.draw.rect(win, (255, 255,255), (0, 0, WIDTH, WIDTH), 2, border_radius=5)win.blit(ball_image, (5, WIDTH + 2))health_text.update(f'x{health}', shadow=False)current_level_text.update(f'Level {level}', shadow=False)clock.tick(FPS)pygame.display.update()pygame.quit()

6、汽车避障

80e18062fd663585128e3071b72ebfb4.png

源码分享:

import pygame
import random
from objects import Road, Player, Nitro, Tree, Button, \Obstacle, Coins, Fuelpygame.init()
SCREEN = WIDTH, HEIGHT = 288, 512info = pygame.display.Info()
width = info.current_w
height = info.current_hif width >= height:win = pygame.display.set_mode(SCREEN, pygame.NOFRAME)
else:win = pygame.display.set_mode(SCREEN, pygame.NOFRAME | pygame.SCALED | pygame.FULLSCREEN)clock = pygame.time.Clock()
FPS = 30lane_pos = [50, 95, 142, 190]# COLORS **********************************************************************WHITE = (255, 255, 255)
BLUE = (30, 144,255)
RED = (255, 0, 0)
GREEN = (0, 255, 0)
BLACK = (0, 0, 20)# FONTS ***********************************************************************font = pygame.font.SysFont('cursive', 32)select_car = font.render('Select Car', True, WHITE)# IMAGES **********************************************************************bg = pygame.image.load('Assets/bg.png')home_img = pygame.image.load('Assets/home.png')
play_img = pygame.image.load('Assets/buttons/play.png')
end_img = pygame.image.load('Assets/end.jpg')
end_img = pygame.transform.scale(end_img, (WIDTH, HEIGHT))
game_over_img = pygame.image.load('Assets/game_over.png')
game_over_img = pygame.transform.scale(game_over_img, (220, 220))
coin_img = pygame.image.load('Assets/coins/1.png')
dodge_img = pygame.image.load('Assets/car_dodge.png')left_arrow = pygame.image.load('Assets/buttons/arrow.png')
right_arrow = pygame.transform.flip(left_arrow, True, False)home_btn_img = pygame.image.load('Assets/buttons/home.png')
replay_img = pygame.image.load('Assets/buttons/replay.png')
sound_off_img = pygame.image.load("Assets/buttons/soundOff.png")
sound_on_img = pygame.image.load("Assets/buttons/soundOn.png")cars = []
car_type = 0
for i in range(1, 9):img = pygame.image.load(f'Assets/cars/{i}.png')img = pygame.transform.scale(img, (59, 101))cars.append(img)nitro_frames = []
nitro_counter = 0
for i in range(6):img = pygame.image.load(f'Assets/nitro/{i}.gif')img = pygame.transform.flip(img, False, True)img = pygame.transform.scale(img, (18, 36))nitro_frames.append(img)# FUNCTIONS *******************************************************************
def center(image):return (WIDTH // 2) - image.get_width() // 2# BUTTONS *********************************************************************
play_btn = Button(play_img, (100, 34), center(play_img)+10, HEIGHT-80)
la_btn = Button(left_arrow, (32, 42), 40, 180)
ra_btn = Button(right_arrow, (32, 42), WIDTH-60, 180)home_btn = Button(home_btn_img, (24, 24), WIDTH // 4 - 18, HEIGHT - 80)
replay_btn = Button(replay_img, (36,36), WIDTH // 2  - 18, HEIGHT - 86)
sound_btn = Button(sound_on_img, (24, 24), WIDTH - WIDTH // 4 - 18, HEIGHT - 80)# SOUNDS **********************************************************************click_fx = pygame.mixer.Sound('Sounds/click.mp3')
fuel_fx = pygame.mixer.Sound('Sounds/fuel.wav')
start_fx = pygame.mixer.Sound('Sounds/start.mp3')
restart_fx = pygame.mixer.Sound('Sounds/restart.mp3')
coin_fx = pygame.mixer.Sound('Sounds/coin.mp3')pygame.mixer.music.load('Sounds/mixkit-tech-house-vibes-130.mp3')
pygame.mixer.music.play(loops=-1)
pygame.mixer.music.set_volume(0.6)# OBJECTS *********************************************************************
road = Road()
nitro = Nitro(WIDTH-80, HEIGHT-80)
p = Player(100, HEIGHT-120, car_type)tree_group = pygame.sprite.Group()
coin_group = pygame.sprite.Group()
fuel_group = pygame.sprite.Group()
obstacle_group = pygame.sprite.Group()# VARIABLES *******************************************************************
home_page = True
car_page = False
game_page = False
over_page = Falsemove_left = False
move_right = False
nitro_on = False
sound_on = Truecounter = 0
counter_inc = 1
# speed = 3
speed = 10
dodged = 0
coins = 0
cfuel = 100endx, enddx = 0, 0.5
gameovery = -50running = True
while running:win.fill(BLACK)for event in pygame.event.get():if event.type == pygame.QUIT:running = Falseif event.type == pygame.KEYDOWN:if event.key == pygame.K_ESCAPE or event.key == pygame.K_q:running = Falseif event.key == pygame.K_LEFT:move_left = Trueif event.key == pygame.K_RIGHT:move_right = Trueif event.key == pygame.K_n:nitro_on = Trueif event.type == pygame.KEYUP:if event.key == pygame.K_LEFT:move_left = Falseif event.key == pygame.K_RIGHT:move_right = Falseif event.key == pygame.K_n:nitro_on = Falsespeed = 3counter_inc = 1if event.type == pygame.MOUSEBUTTONDOWN:x, y = event.posif nitro.rect.collidepoint((x, y)):nitro_on = Trueelse:if x <= WIDTH // 2:move_left = Trueelse:move_right = Trueif event.type == pygame.MOUSEBUTTONUP:move_left = Falsemove_right = Falsenitro_on = Falsespeed = 3counter_inc = 1if home_page:win.blit(home_img, (0,0))counter += 1if counter % 60 == 0:home_page = Falsecar_page = Trueif car_page:win.blit(select_car, (center(select_car), 80))win.blit(cars[car_type], (WIDTH//2-30, 150))if la_btn.draw(win):car_type -= 1click_fx.play()if car_type < 0:car_type = len(cars) - 1if ra_btn.draw(win):car_type += 1click_fx.play()if car_type >= len(cars):car_type = 0if play_btn.draw(win):car_page = Falsegame_page = Truestart_fx.play()p = Player(100, HEIGHT-120, car_type)counter = 0if over_page:win.blit(end_img, (endx, 0))endx += enddxif endx >= 10 or endx<=-10:enddx *= -1win.blit(game_over_img, (center(game_over_img), gameovery))if gameovery < 16:gameovery += 1num_coin_img = font.render(f'{coins}', True, WHITE)num_dodge_img = font.render(f'{dodged}', True, WHITE)distance_img = font.render(f'Distance : {counter/1000:.2f} km', True, WHITE)win.blit(coin_img, (80, 240))win.blit(dodge_img, (50, 280))win.blit(num_coin_img, (180, 250))win.blit(num_dodge_img, (180, 300))win.blit(distance_img, (center(distance_img), (350)))if home_btn.draw(win):over_page = Falsehome_page = Truecoins = 0dodged = 0counter = 0nitro.gas = 0cfuel = 100endx, enddx = 0, 0.5gameovery = -50if replay_btn.draw(win):over_page = Falsegame_page = Truecoins = 0dodged = 0counter = 0nitro.gas = 0cfuel = 100endx, enddx = 0, 0.5gameovery = -50restart_fx.play()if sound_btn.draw(win):sound_on = not sound_onif sound_on:sound_btn.update_image(sound_on_img)pygame.mixer.music.play(loops=-1)else:sound_btn.update_image(sound_off_img)pygame.mixer.music.stop()if game_page:win.blit(bg, (0,0))road.update(speed)road.draw(win)counter += counter_incif counter % 60 == 0:tree = Tree(random.choice([-5, WIDTH-35]), -20)tree_group.add(tree)if counter % 270 == 0:type = random.choices([1, 2], weights=[6, 4], k=1)[0]x = random.choice(lane_pos)+10if type == 1:count = random.randint(1, 3)for i in range(count):coin = Coins(x,-100 - (25 * i))coin_group.add(coin)elif type == 2:fuel = Fuel(x, -100)fuel_group.add(fuel)elif counter % 90 == 0:obs = random.choices([1, 2, 3], weights=[6,2,2], k=1)[0]obstacle = Obstacle(obs)obstacle_group.add(obstacle)if nitro_on and nitro.gas > 0:x, y = p.rect.centerx - 8, p.rect.bottom - 10win.blit(nitro_frames[nitro_counter], (x, y))nitro_counter = (nitro_counter + 1) % len(nitro_frames)speed = 10if counter_inc == 1:counter = 0counter_inc = 5if nitro.gas <= 0:speed = 3counter_inc = 1nitro.update(nitro_on)nitro.draw(win)obstacle_group.update(speed)obstacle_group.draw(win)tree_group.update(speed)tree_group.draw(win)coin_group.update(speed)coin_group.draw(win)fuel_group.update(speed)fuel_group.draw(win)p.update(move_left, move_right)p.draw(win)if cfuel > 0:pygame.draw.rect(win, GREEN, (20, 20, cfuel, 15), border_radius=5)pygame.draw.rect(win, WHITE, (20, 20, 100, 15), 2, border_radius=5)cfuel -= 0.05# COLLISION DETECTION & KILLSfor obstacle in obstacle_group:if obstacle.rect.y >= HEIGHT:if obstacle.type == 1:dodged += 1obstacle.kill() if pygame.sprite.collide_mask(p, obstacle):pygame.draw.rect(win, RED, p.rect, 1)speed = 0game_page = Falseover_page = Truetree_group.empty()coin_group.empty()fuel_group.empty()obstacle_group.empty()if pygame.sprite.spritecollide(p, coin_group, True):coins += 1coin_fx.play()if pygame.sprite.spritecollide(p, fuel_group, True):cfuel += 25fuel_fx.play()if cfuel >= 100:cfuel = 100pygame.draw.rect(win, BLUE, (0, 0, WIDTH, HEIGHT), 3)clock.tick(FPS)pygame.display.update()pygame.quit()# 今天给大家介绍一款Python制作的汽车避障小游戏
# 主要通过Pygame实现的,运行代码,选择车型,进入游戏
# 可以控制左右移动,点击右下角可以进行加速
# 金币可以增加积分,撞到障碍物则游戏介绍

7、洞窟物语

d06e091f98705592b39171cb91854292.jpeg

源码分享:

import pygame
import picklefrom objects import World, load_level, Button, Player, Portal, game_datapygame.init()
SCREEN = WIDTH, HEIGHT = 288, 512
win = pygame.display.set_mode(SCREEN, pygame.SCALED | pygame.FULLSCREEN)
clock = pygame.time.Clock()
FPS = 45tile_size = 16# Imagesbg = pygame.image.load("Assets/bg.png")cave_story = pygame.transform.rotate(pygame.image.load("Assets/cave_story.png"), 90)
cave_story = pygame.transform.scale(cave_story, (150,300))game_won_img = pygame.transform.rotate(pygame.image.load("Assets/win.png"), -90)
game_won_img = pygame.transform.scale(game_won_img, (150,300))# Sounds
pygame.mixer.music.load('Sounds/goodbyte_sad-rpg-town.mp3')
pygame.mixer.music.play(loops=-1)replay_fx =  pygame.mixer.Sound('Sounds/replay.wav')# Buttonsmove_btn = pygame.image.load("Assets/movement.jpeg")
move_btn = pygame.transform.rotate(move_btn, -90)
move_btn = pygame.transform.scale(move_btn, (42, HEIGHT))play_img = pygame.transform.rotate(pygame.image.load("Assets/play.png"), -90)
play_btn = Button(play_img, (60, 150), 30, 170)quit_img = pygame.transform.rotate(pygame.image.load("Assets/quit.png"), -90)
quit_btn = Button(quit_img, (60, 150), 140, 170)replay_img = pygame.transform.rotate(pygame.image.load("Assets/replay.png"), -90)
replay_btn = Button(replay_img, (40, 40), 100, 190)sound_off_img = pygame.transform.rotate(pygame.image.load("Assets/sound_off.png"), -90)
sound_on_img = pygame.transform.rotate(pygame.image.load("Assets/sound_on.png"), -90)
sound_btn = Button(sound_on_img, (40, 40), 100, 260)# Variablescurrent_level = 1
MAX_LEVEL = 3
show_keys = True
pressed_keys = [False, False, False, False]dir_dict = {'Up' : pygame.Rect(5, 27, 35, 50),'Down' : pygame.Rect(5, 160, 35, 50),'Left' :  pygame.Rect(5, 320, 35, 50),'Right' : pygame.Rect(5, 450, 35, 50)
}# groups 
diamond_group = pygame.sprite.Group()
spike_group = pygame.sprite.Group()
plant_group = pygame.sprite.Group()
board_group = pygame.sprite.Group()
chain_group = pygame.sprite.Group()
groups = [diamond_group, spike_group, plant_group, board_group, chain_group]data = load_level(current_level)
(player_x, player_y), (portal_x, portal_y) = game_data(current_level)world = World(win, data, groups)
player = Player(win, (player_x,player_y), world, groups)
portal = Portal(portal_x, portal_y, win)game_started = False
game_over = False
game_won = False
replay_menu = False
sound_on = Truebgx = 0
bgcounter = 0
bgdx = 1running = True
while running:win.blit(bg, (bgx, 0))for group in groups:group.draw(win)world.draw()if not game_started:win.blit(cave_story, (100,100))if play_btn.draw(win):game_started = Trueelif game_won:win.blit(game_won_img, (100,100))else:if show_keys:win.blit(move_btn, (0,0))bgcounter += 1if bgcounter >= 15:bgcounter = 0bgx += bgdxif bgx < 0 or bgx >5 :bgdx *= -1#   for rect in dir_dict:#       pygame.draw.rect(win, (255, 0, 0), dir_dict[rect])for event in pygame.event.get():if event.type == pygame.QUIT:running = Falseif event.type == pygame.MOUSEBUTTONDOWN:pos = event.posif show_keys:if dir_dict["Up"].collidepoint(pos):pressed_keys[0] = Trueif dir_dict["Down"].collidepoint(pos):pressed_keys[1] = Trueif dir_dict["Left"].collidepoint(pos):pressed_keys[2] = Trueif dir_dict["Right"].collidepoint(pos):pressed_keys[3] = Trueif event.type == pygame.MOUSEBUTTONUP:pressed_keys = [False, False, False, False]portal.update()if not game_over:game_over = player.update(pressed_keys, game_over)if game_over:show_keys = Falsereplay_menu = Trueif player.rect.colliderect(portal) and player.rect.top > portal.rect.top and player.rect.bottom < portal.rect.bottom:if current_level < MAX_LEVEL:current_level += 1for group in groups:group.empty()data = load_level(current_level)(player_x, player_y), (portal_x, portal_y) = game_data(current_level)world = World(win, data, groups)player = Player(win, (player_x,player_y), world, groups)portal = Portal(portal_x, portal_y, win)else:show_keys = Falsegame_won = Trueif replay_menu:if quit_btn.draw(win):running = Falseif sound_btn.draw(win):sound_on = not sound_onif sound_on:sound_btn.update_image(sound_on_img)pygame.mixer.music.play(loops=-1)else:sound_btn.update_image(sound_off_img)pygame.mixer.music.stop()if replay_btn.draw(win):show_keys = Truereplay_menu = Falsegame_over = Falsereplay_fx.play()for group in groups:group.empty()data = load_level(current_level)(player_x, player_y), (portal_x, portal_y) = game_data(current_level)world = World(win, data, groups)player = Player(win, (player_x,player_y), world, groups)portal = Portal(portal_x, portal_y, win)clock.tick(FPS)pygame.display.update()pygame.quit()

8、联系

7ec4e247ac6a38b936ccaed2fde70ca3.png

源码分享:

# Connected# Author : Prajjwal Pathak (pyguru)
# Date : Thursday, 8 August, 2021import random
import pygamefrom objects import Balls, Coins, Tiles, Particle, Message, Buttonpygame.init()
SCREEN = WIDTH, HEIGHT = 288, 512
CENTER = WIDTH //2, HEIGHT // 2info = pygame.display.Info()
width = info.current_w
height = info.current_hif width >= height:win = pygame.display.set_mode(SCREEN, pygame.NOFRAME)
else:win = pygame.display.set_mode(SCREEN, pygame.NOFRAME | pygame.SCALED | pygame.FULLSCREEN)
pygame.display.set_caption('Connected')clock = pygame.time.Clock()
FPS = 90# COLORS **********************************************************************RED = (255,0,0)
GREEN = (0,177,64)
BLUE = (30, 144,255)
ORANGE = (252,76,2)
YELLOW = (254,221,0)
PURPLE = (155,38,182)
AQUA = (0,103,127)
WHITE = (255,255,255)
BLACK = (0,0,0)
GRAY = (25, 25, 25)color_list = [PURPLE, GREEN, BLUE, ORANGE, YELLOW, RED]
color_index = 0
color = color_list[color_index]# SOUNDS **********************************************************************flip_fx = pygame.mixer.Sound('Sounds/flip.mp3')
score_fx = pygame.mixer.Sound('Sounds/point.mp3')
dead_fx = pygame.mixer.Sound('Sounds/dead.mp3')
score_page_fx = pygame.mixer.Sound('Sounds/score_page.mp3')pygame.mixer.music.load('Sounds/bgm.mp3')
pygame.mixer.music.play(loops=-1)
pygame.mixer.music.set_volume(0.5)# FONTS ***********************************************************************title_font = "Fonts/Aladin-Regular.ttf"
score_font = "Fonts/DroneflyRegular-K78LA.ttf"
game_over_font = "Fonts/ghostclan.ttf"
final_score_font = "Fonts/DalelandsUncialBold-82zA.ttf"
new_high_font = "Fonts/BubblegumSans-Regular.ttf"connected = Message(WIDTH//2, 120, 55, "ConnecteD", title_font, WHITE, win)
score_msg = Message(WIDTH//2, 100, 60, "0", score_font, (150, 150, 150), win)
game_msg = Message(80, 150, 40, "GAME", game_over_font, BLACK, win)
over_msg = Message(210, 150, 40, "OVER!", game_over_font, WHITE, win)
final_score = Message(WIDTH//2, HEIGHT//2, 90, "0", final_score_font, RED, win)
new_high_msg = Message(WIDTH//2, HEIGHT//2+60, 20, "New High", None, GREEN, win)# Button imageshome_img = pygame.image.load('Assets/homeBtn.png')
replay_img = pygame.image.load('Assets/replay.png')
sound_off_img = pygame.image.load("Assets/soundOffBtn.png")
sound_on_img = pygame.image.load("Assets/soundOnBtn.png")
easy_img = pygame.image.load("Assets/easy.jpg")
hard_img = pygame.image.load("Assets/hard.jpg")# Buttonseasy_btn = Button(easy_img, (70, 24), WIDTH//4-10, HEIGHT-100)
hard_btn = Button(hard_img, (70, 24), WIDTH//2 + 10, HEIGHT-100)
home_btn = Button(home_img, (24, 24), WIDTH // 4 - 18, HEIGHT//2 + 120)
replay_btn = Button(replay_img, (36,36), WIDTH // 2  - 18, HEIGHT//2 + 115)
sound_btn = Button(sound_on_img, (24, 24), WIDTH - WIDTH // 4 - 18, HEIGHT//2 + 120)# Groups **********************************************************************RADIUS = 70
ball_group = pygame.sprite.Group()
coin_group = pygame.sprite.Group()
tile_group = pygame.sprite.Group()
particle_group = pygame.sprite.Group()ball = Balls((CENTER[0], CENTER[1]+RADIUS), RADIUS, 90, win)
ball_group.add(ball)
ball = Balls((CENTER[0], CENTER[1]-RADIUS), RADIUS, 270, win)
ball_group.add(ball)# TIME ************************************************************************start_time = pygame.time.get_ticks()
current_time = 0
coin_delta = 850
tile_delta = 2000# VARIABLES *******************************************************************clicked = False
new_coin = True
num_clicks = 0
score = 0player_alive = True
score = 0
highscore = 0
sound_on = True
easy_level = Truehome_page = True
game_page = False
score_page = Falserunning = True
while running:win.fill(GRAY)for event in pygame.event.get():if event.type == pygame.QUIT:running = Falseif event.type == pygame.KEYDOWN:if event.key == pygame.K_ESCAPE or \event.key == pygame.K_q:running = Falseif event.type == pygame.MOUSEBUTTONDOWN and game_page:if not clicked:clicked = Truefor ball in ball_group:ball.dtheta *= -1flip_fx.play()num_clicks += 1if num_clicks % 5 == 0:color_index += 1if color_index > len(color_list) - 1:color_index = 0color = color_list[color_index]if event.type == pygame.MOUSEBUTTONDOWN and game_page:clicked = Falseif home_page:connected.update()pygame.draw.circle(win, BLACK, CENTER, 80, 20)ball_group.update(color)if easy_btn.draw(win):ball_group.empty()ball = Balls((CENTER[0], CENTER[1]+RADIUS), RADIUS, 90, win)ball_group.add(ball)home_page = Falsegame_page = Trueeasy_level = Trueif hard_btn.draw(win):ball_group.empty()ball = Balls((CENTER[0], CENTER[1]+RADIUS), RADIUS, 90, win)ball_group.add(ball)ball = Balls((CENTER[0], CENTER[1]-RADIUS), RADIUS, 270, win)ball_group.add(ball)home_page = Falsegame_page = Trueeasy_level = Falseif score_page:game_msg.update()over_msg.update()if score:final_score.update(score, color)else:final_score.update("0", color)if score and (score >= highscore):new_high_msg.update(shadow=False)if home_btn.draw(win):home_page = Truescore_page = Falsegame_page = Falseplayer_alive = Truescore = 0score_msg = Message(WIDTH//2, 100, 60, "0", score_font, (150, 150, 150), win)if replay_btn.draw(win):home_page = Falsescore_page = Falsegame_page = Truescore = 0score_msg = Message(WIDTH//2, 100, 60, "0", score_font, (150, 150, 150), win)if easy_level:ball = Balls((CENTER[0], CENTER[1]+RADIUS), RADIUS, 90, win)ball_group.add(ball)else:ball = Balls((CENTER[0], CENTER[1]+RADIUS), RADIUS, 90, win)ball_group.add(ball)ball = Balls((CENTER[0], CENTER[1]-RADIUS), RADIUS, 270, win)ball_group.add(ball)player_alive = Trueif sound_btn.draw(win):sound_on = not sound_onif sound_on:sound_btn.update_image(sound_on_img)pygame.mixer.music.play(loops=-1)else:sound_btn.update_image(sound_off_img)pygame.mixer.music.stop()if game_page:pygame.draw.circle(win, BLACK, CENTER, 80, 20)ball_group.update(color)coin_group.update(color)tile_group.update()score_msg.update(score)particle_group.update()if player_alive:for ball in ball_group:if pygame.sprite.spritecollide(ball, coin_group, True):score_fx.play()score += 1if highscore <= score:highscore = scorex, y = ball.rect.centerfor i in range(10):particle = Particle(x, y, color, win)particle_group.add(particle)if pygame.sprite.spritecollide(ball, tile_group, True):x, y = ball.rect.centerfor i in range(30):particle = Particle(x, y, color, win)particle_group.add(particle)player_alive = Falsedead_fx.play()current_time = pygame.time.get_ticks()delta = current_time- start_timeif  coin_delta < delta < coin_delta + 100 and new_coin:y = random.randint(CENTER[1]-RADIUS, CENTER[1]+RADIUS)coin = Coins(y, win)coin_group.add(coin)new_coin = Falseif current_time- start_time >= tile_delta:y = random.choice([CENTER[1]-80, CENTER[1], CENTER[1]+80])type_ = random.randint(1,3)t = Tiles(y, type_, win)tile_group.add(t)start_time = current_timenew_coin = Trueif not player_alive and len(particle_group) == 0:score_page = Truegame_page = Falsescore_page_fx.play()ball_group.empty()tile_group.empty()coin_group.empty()pygame.draw.rect(win, BLUE, (0, 0, WIDTH, HEIGHT), 5, border_radius=10)clock.tick(FPS)pygame.display.update()pygame.quit()

9、恐龙避障

代码太多了,接下来就简单介绍下,有兴趣的在公众号内回复【游戏】即可获取所有的游戏源码。

bdb8284f1276606975cd07c6a395f428.png

10、狡猾的墙

7ba8f83cf6a4b136e7197d86cca4c6e7.png

11、点和盒子

14e19b00380d3f13e80b41bb636d0359.png

12、捉蛋游戏

5f8e4bb8741de73fd5dcadce2d123b32.png

13、愤怒的小鸟

ab1c3f0d79e4f6ddf40b24f8c4dd6282.png

14、捉鬼特工队

22c56fc6b9a4b4ef4d49c4f4de40c161.png

15、绞刑吏

f0a5e453961395d574ae8489266c2fb0.png

16、六角冲

9b1987e5d6d54edefcd6e8db694b676d.png

17、匹配选择

6ad0920678ffe9a60d280db02acd431d.png

18、丛林探险

ca0529194c59c2cddaa7ed0a9deffef2.png

19、关卡设计

d74d13aacf8881999a2834a42f00747c.png

20、记忆拼图

9e3113efdbc45c501af0f8ec31806866.png

21、扫雷

4cde00396ba36ff63b15cae24e96e595.png

22、钢琴砖

f0caa0fd45aa5bba01ee8f0d313c22e8.png

23、图片滑动拼图

2c7911e0304267417fbd368b7e174a80.png

24、乒乓球

2819d5f826ccc562451907ea0409eb50.png

25、冲刺

a57d82cccb3f582fb507d27b87bf1c75.png

26、石头剪刀布

dc740fa6b1b062586e75f0d3f20cd0e1.png

27、旋转冲击

9d5c744eba36fd1415503d6588a906ff.png

28、贪吃蛇

6ef7c818f394a98181d18ef7072788a9.png

29、剪刀

acc09de593d0cd83edd7c7bd67dcdeec.png

30、俄罗斯方块

348bb1d0dabaef400e813af366728909.png

相关文件及代码都已上传,公众号回复【游戏】即可获取。

万水千山总是情,点个 👍 行不行。

推荐阅读···  END  ···
http://www.lryc.cn/news/2417225.html

相关文章:

  • 异步任务(AsyncTask)
  • 电脑死机是什么原因及解决方法
  • 我是巢皮...
  • Paypal开发者中心获取“ClientId”和“ClientSecret”参数
  • objectARX自用总结
  • HTK学习笔记(一)
  • CLSID应用
  • MPC模型预测控制及在Matlab中实现函数定义
  • U盘全新安装windows2003系统
  • 10款用于查询IP地址的工具网站
  • DirectSound 与Waveout的区别
  • 实验误差分析大全,实验员必备!
  • Wireshark过滤总结
  • 【读码JDK】-java.lang包介绍
  • java启动参数xmm_更快的方法来测试xmm / ymm寄存器是否为零?
  • 敏捷软件开发
  • .mp4视频测试地址
  • Java IO流操作汇总: inputStream 和 outputStream
  • DRM-widevine 总结
  • 电脑提示msvcp110.dll丢失修复方法,总结四个有效的方法
  • Linux入门基础完整版【详解】
  • 微机原理与接口技术实验二:8255A控制4按键二进制输入数码管显示
  • 发现了一个好网站.绝不是打广告,独乐乐不如众乐乐.
  • 变量及四种变量类型
  • 汉字编码问题
  • 史上最全网址导航大全,让世上没有找不到的好东西
  • 新手写CSDN的教程
  • [转]DTV(数字电视)扫盲-DVB介绍
  • 微软官方精简Windows7系统——Windows Thin PC的安装过程
  • 【渗透测试笔记】之【钓鱼姿势——exe伪装word文档(exe图标修改方法)】_restorator如何添加exe资源(2)