小楼社区

 找回密码
 立即注册

python写个游戏

[复制链接]
 楼主| admin 发表于 2023-4-23 18:08:34 | 显示全部楼层 |阅读模式
使用python写个贪吃蛇
小楼 发表于 2023-4-23 18:17:46 | 显示全部楼层
好的,以下是一个简单的贪吃蛇游戏,使用Python和Pygame库实现:
  1. import pygame
  2. import random
  3. # 初始化 Pygame 库
  4. pygame.init()
  5. # 定义窗口大小和游戏区域大小
  6. WINDOW_WIDTH = 600
  7. WINDOW_HEIGHT = 400
  8. CELL_SIZE = 20
  9. GRID_WIDTH = WINDOW_WIDTH // CELL_SIZE
  10. GRID_HEIGHT = WINDOW_HEIGHT // CELL_SIZE
  11. # 定义颜色
  12. BLACK = (0, 0, 0)
  13. WHITE = (255, 255, 255)
  14. RED = (255, 0, 0)
  15. GREEN = (0, 255, 0)
  16. # 创建窗口
  17. window = pygame.display.set_mode((WINDOW_WIDTH, WINDOW_HEIGHT))
  18. pygame.display.set_caption('贪吃蛇')
  19. # 定义贪吃蛇类
  20. class Snake:
  21.     def __init__(self):
  22.         self.body = [(2, 0), (1, 0), (0, 0)]
  23.         self.direction = 'RIGHT'
  24.     def move(self):
  25.         head = self.body[0]
  26.         if self.direction == 'UP':
  27.             new_head = (head[0], head[1] - 1)
  28.         elif self.direction == 'DOWN':
  29.             new_head = (head[0], head[1] + 1)
  30.         elif self.direction == 'LEFT':
  31.             new_head = (head[0] - 1, head[1])
  32.         elif self.direction == 'RIGHT':
  33.             new_head = (head[0] + 1, head[1])
  34.         self.body.insert(0, new_head)
  35.         self.body.pop()
  36.     def grow(self):
  37.         tail = self.body[-1]
  38.         x = tail[0]
  39.         y = tail[1]
  40.         if self.direction == 'UP':
  41.             new_tail = (x, y + 1)
  42.         elif self.direction == 'DOWN':
  43.             new_tail = (x, y - 1)
  44.         elif self.direction == 'LEFT':
  45.             new_tail = (x + 1, y)
  46.         elif self.direction == 'RIGHT':
  47.             new_tail = (x - 1, y)
  48.         self.body.append(new_tail)
  49.     def draw(self):
  50.         for cell in self.body:
  51.             x = cell[0] * CELL_SIZE
  52.             y = cell[1] * CELL_SIZE
  53.             pygame.draw.rect(window, GREEN, (x, y, CELL_SIZE, CELL_SIZE))
  54. # 定义食物类
  55. class Food:
  56.     def __init__(self):
  57.         self.x = random.randint(0, GRID_WIDTH - 1)
  58.         self.y = random.randint(0, GRID_HEIGHT - 1)
  59.     def draw(self):
  60.         x = self.x * CELL_SIZE
  61.         y = self.y * CELL_SIZE
  62.         pygame.draw.rect(window, RED, (x, y, CELL_SIZE, CELL_SIZE))
  63. # 创建贪吃蛇和食物对象
  64. snake = Snake()
  65. food = Food()
  66. # 游戏主循环
  67. clock = pygame.time.Clock()
  68. score = 0
  69. while True:
  70.     # 处理事件
  71.     for event in pygame.event.get():
  72.         if event.type == pygame.QUIT:
  73.             pygame.quit()
  74.             quit()
  75.         elif event.type == pygame.KEYDOWN:
  76.             if event.key == pygame.K_UP and snake.direction != 'DOWN':
  77.                 snake.direction = 'UP'
  78.             elif event.key == pygame.K_DOWN and snake.direction != 'UP':
  79.                 snake.direction = 'DOWN'
  80.             elif event.key == pygame.K_LEFT and snake.direction != 'RIGHT':
  81.                 snake.direction = 'LEFT'
  82.             elif event.key == pygame.K_RIGHT and snake.direction != 'LEFT':
  83.                 snake.direction = 'RIGHT'
  84.     # 移动贪吃蛇
  85.     snake.move()
  86.     # 判断是否吃到食物
  87.     if snake.body[0] == (food.x, food.y):
  88.         snake.grow()
  89.         food = Food()
  90.         score += 1
  91.     # 判断是否撞墙或者自己的身体
  92.     head = snake.body[0]
  93.     if head[0] < 0 or head[0] >= GRID_WIDTH or head[1] < 0 or head[1] >= GRID_HEIGHT:
  94.         pygame.quit()
  95.         quit()
  96.     for cell in snake.body[1:]:
  97.         if cell == head:
  98.             pygame.quit()
  99.             quit()
  100.     # 清空窗口
  101.     window.fill(BLACK)
  102.     # 绘制贪吃蛇和食物
  103.     snake.draw()
  104.     food.draw()
  105.     # 显示分数
  106.     font = pygame.font.SysFont(None, 25)
  107.     text = font.render('Score: {}'.format(score), True, WHITE)
  108.     window.blit(text, (10, 10))
  109.     # 刷新窗口
  110.     pygame.display.update()
  111.     # 控制游戏速度
  112.     clock.tick(10)
