✨博主:命运之光
🌸专栏:Python星辰秘典
🐳专栏:web开发(html css js)
❤️专栏:Java经典程序设计
☀️博主的其他文章:点击进入博主的主页
前言:你好,欢迎来到我的博客。我是一个热爱编程的人,特别喜欢用Python这门语言来创造一些有趣的图形项目。在这篇博客中,我将和你分享一些我用Python写的小的图形项目,包括它们的原理,代码和效果。我希望你能从中学到一些有用的知识,也能感受到编程的乐趣。如果你对我的项目有任何问题或建议,欢迎在评论区留言,我会尽快回复你。让我们开始吧!
目录
项目名称:Python 2048 游戏
项目介绍
项目功能
项目实现
项目应用
项目展示
游戏运行
项目源代码
如何运行项目(超简单)
1.win+r打开命令行窗口
2.在窗口中复制粘贴下面内容
打开pycharm
step1
step2
复制粘贴源代码运行
项目总结
项目名称:Python 2048 游戏
项目介绍
Python 2048 游戏是基于经典的2048游戏规则,使用Python编写的一款益智游戏。玩家需要通过合并相同数字的方块,不断合成更大的数字,最终达到2048方块,挑战自己的智力和策略。
项目功能
1. 游戏界面:提供一个可视化的游戏界面,显示2048方块的网格和当前得分。
2. 方块移动:玩家可以使用方向键(上、下、左、右)控制方块的移动方向,方块会沿指定方向移动,并合并相同数字的方块。
3. 方块合并:当两个相邻方块的数字相等时,它们会合并成一个更大的数字方块。
4. 得分计算:根据合并的方块数字计算得分,每次合并都会增加相应的分数。
5. 游戏结束判断:当所有方格都被填满且无法继续移动时,游戏结束。
6. 重新开始游戏:在游戏结束后,提供重新开始游戏的选项,玩家可以选择重新开始游戏。
项目实现
该项目使用Python编程语言实现了2048游戏的逻辑和图形界面展示。通过使用Python的图形界面库(例如Pygame、Tkinter等),创建游戏界面,并使用数据结构(如列表、数组等)存储和操作游戏方块的数字和位置信息。通过监听键盘事件,实现方块的移动和合并,并在界面上实时更新方块的显示和得分。
项目应用
Python 2048 游戏项目是一个有趣且具有挑战性的益智游戏。通过实现这个项目,可以加深对Python编程语言、图形界面和逻辑编程的理解和应用。此外,该项目也能提高玩家的问题解决能力、逻辑思考能力和策略规划能力。
项目展示
游戏运行
经典的2048游戏
游戏结束
项目源代码
import pygame
import random
# 游戏界面大小
GRID_SIZE = 4
CELL_SIZE = 100
GRID_WIDTH = GRID_SIZE * CELL_SIZE
GRID_HEIGHT = GRID_SIZE * CELL_SIZE
# 颜色定义
BACKGROUND_COLOR = (187, 173, 160)
CELL_COLOR = (205, 193, 180)
TEXT_COLOR = (255, 255, 255)
# 初始化Pygame
pygame.init()
# 创建游戏窗口
window = pygame.display.set_mode((GRID_WIDTH, GRID_HEIGHT + 50))
pygame.display.set_caption("2048")
# 加载字体
font = pygame.font.Font(None, 48)
# 积分变量
score = 0
def draw_grid():
# 绘制游戏界面网格
window.fill(BACKGROUND_COLOR)
for row in range(GRID_SIZE):
for col in range(GRID_SIZE):
cell_value = grid[row][col]
cell_color = get_cell_color(cell_value)
cell_rect = pygame.Rect(col * CELL_SIZE, row * CELL_SIZE, CELL_SIZE, CELL_SIZE)
pygame.draw.rect(window, cell_color, cell_rect)
if cell_value != 0:
draw_text(cell_value, cell_rect)
# 绘制积分
score_text = font.render("Score: " + str(score), True, TEXT_COLOR)
window.blit(score_text, (10, GRID_HEIGHT + 10))
def draw_text(value, rect):
# 绘制方块中的数字
text_surface = font.render(str(value), True, TEXT_COLOR)
text_rect = text_surface.get_rect()
text_rect.center = rect.center
window.blit(text_surface, text_rect)
def get_cell_color(value):
# 根据方块的值获取对应的颜色
colors = {
0: (205, 193, 180),
2: (238, 228, 218),
4: (237, 224, 200),
8: (242, 177, 121),
16: (245, 149, 99),
32: (246, 124, 95),
64: (246, 94, 59),
128: (237, 207, 114),
256: (237, 204, 97),
512: (237, 200, 80),
1024: (237, 197, 63),
2048: (237, 194, 46),
}
return colors.get(value, (0, 0, 0))
def add_new_tile():
# 在随机空位置生成一个新数字(2或4)
empty_cells = [(i, j) for i in range(GRID_SIZE) for j in range(GRID_SIZE) if grid[i][j] == 0]
if empty_cells:
row, col = random.choice(empty_cells)
grid[row][col] = random.choice([2, 4])
def move_tiles_left():
# 向左移动所有数字块
global score
for row in range(GRID_SIZE):
merged = [False] * GRID_SIZE
for col in range(1, GRID_SIZE):
if grid[row][col] != 0:
k = col
while k > 0 and grid[row][k - 1] == 0:
grid[row][k - 1] = grid[row][k]
grid[row][k] = 0
k -= 1
if k > 0 and not merged[k - 1] and grid[row][k - 1] == grid[row][k]:
grid[row][k - 1] *= 2
grid[row][k] = 0
merged[k - 1] = True
score += grid[row][k - 1] # 更新积分
def move_tiles_up():
# 向上移动所有数字块
global score
for col in range(GRID_SIZE):
merged = [False] * GRID_SIZE
for row in range(1, GRID_SIZE):
if grid[row][col] != 0:
k = row
while k > 0 and grid[k - 1][col] == 0:
grid[k - 1][col] = grid[k][col]
grid[k][col] = 0
k -= 1
if k > 0 and not merged[k - 1] and grid[k - 1][col] == grid[k][col]:
grid[k - 1][col] *= 2
grid[k][col] = 0
merged[k - 1] = True
score += grid[k - 1][col] # 更新积分
def move_tiles_right():
# 向右移动所有数字块
global score
for row in range(GRID_SIZE):
merged = [False] * GRID_SIZE
for col in range(GRID_SIZE - 2, -1, -1):
if grid[row][col] != 0:
k = col
while k < GRID_SIZE - 1 and grid[row][k + 1] == 0:
grid[row][k + 1] = grid[row][k]
grid[row][k] = 0
k += 1
if k < GRID_SIZE - 1 and not merged[k + 1] and grid[row][k + 1] == grid[row][k]:
grid[row][k + 1] *= 2
grid[row][k] = 0
merged[k + 1] = True
score += grid[row][k + 1] # 更新积分
def move_tiles_down():
# 向下移动所有数字块
global score
for col in range(GRID_SIZE):
merged = [False] * GRID_SIZE
for row in range(GRID_SIZE - 2, -1, -1):
if grid[row][col] != 0:
k = row
while k < GRID_SIZE - 1 and grid[k + 1][col] == 0:
grid[k + 1][col] = grid[k][col]
grid[k][col] = 0
k += 1
if k < GRID_SIZE - 1 and not merged[k + 1] and grid[k + 1][col] == grid[k][col]:
grid[k + 1][col] *= 2
grid[k][col] = 0
merged[k + 1] = True
score += grid[k + 1][col] # 更新积分
def is_game_over():
# 检查游戏是否结束(无法再移动数字块)
for row in range(GRID_SIZE):
for col in range(GRID_SIZE):
if grid[row][col] == 0:
return False
if col < GRID_SIZE - 1 and grid[row][col] == grid[row][col + 1]:
return False
if row < GRID_SIZE - 1 and grid[row][col] == grid[row + 1][col]:
return False
return True
def draw_grid():
# 绘制游戏界面网格
window.fill(BACKGROUND_COLOR)
for row in range(GRID_SIZE):
for col in range(GRID_SIZE):
cell_value = grid[row][col]
cell_color = get_cell_color(cell_value)
cell_rect = pygame.Rect(col * CELL_SIZE, row * CELL_SIZE, CELL_SIZE, CELL_SIZE)
pygame.draw.rect(window, cell_color, cell_rect)
if cell_value != 0:
draw_text(cell_value, cell_rect)
# 绘制积分
score_text = font.render("Score: " + str(score), True, TEXT_COLOR)
window.blit(score_text, (10, GRID_HEIGHT + 10))
def update_score(points):
# 更新积分
global score
score += points
# 初始化游戏界面
grid = [[0] * GRID_SIZE for _ in range(GRID_SIZE)]
add_new_tile()
add_new_tile()
# 游戏循环
running = True
while running:
# 处理事件
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
elif event.type == pygame.KEYDOWN:
if not is_game_over():
if event.key == pygame.K_a or event.key == pygame.K_LEFT:
move_tiles_left()
add_new_tile()
elif event.key == pygame.K_d or event.key == pygame.K_RIGHT:
move_tiles_right()
add_new_tile()
elif event.key == pygame.K_w or event.key == pygame.K_UP:
move_tiles_up()
add_new_tile()
elif event.key == pygame.K_s or event.key == pygame.K_DOWN:
move_tiles_down()
add_new_tile() # 在移动后生成新数字块
# 绘制界面
draw_grid()
pygame.display.update()
if is_game_over():
print("游戏结束!")
print("最终积分:", score)
# 退出游戏
pygame.quit()
如何运行项目(超简单)
在运行上述代码之前,你需要确保你的环境中已经安装了Pygame依赖项:
Pygame:一个用于开发游戏的Python库。你可以使用以下命令通过pip安装Pygame
如果没有安装用以下方法进行安装
1.win+r打开命令行窗口
2.在窗口中复制粘贴下面内容
使用国内的镜像源:将pip的默认源替换为国内的镜像源可以加快下载速度。你可以使用以下命令来更换pip的源:
下载:Pygame:一个用于游戏开发的Python库,用于创建游戏界面和处理用户输入。
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pygame
下载:numpy:一个用于数值计算和数组操作的Python库。
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple numpy
打开pycharm
step1
step2
复制粘贴源代码运行
项目总结
Python 2048 游戏项目是一个有趣的益智游戏,通过合并方块数字来挑战自己的智力和策略。通过使用Python编程语言和图形界面库,实现了游戏的逻辑和界面展示。希望这个项目能够给玩家们带来娱乐和挑战,同时提升编程和思维能力。