主题: 002.03 Tkinter星空漫游范例

建檔日期: 2019/08/30

更新日期: None

语言: Python 3.7.4, tkinter 8.6

系统: Win10 Ver. 10.0.17763

002.03 Tkinter星空漫游范例

看到书上介绍有关星际大战的游戏, 自己也想来写一个. 第一件事情想到的就是加上一个背景, 而且是动态的星空背景, 顺手写了一个程序, 发上来供大伙参考.

主要内容如下:

1. Tkinter的Canvas画布及画圆部件的使用

2. 星空中三维空间的坐标转换为屏幕的二维空间坐标

3. 定时器定时触发, 宇宙飞船前进, 星球位置及大小的改变

输出画面

程序代码

'''

星际漫游 - 模拟在星空中前近, 大小星球在屏幕中接近及离去, 可作为游戏背景

'''

from tkinter import *

from math import sqrt

import random

def cal(point):

# 计算星空中的坐标在屏幕中投影的坐标

delta = point[0] - here

if delta==0:

return [-1, -1, 1, 0, 0]

x = point[1]/delta # x坐标

y = point[2]/delta # y坐标

r = point[3]/delta # 星球半径

return [x, y, r]

def display_all(widget, star):

# 更新星球的位置及大小

# 远的星球放在画布最底层

star = sorted(star, reverse=False, key=lambda k:k[0]**2+k[1]**2+k[2]**2)

for i in range(stars):

star[i][4]=i+1

for i in range(stars):

position = cal(star[i])

x0 = position[0] - position[2] + width/2

y0 = position[1] - position[2] + height/2

x1 = position[0] + position[2] + width/2

y1 = position[1] + position[2] + height/2

widget.coords(star[i][4], x0, y0, x1, y1)

def process():

# 每一次更新所有的星球位置及大小

global here

here += step

for i in range(stars):

while True:

position = cal(star[i])

#超出屏幕, 改成新星球, 坐标及半径都更新

if (0 <= position[0]+width/2 < width and

0 <= position[1]+height/2 < height and star[i][0]>here):

break

else:

star[i][0] = random.randint(x_far, 2*x_far)+here

star[i][1] = random.randint(-y_far, y_far)

star[i][2] = random.randint(-z_far, z_far)

star[i][3] = random.randint(min_r, max_r)

display_all(canvas, star)

def threaded():

# 每0.1秒更新一次

process()

root.after(100,threaded)

width = 1536 #屏幕寛度

height = 800 #屏幕高度

step = 1 # 前进速度

min_r = 1 # 最小星球半径

max_r = 200 # 最大星球半径

stars = 1000 # 全部星球数量

x_far = 100 # 星空中最大X轴距离

y_far = width/2*x_far # 星空中最大Y轴距离

z_far = height/2*x_far # 星空中最大Z轴离离

here = 0 # 目前航天员X轴位置为0, 屏幕在X轴1的位置

x_center = int(width/2) # 屏幕中心X坐标

y_center = int(height/2)# 屏幕中心Y坐标

star = [[0,0,0,0,0] for i in range(stars)] # 星球资料[x,y,z,r,部件ID]

root = Tk()

canvas = Canvas(root, width=width, height=height, bg='black')

canvas.pack()

for i in range(stars): # 建立所有的星球部件

position = cal(star[i])

x0 = position[0] - position[2] + width/2

y0 = position[1] - position[2] + height/2

x1 = position[0] + position[2] + width/2

y1 = position[1] + position[2] + height/2

star[i][4] = canvas.create_oval(x0, y0, x1, y1, fill='white')

# root.bind('', process)

root.resizable(0, 0) # 设置窗口为固定大小, 不可改变

threaded() # 定时起动航天员前进

root.mainloop()

本作品采用《CC 协议》,转载必须注明作者和本文链接

Jason Yang