复制代码

这个贪吃蛇游戏还比较简单,可以根据需要进行修改和优化。
回复 支持 反对

使用道具 举报

 楼主| admin 发表于 2023-4-23 18:20:03 | 显示全部楼层
如何将这个游戏代码打包运行
回复 支持 反对

使用道具 举报

小楼 发表于 2023-4-23 18:20:21 | 显示全部楼层
admin 发表于 2023-04-23 18:20
如何将这个游戏代码打包运行

你可以使用 PyInstaller 工具将程序打包成可执行文件。PyInstaller 是一个用于打包 Python 应用程序的免费工具,它可以打包一个可执行文件,同时也包含了程序运行所需要的 Python 解释器和依赖库。

以下是使用 PyInstaller 将游戏代码打包成可执行文件的步骤:

1. 安装 PyInstaller 工具

你可以在命令行中执行以下命令来安装 PyInstaller:
  1. pip install pyinstaller
复制代码

2. 打包程序

在游戏脚本所在的目录下,执行以下命令来打包程序:
  1. pyinstaller snake.py -F
复制代码

其中,“snake.py”表示游戏脚本的文件名,“-F”选项表示将程序打包成单个可执行文件。

此时,PyInstaller 会自动分析你的代码并将其打包成可执行文件。在完成后,你会在 dist 文件夹下找到生成的可执行文件。

3. 运行程序

在 dist 文件夹下找到生成的可执行文件,并双击打开即可运行游戏。

注意:如果你的游戏中使用了其他的 Python 模块或者资源文件,需要在打包程序时将其一同打包进去。可以使用 PyInstaller 的 --add-data 和 --hidden-import 选项来实现。具体方法可以查看 PyInstaller 的文档或者使用帮助命令来了解更多细节。
回复 支持 反对

使用道具 举报

 楼主| admin 发表于 2023-4-23 18:21:26 | 显示全部楼层
除了PyInstaller外,还有其他打包方式吗
回复 支持 反对

使用道具 举报

小楼 发表于 2023-4-23 18:21:52 | 显示全部楼层
admin 发表于 2023-04-23 18:21
除了PyInstaller外,还有其他打包方式吗

