【python案例】Python代码编程的五个小游戏项目(完整代码)


以下是五个使用Python实现的小游戏案例,涵盖了不同的游戏类型和难度:

1. 猜数字游戏

游戏简介:这是一个经典的猜数字游戏,玩家需要在一定范围内猜测一个随机生成的数字。
核心功能:生成随机数字、检查猜测结果、游戏循环。
实现原理:使用Python的random.randint()函数生成随机数字,并通过循环和条件判断实现玩家的猜测和游戏的反馈。

示例代码:

import random
 
def guess_number_game():
    number_to_guess = random.randint(1, 100)
    attempts = 0
    print("欢迎来到猜数字游戏!")
    print("我已经想好了一个1到100之间的数字。")
    while True:
        attempts += 1
        user_input = input("请输入你猜的数字:")
        try:
            user_guess = int(user_input)
        except ValueError:
            print("请输入一个有效的整数。")
            continue
        if user_guess < number_to_guess:
            print("太小了!再试一次。")
        elif user_guess > number_to_guess:
            print("太大了!再试一次。")
        else:
            print(f"恭喜你!你猜对了数字是 {
      
      number_to_guess}!")
            print(f"你总共猜了 {
      
      attempts} 次。")
            break
 
if __name__ == "__main__":
    guess_number_game()

2. 猜字母游戏

游戏简介:这是一个猜单词的游戏,玩家需要猜出一个随机选择的单词,每次可以猜一个字母。
核心功能:随机选择单词、检查猜测的字母、给出提示。
实现原理:使用Python的random.choice()函数从单词列表中随机选择一个单词,并通过循环和条件判断实现玩家的猜测和游戏的反馈。

示例代码:

import random
 
word_list = ["python", "java", "swift", "javascript", "kotlin"]
secret_word = random.choice(word_list)
guessed_letters = []
allowed_guesses = len(secret_word) * 2
 
print("欢迎来到猜单词游戏!")
print(f"提示:单词有 {
      
      len(secret_word)} 个字母。")
 
while allowed_guesses > 0:
    display_word = [letter if letter in guessed_letters else "*" for letter in secret_word]
    print(" ".join(display_word))
    guess = input("猜一个字母:").lower()
    if len(guess) != 1 or not guess.isalpha():
        print("请输入一个字母。")
        continue
    if guess in guessed_letters:
        print("你已经猜过这个字母了。")
        continue
    guessed_letters.append(guess)
    if guess in secret_word:
        print("猜对了!")
        if all(letter in guessed_letters for letter in secret_word):
            print(f"恭喜,你猜出了单词:{
      
      secret_word}!")
            break
    else:
        allowed_guesses -= 1
        print(f"不好意思,猜错了。你还有 {
      
      allowed_guesses} 次机会。")
        print(f"提示:单词中的字母有 {
      
      ', '.join(set(secret_word) - set(guessed_letters))}。")
 
if allowed_guesses == 0:
    print(f"游戏结束,正确的单词是:{
      
      secret_word}。")

3. 贪吃蛇游戏

游戏简介:这是一个经典的贪吃蛇游戏,玩家需要控制蛇在屏幕上移动,吃掉食物并避免碰到墙壁或自己。
核心功能:绘制游戏界面、控制蛇的移动、检测碰撞。
实现原理:使用Python的pygame模块绘制游戏界面和处理用户输入,通过循环和条件判断实现蛇的移动和碰撞检测。

示例代码:

import pygame
import random
 
# 初始化pygame
pygame.init()
 
# 定义颜色
WHITE = (255, 255, 255)
GREEN = (0, 255, 0)
RED = (255, 0, 0)
BLACK = (0, 0, 0)
 
# 设置窗口大小
WIDTH, HEIGHT = 640, 480
window = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption('贪吃蛇游戏')
 
# 定义蛇的初始位置和长度
snake_block = 10
snake_List = []
Length_of_snake = 5
 
# 蛇的初始移动方向
x1 = WIDTH / 2
y1 = HEIGHT / 2
x1_change = 0
y1_change = 0
 
# 食物的位置
foodx = round(random.randrange(0, WIDTH - snake_block) / 10.0) * 10.0
foody = round(random.randrange(0, HEIGHT - snake_block) / 10.0) * 10.0
 
# 游戏循环
game_over = False
 
while not game_over:
    # 处理用户输入
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            game_over = True
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_LEFT:
                x1_change = -snake_block
                y1_change = 0
            elif event.key == pygame.K_RIGHT:
                x1_change = snake_block
                y1_change = 0
            elif event.key == pygame.K_UP:
                y1_change = -snake_block
                x1_change = 0
            elif event.key == pygame.K_DOWN:
                y1_change = snake_block
                x1_change = 0
 
    # 更新蛇的位置
    x1 += x1_change
    y1 += y1_change
    window.fill(BLACK)
    pygame.draw.rect(window, GREEN, [foodx, foody, snake_block, snake_block])
    snake_Head = []
    snake_Head.append(x1)
    snake_Head.append(y1)
    snake_List.append(snake_Head)
    if len(snake_List) > Length_of_snake:
        del snake_List[0]
 
    for x in snake_List[:-1]:
        if x == snake_Head:
            game_over = True
 
    # 碰撞检测
    if x1 < 0 or x1 > WIDTH or y1 < 0 or y1 > HEIGHT:
        game_over = True
 
    # 检查是否吃到食物
    if x1 == foodx and y1 == foody:
        foodx = round(random.randrange(0, WIDTH - snake_block) / 10.0) * 10.0
        foody = round(random.randrange(0, HEIGHT - snake_block) / 10.0) * 10.0
        Length_of_snake += 1
 
    # 绘制蛇
    for x in snake_List:
        pygame.draw.rect(window, WHITE, [x[0], x[1], snake_block, snake_block])
 
    # 刷新屏幕
    pygame.display.update()
 
    # 设置帧率
    clock = pygame.time.Clock()
    clock.tick(15)
 