python星空代码_002.03 Tkinter 星空漫遊范例相关推荐

  1. python星空代码_python与云星空Web API

    大家都知道,云星空是支持Web API的.在云社区搜查 Python .API 两个关键词,就会出现相应的显示如下. 感谢Cand,给我们提供了这么好的内容. 我这段时间是做数据迁移的,把WISE数据 ...

  2. python五子棋代码tkinter_python使用tkinter库实现五子棋游戏

    python使用tkinter库实现五子棋游戏 来源:中文源码网    浏览: 次    日期:2019年11月5日 [下载文档:  python使用tkinter库实现五子棋游戏.txt ] (友情 ...

  3. python对话框代码_Python、tkinter、复杂对话框和代码结构

    当实现复杂的对话框(即,具有大约10个或更多窗口小部件的对话框,尤其是在多个框架中排列时),创建需要许多tkinter调用,当代码保持在单个方法中时,代码可能会变得越来越复杂(难以读取和维护).一般来 ...

  4. python五子棋代码tkinter_python使用tkinter开发一款五子棋游戏

    这个是vscomputer,还有vsplayer在我的github ''' @author: redtree @contact: redtreec@gmail.com @time: 17-12-28 ...

  5. 用python画星空的代码简单-【Python】手把手教你绘制星空旅游线路图

    0 前言 5月是美国的毕业季,我家领导也即将毕业了,我们将在美国进行为期两周的毕业旅行.其实类似这样的航线图我以前也用PPT绘制过,给领导用于发朋友圈,虽然总体能表达出意思,但是效果不能让自己满意,见 ...

  6. 用python画星空-【Python】手把手教你绘制星空旅游线路图

    0 前言 5月是美国的毕业季,我家领导也即将毕业了,我们将在美国进行为期两周的毕业旅行.其实类似这样的航线图我以前也用PPT绘制过,给领导用于发朋友圈,虽然总体能表达出意思,但是效果不能让自己满意,见 ...

  7. python简单代码加法-Python tkinter实现简单加法计算器代码实例

    tkinter 是 Python 的标准 GUI 库.Python 使用 tkinter 可以快速的创建 GUI 应用程序.由于 tkinter 是内置到 python 的安装包中.只要安装好 Pyt ...

  8. Python GUI界面编程初步 03 - Tkinter基础设计案例

    1 设计: We'll create a simple GUI tool to convert a distance in feet to the equivalent distance in met ...

  9. python中文编辑_python用Tkinter做自己的中文代码编辑器

    前面我们给了Tkinter接管Python输入和输出的介绍,我们不难可以想到,能用Tkinter来开发自己的Python代码编辑器.例如可以使用Text控件作代码编辑器. 实际上我在HP_tk2中已经 ...

最新文章

  1. python是用什么语言开发的-专为人工智能和数据科学而生的Go语言,或将取代Python...
  2. OA办公系统的核心-工作流
  3. Redis源码剖析(十三)整数集合
  4. 限制input 内部字数
  5. c语言中锁的作用,C语言中的多线程死锁
  6. (转)Hibernate事务管理
  7. Linux配置Java环境变量 详解
  8. 身份证识别APP、H5端部署,助力疫情防控人员信息采集
  9. k8s之ovs-cni
  10. 解决eclipse在安装时工作空间出错问题的有效方法
  11. 区块链安全分析:安全是重中之重,需要各方企业共同守护 | 新加坡Meetup
  12. 企业短信防火墙应用-爱侬「北京市家政服务龙头企业」
  13. 互联网医疗的千姿百态:火热、亏损、巨头亲赖
  14. IE常见问题解决方案大全
  15. 易语言助手安装后 导致易语言一打开就卡死的解决
  16. 菜谱小程序_喝鸡尾酒食谱应用程序
  17. 软件开发就像歌曲制作,我的岗位相当于乐器伴奏
  18. C++视频会议demo源码下载
  19. webshell客户端流量特征
  20. Java JDBC连接SQL Server2005错误:通过端口 1433 连接到主机 localhost 的 TCP/IP 连接失败(转载)...

热门文章

  1. 菲姐游泳(python)
  2. 关于MediaCoder使用过程问题整理
  3. Android--进程常驻
  4. S32K1xx 固件更新
  5. Python类型判断
  6. mysql如何避免脏读_mysql避免脏读
  7. 2、数据库系统是什么?它由哪几部分组成?
  8. Office文档背景变成黑色 - 解决方案
  9. 114啦网址导航1.13版如何修改LOGO大小-【超级简单】。
  10. Linux之文件与文件系统的压缩