首页 > 编程语言 >代码战场:用Python射击游戏开启程序员的创造之旅

代码战场:用Python射击游戏开启程序员的创造之旅

时间:2023-10-31 10:37:34浏览次数:44  
标签:enemy 游戏 之旅 player Python 50 程序员 pygame bullet



目录

  • 前言
  • 代码演示
  • 总结


前言

大家好,我是辣条哥!


昨天在家点开好久没打开的游戏菜单,突然看到好久没有玩过的某F,玩了几把发现时代是真的变了!


代码战场:用Python射击游戏开启程序员的创造之旅_游戏

于是今天辣条有感而发写了这么一个简陋的射击类小游戏在这个项目中,我们将使用Python编写一个射击类游戏。这个游戏不仅具有高难度,还可以进行真人对战,并且有一个合理的胜负判断方式。通过这个项目,我们将学习如何使用Python创建游戏,并了解游戏开发的一些基本概念。

代码演示

下面是一个用Python编写的射击类游戏的示例代码,包括真人对战和胜负判断方式,并且有详细的注释说明。

import pygame
import random

# 初始化游戏
pygame.init()

# 游戏窗口的宽度和高度
width = 800
height = 600

# 创建游戏窗口
screen = pygame.display.set_mode((width, height))
pygame.display.set_caption("射击游戏")

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

# 玩家的初始位置和速度
player_x = 400
player_y = 500
player_speed = 5

# 敌人的初始位置和速度
enemy_x = random.randint(0, width)
enemy_y = random.randint(50, 150)
enemy_speed = 2

# 玩家的子弹列表
bullets = []

# 游戏是否结束的标志
game_over = False

