python有趣游戏代码大全

一.贪吃蛇

运行以下代码,将会弹出一个窗口显示贪吃蛇游戏。你可以使用箭头键控制贪吃蛇的移动。吃到食物后蛇的长度会增加,如果蛇触碰到边界或者自己则游戏结束。按下 Q 键退出游戏,按下 C 键重新开始游戏。

import pygame
import random

# 初始化
pygame.init()

# 设置游戏窗口
window_width, window_height = 640, 480
window = pygame.display.set_mode((window_width, window_height))
pygame.display.set_caption('贪吃蛇')

# 定义颜色
black = (0, 0, 0)
white = (255, 255, 255)
green = (0, 255, 0)
red = (255, 0, 0)

# 定义蛇和食物的大小
block_size = 20

# 设置游戏时钟
clock = pygame.time.Clock()

# 定义蛇的移动速度
snake_speed = 15

# 定义字体
font_style = pygame.font.SysFont(None, 30)

# 定义得分函数
def score(score):
    value = font_style.render("得分: " + str(score), True, white)
    window.blit(value, [0, 0])

# 定义蛇的绘制函数
def snake(snake_list):
    for x in snake_list:
        pygame.draw.rect(window, green, [x[0], x[1], block_size, block_size])

# 游戏主循环
def gameLoop():
    game_over = False
    game_close = False

    # 初始蛇的位置和长度
    x1 = window_width / 2
    y1 = window_height / 2
    x1_change = 0
    y1_change = 0
    snake_List = []
    Length_of_snake = 1

    # 初始食物位置
    foodx = round(random.randrange(0, window_width - block_size) / 20.0) * 20.0
    foody = round(random.randrange(0, window_height - block_size) / 20.0) * 20.0

    while not game_over:
        while game_close == True:
            window.fill(black)
            message = font_style.render("游戏结束,按 Q 退出或 C 重新开始", True, white)
            window.blit(message, [window_width / 6, window_height / 3])
            score(Length_of_snake - 1)
            pygame.display.update()

            # 游戏重新开始或退出
            for event in pygame.event.get():
                if event.type == pygame.KEYDOWN:
                    if event.key == pygame.K_q:
                        game_over = True
                        game_close = False
                    if event.key == pygame.K_c:
                        gameLoop()

        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 = -block_size
                    y1_change = 0
                elif event.key == pygame.K_RIGHT:
                    x1_change = block_size
                    y1_change = 0
                elif event.key == pygame.K_UP:
                    y1_change = -block_size
                    x1_change = 0
                elif event.key == pygame.K_DOWN:
                    y1_change = block_size
                    x1_change = 0

        # 判断游戏是否结束
        if x1 >= window_width or x1 < 0 or y1 >= window_height or y1 < 0:
            game_close = True
        x1 += x1_change
        y1 += y1_change
        window.fill(black)
        pygame.draw.rect(window, red, [foodx, foody, block_size, block_size])
        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_close = True

        snake(snake_List)
        score(Length_of_snake - 1)

        pygame.display.update()

        if x1 == foodx and y1 == foody:
            foodx = round(random.randrange(0, window_width - block_size) / 20.0) * 20.0
            foody = round(random.randrange(0, window_height - block_size) / 20.0) * 20.0
            Length_of_snake += 1

        clock.tick(snake_speed)
    
    pygame.quit()

# 启动游戏
gameLoop()

二.密室逃脱

在这个例子中,玩家开始游戏后,可以选择进入三个不同的门。根据玩家的选择,通过判断门的编号,来确定游戏的进展,直到玩家成功逃脱或者失败。

请注意,这只是一个简单的示例,实际的密室逃脱游戏可以更加复杂和有趣。你可以根据需要对代码进行修改和扩展。

import random

def start_game():
    print("你被困在一个密室里,你需要找到钥匙才能逃脱。")
    print("房间里有三个门,你可以选择其中一个进入。")
    print("请选择门的编号:1、2、3")
    door = input("> ")
    check_door(int(door))

def check_door(door):
    if door == 1:
        print("你选择了门1。")
        print("门1后面是一只狗,你被咬死了。游戏结束!")
    elif door == 2:
        print("你选择了门2。")
        print("门2后面是一条走廊。")
        print("走廊的尽头有一把钥匙。你成功找到了钥匙,恭喜逃脱!")
    elif door == 3:
        print("你选择了门3。")
        print("门3后面是一只老虎,你被吃掉了。游戏结束!")
    else:
        print("无效的选择,请重新选择门的编号:1、2、3")
        door = input("> ")
        check_door(int(door))

start_game()

三.五子棋

首先,我们需要创建一个棋盘,并定义一个函数来打印棋盘的当前状态。

def print_board(board):
    for row in board:
        print(' '.join(row))

然后,我们可以定义一个函数来检查当前位置是否合法。

def is_valid_move(x, y, board):
    if x < 0 or x >= len(board) or y < 0 or y >= len(board):
        return False
    if board[x][y] != ' ':
        return False
    return True

然后,我们可以编写主要的游戏循环,允许两个玩家交替落子。

size = 15  # 棋盘大小
board = [[' ' for _ in range(size)] for _ in range(size)]
players = ['X', 'O']
turn = 0

