运行以下代码,将会弹出一个窗口显示贪吃蛇游戏。你可以使用箭头键控制贪吃蛇的移动。吃到食物后蛇的长度会增加,如果蛇触碰到边界或者自己则游戏结束。按下 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)