赞
踩
大家好,本文将围绕python简单小游戏代码100行展开说明,python小游戏代码能用的是一个很多人都想弄明白的事情,想搞清楚python小游戏程序源代码需要先了解以下几个事情。
在学习Python的过程中,不妨给自己增添一点乐趣,博主分享了几个小游戏的代码,欢迎大家边学边玩~
代码如下(示例):
- import pygame
- import random
-
- from objects import Player, Bar, Ball, Block, ScoreCard, Message, Particle, generate_particles
-
- pygame.init()
- SCREEN = WIDTH, HEIGHT = 288, 512
-
- info = pygame.display.Info()
- width = info.current_w
- height = info.current_h
-
- if 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
-
- # COLORS
-
- RED = (255, 0, 0)
- WHITE = (255, 255, 255)
- BLACK = (0, 0, 0)
- GRAY = (54, 69, 79)
- c_list = [RED, BLACK, WHITE]
-
- # Fonts
-
- pygame.font.init()
- score_font = pygame.font.Font('Fonts/BubblegumSans-Regular.ttf', 50)
-
- # Sounds
-
- coin_fx = pygame.mixer.Sound('Sounds/coin.mp3')
- death_fx = pygame.mixer.Sound('Sounds/death.mp3')
- move_fx = pygame.mixer.Sound('Sounds/move.mp3')
-
- # backgrounds
-
- bg_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 = 120
-
- particles = []
-
- p = Player(win)
- score_card = ScoreCard(140, 40, win)
-
- # Functions
-
- def destroy_bird():
- x, y = p.rect.center
- for 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)
-
- # Variables
-
- bar_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 = 0
-
- running = True
- while running:
- win.blit(bg, (0,0))
-
- for event in pygame.event.get():
- if event.type == pygame.QUIT:
- running = False
-
- if event.type == pygame.KEYDOWN:
- if event.key == pygame.K_ESCAPE:
- running = False
-
- if event.type == pygame.MOUSEBUTTONDOWN and (home_page or score_page):
- home_page = False
- score_page = False
- win_particle_group.empty()
-
- bg = random.choice(bg_list)
-
- particles = []
- last_bar = pygame.time.get_ticks() - bar_frequency
- next_bar = 0
- bar_speed = 4
- bar_frequency = 1200
- bird_dead = False
- score = 0
- p_count = 0
- score_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 = True
- x, y = event.pos
- offset_x = p.rect.x - x
-
- if event.type == pygame.MOUSEBUTTONUP and not home_page:
- touched = False
-
- if event.type == pygame.MOUSEMOTION and not home_page:
- if touched:
- x, y = event.pos
- if move_right and prev_x > x:
- move_right = False
- move_left = True
- move_fx.play()
- if move_left and prev_x < x:
- move_right = True
- move_left = False
- move_fx.play()
-
- prev_x = x
- p.rect.x = x + offset_x
-
- if home_page:
- bg = home_bg
- particles = generate_particles(p, particles, WHITE, win)
- dodgy.update()
- walls.update()
- tap_to_play.update()
- p.update()
-
- elif score_page:
- bg = home_bg
- particles = 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 += 1
- win_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 + 12
- elif pos == 1:
- x = bwidth + bar_gap - 12
- ball = Ball(x, 10, 1, color, win)
-
- ball_group.add(ball)
- last_bar = next_bar
-
- for ball in ball_group:
- if ball.rect.colliderect(p):
- if ball.color == "white":
- ball.kill()
- coin_fx.play()
- score += 1
- if score > high_score:
- high_score += 1
- score_card.animate = True
- elif ball.color == "red":
- if not bird_dead:
- death_fx.play()
- destroy_bird()
-
- bird_dead = True
- bar_speed = 0
-
- if pygame.sprite.spritecollide(p, bar_group, False):
- if not bird_dead:
- death_fx.play()
- destroy_bird()
-
- bird_dead = True
- bar_speed = 0
-
- block_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 // 10
- if rem not in score_list:
- score_list.append(rem)
- bar_speed += 1
- bar_frequency -= 200
-
- if bird_dead and len(destruct_group) == 0:
- score_page = True
- font = "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()

