سؤال

أنا أعمل على مشروع لعبة علامة ليزر يستخدم pygame و Raspberry Pi.في اللعبة، أحتاج إلى مؤقت في الخلفية لتتبع وقت اللعبة.أستخدم حاليًا ما يلي للقيام بذلك ولكن يبدو أنه لا يعمل بشكل صحيح:

pygame.timer.get_ticks()

مشكلتي الثانية هي إعادة ضبط هذا المؤقت عند إعادة تشغيل اللعبة.يجب إعادة تشغيل اللعبة دون الحاجة إلى إعادة تشغيل البرنامج، ومن المحتمل أن يتم ذلك فقط من خلال إعادة ضبط المؤقت، على ما أعتقد.

ما أحتاجه، باختصار، هو أن يكون لديك متغير مؤقت في الخلفية وأن تكون قادرًا على إعادة تعيينه في أي وقت في حلقة while.

أنا مبتدئ حقيقي في لغة python وpygame، ولكن حل هذه المشكلة سيعطي دفعة كبيرة لمعرفتي والتقدم المحرز في المشروع.أي مساعدة سيكون موضع تقدير كبير.

هل كانت مفيدة؟

المحلول

لا تحتاج بالضرورة إلى Pygame لهذا -- time.time() يجب أن تعمل كذلك pygame.time.get_ticks(), ، على الرغم من أنه يُبلغ عن الثواني منذ عصر Unix بدلاً من المللي ثانية منذ تهيئة Pygame.

تريد قياس الوقت المنقضي منذ آخر إعادة تعيين (أو منذ بدء اللعبة، والتي يمكنك اعتبارها أول إعادة تعيين).تقوم الوظيفتان اللتان حصلت عليهما بإرجاع الوقت المنقضي منذ نقطة مرجعية تعسفية.إن أبسط طريقة لتحقيق ذلك هي الاحتفاظ بالمتغير t0.سيحتفظ هذا المتغير بقيمة الوقت عند آخر إعادة تعيين (أو بدء اللعبة).

فيما يلي مثال يتكرر بشكل لا نهائي ويطبع باستمرار قيمة هذا المؤقت، ويعيد ضبطه عندما يصل إلى 3 ثوانٍ:

# import the builtin time module, this is always available
import time

# initialize the t0 variable, "starting the stopwatch"
t0 = time.time()

while True:
  # calculate the time since some reference point (here the Unix Epoch)
  t1 = time.time()

  # calculate the difference, i.e. the time elapsed
  dt = t1 - t0

  if dt >= 3:
    print "Three seconds reached, resetting timer"
    t0 = t1
  else:
    print "Time elapsed is", dt, "seconds"

إذا كنت تريد التعرف على ميزات Python الموجهة للكائنات، فهذه فرصة جيدة للتمرين.يمكن تغليف السلوك أعلاه بدقة في ملف Stopwatch فئة، على سبيل المثال.مع get_seconds() و reset() طُرق.

إذا كتبت مثل هذا الفصل، فيمكن أن يكون رمز منطق التوقيت عالي المستوى الخاص بك بسيطًا جدًا وسهل القراءة:

my_timer = Stopwatch()
print my_timer.get_seconds(), "seconds have elapsed since start/reset"
my_timer.reset()

يتم إخفاء تفاصيل التنفيذ الأساسي بعيدًا في التعليمات البرمجية الخاصة بـ Stopwatch فصل.

نصائح أخرى

بعد pygame.init() يسمى يبدأ مؤقت pygame.لذا لنفترض أنك قمت بتشغيل برنامجك مرة واحدة ثم بدأت في إجراء جلسات لعب مختلفة في نفس التشغيل، ثم يمكنك استخدام متغير مرجعي لتتبع المؤقت وإعادة ضبطه.
مثال:

#your game
import pygame
from pygame import time as T
#do your stuffs
pygame.init()
while True: #this loop never ends and you want to reset timer in this loop if I am not wrong.
    if(new_session):
        tim_var=T.get_ticks()
        new_session=0

    #do your stuffs
    print 'time elaspsed in this session upto now '+str(T.get_ticks()-tim_var)+' millisecs'

    if(game_ended):
        new_session=1
        #restart_your_new_game by resetting your variables or whatever
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top