鱼C论坛

 找回密码
 立即注册
查看: 2284|回复: 1

[已解决]应该是关于计时的问题,求帮助

[复制链接]
发表于 2017-6-10 19:48:42 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
这是我写的一个吃鱼的游戏,两种结束游戏方式1、限时60s,2、没吃到鱼
我的问题是:
还没到60s呢,我没吃到鱼,游戏结束了,可以先择重新开始,重新开局了(不是关掉游戏再打开)计时却没有重置
如何解决这个pygame.time.get_ticks()函数的问题

还有就是我是个新手,我写的代码肯定比较笨重,希望有大神指点

这个是游戏内的图片,素材做的不是很认真不要见怪


  1. import pygame
  2. from pygame.locals import *
  3. import random
  4. import easygui as g

  5. g.msgbox(msg = "限时60秒  Let's Go!!!", ok_button = "开始游戏")

  6. def main():
  7.     pygame.init()
  8.     white = 255, 255, 255
  9.     width, length = 500, 700
  10.     screen = pygame.display.set_mode((width, length))
  11.     keys = [False,False]
  12.     playerpos = [225, 650]
  13.     fishpos = [[random.randint(0,450), 0]]
  14.     timer = 100
  15.     score = 0
  16.     runing = 1
  17.     fish = pygame.image.load("resources/images/Fish.png")
  18.     mouse = pygame.image.load("resources/images/Mouse.png")
  19.     fishrect = pygame.Rect(fish.get_rect())
  20.     playerect = pygame.Rect(mouse.get_rect())
  21.     while runing:
  22.         timer -= 1/10
  23.         screen.fill(white)
  24.         if timer <= 0:
  25.             fishpos.append([random.randint(0,450), 0])
  26.             timer = 100
  27.         playerect.top = playerpos[1]
  28.         playerect.left = playerpos[0]
  29.         index = 0
  30.         for fishp in fishpos:
  31.             fishrect.top = fishp[1]
  32.             fishrect.left = fishp[0]
  33.             if fishrect.colliderect(playerect):
  34.                 fishpos.pop(index)
  35.                 score += 1
  36.             if fishp[1] >= 650:
  37.                 fishpos.pop(index)
  38.                 runing = 0
  39.             fishp[1] += 1/5
  40.             index += 1
  41.         for fishp in fishpos:
  42.             screen.blit(fish, fishp)
  43.         font = pygame.font.SysFont("youyuan", 24)
  44.         timescore = pygame.time.get_ticks() // 1000 % 61
  45.         survivedtext = font.render((str(score) + "条鱼" + "_" + str(timescore) + "秒钟"), True ,(0, 0, 0))
  46.         screen.blit(survivedtext, (5, 5))
  47.         screen.blit(mouse, playerpos)
  48.         pygame.display.update()
  49.         for event in pygame.event.get():
  50.             if event.type == pygame.QUIT:
  51.                 pygame.quit()
  52.                 exit()
  53.             if event.type == pygame.KEYDOWN:
  54.                 if event.key == K_a:
  55.                     keys[0] = True
  56.                 elif event.key == K_d:
  57.                     keys[1] = True
  58.             if event.type == pygame.KEYUP:
  59.                 if event.key == pygame.K_a:
  60.                     keys[0] = False
  61.                 elif event.key ==pygame.K_d:
  62.                     keys[1] = False
  63.         if keys[0] and playerpos[0] >= 0 :
  64.             playerpos[0] -= 1/3
  65.         elif keys[1] and playerpos[0] <= 450:
  66.             playerpos[0] += 1/3
  67.         if timescore == 60:
  68.             runing = 0
  69.     if runing == 0:
  70.         choice = g.buttonbox("Game Over!\n一共吃了" + str(score) + "鱼", choices = ("重新开始", "退出游戏"))
  71.         timescore = pygame.time.get_ticks() - timescore
  72.     return choice

  73. while True:
  74.     choice = main()  
  75.     if choice == "重新开始":
  76.         main()
  77.     else:
  78.         exit(0)


复制代码
最佳答案
2017-6-11 06:20:48
time2赋值为后面的计时,time1赋值为开始的计时    time2 - time1 >= 60  游戏结束
选择重玩如果要重新计时,可以把整个游戏放在一个循环里面,循环的开始就导入计时函数。循环的最后,如果点击重新开始游戏,
这样每一次循环开始就重新计时  OK了 ,问题搞定
捕获.PNG
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2017-6-11 06:20:48 | 显示全部楼层    本楼为最佳答案   
time2赋值为后面的计时,time1赋值为开始的计时    time2 - time1 >= 60  游戏结束
选择重玩如果要重新计时,可以把整个游戏放在一个循环里面,循环的开始就导入计时函数。循环的最后,如果点击重新开始游戏,
这样每一次循环开始就重新计时  OK了 ,问题搞定
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-2-27 23:13

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表