代码如下(示例):
- import pygame
- import random
-
- from objects import Player, Bar, Ball, Block, ScoreCard, Message, Particle, generate_particles
-
- pygame.init()
- SCREEN = WIDTH, HEIGHT = 288, 512
-
- info = pygame.display.Info()
- width = info.current_w
- height = info.current_h
-
- if 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
-
- # COLORS
-
- RED = (255, 0, 0)
- WHITE = (255, 255, 255)
- BLACK = (0, 0, 0)
- GRAY = (54, 69, 79)
- c_list = [RED, BLACK, WHITE]
-
- # Fonts
-
- pygame.font.init()
- score_font = pygame.font.Font('Fonts/BubblegumSans-Regular.ttf', 50)
-
- # Sounds
-
- coin_fx = pygame.mixer.Sound('Sounds/coin.mp3')
- death_fx = pygame.mixer.Sound('Sounds/death.mp3')
- move_fx = pygame.mixer.Sound('Sounds/move.mp3')
-
- # backgrounds
-
- bg_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 = 120
-
- particles = []
-
- p = Player(win)
- score_card = ScoreCard(140, 40, win)
-
- # Functions
-
- def destroy_bird():
- x, y = p.rect.center
- for 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)
-
- # Variables
-
- bar_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 = 0
-
- running = True
- while running:
- win.blit(bg, (0,0))
-
- for event in pygame.event.get():
- if event.type == pygame.QUIT:
- running = False
-
- if event.type == pygame.KEYDOWN:
- if event.key == pygame.K_ESCAPE:
- running = False
-
- if event.type == pygame.MOUSEBUTTONDOWN and (home_page or score_page):
- home_page = False
- score_page = False
- win_particle_group.empty()
-
- bg = random.choice(bg_list)
-
- particles = []
- last_bar = pygame.time.get_ticks() - bar_frequency
- next_bar = 0
- bar_speed = 4
- bar_frequency = 1200
- bird_dead = False
- score = 0
- p_count = 0
- score_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 = True
- x, y = event.pos
- offset_x = p.rect.x - x
-
- if event.type == pygame.MOUSEBUTTONUP and not home_page:
- touched = False
-
- if event.type == pygame.MOUSEMOTION and not home_page:
- if touched:
- x, y = event.pos
- if move_right and prev_x > x:
- move_right = False
- move_left = True
- move_fx.play()
- if move_left and prev_x < x:
- move_right = True
- move_left = False
- move_fx.play()
-
- prev_x = x
- p.rect.x = x + offset_x
-
- if home_page:
- bg = home_bg
- particles = generate_particles(p, particles, WHITE, win)
- dodgy.update()
- walls.update()
- tap_to_play.update()
- p.update()
-
- elif score_page:
- bg = home_bg
- particles = 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 += 1
- win_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 + 12
- elif pos == 1:
- x = bwidth + bar_gap - 12
- ball = Ball(x, 10, 1, color, win)
-
- ball_group.add(ball)
- last_bar = next_bar
-
- for ball in ball_group:
- if ball.rect.colliderect(p):
- if ball.color == "white":
- ball.kill()
- coin_fx.play()
- score += 1
- if score > high_score:
- high_score += 1
- score_card.animate = True
- elif ball.color == "red":
- if not bird_dead:
- death_fx.play()
- destroy_bird()
-
- bird_dead = True
- bar_speed = 0
-
- if pygame.sprite.spritecollide(p, bar_group, False):
- if not bird_dead:
- death_fx.play()
- destroy_bird()
-
- bird_dead = True
- bar_speed = 0
-
- block_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 // 10
- if rem not in score_list:
- score_list.append(rem)
- bar_speed += 1
- bar_frequency -= 200
-
- if bird_dead and len(destruct_group) == 0:
- score_page = True
- font = "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()

