实战IT培训机构_黄色激情网站_IT培训班选大学生IT技术培训中心_黄色激情视频网站_中公优就业

400-650-7353
您所在的位置:首頁 > IT干貨資料 > python > 【Python基礎知識】飛機大戰——玩家飛機類

【Python基礎知識】飛機大戰——玩家飛機類

  • 來源:優就業
  • 2021-09-28 10:24:08
  • 閱讀()
  • 分享
  • 手機端入口

1 玩家飛機類的屬性

飛機大戰游戲首先要設計的角色是玩家飛機,本小節介紹玩家飛機類涉及的屬性。

實例屬性中要設置一個游戲窗口屬性,該屬性在類初始化方法中設置。

玩家飛機將會展示一個飛機的圖片,因此,需要一個image屬性保存本地的正常狀態的玩家飛機圖片路徑,根據這個路徑加載圖片。

玩家飛機可能會被敵機擊毀,因此,為玩家飛機定義一組保存本地的玩家飛機爆炸圖片路徑的列表,根據這個列表中的路徑加載圖片,并作為玩家飛機類的屬性。

玩家飛機有一個初始的位置,包含x坐標和y坐標,這也是玩家飛機類的兩個屬性。

玩家飛機類中定義一個子彈列表屬性,用于存放子彈對象。

玩家飛機類中定義一個圖片下標變量作為類的屬性,用于控制逐幀將玩家飛機爆炸圖片疊加到背景上。

玩家飛機類中定義一個標識玩家飛機是否爆炸的布爾變量作為類的屬性。

玩家飛機類中定義一個碰撞列表屬性,其中定義兩個字典,設置碰撞有效區域。

