设计一款面向对象的贪吃蛇游戏 要求(1)创建Pingguo类 (对象的坐标属性,颜色属性,绘制苹果draw方法) (2)创建Snake类(继承Pingguo类)(包含列表属性,颜色属性,蛇的初始移动偏量属性【重写初始化方法】,绘制蛇draw方法【方法重写,同时调用父类draw方法】, 蛇的移动move方法, 蛇方向的改变change方法) 提示:只需写部分体现题目要求的代码,无需完成整个游戏的编写。 1、给Pingguo类 设置一个类属性count,用于计数产生苹果实例的个数。 2、在主程序中,每吃掉一个苹果实例,就会产生一个新的苹果实例。 3、在画布上显示游戏者得分:count*100。(每吃掉一个苹果加100分) 提示:只需要完成部分体现要求的代码,无需给出全部代码。
时间: 2024-02-17 11:00:31 浏览: 72
采用面向对象思维编写简明易懂的贪吃蛇游戏
以下是部分代码,仅供参考:
```
import pygame
pygame.init()
# 设置游戏窗口大小
width = 800
height = 600
screen = pygame.display.set_mode((width, height))
# 定义颜色
white = (255, 255, 255)
black = (0, 0, 0)
red = (255, 0, 0)
green = (0, 255, 0)
# 定义Pingguo类
class Pingguo:
count = 0 # 计数器,记录苹果实例的个数
def __init__(self, x, y, color):
self.x = x
self.y = y
self.color = color
Pingguo.count += 1 # 计数器+1
def draw(self):
pygame.draw.circle(screen, self.color, (self.x, self.y), 10)
# 定义Snake类
class Snake(Pingguo):
def __init__(self, x, y, color):
super().__init__(x, y, color)
self.body = [(x, y), (x-10, y), (x-20, y)] # 初始蛇身
self.move_offset = 10 # 蛇的初始移动偏量
def draw(self):
for pos in self.body:
pygame.draw.rect(screen, self.color, (pos[0], pos[1], 10, 10))
def move(self):
head = self.body[0]
x = head[0]
y = head[1]
if self.direction == 'left':
x -= self.move_offset
elif self.direction == 'right':
x += self.move_offset
elif self.direction == 'up':
y -= self.move_offset
elif self.direction == 'down':
y += self.move_offset
self.body.insert(0, (x, y)) # 添加新的头部
self.body.pop() # 删除尾部
def change(self, direction):
if direction == 'left' and self.direction != 'right':
self.direction = 'left'
elif direction == 'right' and self.direction != 'left':
self.direction = 'right'
elif direction == 'up' and self.direction != 'down':
self.direction = 'up'
elif direction == 'down' and self.direction != 'up':
self.direction = 'down'
# 主程序
snake = Snake(100, 100, green) # 创建蛇实例
pingguos = [] # 存储苹果实例的列表
score = 0 # 记录得分
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_LEFT:
snake.change('left')
elif event.key == pygame.K_RIGHT:
snake.change('right')
elif event.key == pygame.K_UP:
snake.change('up')
elif event.key == pygame.K_DOWN:
snake.change('down')
# 绘制背景
screen.fill(white)
# 绘制蛇和苹果
snake.draw()
for pingguo in pingguos:
pingguo.draw()
# 判断是否吃到苹果
for pingguo in pingguos:
if abs(snake.body[0][0] - pingguo.x) < 10 and abs(snake.body[0][1] - pingguo.y) < 10:
pingguos.remove(pingguo)
new_pingguo = Pingguo(random.randint(10, width-10), random.randint(10, height-10), red) # 产生新的苹果实例
pingguos.append(new_pingguo)
score += 100 # 得分+100
# 显示得分
font = pygame.font.SysFont(None, 25)
text = font.render("Score: " + str(score), True, black)
screen.blit(text, (10, 10))
pygame.display.update()
```
阅读全文