代码如下(示例):
- import random
- import pygame
- from pygame.locals import KEYDOWN, QUIT, K_ESCAPE, K_SPACE, K_q, K_e
-
- from objects import Rocket, Asteroid, Bullet, Explosion
-
-
- ### SETUP *********************************************************************
- SIZE = SCREEN_WIDTH, SCREEN_HEIGHT = 500, 500
-
- pygame.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 = 0
- running = True
- gameStarted = False
- musicStarted = False
- while running:
- if not gameStarted:
- if not musicStarted:
- pygame.mixer.music.load('music/Apoxode_-_Electric_1.mp3')
- pygame.mixer.music.play(loops=-1)
- musicStarted = True
- for event in pygame.event.get():
- if event.type == QUIT:
- running = False
-
- if event.type == KEYDOWN:
- if event.key == K_SPACE:
- gameStarted = True
- musicStarted = False
-
- win.blit(startbg, (0,0))
- else:
- if not musicStarted:
- pygame.mixer.music.load('music/rpg_ambience_-_exploration.ogg')
- pygame.mixer.music.play(loops=-1)
- musicStarted = True
- for event in pygame.event.get():
- if event.type == QUIT:
- running = False
-
- if event.type == KEYDOWN:
- if event.key == K_ESCAPE:
- running = False
- if 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 = 0
- for sprite in all_sprites:
- sprite.kill()
- all_sprites.empty()
- rocket = Rocket(SIZE)
- all_sprites.add(rocket)
- gameStarted = False
- musicStarted = False
-
- for bullet in bullets:
- collision = pygame.sprite.spritecollide(bullet, asteroids, True)
- if collision:
- pos = bullet.rect[:2]
- explosion = Explosion(pos)
- explosions.add(explosion)
- score += 1
- explosion_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()

- import pygame
- import random
- from objects import Road, Player, Nitro, Tree, Button, \
- Obstacle, Coins, Fuel
-
- pygame.init()
- SCREEN = WIDTH, HEIGHT = 288, 512
-
- info = pygame.display.Info()
- width = info.current_w
- height = info.current_h
-
- if 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 = 30
-
- lane_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 = False
-
- move_left = False
- move_right = False
- nitro_on = False
- sound_on = True
-
- counter = 0
- counter_inc = 1
- # speed = 3
- speed = 10
- dodged = 0
- coins = 0
- cfuel = 100
-
- endx, enddx = 0, 0.5
- gameovery = -50
-
- running = True
- while running:
- win.fill(BLACK)
-
- for event in pygame.event.get():
- if event.type == pygame.QUIT:
- running = False
-
- if event.type == pygame.KEYDOWN:
- if event.key == pygame.K_ESCAPE or event.key == pygame.K_q:
- running = False
-
- if event.key == pygame.K_LEFT:
- move_left = True
-
- if event.key == pygame.K_RIGHT:
- move_right = True
-
- if event.key == pygame.K_n:
- nitro_on = True
-
- if event.type == pygame.KEYUP:
- if event.key == pygame.K_LEFT:
- move_left = False
-
- if event.key == pygame.K_RIGHT:
- move_right = False
-
- if event.key == pygame.K_n:
- nitro_on = False
- speed = 3
- counter_inc = 1
-
- if event.type == pygame.MOUSEBUTTONDOWN:
- x, y = event.pos
-
- if nitro.rect.collidepoint((x, y)):
- nitro_on = True
- else:
- if x <= WIDTH // 2:
- move_left = True
- else:
- move_right = True
-
- if event.type == pygame.MOUSEBUTTONUP:
- move_left = False
- move_right = False
- nitro_on = False
- speed = 3
- counter_inc = 1
-
- if home_page:
- win.blit(home_img, (0,0))
- counter += 1
- if counter % 60 == 0:
- home_page = False
- car_page = True
-
- if 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 -= 1
- click_fx.play()
- if car_type < 0:
- car_type = len(cars) - 1
-
- if ra_btn.draw(win):
- car_type += 1
- click_fx.play()
- if car_type >= len(cars):
- car_type = 0
-
- if play_btn.draw(win):
- car_page = False
- game_page = True
-
- start_fx.play()
-
- p = Player(100, HEIGHT-120, car_type)
- counter = 0
-
- if over_page:
- win.blit(end_img, (endx, 0))
- endx += enddx
- if endx >= 10 or endx<=-10:
- enddx *= -1
-
- win.blit(game_over_img, (center(game_over_img), gameovery))
- if gameovery < 16:
- gameovery += 1
-
- num_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 = False
- home_page = True
-
- coins = 0
- dodged = 0
- counter = 0
- nitro.gas = 0
- cfuel = 100
-
- endx, enddx = 0, 0.5
- gameovery = -50
-
- if replay_btn.draw(win):
- over_page = False
- game_page = True
-
- coins = 0
- dodged = 0
- counter = 0
- nitro.gas = 0
- cfuel = 100
-
- endx, enddx = 0, 0.5
- gameovery = -50
-
- restart_fx.play()
-
- if sound_btn.draw(win):
- sound_on = not sound_on
-
- if 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_inc
- if 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)+10
- if 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 - 10
- win.blit(nitro_frames[nitro_counter], (x, y))
- nitro_counter = (nitro_counter + 1) % len(nitro_frames)
-
- speed = 10
- if counter_inc == 1:
- counter = 0
- counter_inc = 5
-
- if nitro.gas <= 0:
- speed = 3
- counter_inc = 1
-
- nitro.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 & KILLS
- for obstacle in obstacle_group:
- if obstacle.rect.y >= HEIGHT:
- if obstacle.type == 1:
- dodged += 1
- obstacle.kill()
-
- if pygame.sprite.collide_mask(p, obstacle):
- pygame.draw.rect(win, RED, p.rect, 1)
- speed = 0
-
- game_page = False
- over_page = True
-
- tree_group.empty()
- coin_group.empty()
- fuel_group.empty()
- obstacle_group.empty()
-
- if pygame.sprite.spritecollide(p, coin_group, True):
- coins += 1
- coin_fx.play()
-
- if pygame.sprite.spritecollide(p, fuel_group, True):
- cfuel += 25
- fuel_fx.play()
- if cfuel >= 100:
- cfuel = 100
-
- pygame.draw.rect(win, BLUE, (0, 0, WIDTH, HEIGHT), 3)
- clock.tick(FPS)
- pygame.display.update()
-
- pygame.quit()
-
-

