Как сделать мою змею длиннее для моей игры со змеями на raspberry pi SenseHat

#python #raspberry-pi

#python #raspberry-pi

Вопрос:

Я создаю игру в змейку на SenseHat, и веб-сайт, на котором я учусь, говорит мне, что мне нужно использовать оператор mod, чтобы моя змея становилась длиннее каждый раз, когда она ест пищу. Но моя змея просто начинает расти навсегда, хотя она ничего не ела

ниже приведен веб-сайт, который я использую (ссылка отправляет вас прямо на ту часть, на которой я застрял):https://projects.raspberrypi.org/en/projects/slug/9

Хотя я уже некоторое время изучаю это, я понятия не имею, где и как мне нужно поместить это в мой скрипт

Это весь мой сценарий для игры.

 import random
from random import randint
import time
from sense_hat import SenseHat
sense = SenseHat()


vegetables = []
direction = "right"
colx = randint(0,255)
coly = randint(0,255)
colz = randint(0,255)
food_col = (colx, coly, colz)
blank = (0, 0, 0)
white = (255, 255, 255)
green = (0, 255, 0)
snake =[ [2,4], [3,4], [4,4] ]
score = (0)

def move():
  global score
  last = snake[-1]
  first = snake[0]
  next = list(last)     
  remove = True

  if direction == "right":
    if last[0]   1 == 8:
     next[0] = 0
    else:
     next[0] = last[0]   1

  elif direction == "left":
    if last[0] - 1 == -1: 
      next[0] = 7
    else:
      next[0] = last[0] - 1

  elif direction == "down":
    if last[1]   1 == 8: 
      next[1] = 0
    else:
      next[1] = last[1]   1

  elif direction == "up":
    if last[1] - 1 == -1: 
      next[1] = 7
    else: 
      next[1] = last[1] - 1

  if next in vegetables:
    vegetables.remove(next)
    score == 1

  if next in vegetables:
    if remove == True:
      sense.set_pixel(first[0], first[1], blank)
      snake.remove(first)
    if score % 5 == 0:
      remove = False
  snake.append(next)
  sense.set_pixel(next[0], next[1], green)
def draw_snake():
  for segment in snake: 
    sense.set_pixel(segment[0], segment[1], green)

def joystick_moved(event):
  global direction
  direction = event.direction

def make_food():
  new = snake[0]
  while new in snake:
    x = randint(0,7)
    y = randint(0,7)
    new = [x,y]
    for segment in new: 
      sense.set_pixel(x, y, food_col)
  vegetables.append(new)



sense.clear()
draw_snake()
while True: 
  if len(vegetables) < 3: 
    make_food()
  move()
  time.sleep(0.5)
  sense.stick.direction_any = joystick_moved

  

Я хочу сделать так, чтобы моя змея росла каждый раз, когда она ест пищу, но вместо этого она просто растет вечно с самого начала. Вот эмулятор, если вы хотите попробовать мой скрипт на sense hat
https://trinket.io/sense-hat

Спасибо

Комментарии:

1. подумайте об этом, поскольку вы хотите добавить элемент в список один раз в определенном событии. попробуйте упростить свою проблему до такого случая и вырасти из него.

Ответ №1:

snake.append(next) в move не в состоянии. Также у вас есть два if next in vegetables условия, и первое удаляет его из списка, что означает, что второе всегда будет ложным. Вы, вероятно, хотите объединить их.

Комментарии:

1. что вы подразумеваете под snake.append(далее) — это не условие?

2. Вы хотите выполнить snake.append(next) когда змея вырастет, ваш snake.append (next) в данный момент находится после условия, которое проверяет, должна ли змея расти, а не в нем. Вам нужно сделать отступ, чтобы он выполнялся только при выполнении условия true.

3. когда я делаю отступ в snake.append (next), чтобы он находился под remove = False или если remove == True: змея не движется

4. Вы объединили их if next in vegetables: ? Первый делает невозможным запуск второго.

5. ДА. я объединил два if next в vegetables: должен ли я также сделать отступ sense.set_pixel(next[0], next[1], зеленый)?