用pygame做了个基本的场景,通过键盘可以控制干扰机的前进和转向,从而观察干扰机干扰范围的变化。

需要图片素材的在这里下载:图片素材

(制作不易,请点个关注吧)

效果:

pygame 电子战模拟

代码:

import pygame,sys,math# 1.初始化操作
pygame.init()# 2.创建游戏窗口
window_size_width = 1807
window_size_height = 826
window = pygame.display.set_mode((window_size_width,window_size_height))
window.fill((255,255,255))  # 设置背景颜色
background=pygame.image.load("resource/images/map.png")
background_transfrom = pygame.transform.scale(background,(window_size_width,window_size_height))
window.blit(background_transfrom,(0,0))  # 参数:渲染对象,坐标
pygame.display.flip()  # 第一次刷新# 设置游戏标题
pygame.display.set_caption('电子战模拟')# 画矩形
pygame.draw.rect(window,(0,255,0),(50,400,1700,400),2)  # 参数:画在哪个对象上,线的颜色,矩形范围(横坐标,纵坐标,宽度,高度),线宽# 创建字体对象
font = pygame.font.Font("C:/Windows/Fonts/STXINWEI.TTF",30)  # 参数:字体文件,字体大小
# 创建文字对象
text = font.render("运8干扰机活动范围",True,(255,0,0))  # 参数:文字内容,True,文字颜色,背景颜色
# 缩放和旋转
text_rotozoom = pygame.transform.rotozoom(text, 0, 1)  # 参数:目标,旋转角度,缩放比例
w,h = text_rotozoom.get_size()  # 获取文字大小
window.blit(text_rotozoom,(window_size_width-350,window_size_height-400 ))# 放雷达车1
leida1 = pygame.image.load("resource/images/雷达车.png")
leida1_x, leida1_y = 930,100  # 雷达初始坐标
leida1_rotozoom = pygame.transform.rotozoom(leida1, 0, 0.05)  # 旋转、缩放
window.blit(leida1_rotozoom,(leida1_x, leida1_y))  # 显示
pygame.draw.circle(window,(0,0,255),(leida1_x, leida1_y),220,0)   # 雷达1辐射范围# 放雷达车2
leida2 = pygame.image.load("resource/images/雷达车.png")
leida2_x, leida2_y = 800,90  # 雷达初始坐标
leida2_rotozoom = pygame.transform.rotozoom(leida2, 0, 0.05)  # 旋转、缩放
window.blit(leida2_rotozoom,(leida2_x, leida2_y))  # 显示
pygame.draw.circle(window,(0,0,255),(leida2_x, leida2_y),220,0)   # 雷达2辐射范围# 放置歼20
plane_j20 = pygame.image.load("resource/images/歼20.png")
plane_j20_x, plane_j20_y = 930,560  # 歼20初始坐标
plane_j20_r = 290  # 飞机初始旋转角度
plane_j20_v = 0.1  # 飞机行驶的速度
plane_j20_rotozoom = pygame.transform.rotozoom(plane_j20, plane_j20_r, 0.2)  # 旋转、缩放
window.blit(plane_j20_rotozoom,(plane_j20_x, plane_j20_y))  # 显示# 放运8干扰机
plane = pygame.image.load("resource/images/运8干扰机.png")
plane_x, plane_y = 1200,600  # 飞机初始坐标
plane_r = 270  # 飞机初始旋转角度
r = plane_r - 270  # 初始角
add_r = 1  # 每次转向增加的角度
plane_v = 1  # 飞机行驶的速度
is_move = False  # 是否移动
is_turn = False  # 是否转向
plane_rotozoom = pygame.transform.rotozoom(plane, plane_r, 0.3)  # 旋转、缩放
window.blit(plane_rotozoom,(plane_x, plane_y))  # 显示
pygame.draw.circle(window,(0,0,255),(plane_x, plane_y),500,1)   # 运8干扰范围pygame.display.update()  # 刷新# 3.让游戏保持一直运行的状态while True:window.blit(background_transfrom, (0, 0))  # 刷新背景window.blit(text_rotozoom, (window_size_width - 350, window_size_height - 400))  # 刷新文字window.blit(plane_rotozoom, (plane_x, plane_y))  # 刷新运8干扰机window.blit(leida1_rotozoom, (leida1_x, leida1_y))  # 刷新雷达1pygame.draw.circle(window, (255, 0, 0), (leida1_x, leida1_y), 220, 1)  # 雷达1辐射范围window.blit(leida2_rotozoom, (leida2_x, leida2_y))  # 刷新雷达2pygame.draw.circle(window, (255, 0, 0), (leida2_x, leida2_y), 220, 1)  # 雷达2辐射范围pygame.draw.circle(window, (0, 0, 255), (plane_x, plane_y), 500, 1)  # 运8干扰范围# 画线points = []for y in range(120, 560, 10):x = 650 + y / 2points.append([x, y])for i in range(0, len(points), 2):pygame.draw.line(window, (255, 0, 0), (points[i][0], points[i][1]), (points[i + 1][0], points[i + 1][1]),3)  # 参数:画在哪个对象上,颜色,线的起点,线的终点if plane_j20_y >  120:plane_j20_y = plane_j20_y - 2*plane_j20_vplane_j20_x = plane_j20_x - 1*plane_j20_velse:plane_j20_x, plane_j20_y = 930, 560window.blit(plane_j20_rotozoom, (plane_j20_x, plane_j20_y))# 画矩形pygame.draw.rect(window, (0, 255, 0), (50, 400, 1700, 400), 2)  # 参数:画在哪个对象上,线的颜色,矩形范围(横坐标,纵坐标,宽度,高度),线宽if is_move == True:if 90 > r >= 0:plane_y = plane_y - plane_v * math.cos((r) * (math.pi / 180))plane_x = plane_x - plane_v * math.sin((r) * (math.pi / 180))elif 180 > r >= 90:plane_y = plane_y - plane_v * math.cos((r) * (math.pi / 180))plane_x = plane_x - plane_v * math.sin((r) * (math.pi / 180))elif 270 > r >= 180:plane_y = plane_y - plane_v * math.cos((r) * (math.pi / 180))plane_x = plane_x - plane_v * math.sin((r) * (math.pi / 180))elif 360 > r >= 270:plane_y = plane_y - plane_v * math.cos((r) * (math.pi / 180))plane_x = plane_x - plane_v * math.sin((r) * (math.pi / 180))window.blit(plane_rotozoom, (plane_x, plane_y))pygame.display.update()if is_turn == True:print("当前的旋转角度:{}".format(r))r = r + add_rif r > 360:r = r - 360elif r < 0:r = r + 360plane_rotozoom = pygame.transform.rotozoom(plane, r + 270, 0.3)window.blit(plane_rotozoom, (plane_x, plane_y))pygame.display.update()# 4.检测事件for event in pygame.event.get():# 对事件作出相应的响应if event.type == pygame.QUIT:  # 如果点击了关闭按钮sys.exit()if event.type == pygame.KEYDOWN:  # 键盘按下if chr(event.key) == "q":  # 逆时针旋转is_turn = Trueelif chr(event.key) == "w":  # 向指定角度方向前进is_move = Trueelif event.type == pygame.KEYUP:is_move = Falseis_turn = Falsepygame.display.update()

