请选择 进入手机版 | 继续访问电脑版
设为首页收藏本站

Crossin的编程教室

 找回密码
 立即加入
楼主: crossin先生

【Pygame 第10课】 命中目标

[复制链接]

0

主题

0

好友

24

积分

新手上路

Rank: 1

发表于 2016-11-24 11:42:39 |显示全部楼层
为什么我的程序运行起来出现鼠标不动画面不动的现象?
回复

使用道具 举报

174

主题

45

好友

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

发表于 2016-11-24 13:27:14 |显示全部楼层
BDHELLO 发表于 2016-11-24 11:42
为什么我的程序运行起来出现鼠标不动画面不动的现象?

是不是你代码里的循环写的有问题。
对照例子代码看看,缩进什么的有没有搞错了
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

0

主题

0

好友

24

积分

新手上路

Rank: 1

发表于 2016-11-25 14:35:47 |显示全部楼层
crossin先生 发表于 2016-11-24 13:27
是不是你代码里的循环写的有问题。
对照例子代码看看,缩进什么的有没有搞错了 ...

检查出来了,是缩进的原因,谢谢!
回复

使用道具 举报

0

主题

0

好友

20

积分

新手上路

Rank: 1

发表于 2017-3-10 17:18:25 |显示全部楼层
老师为什么我屏幕里总是有一个飞机命中不了
回复

使用道具 举报

174

主题

45

好友

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

发表于 2017-3-11 15:24:16 |显示全部楼层
wwb951108 发表于 2017-3-10 17:18
老师为什么我屏幕里总是有一个飞机命中不了

不知道……
查一查你碰撞检测那里的循环,是不是有个飞机不在循环列表里
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

0

主题

0

好友

20

积分

新手上路

Rank: 1

发表于 2017-3-15 19:07:30 |显示全部楼层


  1. import pygame
  2. from sys import exit
  3. import random
  4. def hit(enemy,bullet):
  5.     if (bullet.x>enemy.x and bullet.x<enemy.x+enemy.image.get_width())and(bullet.y>enemy.y and bullet.y<enemy.y+enemy.image.get_height()):
  6.         enemy.restart()
  7.         bullet.active=False
  8. class Plane(object):
  9.     def __init__(self):
  10.         self.image = pygame.image.load('plane.png').convert_alpha()
  11.         self.width = self.image.get_width()
  12.         self.height = self.image.get_height()
  13.         self.x = 225 - self.width / 2
  14.         self.y = 700 - self.height / 2

  15.     def move(self):
  16.         mouseX, mouseY = pygame.mouse.get_pos()
  17.         self.x = mouseX - self.width / 2
  18.         self.y = mouseY - self.height / 2

  19. class Enemy:
  20.     def restart(self):
  21.         self.x = random.randint(50, 400)
  22.         self.y = random.randint(-200, -50)
  23.         self.speed = 0.3
  24.     def __init__(self):
  25.                 self.restart()
  26.                 self.image = pygame.image.load('diji.png').convert_alpha()

  27.     def move(self):
  28.                 if self.y < 800:
  29.                         self.y += self.speed
  30.                 else:
  31.                         self.restart()
  32. class Bullet:
  33.     def __init__(self):
  34.         self.x=0
  35.         self.y=-5
  36.         self.image=pygame.image.load('1.png').convert_alpha()
  37.         self.active = False

  38.     def move(self):
  39.         if self.active:
  40.             self.y -= 3
  41.       
  42.         if self.y < 0:
  43.             self.active = False
  44.     def restart(self):
  45.         
  46.         mousex,mousey=pygame.mouse.get_pos()
  47.         self.x=mousex-self.image.get_width()/2
  48.         self.y=mousey-self.image.get_height()/2
  49.         self.active=True
  50.             


  51. pygame.init()

  52. screen=pygame.display.set_mode((450,800),0,32)
  53. pygame.display.set_caption('hello,world')
  54. background1=pygame.image.load('back.jpg').convert()
  55. pygame.mouse.set_visible(False)
  56. filename='yinyue.mp3'
  57. pygame.mixer.init()
  58. pygame.mixer.music.load(filename)
  59. pygame.mixer.music.play(1)
  60. enemy=Enemy()
  61. plane=Plane()

  62. bullets = []

  63. for i in range(5):
  64.     bullets.append(Bullet())

  65. count_b = len(bullets)

  66. index_b = 0

  67. interval_b = 0
  68. enemies = []
  69. #向list中添加5架敌机
  70. for i in range(5):
  71.     enemies.append(Enemy())
  72. while True:
  73.     for event in pygame.event.get():
  74.         if event.type==pygame.QUIT:
  75.             pygame.quit()
  76.             exit()      
  77.     screen.blit(background1,(0,0))
  78.     interval_b -= 1
  79.     #当间隔小于0时,激活一发子弹
  80.     if interval_b < 0:
  81.         bullets[index_b].restart()
  82.         #重置间隔时间
  83.         interval_b = 100
  84.         #子弹序号周期性递增
  85.         index_b = (index_b + 1) % count_b
  86.     #判断每个子弹的状态
  87.     for b in bullets:
  88.         #处于激活状态的子弹,移动位置并绘制
  89.         if b.active:
  90.             b.move()
  91.             screen.blit(b.image, (b.x, b.y))
  92.     for b in bullets:
  93.         if b.active:
  94.             for e in enemies:
  95.                 hit(e, b)
  96.             b.move()
  97.             screen.blit(b.image, (b.x, b.y))

  98.         plane.move()
  99.     for e in enemies:
  100.         e.move()
  101.         screen.blit(e.image, (e.x, e.y))



  102.    
  103.     enemy.move()
  104.     screen.blit(enemy.image,(enemy.x,enemy.y))
  105.    
  106.     screen.blit(plane.image, (plane.x, plane.y))

  107.     pygame.display.update()
  108.    
复制代码
回复

使用道具 举报

0

主题

0

好友

20

积分

新手上路

Rank: 1

发表于 2017-3-15 19:07:49 |显示全部楼层
老师我感觉没出错啊
回复

使用道具 举报

174

主题

45

好友

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

发表于 2017-3-16 17:56:08 |显示全部楼层
wwb951108 发表于 2017-3-15 19:07
老师我感觉没出错啊

我也没看出问题。这个不大能直接这么看出来,得具体调试了,先想办法重新问题,然后多加输出,看看哪里出了问题
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

1

主题

0

好友

45

积分

新手上路

Rank: 1

发表于 2017-8-6 00:07:59 |显示全部楼层
老师 一直说 NameError: global name 'enemey' is not defined

但是这个只是一个parameter啊 为什么会有这个问题。
回复

使用道具 举报

1

主题

0

好友

45

积分

新手上路

Rank: 1

发表于 2017-8-6 00:09:49 |显示全部楼层
mihchaelli 发表于 2017-8-6 00:07
老师 一直说 NameError: global name 'enemey' is not defined

但是这个只是一个parameter啊 为什么会有这 ...

总是发过贴之后才发现。。 有一个typo
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即加入

QQ|手机版|Archiver|Crossin的编程教室 ( 苏ICP备15063769号  

GMT+8, 2024-3-29 14:24 , Processed in 0.018203 second(s), 21 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部