# 游戏主循环
running = True
while running:
    # 填充背景色
    screen.fill(WHITE)
    
    # 处理事件
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        
        # 监听键盘按键事件
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_SPACE:
                # 创建子弹,位置为玩家的当前位置
                bullet = pygame.Rect(player_x + 25, player_y, 5, 10)
                bullets.append(bullet)
    
    # 移动玩家
    keys = pygame.key.get_pressed()
    if keys[pygame.K_LEFT] and player_x > 0:
        player_x -= player_speed
    if keys[pygame.K_RIGHT] and player_x < width - 50:
        player_x += player_speed
    
    # 移动敌人
    enemy_x += enemy_speed
    if enemy_x > width - 50 or enemy_x < 0:
        enemy_speed *= -1
    
    # 绘制玩家
    pygame.draw.rect(screen, RED, (player_x, player_y, 50, 50))
    
    # 绘制敌人
    pygame.draw.rect(screen, GREEN, (enemy_x, enemy_y, 50, 50))
    
    # 绘制子弹
    for bullet in bullets:
        pygame.draw.rect(screen, RED, bullet)
        bullet.y -= 10
        if bullet.y < 0:
            bullets.remove(bullet)
    
    # 检测子弹和敌人的碰撞
    for bullet in bullets:
        if bullet.colliderect(pygame.Rect(enemy_x, enemy_y, 50, 50)):
            bullets.remove(bullet)
            enemy_x = random.randint(0, width)
            enemy_y = random.randint(50, 150)
    
    # 检测玩家和敌人的碰撞
    if pygame.Rect(player_x, player_y, 50, 50).colliderect(pygame.Rect(enemy_x, enemy_y, 50, 50)):
        game_over = True
    
    # 判断游戏是否结束
    if game_over:
        # 游戏结束时显示文字
        font = pygame.font.Font(None, 36)
        text = font.render("Game Over", True, RED)
        screen.blit(text, (width // 2 - 100, height // 2))
    
    # 更新屏幕
    pygame.display.flip()

# 退出游戏
pygame.quit()

这个示例代码使用了pygame库来创建游戏窗口和处理游戏逻辑。玩家使用左右箭头键来移动,按下空格键发射子弹。敌人会在窗口内左右移动,当子弹击中敌人时,敌人会重新随机出现在窗口内的某个位置。当玩家和敌人发生碰撞时,游戏结束。
希望这个示例代码能满足你的需求,并且有详细的注释说明。如果有任何问题,请随时提问。你可以根据自己的需求进行修改和扩展,例如增加更多的游戏元素、调整难度等。

总结


在这个项目中,我们成功地使用Python编写了一个射击类游戏。通过这个项目,我们学习了如何使用Python的pygame库创建游戏窗口、绘制图形、处理用户输入等。我们还学习了如何使用碰撞检测来判断子弹是否击中目标,并根据击中情况进行胜负判断。


在游戏中,我们实现了真人对战的功能,玩家可以通过键盘控制自己的角色进行射击。我们还为游戏添加了音效和背景音乐,增加了游戏的乐趣和氛围。
通过这个项目,我们不仅提高了Python编程的技能,还学习了游戏开发的一些基本概念和技巧。希望这个项目能够帮助你更好地理解Python编程和游戏开发,并激发你对更复杂游戏的兴趣。


标签:enemy,游戏,之旅,player,Python,50,程序员,pygame,bullet
From: https://blog.51cto.com/u_15453202/8102125

相关文章

  • 【ROS2机器人入门到实战】坐标变换发布监听Python实现
    3.坐标变换发布监听Python实现写在前面当前平台文章汇总地址:ROS2机器人从入门到实战获取完整教程及配套资料代码,请关注公众号<鱼香ROS>获取教程配套机器人开发平台:两驱版|四驱版为方便交流,搭建了机器人技术问答社区:地址fishros.org.cn运行前面安装的jupyter,我们尝试使用代码来操......
  • Python 从在线网站获取当前日期时间
    python3.7获取网络时间_python获取网络时间-CSDN博客#-*-coding:utf-8-*-importdatetimeimporttimeimportntplibimportrequestsdefget_beijing_time():try:url='https://beijing-time.org/'request_result=requests.get(url=url)......
  • python url 网址链接写函数()括号里不能访问显示403
    说明一则奇怪问题。同一个url网址链接,写到函数里就访问失败,写到变量里就可以正常访问。一、文件名test_url.pydefr_http(url): response=requests.get(url,headers=u_headers) print(f"response.status_code={response.status_code}")二、url直接写到调用的函数中,......
  • python编码规范
    遵循良好的编码风格,可以有效的提高代码的可读性,降低出错几率和维护难度。在团队开发中,使用(尽量)统一的编码风格,还可以降低沟通成本。网上有很多版本的编码规范,基本上都是遵循PEP8的规范:PEP0008–StyleGuideforPythonCodeGoogle的Python风格指南PythonGuide......
  • python求pi
    用python计算圆周率PI‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬描述用python......
  • 代码随想录训练营第二十天打卡(Python)| 654.最大二叉树 、617.合并二叉树 、700.二叉搜
    654.最大二叉树1、使用切片classSolution:defconstructMaximumBinaryTree(self,nums:List[int])->Optional[TreeNode]:iflen(nums)==0:returnNonemax_val=max(nums)max_index=nums.index(max_val)node=T......
  • Python 批量合并图片到word文档
    这段代码是一个用Python编写的功能,它将指定文件夹中的所有图片插入到Word文档中并保存。以下是代码的主要步骤和功能:导入必要的库Python中的docx库用于操作Word文档,glob库用于匹配文件路径。fromdocximportDocumentfromdocx.sharedimportInchesimportglob定义函数......
  • python sqlalchemy批量插入大量数据,性能最佳!
    defcreate_user_items(db:Session,mouse_events,user,events_dict):mouse_events=json.loads(mouse_events)db.execute(models.Sessions.__table__.insert(),[{"user_id":user,"x_coordinate":event["x_cor&q......
  • python sqlalchemy 动态设置表名__tablename__,一个model对应多个table
    fromsqlalchemyimportcreate_engine,Column,BigInteger,Stringfromsqlalchemy.ext.declarativeimportdeclarative_basefromsqlalchemy.ormimportsessionmakerbase=declarative_base()engine=create_engine("postgresql://postgresadmin:admin123@192.16......
  • Python使用selenium来自动化提交表单
    提问:怎么用selenium来自动化提交表单回答:fromseleniumimportwebdriverfromselenium.webdriver.common.keysimportKeys#创建一个Chrome浏览器实例driver=webdriver.Chrome(executable_path='path/to/chromedriver')#打开目标网页driver.get('https://www.example.c......