pygame 电子战模拟效果相关推荐

  1. 一款jQuery实现重力弹动模拟效果特效,弹弹弹,弹走IE6

    2019独角兽企业重金招聘Python工程师标准>>> 一款jQuery实现重力弹动模拟效果特效 鼠标经过两块黑色div中间的红色线时,下方的黑快会突然掉落, 并在掉落地上那一刻出现 ...

  2. Leaflet中使用Leaflet.Polyline.SnakeAnim插件实现水流模拟效果

    场景 Leaflet快速入门与加载OSM显示地图: Leaflet快速入门与加载OSM显示地图_霸道流氓气质的博客-CSDN博客_leaflet 显示地图 在上面的基础上怎样实现水流模拟效果. 水流模 ...

  3. unity气流模拟效果

    机房气流模拟效果 参考 效果展示: 资源链接:unity气流模拟效果-Unity3D文档类资源-CSDN下载

  4. 算法交易与程序化交易:VWAP策略模拟效果及未来扩展

    算法交易与程序化交易:VWAP策略模拟效果及未来扩展 http://finance.QQ.com 2009年09月21日17:05 腾讯财经特约 我要评论(0) 随着我国证券市场的发展,机构投资者逐步 ...

  5. Unity3D--物体间引力模拟效果

    在真实的宇宙中,小星球总是被大星球吸引过去,其实就是一种力的作用,在Unity3D中如何来模拟这种效果呢? 1.在Unity场景中建两个球体,当然,球的大小无所谓,为了区别,我们将之称为大球,小球. ...

  6. cesium实现日照阴影模拟效果

    文章目录 1.实现效果 2.实现方法 2.1实现思路 2.2核心代码 Cesium实战系列文章总目录: 传送门 1.实现效果 2.实现方法 2.1实现思路 Cesium中自带有日照阴影效果,所以只需要 ...

  7. matlab sim模拟效果,Simsmart动态仿真模拟软件在高校使用介绍

    4.外围搭配软件包括: ①仿DCS软件 仿DCS控制软件应与实际DCS控制软件的界面.功能和操作保持一致.包括画面形式.操作方式.报警方式.趋势功能.界面功能等. 为了便于培训,现场操作的画面需与DC ...

  8. (包含重力矢量)Pygame粒子模拟

    半成品,目前速度不能修改,另外某些状况下路径会比较奇怪,因为没有速度计算,包含了重力矢量,可以修改重力方向 import pygame as pg import math import time im ...

  9. 模拟计算机病毒效果 js,用户登录模拟效果(原生js实现)

    需求: 当用户名和密码获得焦点时,文本框背景颜色变黄,失去焦点时背景颜色恢复, 然后判断是否为空,如果为空,则给出提示,同时文本框继续获得焦点.如图所示. 单击登录按钮后,判断用户名(admin)和密 ...

