面向對象思想封裝狙擊手狙擊敵人

需求:狙擊手xxx使用xx槍,射擊敵人xxx,敵人生命值歸0,應聲倒下
分析設計類:

  1. 封裝狙擊手類 屬性: 名字 行為:撿槍   裝彈   射擊
  2. 封裝槍類 屬性: 型號 行為:射擊
  3. 封裝彈夾類 屬性:彈夾容量   存儲子彈的列表
  4. 封裝子彈類 屬性:傷害值    移動速度 行為:移動
  5. 封裝敵人類 屬性:名稱    生命值
 #狙擊手類
class Sniper:def __init__(self,name):self.name = name# self.gun = None#撿槍def pickupGun(self):gun = Gun('AWM')#給對象添加一個gun的屬性self.gun = gun#裝彈def loading(self):#創建一個彈容量為10的彈夾clip = Clip(10)for i in range(clip.capacity):bullet = Bullet()#循環裝子彈clip.bullet_list.append(bullet)#給你擁有的槍添加一個屬性self.gun.clip = clip#射擊敵人def shoot(self,enemy):print('{}瞄準{}進行射擊'.format(self.name,enemy.name))self.gun.shoot(enemy)
#槍類
class Gun:def __init__(self,type):self.type = type#槍的射擊功能def shoot(self,enemy):while enemy.hp > 0:# 將子彈從彈夾中移除bullet = self.clip.bullet_list.pop()enemy.hp -=  bullet.damageif enemy.hp <= 0:bullet.move()print('敵人{}應聲倒下'.format(enemy.name))
#彈夾類
class Clip:def __init__(self,capacity):#彈夾容量self.capacity = capacity#用來存儲子彈的列表self.bullet_list = []
#子彈類
class Bullet:def __init__(self):self.damage = 100self.speed = 1000def move(self):print('子彈以{}m/s向敵人'.format(self.speed))
#敵人類
class Enemy:def __init__(self,name,hp):self.name = nameself.hp = hp#創建狙擊手對象
sniper = Sniper('海豹突擊1號')
#狙擊手撿槍
sniper.pickupGun()
# print(dir(sniper))
# print(dir(sniper.gun))
#裝彈
sniper.loading()
# print(dir(sniper.gun))
# #打印狙擊手的槍的彈夾的子彈列表中的子彈
# print(sniper.gun.clip.bullet_list)
# #創建敵人對象
enemy = Enemy('小日本1',100)
#射擊
sniper.shoot(enemy)
print('槍中剩余子彈{}發'.format(len(sniper.gun.clip.bullet_list)))

轉載于:https://www.cnblogs.com/ilovepython/p/11068889.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/247849.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/247849.shtml
英文地址,請注明出處:http://en.pswp.cn/news/247849.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

JavaScript 字符串處理方法總結