創建玩家飛機類HeroPlan,類中定義玩家飛機的屬性,代碼如下:

  1. class HeroPlan(): 
  2.     # 正常狀態的玩家飛機圖片 
  3.     image = ['./img/hero.gif''./img/hero2.png''./img/hero2.png'
  4.     # 爆炸玩家飛機圖片 
  5.     bomb_img = ['./img/hero_blowup_n1.png'
  6.                 './img/hero_blowup_n2.png'
  7.                 './img/hero_blowup_n3.png'
  8.                 './img/hero_blowup_n4.png'
  9.     x = 190   # 初始位置x軸坐標 
  10.     y = 528   # 初始位置y軸坐標 
  11.     biu_list = []   # 玩家飛機子彈列表 
  12.     img_index = 0   # 圖片下標 
  13.     is_bomb = False   # 標識玩家飛機是否爆炸 
  14.     # 碰撞有效區域[{范圍1}, {范圍2}] 
  15.     blast = [{'x': (3565), 'y': (040)}, {'x': (0100), 'y': (40100)}] 

2 玩家飛機類的方法

首先定義玩家飛機類的初始化方法,將全局定義的游戲窗口變量賦值給類的實例屬性,代碼如下:

  1. def __init__(self, surface): 
  2.     self.surface = surface 

玩家飛機類中包含以下方法。

(1)hero_display()方法

玩家飛機類中第一個重要方法為hero_display()。該方法的主要功能是在游戲窗口上繪制玩家飛機。

該方法中首先檢測一個玩家飛機是否爆炸實例屬性is_bomb。如果玩家飛機沒有被擊中,即值為False,那么在設定的坐標位置加載正常狀態的玩家飛機圖片,并繪制到游戲窗口上。如果玩家飛機被敵機擊中,即值為True,那么先檢測爆炸玩家飛機圖片是否顯示到最后一張,若顯示到最后一張,則調用結束畫面并退出游戲,否則根據bomb_img中保存的圖片路徑逐一加載圖片。由于bomb_img是一個列表,保存了玩家飛機爆炸動畫的一系列圖片的本地鏈接,因此需要一個img_index,游戲循環更新時,根據img_index加載合適的圖片,并疊加到游戲窗口中。

hero_display()方法中還有一個處理子彈的for循環。biu_list列表中沒有項時,就不執行這個for循環。如果玩家按下空格鍵,并且biu_list列表中有項時,在游戲窗口上顯示子彈圖片,然后移動子彈圖片,產生發射子彈的效果。當子彈圖片移動超過了游戲窗口時,刪除biu_list列表中的所有項。

hero_display()方法在游戲循環中更新,繪制出玩家飛機和子彈,以及玩家飛機被擊中后所執行的一系列操作。

hero_display()方法的代碼如下:

  1. def hero_display(self): 
  2.     # 檢查玩家飛機是否爆炸 
  3.     if self.is_bomb == False
  4.         self.surface.blit(pygame.image.load(self.image[self.img_index]), (self.x, self.y)) 
  5.     else
  6.         time.sleep(0.5
  7.         if self.img_index == len(self.bomb_img): 
  8.             end_screen_us() 
  9.             exit('游戲結束'
  10.         self.surface.blit(pygame.image.load(self.bomb_img[self.img_index]), (self.x, self.y)) 
  11.         self.img_index += 1   # 用于顯示圖片 
  12.  
  13.     for biu in self.biu_list:   # 在繪制完玩家飛機后,再繪制子彈 
  14.         biu.biu_diplay()   # 繪制子彈到游戲窗口 
  15.         biu.move_up()   # 移動子彈 
  16.         # 超出游戲窗口則刪除越界子彈 
  17.         self.biu_list.remove(biu) if biu.y < 0 else '' 

(2)fire()方法

fire()方法先創建子彈實例,再將這個實例存入biu_list列表之中。biu_list作為玩家飛機類的實例屬性,在hero_display()方法中被使用。

fire()方法的代碼如下:

  1. def fire(self): 
  2.     # 存一顆子彈進入子彈列表 
  3.     self.biu_list.append(Biu(self.surface, self.x, self.y)) 

(3)move_right()方法

move_right()方法對玩家飛機精靈的x坐標進行修改,對當前x坐標增加10,即右移,并限制玩家飛機的移動范圍,使其不能移出游戲窗口的右邊界。

move_right()方法的代碼如下:

  1. # 玩家飛機右移 
  2. def move_right(self): 
  3.     # 限制玩家飛機的移動范圍 
  4.     if self.x < 380
  5.         self.x += 10 

(4)move_left()方法

move_left()方法對玩家飛機精靈的x坐標進行修改,對當前x坐標減少10,即左移,并限制玩家飛機的移動范圍,使其不能移出游戲窗口的左邊界。

move_left()方法的代碼如下:

  1. # 玩家飛機左移 
  2. def move_left(self): 
  3.     # 限制玩家飛機的移動范圍 
  4.     if self.x > 0
  5.         self.x -= 10 

(5)bomb()方法

bomb()方法是玩家飛機被擊中后調用的方法。該方法設置玩家飛機類的實例屬性img_index為0;還設置玩家飛機類的實例屬性is_bomb為True,用于標識玩家飛機被擊中爆炸了。

bomb()方法的代碼如下:

  1. def bomb(self): 
  2.     self.img_index = 0 
  3.     self.is_bomb = True 

 

文章“【Python基礎知識】飛機大戰——玩家飛機類”已幫助

更多內容

>>本文地址:http://www.jecan.cn/zhuanye/2021/70183.html

THE END  

聲明:本站稿件版權均屬中公教育優就業所有,未經許可不得擅自轉載。

1 您的年齡

2 您的學歷

3 您更想做哪個方向的工作?

獲取測試結果
  • 大前端大前端
  • 大數據大數據
  • 互聯網營銷互聯網營銷
  • JavaJava
  • Linux云計算Linux
  • Python+人工智能Python
  • 嵌入式物聯網嵌入式
  • 全域電商運營全域電商運營
  • 軟件測試軟件測試
  • 室內設計室內設計
  • 平面設計平面設計
  • 電商設計電商設計
  • 網頁設計網頁設計
  • 全鏈路UI/UE設計UI設計
  • VR/AR游戲開發VR/AR
  • 網絡安全網絡安全
  • 新媒體與短視頻運營新媒體
  • 直播帶貨直播帶貨
  • 智能機器人軟件開發智能機器人
 

快速通道fast track

近期開班時間TIME

主站蜘蛛池模板: 事迹材料_个人事迹名人励志故事 学生作文网_中小学生作文大全与写作指导 | 楼承板设备-楼承板成型机-免浇筑楼承板机器厂家-捡来 | 涡街流量计_LUGB智能管道式高温防爆蒸汽温压补偿计量表-江苏凯铭仪表有限公司 | 雨燕360体育免费直播_雨燕360免费NBA直播_NBA篮球高清直播无插件-雨燕360体育直播 | 金属回收_废铜废铁回收_边角料回收_废不锈钢回收_废旧电缆线回收-广东益夫金属回收公司 | 99文库_实习生实用的范文资料文库站| uv固化机-丝印uv机-工业烤箱-五金蚀刻机-分拣输送机 - 保定市丰辉机械设备制造有限公司 | 电渗析,废酸回收,双极膜-山东天维膜技术有限公司 | 罐体电伴热工程-消防管道电伴热带厂家-山东沃安电气 | 橡胶接头_橡胶软接头_套管伸缩器_管道伸缩器厂家-巩义市远大供水材料有限公司 | 远程会诊系统-手术示教系统【林之硕】医院远程医疗平台 | 高考志愿规划师_高考规划师_高考培训师_高报师_升学规划师_高考志愿规划师培训认证机构「向阳生涯」 | 撕碎机_轮胎破碎机_粉碎机_回收生产线厂家_东莞华达机械有限公司 | 武汉高温老化房,恒温恒湿试验箱,冷热冲击试验箱-武汉安德信检测设备有限公司 | 杭州中央空调维修_冷却塔/新风机柜/热水器/锅炉除垢清洗_除垢剂_风机盘管_冷凝器清洗-杭州亿诺能源有限公司 | 沥青车辙成型机-车托式混凝土取芯机-混凝土塑料试模|鑫高仪器 | 不锈钢/气体/液体玻璃转子流量计(防腐,选型,规格)-常州天晟热工仪表有限公司【官网】 | RTO换向阀_VOC高温阀门_加热炉切断阀_双偏心软密封蝶阀_煤气蝶阀_提升阀-湖北霍科德阀门有限公司 | 南京种植牙医院【官方挂号】_南京治疗种植牙医院那个好_南京看种植牙哪里好_南京茀莱堡口腔医院 尼龙PA610树脂,尼龙PA612树脂,尼龙PA1010树脂,透明尼龙-谷骐科技【官网】 | 防火窗_耐火窗_防火门厂家_防火卷帘门-重庆三乐门业有限公司 | 圣才学习网-考研考证学习平台,提供万种考研考证电子书、题库、视频课程等考试资料 | 自清洗过滤器_全自动过滤器_全自动反冲洗过滤器_量子过滤器-滑漮滴 | Eiafans.com_环评爱好者 环评网|环评论坛|环评报告公示网|竣工环保验收公示网|环保验收报告公示网|环保自主验收公示|环评公示网|环保公示网|注册环评工程师|环境影响评价|环评师|规划环评|环评报告|环评考试网|环评论坛 - Powered by Discuz! | 防爆电机_ybx3系列电机_河南省南洋防爆电机有限公司 | 活性炭-果壳木质煤质柱状粉状蜂窝活性炭厂家价格多少钱 | 24位ADC|8位MCU-芯易德科技有限公司 | 电梯装饰-北京万达中意电梯装饰有限公司 | 车间除尘设备,VOCs废气处理,工业涂装流水线,伸缩式喷漆房,自动喷砂房,沸石转轮浓缩吸附,机器人喷粉线-山东创杰智慧 | 数控走心机-双主轴走心机厂家-南京建克| 锤式粉碎机,医药粉碎机,锥式粉碎机-无锡市迪麦森机械制造有限公司 | 空气弹簧|橡胶气囊|橡胶空气弹簧-上海松夏减震器有限公司 | 安平县鑫川金属丝网制品有限公司,声屏障,高速声屏障,百叶孔声屏障,大弧形声屏障,凹凸穿孔声屏障,铁路声屏障,顶部弧形声屏障,玻璃钢吸音板 | 青岛代理记账_青岛李沧代理记账公司_青岛崂山代理记账一个月多少钱_青岛德辉财税事务所官网 | 无负压供水设备,消防稳压供水设备-淄博创辉供水设备有限公司 | 武汉刮刮奖_刮刮卡印刷厂_为企业提供门票印刷_武汉合格证印刷_现金劵代金券印刷制作 - 武汉泽雅印刷有限公司 | 碳化硅,氮化硅,冰晶石,绢云母,氟化铝,白刚玉,棕刚玉,石墨,铝粉,铁粉,金属硅粉,金属铝粉,氧化铝粉,硅微粉,蓝晶石,红柱石,莫来石,粉煤灰,三聚磷酸钠,六偏磷酸钠,硫酸镁-皓泉新材料 | NMRV减速机|铝合金减速机|蜗轮蜗杆减速机|NMRV减速机厂家-东莞市台机减速机有限公司 | 便携式高压氧舱-微压氧舱-核生化洗消系统-公众洗消站-洗消帐篷-北京利盟救援 | 引领中高档酒店加盟_含舍·美素酒店品牌官网 | led冷热冲击试验箱_LED高低温冲击试验箱_老化试验箱-爱佩百科 | 软启动器-上海能曼电气有限公司|