python小飞机程序

今天决定写个小程序,再系统地学习PY。跟着个视频写代码,没想到视频中坑点无数,老师讲的也不太详细,不过终于算是搞定了,发出来供初学者节省下时间:

坑一:osx 上安装 python3:由于mac自带了python,不过版本太低,pip也没有,所以要先安装新版,我下载了3.5.6,安装完成。自带的2.7我也没管,万一以后用到呢。

安装就直接安装到/usr/local/bin,这个目录下面了。之前mac自带的,在/usr/bin 这里面。

安装完成之后,其实环境变量你会发现也都自动都配好了。到安装目录下,会看到比如pip3,python3等命令了。

然后就可以执行:pip3 install pygame,实现pygame的安装。

然后,对Pycharm,进行配置,把python3的解释器也给配进去,在Project Interpreter中。

另外,在写.py文件时,import pygame还是会报错,因此还要做个修改:

第一步:打开Pycharm

第二步:点File ->Default Settings->Project Interpreter


双击pip,然后搜索pygame,再install,看到成功,则环境这一块,就算切换完成了。。。


----------------------------------------分隔线----------------------------------------

至于代码,我都写在注释里,就不解释了。

import pygame
from pygame.locals import *
import time

def main():
    #可以自动初始化
    pygame.init();
    screen = pygame.display.set_mode((480,852),0,32)
    background = pygame.image.load("./feiji/background.png")
    plane = pygame.image.load("./feiji/hero1.png")
    x = 480 / 2 - 50;
    y = 600;
    speed = 10 #设置飞机的位置
    list =[]
    while 1:
        screen.blit(background, (0, 0))
        screen.blit(plane, (x, y))
        #如果不判断event,则不会显示出画面
        #检查是否有新事件,如果有的话,否则转到退出命令,退出程序。
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                # 解析器关闭时会自动调用quit
                pygame.quit()
                exit(0)

        key_pressed = pygame.key.get_pressed()
        if key_pressed[K_UP]:
            if(y - speed >=0):
                y = y - speed;


        if key_pressed[K_DOWN]:
            if(y + speed <=852-100):
                y = y + speed;

        if key_pressed[K_LEFT]:
            if(x - speed >= 0):
                x = x - speed;


        if key_pressed[K_RIGHT]:
            if(x + speed <= 480-100):
                x = x + speed;

        if key_pressed[K_SPACE]:
            print("发射子弹")

            #子弹的详细信息
            bullet = pygame.image.load("./feiji/bullet.png");
            my_bullet = {"子弹":bullet,"x坐标":x+50,"y坐标":y};
            list.append(my_bullet)

        for i in list:
            screen.blit(i["子弹"],(i["x坐标"],i["y坐标"]))
            i["y坐标"] = i["y坐标"] -25;

        #0.01秒唤醒一次
        time.sleep(0.01)

        pygame.display.update();

main();

以上当中,最奇怪的地方,就是如果不加事件判断,那么会看不到图像,只有在停止运行时,图片才会一闪而过。我也没太想明白问题出在哪里,总之加上对event的判断,就没问题了。

最终的结果:






猜你喜欢

转载自blog.csdn.net/angus_17/article/details/80349561