关闭

python编程之 环绕卫星轨道

标签: pygamepython编程游戏
641人阅读 评论(0) 收藏 举报
分类:

教材的第六章主要讲了下如何加载图片以及缩放,旋转等基本操作。用一个环绕卫星demo作为例子。

因为没有找到素材,在实现的过程中飞船的环绕的中心点并不是画面中央,我觉得可能是素材的因素,如果有错误欢迎指出。

没有按照书上的方法写飞船旋转的代码,而是基础的数学知识,根据当前位于圆心可以计算的角度。草图如下,对很简单。。


实际进行编写的时候会根据你写的三角函数,位置会做一些调整,思路就是这样。


源代码:

# -*- coding: utf-8 -*-
"""
Created on Wed Jul  8 21:24:03 2015

@author: liuchang
"""

import random,math,pygame
from pygame.locals import *

#定义 坐标类

def wrap_angle(angle):
    return angle%360


def print_text(font,x,y,text,color=(255,255,255)):
    imgText=font.render(text,True,color)
    screen.blit(imgText,(x,y))
    

class Point(object):
    def __init__(self,x,y):
        self.__x = x
        self.__y = y
    def getx(self):
        return self.__x
    def setx(self,x):
        self.__x = x

    x = property(getx,setx)     
    def gety(self):
        return self.__y
    def sety(self,y):
        self.__y = y
    y = property(gety,sety)
    
    def __str__(self):
        return "{X:"+"{:.0f}".format(self.x)+ \
        ",Y:"+"{:.0f}".format(self.y)+"}"


pygame.init()
screen = pygame.display.set_mode((1000,700))
pygame.display.set_caption("orbit demo")
font = pygame.font.Font(None,60)
space = pygame.image.load("backnew.jpg").convert()
planet = pygame.image.load("glazed.png").convert_alpha()
ship = pygame.image.load("ship.png").convert_alpha()
s_width,s_height = ship.get_size()
width,height = planet.get_size()
ship = pygame.transform.smoothscale(ship,(s_width//10,s_height//10))

pos = Point(0,0)
old_pos = Point(0,0)
angle = 0.0
#angle = wrap_angle(angle -0.1)
radius = 250

while True:

   
    for event in pygame.event.get():
        if event.type== QUIT:
            sys.exit()
        keys = pygame.key.get_pressed()
        if keys[K_ESCAPE]:
            sys.exit()
    #background        
    screen.blit(space,(0,0))
    #palnet
    screen.blit(planet,(500-width/2,350-height/2))
    #ship
    angle = wrap_angle(angle +0.1)#转动
    pos.x = math.cos(math.radians(angle))*radius
    pos.y = math.sin(math.radians(angle))*radius
    
    r_angle = -angle+180
    r_ship = pygame.transform.rotate(ship,r_angle)
    screen.blit(r_ship,(720+pos.x-width/2,550+pos.y-height/2))
    
    #screen.blit(ship,(50,50))
    print_text(font,0,20,"rotation:"+"{:.2f}".format(angle))
    print_text(font,400,20,"rotation angle:"+"{:.2f}".format(r_angle))
    pygame.display.update()



截图:

前期做的这些小demo都不难,重点放在思路上以及实现的细节部分。希望后面难度加大以后也能够坚持下去。

0
0

猜你在找
【直播】机器学习&数据挖掘7周实训--韦玮
【套餐】系统集成项目管理工程师顺利通关--徐朋
【直播】3小时掌握Docker最佳实战-徐西宁
【套餐】机器学习系列套餐(算法+实战)--唐宇迪
【直播】计算机视觉原理及实战--屈教授
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
【直播】机器学习之矩阵--黄博士
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
【直播】机器学习之凸优化--马博士
【套餐】Javascript 设计模式实战--曾亮
查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:74523次
    • 积分:3287
    • 等级:
    • 排名:第10265名
    • 原创:260篇
    • 转载:24篇
    • 译文:0篇
    • 评论:13条
    文章分类
    最新评论