ChatGPT3.5(快速响应)写的一个小游戏

好的,我来为你写一个难度较高的Python游戏,这个游戏名字叫做“飞碟大战”。

游戏规则如下:

1.玩家通过鼠标控制一个小飞船在屏幕上移动,发射子弹消灭飞来的敌人飞碟。

2.敌人飞碟会从屏幕上方不断飞来,玩家需要通过发射子弹击中敌人飞碟,每击中一个敌人飞碟,得到一定的分数。

3.如果敌人飞碟撞到玩家的小飞船,或者敌人飞碟到达屏幕下方,则游戏失败。

4.玩家有三条命,每次游戏失败后,可以选择是否继续游戏,如果选择继续,则重新开始游戏;如果选择退出,则程序结束。

下面是代码实现:

import pygame

import random

 

# 初始化pygame

pygame.init()

 

# 设置游戏窗口的大小

SCREEN_WIDTH = 800

SCREEN_HEIGHT = 600

screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))

pygame.display.set_caption("飞碟大战")

 

# 加载图片

bg_image = pygame.image.load("images/background.jpg").convert_alpha()

ship_image = pygame.image.load("images/ship.png").convert_alpha()

bullet_image = pygame.image.load("images/bullet.png").convert_alpha()

disk_image = pygame.image.load("images/disk.png").convert_alpha()

 

# 加载音效

shoot_sound = pygame.mixer.Sound("sounds/shoot.wav")

explosion_sound = pygame.mixer.Sound("sounds/explosion.wav")

 

# 设置字体

font = pygame.font.SysFont("simhei", 32)

 

# 设置颜色

WHITE = (255, 255, 255)

BLACK = (0, 0, 0)

 

# 定义玩家飞船的类

class Ship(pygame.sprite.Sprite):

    def __init__(self):

        super().__init__()

        self.image = ship_image

        self.rect = self.image.get_rect()

        self.rect.centerx = SCREEN_WIDTH // 2

        self.rect.bottom = SCREEN_HEIGHT - 10

        self.speed = 5

        self.bullets = pygame.sprite.Group()

 

    def update(self, keys):

        if keys[pygame.K_LEFT] and self.rect.left > 0:

            self.rect.x -= self.speed

        if keys[pygame.K_RIGHT] and self.rect.right < SCREEN_WIDTH:

            self.rect.x += self.speed

 

    def shoot(self):

        bullet = Bullet()

        bullet.rect.centerx = self.rect.centerx

        bullet.rect.bottom = self.rect.top - 10

        self.bullets.add(bullet)

        shoot_sound.play()

 

# 定义子弹的类

class Bullet(pygame.sprite.Sprite):

    def __init__(self):

        super().__init__()

        self.image = bullet_image

        self.rect = self.image.get_rect()

        self.speed = -10

 

    def update(self):

        self.rect.y += self.speed

        if self.rect.bottom < 0:

            self.kill()

 

# 定义敌人飞碟的类

class Disk(pygame.sprite.Sprite):

    def __init__(self):

    super().__init__()

    self.image = disk_image

    self.rect = self.image.get_rect()

    self.rect.x = random.randint(0, SCREEN_WIDTH - self.rect.width)

    self.rect.y = random.randint(-SCREEN_HEIGHT, -self.rect.height)

    self.speed = random.randint(1, 5)

    self.score = self.speed * 10

 

def update(self):

    self.rect.y += self.speed

    if self.rect.top > SCREEN_HEIGHT:

        self.kill()

定义游戏结束函数

def game_over(score):

explosion_sound.play()

screen.blit(bg_image, (0, 0))

text = font.render("游戏结束,得分:{}".format(score), True, WHITE)

text_rect = text.get_rect()

text_rect.centerx = SCREEN_WIDTH // 2

text_rect.centery = SCREEN_HEIGHT // 2

screen.blit(text, text_rect)

pygame.display.update()

pygame.time.delay(3000)

定义主函数

def main():

# 创建玩家飞船

ship = Ship()

all_sprites = pygame.sprite.Group(ship)

# 创建敌人飞碟

disks = pygame.sprite.Group()

for i in range(10):

    disk = Disk()

    disks.add(disk)

    all_sprites.add(disk)

 

# 初始化游戏变量

score = 0

lives = 3

 

# 开始游戏循环

running = True

while running:

    # 处理事件

    for event in pygame.event.get():

        if event.type == pygame.QUIT:

            running = False

        elif event.type == pygame.MOUSEBUTTONDOWN:

            ship.shoot()

 

    # 更新玩家飞船

    keys = pygame.key.get_pressed()

    ship.update(keys)

 

    # 更新子弹

    for bullet in ship.bullets:

        bullet.update()

 

    # 更新敌人飞碟

    for disk in disks:

        disk.update()

 

    # 检测碰撞

    hits = pygame.sprite.groupcollide(disks, ship.bullets, True, True)

    for hit in hits:

        score += hit.score

        disk = Disk()

        disks.add(disk)

        all_sprites.add(disk)

 

    hits = pygame.sprite.spritecollide(ship, disks, False)

    if hits:

        lives -= 1

        if lives == 0:

            game_over(score)

            running = False

        else:

            explosion_sound.play()

            ship.rect.centerx = SCREEN_WIDTH // 2

            ship.rect.bottom = SCREEN_HEIGHT - 10

            pygame.time.delay(1000)

 

    # 绘制屏幕

    screen.blit(bg_image, (0, 0))

    all_sprites.draw(screen)

    text = font.render("得分:{}".format(score), True, WHITE)

    screen.blit(text, (10, 10))

    text = font.render("生命:{}".format(lives), True, WHITE)

    screen.blit(text, (SCREEN_WIDTH - 100, 10))

    pygame.display.update()

 

# 退出pygame

pygame.quit()

运行游戏

if name == "main":

main()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值