變量從字符串轉換成int和float型 var weightincrease "2.5kg";undefinedparseInt(weightincrease);2parseFloat(weightincrease);2.5 字符串處理方法var words "魚神是個帥哥";undefinedwords.length6words.charAt(0);"魚"words.charAt(words.…

【js】vue 2.5.1 源碼學習(二) 策略合并

一、 整體思路1 首先是代碼的大體構造&#xff0c;先判斷引入代碼的環境&#xff0c;即對應amd 和cmd的處理2 vue_init 需要借助 initMinxin >>> // 初始化選項1: 規范 2: 合并策略。3 mergeOptions 選項合并 一個或者多個對象合并&#xff0c;并且生成一個…

解決公眾號的加載問題

相關組件內設置的方法&#xff08;方法可以多處組件運用&#xff09; <x-input on-change"changeinp" on-blur"temporaryRepair();" on-enter"temporaryRepair();" name"mobile" :show-clear"false" placeholder"…

JavaScript 數組處理方法總結

數組處理方法//定義數組var array [];undefined//查看類型typeof(array);"object"//往數組里添加數據array [first,second,third]["first", "second", "third"]//數組長度array.length3//索引array[0]"first"//添加數組新…

今天第一次開通blog

紀念第一次開通轉載于:https://www.cnblogs.com/struggle-star/p/10960491.html

前端設置,驗證碼登錄

<group class"shadow" gutter"0"><x-input v-model"mobileCaptcha" placeholder"請輸入手機驗證碼" class"weui-vcode" keyboard"number" :max"6"></x-input><button click"…

JQuery實現頁面跳轉

$(function(){ var pn $("#gotopagenum").val();//#gotopagenum是文本框的id屬性 location.href "NewList.aspx?pagenum"pn;//location.href實現客戶端頁面的跳轉 }); 今天我們就來說一說如何在jQuery中跳轉到另外一個網頁HTML。其實下面我列舉的幾…

pycharm安裝lxml

今天下午剛學爬蟲&#xff0c;要安好多庫的感覺&#xff0c;崩潰 requests 首先我們用pip安裝完成后&#xff0c;在pycharm里面還要導入進去&#xff0c;沒有的話是會報錯的 文件--設置--Project Interpreter 然后點擊pip進去&#xff0c;搜索requests&#xff0c;再安裝進去就…

JS生成動態表格并為每個單元格添加單擊事件的方法

<html><head><title>Demo</title><script>function getColumnDetail(column) {column.style.color "blue"; //將被點擊的單元格設置為藍色 alert(column.innerHTML); //彈出被點單元格里的內容 }<!--trLineNumber為動態表格行數&a…

6.1團隊第二階段沖刺(七)

燃盡圖&#xff1a; 任務板: 會議照片&#xff1a; 昨天完成了管理員對發布人的查詢功能&#xff0c;條件查詢功能以及一系列常用小功能 今天完成了功能說明部分及其那部分界面美化&#xff0c;所有界面的退出以及回到首頁的功能及首頁美化等 明天打算做信息分頁顯示&#xff0…

Jquery 獲取日期date()對象,jquerydate

Jquery 獲取日期date()對象&#xff0c;jquerydate 獲取JavaScript 的時間使用內置的Date函數完成 var mydate new Date(); mydate.getYear(); //獲取當前年份(2位) mydate.getFullYear(); //獲取完整的年份(4位,1970-????) mydate.getMonth(); //獲取當前月份(0-11,0代表…

redis的安裝和使用【2】redis的java操作

1、前提約束熟悉redis的命令行操作 https://www.jianshu.com/p/26f6e85e600f修改redis.conf# 配置綁定ip&#xff0c;作者機子為192.168.100.192&#xff0c;請讀者根據實際情況設置bind 192.168.100.192#非保護模式protected-mode no保存重啟 2、操作2.1 使用idea創建一個mave…

Vue多字段下的非空判斷(new Promise)

// 利用 ref 獲取相關組件中的數值checkInfo(){let Insured this.$refs.Insured.mastdata; //參保量let technology this.$refs.drugs.mastdata; //技術let business this.$refs.business.mastdata; //商務return new Promise((resolve,reject) > {if (!Insured.usern…

(function ( ){...})( ) IIFE 的原理

你需要明白 IIFE 的原理&#xff0c;我簡單說一下&#xff1a; function foo() {...} // 這是定義&#xff0c;Declaration&#xff1b;定義只是讓解釋器知道其存在&#xff0c;但是不會運行。foo(); // 這是語句&#xff0c;Statement&#xff1b;解釋…

內部類的用法

第十章 內部類 10.1如何定義內部類 如代碼10.1-1 所示 public class Parcel1 {public class Contents{private int value 0;public int getValue(){return value;}} } 這是一個很簡單的內部類定義方式,你可以直接把一個類至于另一個類的內部&#xff0c;這種定義Contents類的方…

在vue項目中使用樹形結構的穿梭框

先看一下最后的效果&#xff1a; 一個基于elementui的穿梭框組件&#xff1a;el-tree-transfer 第一步&#xff1a;安裝組件 npm install el-tree-transfer --save 第二步&#xff1a;寫代碼 // 使用樹形穿梭框組件<tree-transfer :title"title" :from_datafromDa…

導航跳轉后保持選中狀態 jquery高亮當前選中菜單

功能需求&#xff1a; 今天在寫一個站點需要用到在導航菜單點擊鏈接跳轉到新頁面后&#xff0c;高亮當前菜單樣式。 簡單的說&#xff0c;就是我點擊導航菜單中的一個欄目&#xff0c;跳轉到該欄目下&#xff0c;該欄目菜單也同時高亮&#xff08;可以是背景色也可以是背景圖片…

eacharts中國地圖省市區點擊顯示

1.安裝echarts.js 相關模塊 npm i echarts2. 在 main.js 文件中搭建全局 // 引入echarts import echarts from echarts Vue.prototype.$echarts echarts3.vue文件種引入相關文檔 import echarts from "echarts"; import "./china.js"; // 引入中國地圖…

CF2B The least round way(貪心+動規)

題目 CF2B The least round way 做法 后面\(0\)的個數&#xff0c;\(2\)和\(5\)是\(10\)分解質因數 則把方格中的每個數分解成\(2\)和\(5\)&#xff0c;對\(2\)和\(5\)求兩邊動規&#xff0c;得出最小值\(ansmin(num_2,num_5)\) 我們貪心地選擇最小值所對應的\(2\)或\(5\)&…

JS 中的return false的作用

在大多數情況下,為事件處理函數返回false,可以防止默認的事件行為. Return False 就相當于終止符,終止默認的事件行為&#xff0c;反之,Return True 就相當于執行符,執行終止默認的事件行為。 在js中return false的作用一般是用來取消默認動作的。比如你單擊一個鏈接除了觸發你…