最新文章

  1. 14.查找概论与顺序查找
  2. 继谷歌苹果微软也被曝人工收集用户语音数据,微软公开承认了
  3. iOSunicode转中文
  4. 网络推广外包中如何让网络推广外包专员充分运用网站的市场价值?
  5. DNS主从服务器不同步的解决方法
  6. expdp / impdp 用法详解
  7. Springboot里输出的html里包含script标签页会怎样
  8. 一篇小文带你走进RabbitMQ的世界
  9. 从Flutter路由报错引申BuildContext详解
  10. rz/sz安装与乱码问题
  11. 洛谷P2870 [USACO07DEC]最佳牛线,黄金Best Cow Line, Gold
  12. ftp中转服务器,bat实现的ftp中转
  13. Android studio底部Logcat模块不见了以及Locat日志中包含了很多无用的错误日志筛选方法
  14. 一支笔的测试点_软件测试面试:如何测试一支笔(铅笔,钢笔,中性笔)
  15. 让python飞:形象理解python os模块、内存硬盘、字节字符、文件读写复制
  16. ffmpeg实现变速播放的两种方案
  17. slam中的相机相关
  18. 18天精读掌握《费曼物理学讲义卷一》 第10天 2019/6/26
  19. vim资源很全的一个网站
  20. 微心情:蝴蝶为花碎,花却随风飞

热门文章

  1. Vidmore视频转换器的几种编辑功能分享给大家
  2. 8个问题读懂Yuga Labs将发行的比特币NFT TwelveFold
  3. 何为文档加密系统,有什么作用?
  4. BS 2782 TPaTPb英国扩散板阻燃测试
  5. mysql函数IFNULL使用的注意事项(必看!!)
  6. NOIP2017的流水账
  7. 任天堂社长访谈《时之笛3D》,宫本大神亲自讲述开发趣事
  8. 高速HDI电路板的设计挑战
  9. 【Netty】第二章 网络编程和 IO 概念剖析
  10. ms和us级延时函数的实现