2015-05-09 2 views
1

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

Моя проблема в том, что я не могу понять, как заставить рыбу исчезнуть. Я думал об использовании карты python. Единственная проблема заключается в том, что карты могут содержать только 2 элемента, которые соответствуют друг другу. Я хочу отслеживать три предмета: fish_count (количество разбросанных рыб) и позиции x и y каждого. Я хочу позже ссылаться на карту, чтобы увидеть, как заставить рыбу исчезнуть и удалить ее, когда черепаха сталкивается с рыбой.

Мой вопрос: Есть ли более простой способ для хранения информации, так что я могу отслеживать его проще и эффективнее

Я НЕ Просить КОД DUMP!

Вот мой код, который у меня уже:

import math 
import random 
import sys 
import time 
from pygame import * 
import pygame 
pygame.init() 

#------Easy-Change Variables 
mouse_visibility = False 
turtlespeed = 4 

#------Fonts 
font = pygame.font.SysFont("C:/Python34/TurtleFont.ttf", 48) 

#------Timer Setup 
start_time = time.time() 
elapsed_time = time.time() - start_time 

#------Theme Music 
pygame.mixer.music.load('C:/Python34/Jumpshot.mp3') 
pygame.mixer.music.play(1, 0.0) 

#------BG, Screen & Caption 
pygame.display.set_caption('Fishy the Turtle') 
screen = pygame.display.set_mode((1024, 616)) 
bg_img = pygame.image.load("C:/Python34/icebackground.png") 
screen.blit(bg_img,(0,0)) 
pygame.display.flip() 

#------Image Preparation 
turtle = pygame.image.load("C:/Python34/turtle.png") 
fish = pygame.image.load("C:/Python34/fish.png") 

#------Movement, Coords, Collisions & Fish 
turtlepos = pygame.mouse.get_pos() 
pygame.mouse.set_visible(mouse_visibility) 

fish_count = 0 