while True:
    player = players[turn % 2]
    print(f"轮到玩家 {player},请输入坐标(例如:1,2):")
    x, y = map(int, input().split(','))

    if is_valid_move(x, y, board):
        board[x][y] = player
        print_board(board)
        if is_winner(player, board):
            print(f"玩家 {player} 获胜!")
            break
        turn += 1
    else:
        print("无效的位置,请重新输入!")

运行这个代码,两个玩家将交替输入坐标,直到有一方获胜为止。

以上只是一个简单的五子棋游戏示例,可以根据需要进行扩展和改进。

四.扫雷

运行代码后,根据提示输入行数、列数和地雷数量,然后输入要翻开的方块坐标即可。方块上的数字表示周围的地雷数量,当翻开所有非地雷方块时,游戏胜利;如果踩到地雷,游戏结束。

请注意,这只是一个简单的扫雷游戏示例,可以根据需要进行扩展和改进。

import random

# 初始化棋盘
def initialize_board(rows, cols, num_mines):
    board = [[0] * cols for _ in range(rows)]
    mines = random.sample(range(rows * cols), num_mines)
    for mine in mines:
        row = mine // cols
        col = mine % cols
        board[row][col] = -1
        for i in range(max(0, row - 1), min(rows, row + 2)):
            for j in range(max(0, col - 1), min(cols, col + 2)):
                if board[i][j] != -1:
                    board[i][j] += 1
    return board

# 打印棋盘
def print_board(board):
    rows = len(board)
    cols = len(board[0])
    for i in range(rows):
        for j in range(cols):
            if board[i][j] == -1:
                print("*", end=" ")
            elif board[i][j] == 0:
                print(".", end=" ")
            else:
                print(board[i][j], end=" ")
        print()

# 揭开方块
def reveal_square(board, revealed, row, col):
    if revealed[row][col]:
        return
    revealed[row][col] = True
    if board[row][col] == 0:
        for i in range(max(0, row - 1), min(len(board), row + 2)):
            for j in range(max(0, col - 1), min(len(board[0]), col + 2)):
                reveal_square(board, revealed, i, j)

# 主游戏循环
def play_game(rows, cols, num_mines):
    board = initialize_board(rows, cols, num_mines)
    revealed = [[False] * cols for _ in range(rows)]

    while True:
        print_board(revealed)
        row = int(input("请输入要翻开的行号(0-%d):" % (rows-1)))
        col = int(input("请输入要翻开的列号(0-%d):" % (cols-1)))

        if board[row][col] == -1:
            print("游戏结束,你踩到了地雷!")
            break
        
        reveal_square(board, revealed, row, col)
        
        # 检查是否胜利
        if all(all(revealed_row) for revealed_row in revealed):
            print_board(revealed)
            print("恭喜你,扫雷成功!")
            break

# 运行游戏
rows = int(input("请输入行数:"))
cols = int(input("请输入列数:"))
num_mines = int(input("请输入地雷数量:"))

play_game(rows, cols, num_mines)
 

五.分支樱花树

import random
import turtle

__Pen = turtle.Pen()


# 分形樱花树

# “画树”函数
# 参数分别是树枝长度、画笔

def tree(branchLen, t):
    if (branchLen > 3):
        if (8 <= branchLen and branchLen <= 12) :
            if (random.randint(0, 2) == 0) :
                t.pencolor('snow')
            else :
                t.pencolor('lightcoral')
            t.pensize((branchLen / 3))
        elif (branchLen < 8) :
            if (random.randint(0, 1) == 0) :
                t.pencolor('snow')
            else :
                t.pencolor('lightcoral')
            t.pensize((branchLen / 2))
        else :
            t.pencolor('sienna')
            t.pensize((branchLen / 10))
        t.forward(branchLen)
        a = (1.5 * (random.random()))
        t.right((20 * a))
        b = (1.5 * (random.random()))
        # 在tree函数内部调自己,这种方式叫递归调用
        # 递归可以大幅提升编程效率
        tree(branchLen - 10 * b, t)
        t.left((40 * a))
        tree(branchLen - 10 * b, t)
        t.right((20 * a))
        t.penup()
        t.backward(branchLen)
        t.pendown()

# 绘制树下花瓣,参数分别是画板数、画笔

def petal(m, t):
    for i in range(m):
        a = (200 - 400 * (random.random()))
        b = (10 - 20 * (random.random()))
        t.penup()
        t.forward(b)
        t.left(90)
        t.forward(a)
        t.pendown()
        t.pencolor('lightcoral')
        t.circle(1)
        t.penup()
        t.backward(a)
        t.right(90)
        t.backward(b)

def main():
    t = turtle.Pen()
    __Pen.hideturtle()
    t.speed(0)
    turtle.bgcolor('wheat')
    t.left(90)
    t.penup()
    t.backward(150)
    t.pendown()
    t.pencolor('sienna')
    tree(60, t)
    petal(100, t)
    turtle.done()

main()

六.彩色弹球

import turtle

__Pen = turtle.Pen()


# 彩色弹球
t = turtle.Pen()
t.speed(0)
turtle.bgcolor('black')
# 更改sides变量,可以画出完全不同的图形哦
# 改为2、3、4、5、6等,看看效果吧
sides = 5
colors = ['red','yellow','blue','orange','green','purple']
for x in range(99999999):#次数越大就越明显
    t.pencolor(colors[(x % sides)])
    t.forward(((x * 3) / sides + x))
    t.left((360 / sides + 1))
    t.pensize(((x * sides) / 200))
    t.left(90)

你可能感兴趣的:(游戏)