from dinosaur import * class Bullet: def __init__(self, game_speed, dinosaur): self.game_speed = game_speed self.image = BULLET self.rect = self.image.get_rect() self.rect.x = dinosaur.dino_rect.x + dinosaur.dino_rect[2] + 10 self.rect.y = dinosaur.dino_rect.y + dinosaur.dino_rect[3] / 2 def update(self): self.rect.x += self.game_speed def draw(self,SCREEN): SCREEN.blit(self.image, (self.rect.x, self.rect.y))
时间: 2024-03-28 07:37:49 浏览: 22
这段代码实现了一个子弹类 Bullet,通过初始化方法 __init__() 来初始化子弹对象,该方法接收两个参数:game_speed 表示游戏速度,dinosaur 表示恐龙对象。其中,self.game_speed 变量保存了游戏速度,self.image 变量保存了子弹的图像,self.rect 变量保存了子弹的矩形区域,子弹的初始位置在恐龙的右侧并稍微偏移了一些。update() 方法用于更新子弹的位置,通过改变 self.rect.x 的值,实现子弹向右移动。draw() 方法用于将子弹绘制在屏幕上,其中 SCREEN 表示屏幕对象,使用 Pygame 库提供的 blit() 函数将子弹图像绘制在 (self.rect.x, self.rect.y) 的位置上。
相关问题
import cfg import sys import random import pygame from 期末作业.小恐龙跑酷.modules import GameStartInterface, Scoreboard, Dinosaur, Ground, Cloud, Cactus, Ptera, \ GameEndInterface '''main''' def main(highest_score): # 游戏初始化 pygame.init() screen = pygame.display.set_mode(cfg.SCREENSIZE) pygame.display.set_caption('恐怖龙跑酷') # 导入所有声音文件 sounds = {} for key, value in cfg.AUDIO_PATHS.items (): sounds[key] = pygame.mixer.Sound(value) # 游戏开始界面 GameStartInterface(screen, sounds, cfg) # 确定一些游戏中必须的元素和变化 score = 0 score_board = Scoreboard(cfg.IMAGE_PATHS[' numbers'], position=(534, 15), bg_color=cfg.BACKGROUND_COLOR) highest_score = highest_score highest_score_board = 记分牌(cfg.IMAGE_PATHS['numbers'], position=(435, 15), bg_color=cfg.BACKGROUND_COLOR, is_highest=True) dino = Dinosaur(cfg.IMAGE_PATHS['dino']) ground = Ground(cfg.IMAGE_PATHS['ground'], position=(0, cfg.SCREENSIZE[1])) 云精灵组= pygame.sprite .Group() cactus_sprites_group = pygame.sprite.Group() ptera_sprites_group = pygame.sprite.Group() add_obstacle_timer = 0 score_timer = 0 # 游戏主跟随环 clock = pygame.time.Clock() while True: for event in pygame.event .get(): if event.type == pygame.QUIT: pygame.quit() sys.exit() elif event.type == pygame.KEYDOWN: if event.key == pygame.K_SPACE or event.key == pygame.K_UP: dino.jump(sounds) elif event.key == pygame.K_DOWN: dino.duck() elif event.type == pygame.KEYUP and event.key == pygame.K_DOWN: dino.unduck() screen.fill(cfg.BACKGROUND_COLOR) # --随机添加云 if len(cloud_sprites_group) < 5 and random.randrange(0, 300) == 10: cloud_sprites_group.add(Cloud(cfg.IMAGE_PATHS['cloud'], position=( cfg.SCREENSIZE[0], random.randrange(30, 75)))) # --随机添加仙人掌/飞龙 add_obstacle_timer += 1 if add_obstacle_timer > random.randrange(50, 150): add_obstacle_timer = 0 random_value = random.randrange(0, 10) 如果 random_value >= 5 且 random_value <= 7: cactus_sprites_group.add(Cactus(cfg.IMAGE_PATHS['cacti']))否则:position_ys = [cfg.SCREENSIZE[1] * 0.82,cfg.SCREENSIZE[1] * 0.75,cfg.SCREENSIZE[1] * 0.60,cfg.SCREENSIZE[1] * 0。20] ptera_sprites_group.add(Ptera(cfg.IMAGE_PATHS['ptera'], position=(600, random.choice(position_ys)))) # --更新游戏元素 dino.update() ground.update() cloud_sprites_group.update () cactus_sprites_group.update() ptera_sprites_group.update() score_timer += 1 如果score_timer > (cfg.FPS // 12): score_timer = 0 score += 1 score = min(score, 99999) 如果score > highest_score: highest_score = score if score % 100 == 0: sounds['point'].play() if score % 1000 == 0: ground.speed -= 1 对于 cloud_sprites_group 中的项目:item.speed -= 1 对于 cactus_sprites_group 中的项目:item .speed -= 1 for item in ptera_sprites_group: item.speed -= 1 # --撞击检测 for item in cactus_sprites_group: if pygame.sprite.collide_mask(dino, item): dino.die(sounds) for item in ptera_sprites_group: if pygame .sprite.collide_mask(dino, item): dino.die(sounds) # --将游戏元素画到屏幕上 dino.draw(screen) ground.draw(screen) cloud_sprites_group.draw(screen) cactus_sprites_group.draw(screen) ptera_sprites_group.draw(screen) score_board.set(score) highest_score_board.set(highest_score) score_board.draw(screen) highest_score_board.draw(screen) # --更新屏幕 pygame.display.update() clock.tick(cfg.FPS) # --游戏是否结束 if dino.is_dead:break # 游戏结束界面 return GameEndInterface(screen, cfg), highest_score '''run''' ifname == ' main ': highest_score = 0 while True: flag, highest_score = main(highest_score) if not flag: break运行注解代码
这是一段 Python 代码,实现了一个小恐龙跑酷游戏。在游戏中,玩家需要控制小恐龙躲避障碍物并跳跃。代码中使用了 Pygame 库来实现游戏画面和声音效果,其中包括了游戏开始界面、游戏主循环和游戏结束界面。游戏主循环中实现了云朵和障碍物的随机生成、分数计算和更新、撞击检测等功能。最终游戏结束后会返回最高分数和游戏结束界面。
python小游戏小恐龙积分制带界面
以下是一个小恐龙游戏的 Python 代码,增加了积分制和界面:
```python
import tkinter as tk
import random
class DinosaurGame:
def __init__(self, master):
self.master = master
self.master.title("小恐龙游戏")
# 加载图片
self.dinosaur_image = tk.PhotoImage(file="dinosaur.png")
self.cactus_image = tk.PhotoImage(file="cactus.png")
# 设置游戏参数
self.dinosaur_x = 50
self.dinosaur_y = 200
self.cactus_x = 600
self.cactus_y = 210
self.speed = 10
self.score = 0
# 创建界面元素
self.canvas = tk.Canvas(self.master, width=800, height=400)
self.canvas.pack()
self.canvas.focus_set()
self.canvas.bind("<space>", self.jump)
self.canvas.bind("<Up>", self.jump)
self.dinosaur = self.canvas.create_image(self.dinosaur_x, self.dinosaur_y, image=self.dinosaur_image)
self.cactus = self.canvas.create_image(self.cactus_x, self.cactus_y, image=self.cactus_image)
self.label = tk.Label(self.master, text="得分:0")
self.label.pack()
# 启动游戏循环
self.game_loop()
def jump(self, event):
self.dinosaur_y -= 50
def game_loop(self):
# 移动恐龙
self.dinosaur_y += 10
self.canvas.coords(self.dinosaur, self.dinosaur_x, self.dinosaur_y)
# 移动仙人掌
self.cactus_x -= self.speed
self.canvas.coords(self.cactus, self.cactus_x, self.cactus_y)
# 检测碰撞
if self.dinosaur_x + 50 > self.cactus_x and self.dinosaur_x < self.cactus_x + 50 and self.dinosaur_y + 50 > self.cactus_y:
self.label.config(text="游戏结束,得分:" + str(self.score))
self.canvas.unbind("<space>")
self.canvas.unbind("<Up>")
else:
# 增加得分
if self.cactus_x < 0:
self.cactus_x = 600
self.score += 10
self.speed += 1
self.label.config(text="得分:" + str(self.score))
# 更新游戏界面
self.master.after(50, self.game_loop)
root = tk.Tk()
app = DinosaurGame(root)
root.mainloop()
```
在这个版本的游戏中,我们使用了 Tkinter 模块创建了一个简单的 GUI 界面,玩家可以通过按空格键或向上键让恐龙跳跃。每次跳过一个仙人掌玩家得 10 分,速度也会加快。如果恐龙碰到了仙人掌,游戏结束,输出玩家的得分。