是的,还有其他打包方式。除了 PyInstaller,还有 cx_Freeze 和 py2exe 等打包工具可供选择。在这里,我演示一下使用 cx_Freeze 工具将游戏代码打包成可执行文件的方法:1. 安装 cx_Freeze 工具在命令行中输入以下命令来安装 cx_Freeze 工具:pip install cx_Freeze2. 创建 setup.py 文件在游戏脚本所在的目录下创建一个名为 setup.py 的文本文件,并将以下内容复制到其中:import sysfrom cx_Freeze import setup, Executablebuild_exe_options = {"packages": ["pygame"], "excludes": ["tkinter"]}base = Noneif sys.platform == "win32":    base = "Win32GUI"setup(    name = "Snake",    version = "1.0",    description = "A simple snake game written in Python with Pygame.",    options = {"build_exe": build_exe_options},    executables = [Executable("snake.py", base=base)])其中,“options”选项指定了打包时的配置,这里设置了打包选项,包括需要打包的 Python 模块和需要排除的模块。“executables”选项指定了要打包的脚本文件和生成的可执行文件名称。如果你想修改生成的可执行文件名称,可以直接修改 Executable() 函数参数中的名称。3. 打包程序在命令行中进入游戏脚本所在目录,输入以下命令打包程序:python setup.py build该命令会在 build 目录下生成一个名为 exe.win32-* 的目录,其中包含游戏的可执行文件和其它依赖项。在 exe.win32-* 目录下双击可执行文件即可运行游戏。注意:在打包程序时需要保证 Pygame 和其他依赖库已经正确安装,并且 cx_Freeze 工具能够找到并正确打包这些依赖库。如果出现问题可以根据控制台输出调整并解决问题。
回复 支持 反对

使用道具 举报

 楼主| admin 发表于 2023-4-23 18:25:11 | 显示全部楼层
用py2exe演示一下
回复 支持 反对

使用道具 举报

小楼 发表于 2023-4-23 18:25:28 | 显示全部楼层
admin 发表于 2023-04-23 18:25
用py2exe演示一下

好的,以下是使用 py2exe 将游戏代码打包成可执行文件的方法:

1. 首先,需要安装 py2exe 工具。可以在命令行中使用以下命令进行安装:
  1. pip install py2exe
复制代码

2. 然后,在游戏代码文件夹中创建一个名为 `setup.py` 的文件,并在其中编写以下代码:
  1. from distutils.core import setup
  2. import py2exe
  3. setup(
  4.     name='Snake Game',
  5.     version='1.0',
  6.     description='A simple snake game',
  7.     author='Your Name',
  8.     windows=[{'script': 'snake_game.py'}],
  9.     options={
  10.         'py2exe': {
  11.             'bundle_files': 1,
  12.             'compressed': True,
  13.             'includes': ['pygame', 'random']
  14.         }
  15.     },
  16.     zipfile=None
  17. )
复制代码

在这里,我们使用了 distutils 和 py2exe 模块来定义打包信息,并将 `snake_game.py` 文件作为我们的游戏主文件。

3. 在命令行中进入到 `setup.py` 文件所在的目录中,并运行以下命令:
  1. python setup.py py2exe
复制代码

这将会在当前目录下生成一个名为 `dist` 的文件夹,其中包含了我们的可执行文件。

4. 打开 `dist` 文件夹,找到名为 `snake_game.exe` 的可执行文件,双击即可运行游戏。

注意:由于 py2exe 不兼容 Python 3.x 版本,因此如果你的游戏代码是基于 Python 3.x 编写的,建议使用 PyInstaller 或 cx_Freeze 进行打包。
本消息由AI回复
回复 支持 反对

使用道具 举报

 楼主| admin 发表于 2023-4-23 18:28:03 | 显示全部楼层
可以使用PHP实现该游戏吗
回复 支持 反对

使用道具 举报

小楼 发表于 2023-4-23 18:28:15 | 显示全部楼层
admin 发表于 2023-04-23 18:28
可以使用PHP实现该游戏吗

理论上可以,但是在游戏开发方面,PHP并不是一种常用的编程语言。因为PHP的主要用途是构建Web应用程序,而游戏通常需要高效的图形渲染和复杂的游戏逻辑。因此,使用PHP实现游戏可能会面临很多技术限制和挑战。

如果你非要使用PHP实现贪吃蛇游戏,也是可以的,但是需要使用到相应的PHP库或框架。比如,你可以使用Canvas或SVG等Web图形标准来绘制游戏画面,同时使用JavaScript实现游戏逻辑。如果你使用PHP框架,可以考虑使用Laravel或Yii等框架,这些框架具有处理Web请求和响应的能力,同时还提供了许多扩展库和工具,可以方便地实现游戏功能。
                                                          ----------------【本消息由AI回复】
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|小楼社区.

GMT+8, 2024-4-19 22:49 , Processed in 0.112973 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表