# 游戏结束
pygame.quit()
quit()

4. 五子棋游戏

游戏简介:这是一个五子棋游戏,玩家需要在棋盘上放置黑白棋子,先连成五子的一方获胜。
核心功能:绘制棋盘、控制棋子放置、检测胜利条件。
实现原理:使用Python的pygame模块绘制棋盘,通过循环和条件判断实现棋子的放置和胜利条件的检测。

示例代码(部分):

import pygame
 
# 定义棋盘上的下棋函数
def move(self, row, col, is_black):
    if self._board[row][col] == EMPTY:
        self._board[row][col] = BLACK if is_black else WHITE
 
# 给棋盘定义一个函数将自己在screen上面画出来
def draw(self, screen):
    for h in range(1, 16):
        pygame.draw.line(screen, black_color, [40, h * 40], [600, h * 40], 1)
        pygame.draw.line(screen, black_color, [h * 40, 40], [h * 40, 600], 1)
    pygame.draw.rect(screen, black_color, [36, 36, 568, 568], 3)
    # 在棋盘上标出天元以及另外4个特殊点位
    pygame.draw.circle(screen, black_color, [320, 320], 5, 0)
    pygame.draw.circle(screen, black_color, [160, 160], 3, 0)
    pygame.draw.circle(screen, black_color, [160, 480], 3, 0)
    pygame.draw.circle(screen, black_color, [480, 160], 3, 0)
    pygame.draw.circle(screen, black_color, [480, 480], 3, 0)
 
    for row in range(len(self._board)):
        for col in range(len(self._board[row])):
            if self._board[row][col] != EMPTY:
                ccolor = black_color if self._board[row][col] == BLACK else white_color
                pos = [40 * (col + 1), 40 * (row + 1)]
                pygame.draw.circle(screen, ccolor, pos, 18, 0)

注意:上述代码仅为棋盘绘制和部分逻辑的一部分,完整实现需要更多代码和细节处理。

5. 雷霆战机游戏

游戏简介:这是一个简单的射击游戏,玩家需要控制战机在屏幕上移动并射击敌人。
核心功能:绘制游戏界面、控制战机移动、检测敌人碰撞和射击。
实现原理:使用Python的pygame模块绘制游戏界面和处理用户输入,通过循环和条件判断实现战机的移动、敌人的生成和碰撞检测以及射击逻辑。

示例代码:

import pygame
import random

# 初始化pygame
pygame.init()

# 设置屏幕尺寸
screen_width = 800
screen_height = 600
screen = pygame.display.set_mode((screen_width, screen_height))
pygame.display.set_caption("简化版雷霆战机")

# 定义颜色
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
RED = (255, 0, 0)

# 玩家设置
player_pos = [screen_width // 2, screen_height - 100]
player_vel = 5
player_width, player_height = 50, 40

# 敌人设置
enemy_width, enemy_height = 50, 40
enemy_list = []
enemy_spawn_counter = 0
enemy_spawn_limit = 30

# 子弹设置
bullet_width, bullet_height = 10, 20
bullet_speed = 10
bullet_list = []

# 游戏循环
running = True
clock = pygame.time.Clock()

while running:
    # 处理事件
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    # 获取按键状态
    keys = pygame.key.get_pressed()

    # 移动玩家
    if keys[pygame.K_LEFT] and player_pos[0] > 0:
        player_pos[0] -= player_vel
    if keys[pygame.K_RIGHT] and player_pos[0] < screen_width - player_width:
        player_pos[0] += player_vel
    if keys[pygame.K_SPACE]:
        bullet_list.append([player_pos[0] + player_width // 2 - bullet_width // 2, player_pos[1]])

    # 生成敌人
    enemy_spawn_counter += 1
    if enemy_spawn_counter > enemy_spawn_limit:
        enemy_x = random.randint(0, screen_width - enemy_width)
        enemy_y = -enemy_height
        enemy_list.append([enemy_x, enemy_y])
        enemy_spawn_counter = 0

    # 移动敌人
    for enemy in enemy_list:
        enemy[1] += 5

    # 移除屏幕外的敌人
    enemy_list = [enemy for enemy in enemy_list if enemy[1] < screen_height]

    # 移动子弹
    for bullet in bullet_list:
        bullet[1] -= bullet_speed
        # 移除屏幕外的子弹
        if bullet[1] < 0:
            bullet_list.remove(bullet)

    # 检测子弹与敌人的碰撞
    for bullet in bullet_list[:]:
        for enemy in enemy_list[:]:
            if bullet[0] < enemy[0] + enemy_width and bullet[0] + bullet_width > enemy[0] and \
               bullet[1] < enemy[1] + enemy_height and bullet[1] + bullet_height > enemy[1]:
                enemy_list.remove(enemy)
                bullet_list.remove(bullet)

    # 绘制
    screen.fill(BLACK)
    pygame.draw.rect(screen, WHITE, (player_pos[0], player_pos[1], player_width, player_height))
    for enemy in enemy_list:
        pygame.draw.rect(screen, RED, (enemy[0], enemy[1], enemy_width, enemy_height))
    for bullet in bullet_list:
        pygame.draw.rect(screen, WHITE, (bullet[0], bullet[1], bullet_width, bullet_height))

    # 刷新屏幕
    pygame.display.flip()

    # 控制帧率
    clock.tick(60)

# 退出pygame
pygame.quit()

总结

以上五个小游戏案例涵盖了不同的游戏类型和难度,可以根据个人兴趣和需求选择合适的游戏进行实现和拓展。