- import pygame
- import pickle
-
- from objects import World, load_level, Button, Player, Portal, game_data
-
- pygame.init()
- SCREEN = WIDTH, HEIGHT = 288, 512
- win = pygame.display.set_mode(SCREEN, pygame.SCALED | pygame.FULLSCREEN)
- clock = pygame.time.Clock()
- FPS = 45
-
- tile_size = 16
-
- # Images
-
- bg = 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')
-
- # Buttons
-
- move_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)
-
- # Variables
-
- current_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 = True
-
- bgx = 0
- bgcounter = 0
- bgdx = 1
-
- running = 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 = True
- elif game_won:
- win.blit(game_won_img, (100,100))
- else:
- if show_keys:
- win.blit(move_btn, (0,0))
- bgcounter += 1
- if bgcounter >= 15:
- bgcounter = 0
- bgx += bgdx
- if 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 = False
-
- if event.type == pygame.MOUSEBUTTONDOWN:
- pos = event.pos
- if show_keys:
- if dir_dict["Up"].collidepoint(pos):
- pressed_keys[0] = True
- if dir_dict["Down"].collidepoint(pos):
- pressed_keys[1] = True
- if dir_dict["Left"].collidepoint(pos):
- pressed_keys[2] = True
- if dir_dict["Right"].collidepoint(pos):
- pressed_keys[3] = True
-
- if 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 = False
- replay_menu = True
-
- if 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 += 1
- 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)
- else:
- show_keys = False
- game_won = True
-
- if replay_menu:
- if quit_btn.draw(win):
- running = False
-
- if sound_btn.draw(win):
- sound_on = not sound_on
-
- if 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 = True
- replay_menu = False
- game_over = False
- replay_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()

祝大家边学边玩,游玩愉快~
学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/327686
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。