if pygame.mouse.get_pressed()[1] == True: 
    while 1 == 1: 
     mousepos = pygame.mouse.get_pos() 

     text = font.render("Points: %s" % points, True, (0, 128, 0)) 
     screen.blit(text, (0, 0)) 

     new_fish = random.randint(0, 6) 
     fish_x = random.randint(0, 943) 
     fish_y = random.randint(0, 552) 

     if mousepos[1] - turtlepos[1] < 0: 
      turtlepos[1] -= turtlespeed 
     else: 
      turtlepos[1] += turtlespeed 

     if mousepos[2] - turtlepos[2] < 0: 
      turtlepos[2] -= turtlespeed 
     else: 
      turtlepos[2] += turtlespeed 

     if elapsed_time == 45: 
      sys.exit() 
      print("Sorry! Game Over!") 

     screen.blit(turtle,(turtlepos[1],turtlepos[2])) 
     pygame.display.flip() 

     if new_fish == 0: 
      screen.blit(fish,(fish_x, fish_y) 
      pygame.display.flip() 
      fish_count += 1 


     pygame.display.update() 
     mainClock.tick(40) 

EDIT: Полный проект до сих пор:

import math 
import random 
import sys 
import time 
from pygame import * 
import pygame 
pygame.init() 

#------Easy-Change Variables 
mouse_visibility = False 
turtlespeed = 4 

#------Font 
font = pygame.font.SysFont("C:/Python34/TurtleFont.ttf", 48) 

#------Theme Music & Sound Effects 
pygame.mixer.music.load('C:/Python34/Jumpshot.mp3') 
pygame.mixer.music.play(1, 0.0) 

chomp = pygame.mixer.Sound("C:/Python34/chomp.wav") 
#------BG, Screen & Caption 
pygame.display.set_caption('Fishy the Turtle') 
screen = pygame.display.set_mode((1024, 616)) 
bg_img = pygame.image.load("C:/Python34/icebackground.png") 
screen.blit(bg_img,(0,0)) 
pygame.display.flip() 

#------Image Preparation 
turtle = pygame.image.load("C:/Python34/turtle.png") 
fish = pygame.image.load("C:/Python34/fish.png") 

#------Movement, Coords, Collisions & Fish 
turtlepos = pygame.mouse.get_pos() 
pygame.mouse.set_visible(mouse_visibility) 

turtle_rect = turtle.get_rect() 
fish_rect = fish.get_rect() 

points = 0 
fish_pos_list = [] 

if pygame.mouse.get_pressed()[1] == True: 
    while 1 == 1: 
     mousepos = pygame.mouse.get_pos() 

     text = font.render("Points: %s" % points, True, (0, 128, 0)) 
     screen.blit(text, (0, 0)) 

     new_fish = random.randint(0, 6) 
     fish_x = random.randint(0, 943) 
     fish_y = random.randint(0, 552) 

     if mousepos[1] - turtlepos[1] < 0: 
      turtlepos[1] -= turtlespeed 
     else: 
      turtlepos[1] += turtlespeed 

     if mousepos[2] - turtlepos[2] < 0: 
      turtlepos[2] -= turtlespeed 
     else: 
      turtlepos[2] += turtlespeed 

     screen.blit(turtle_rect,(turtlepos[1],turtlepos[2])) 
     pygame.display.flip() 

     if new_fish == 0: 
      screen.blit(fish_rect,(fish_x, fish_y) 
      pygame.display.flip() 
      fish_count += 1 
      start_time = time.time() 
      positions = {'x':fish_x, 'y':fish_y, 'fishtimer':start_time} 
      fish_pos_list.append(positions) 

     if time.time() - fish_pos_list[FISHTIMER OF FIRST ITEM IN LIST] >= 10: 
      screen.blit(bg_img, (X OF FIRST ITEM, Y OF FIRST ITEM), pygame.Rect(X OF FIRST ITEM, Y OF FIRST ITEM, 81, 62)) 
      del fish_pos_list[0] 

     if turtle_rect.colliderect(fish_rect): 
      screen.blit(bg_img, (X OF FIRST ITEM, Y OF FIRST ITEM), pygame.Rect(X OF FIRST ITEM, Y OF FIRST ITEM, 81, 62)) 
      chomp.play() 
      DELETE FISH FROM LIST 
      points += 1 

     pygame.display.update() 
     mainClock.tick(40) 

Спасибо за помощь мне с этим, hd1, но я не могу сказать, постион в позиции (я называю позицию «fish_pos_list»), потому что у меня есть это, если заявление:

if new_fish == 0: 
      screen.blit(fish_rect,(fish_x, fish_y) 
      pygame.display.flip() 
      fish_count += 1 
      start_time = time.time() 
      positions = {'x':fish_x, 'y':fish_y, 'fishtimer':start_time} 
      fish_pos_list.append(positions) 

у меня есть все го e словарей (карт) с поименованными позициями, поэтому он будет смущен, когда я скажу о позициях, потому что они все называются позициями. Еще раз спасибо TON за помощь!

ответ

1

Хотя карты (или словари) могут иметь по 2 предмета за штуку, нет правила, говорящего, что сами предметы должны быть скалярными. Смотрите следующий пример:

position = {'x':1, 'y':3, 'fishcount':5} 
positions = [] 
positions.append(position) 

Для решения комментарий:

for position in positions: 
    if position['fishcount'] > 9: 
     # do stuff 
    else: 
     # do other stuff 

Надежда, что помогает. Если у вас есть дополнительные проблемы, не стесняйтесь оставлять комментарии.

+0

Если у меня есть куча словарей внутри списка, и я хочу чтобы увидеть список рыб первого словаря, как бы я это написал? Просто первый словарь списка, хотя, потому что я хочу иметь оператор if, говорящий «если время (количество рыб) первого словаря больше или равно десяти секундам, избавиться от рыбы и удалить ее из списка», Я просто не знаю, как сказать первую часть. –

+0

Просьба видеть мое редактирование - также, вы должны проголосовать за принятые ответы – hd1

+0

Мне не хватает репутации. Я бы очень любил твою почту, и я пробовал раньше, но мне нужно 15 человек. –

0

Вы можете использовать named tuple?

from collections import namedtuple

Fish = namedtuple('Fish', 'count, x, y')
a_fish = Fish(fish_count, fish_x, fish_y)

, то вы можете получить доступ по индексу: a_fish[0] или доступ по имени: a_fish.fish_count

Смежные вопросы