设为首页收藏本站

Crossin的编程教室

 找回密码
 立即加入
楼主: crossin先生
打印 上一主题 下一主题

【Pygame 第7课】 多变的宿敌

[复制链接]

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

11#
发表于 2014-8-14 14:19:58 |只看该作者
牵着蚂蚁遛达 发表于 2014-8-13 17:09
麻烦问一下,self.y为啥初始化为-50呢?我把y设置成任何值效果都一样。。。。 ...

-50就是让敌机最开始的时候默认是在屏幕上方之外
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

0

主题

0

好友

8

积分

新手上路

Rank: 1

12#
发表于 2015-10-12 16:07:46 |只看该作者
老师 为啥我在ubantu环境下运行的情况, 自己的飞机每一次都是出现在最左上角。  我初始化一个坐标都不可以呢?
回复

使用道具 举报

0

主题

0

好友

8

积分

新手上路

Rank: 1

13#
发表于 2015-10-12 16:18:53 |只看该作者
# -*- coding: utf-8 -*-
import pygame
from pygame import *
from sys import exit
import random

class Plane(object):
        def __init__(self):
                self.image = pygame.image.load('plane.png').convert_alpha()
                self.width = self.image.get_width()
                self.height = self.image.get_height()
                self.x = 225 - self.width / 2
                self.y = 700 - self.height / 2

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


class Bullet(object):
        def __init__(self):
                self.x = 0
                self.y = -1
                self.image = pygame.image.load('bullet.png').convert_alpha()
                self.width = self.image.get_width()
                self.height = self.image.get_height()

        def move(self):
                if self.y < 0:
                        mouseX, mouseY = pygame.mouse.get_pos()
                        self.x = mouseX - self.width / 2
                        self.y = mouseY - self.height / 2
                else:
                        self.y -= 8

class Enemy(object):
        def restart(self):
                self.x = random.randint(50, 400)
                self.y = random.randint(-200, -50)
                self.speed = random.random() + 0.1

        def __init__(self):
                self.restart()
                self.image = pygame.image.load('enemy.png').convert_alpha()

        def move(self):
                if self.y < 800:
                        self.y += self.speed
                else:
                        self.restart()

pygame.init()
screen = pygame.display.set_mode((450, 800), 0, 32)
pygame.display.set_caption("@Shoot__Plane@")
background = pygame.image.load('back.jpg').convert()


bullet = Bullet()
enemy = Enemy()
plane = Plane()

while True:
        for event in pygame.event.get():
                if event.type == pygame.QUIT:
                        pygame.quit()
                        exit()
        screen.blit(background,( 0,0))

        bullet.move()
        screen.blit(bullet.image, (bullet.x, bullet.y))

        enemy.move()
        screen.blit(enemy.image, (enemy.x, enemy.y))

        screen.blit(plane.image, (plane.x, plane.y))
        plane.move()

        pygame.display.update()


请教一下老师,我把 #plane.move()注释掉以后,发现我的飞机确实初始化在我想要的屏幕中间下方的位置,不知道为啥不注释的时候每次程序运行飞机都在屏幕最左上方。
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

14#
发表于 2015-10-13 13:43:11 |只看该作者
daiqifan 发表于 2015-10-12 16:18
# -*- coding: utf-8 -*-
import pygame
from pygame import *

pygame.mouse.get_pos()
可能因为一开始这个值没有吧?你把move里面的数据打印出来看看是多少
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

0

主题

0

好友

10

积分

新手上路

Rank: 1

15#
发表于 2016-6-13 23:33:55 |只看该作者
大神好!我觉得这节课的内容,需要解释下,在程序最开始要加个“import random”,否则会错误
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

16#
发表于 2016-6-14 11:14:51 |只看该作者
windgod 发表于 2016-6-13 23:33
大神好!我觉得这节课的内容,需要解释下,在程序最开始要加个“import random”,否则会错误 ...

嗯,提到了一句但没有特别强调。因为random在基础课程前面讲过,所以就一笔带过了。
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

0

主题

0

好友

14

积分

新手上路

Rank: 1

17#
发表于 2016-6-16 22:57:01 |只看该作者
想问一下CROOSIN先生,为什么这一课的程序,实现后,必须移动鼠标才能发子弹,如果飞机不动,那么子弹和敌机都不会动,不知是何缘故?
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

18#
发表于 2016-6-17 09:52:37 |只看该作者
江南小才子 发表于 2016-6-16 22:57
想问一下CROOSIN先生,为什么这一课的程序,实现后,必须移动鼠标才能发子弹,如果飞机不动,那么子弹和敌 ...

查看缩进,你是不是把 bullet.move 和 enemy.move 的代码写到事件的 for 循环里了
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

0

主题

0

好友

14

积分

新手上路

Rank: 1

19#
发表于 2016-6-28 21:16:08 |只看该作者
crossin先生 发表于 2016-6-17 09:52
查看缩进,你是不是把 bullet.move 和 enemy.move 的代码写到事件的 for 循环里了 ...

是的,先生一语中的,感谢!!
回复

使用道具 举报

0

主题

0

好友

46

积分

新手上路

Rank: 1

20#
发表于 2016-7-8 13:27:10 |只看该作者
请教一下先生,定义敌机速度时:self.speed = random.random() + 0.1
加0.1的意思是每一次重置速度时速度都要快0.1?
回复

使用道具 举报

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

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

GMT+8, 2024-5-5 05:09 , Processed in 0.032412 second(s), 21 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部