0114編程-掃地智能體的tkiner版本

點(diǎn)擊這里進(jìn)入人工智能嘚吧嘚目錄宗挥,觀看全部文章


這篇是對(duì)之前0109編程-基于Plotly實(shí)現(xiàn)的簡單智能體思路文章
掃地bot智能體的修改和改進(jìn):

  • 使用tkiner生成窗體契耿,每按空格鍵行走一步螃征。
  • 實(shí)時(shí)顯示行走步數(shù)和剩余灰塵數(shù)量盯滚。
  • 使用了面向?qū)ο蟮姆绞蕉x灰塵和機(jī)器人淌山。
  • 添加了far參數(shù)用來增強(qiáng)智能體在上下左右四個(gè)方向的視野泼疑,修改這個(gè)參數(shù)可以有效增強(qiáng)掃地效率退渗。

以下是完整代碼(部分代碼和思路來自蔡媛媛同學(xué))个粱。

from tkinter import *
import random
import time

dusts_li = [] #灰塵實(shí)例的列表,dust{x,y,id,color,canvas,update()}

#定義Robot類
class Robot:
    def __init__(self, canvas, color,x,y):
        self.canvas = canvas
        self.color=color
        self.id = canvas.create_oval(
            x - 25, y - 25, x + 25, y + 25, fill=color, outline=color)
        self.x = x
        self.y = y
    def update(self): #更新自身的位置都许。刪除舊圖形嫂冻,添加新圖形。
        self.canvas.delete(self.id)
        self.id = canvas.create_oval(
            self.x - 25, self.y - 25, self.x + 25, self.y + 25, fill=self.color, outline=self.color)

#定義Dust類
class Dust:
    def __init__(self, canvas, color, x, y):
        self.canvas = canvas
        self.id = canvas.create_oval(
            x - 5, y - 5, x + 5, y + 5, fill=color, outline=color)
        self.x = x
        self.y = y

#獲取近鄰四格的灰塵索引
def getNearDusts(bot):
    res=[[] for i in range(5)] #左上右下中
    far=200 #robot的視野長度
    for d in dusts_li: #對(duì)100個(gè)灰塵實(shí)例分別放入左上右下中四個(gè)列表
        if bot.x-25-far<=d.x<bot.x-25 and bot.y-25<=d.y<bot.y+25:
            res[0].append(d)
        elif bot.x-25<=d.x<bot.x+25 and bot.y+25<=d.y<bot.y+25+far:
            res[1].append(d)
        elif bot.x+25<=d.x<bot.x+25+far and bot.y-25<=d.y<bot.y+25:
            res[2].append(d)
        elif bot.x-25<=d.x<bot.x+25 and bot.y-25-far<=d.y<bot.y-25:
            res[3].append(d)
        elif bot.x-25<=d.x<bot.x+25 and bot.y-25<=d.y<bot.y+25:
            res[4].append(d)
    return res  #返回分組后的列表[[d11,d4],[],[d2],[],[d5]]

#定義reset方法避免出范圍
def reset(n):
    if n<25:
        n=25
    if n>475:
        n=475 
    return n

step=0
#移動(dòng)bot方法
def moveBot(event):
    idli = getNearDusts(robot) #獲得分組后實(shí)例列表[[d11,d4],[],[d2,d7],[],[d5]]
    countli = [len(d) for d in idli[:4]] #獲得分組計(jì)數(shù)列表[2,0,2,0]
    maxcount = max(countli) #最高值2

    #尋找方向睛低,多個(gè)方向上數(shù)量相同情況下隨機(jī),否則可能卡在死角不動(dòng)
    nli = [n for n in range(len(countli)) if countli[n] == maxcount] #最高值索引的列表[0,2]
    n = nli[random.randint(0, len(nli) - 1)] #隨機(jī)一個(gè),0或者2钱雷,與idli匹配骂铁,表示左上右下中

    px=robot.x
    py=robot.y
    
    #移動(dòng)robot數(shù)據(jù)
    if n == 0:
        robot.x = reset(robot.x - 50)
    elif n == 1:
        robot.y = reset(robot.y + 50)
    elif n == 2:
        robot.x = reset(robot.x + 50)
    elif n == 3:
        robot.y = reset(robot.y - 50)

    #吸取中位置的塵土
    for dst in idli[4]:
        dusts_li.remove(dst)
        canvas.delete(dst.id)

    #移動(dòng)robot
    robot.update()
    
    #計(jì)數(shù)
    global step
    if robot.x!=px or robot.y!=py:
        step+=1
    retext()

#tkiner初始化
root = Tk()
root.title("Robot")
root.geometry("500x500+1000+100")

canvas = Canvas(root, width=500, height=500, bd=0, highlightthickness=0)

#生成灰塵
for i in range(100):
    dust = Dust(canvas, "grey", random.randint(0, 490), random.randint(0, 490))
    botpos = canvas.coords(dust.id)
    dusts_li.append(dust)

#初始化bot
robot = Robot(canvas, "red", random.randint(0, 475), random.randint(0, 475))

#狀態(tài)文字
state = {}

def retext():
    if 'id' in state:
        canvas.delete(state['id'])
    state['id'] = canvas.create_text(
        (100, 20), text='STEP:{}  LEFT:{}'.format(step, len(dusts_li)))


retext()

#創(chuàng)建界面
canvas.bind_all("<space>", moveBot)
canvas.pack()
root.mainloop()


點(diǎn)擊這里進(jìn)入人工智能DBD嘚吧嘚目錄,觀看全部文章


每個(gè)人的智能新時(shí)代

如果您發(fā)現(xiàn)文章錯(cuò)誤罩抗,請(qǐng)不吝留言指正拉庵;
如果您覺得有用,請(qǐng)點(diǎn)喜歡套蒂;
如果您覺得很有用名段,歡迎轉(zhuǎn)載~


END

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市伸辟,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌馍刮,老刑警劉巖信夫,帶你破解...
    沈念sama閱讀 222,729評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異卡啰,居然都是意外死亡静稻,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,226評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門匈辱,熙熙樓的掌柜王于貴愁眉苦臉地迎上來振湾,“玉大人,你說我怎么就攤上這事亡脸⊙禾拢” “怎么了?”我有些...
    開封第一講書人閱讀 169,461評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵浅碾,是天一觀的道長大州。 經(jīng)常有香客問我,道長垂谢,這世上最難降的妖魔是什么厦画? 我笑而不...
    開封第一講書人閱讀 60,135評(píng)論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮滥朱,結(jié)果婚禮上根暑,老公的妹妹穿的比我還像新娘。我一直安慰自己徙邻,他們只是感情好排嫌,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,130評(píng)論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著鹃栽,像睡著了一般躏率。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上民鼓,一...
    開封第一講書人閱讀 52,736評(píng)論 1 312
  • 那天薇芝,我揣著相機(jī)與錄音,去河邊找鬼丰嘉。 笑死夯到,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的饮亏。 我是一名探鬼主播耍贾,決...
    沈念sama閱讀 41,179評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼路幸!你這毒婦竟也來了荐开?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,124評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤简肴,失蹤者是張志新(化名)和其女友劉穎晃听,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體砰识,經(jīng)...
    沈念sama閱讀 46,657評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡能扒,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,723評(píng)論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了辫狼。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片初斑。...
    茶點(diǎn)故事閱讀 40,872評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖膨处,靈堂內(nèi)的尸體忽然破棺而出见秤,到底是詐尸還是另有隱情,我是刑警寧澤真椿,帶...
    沈念sama閱讀 36,533評(píng)論 5 351
  • 正文 年R本政府宣布秦叛,位于F島的核電站,受9級(jí)特大地震影響瀑粥,放射性物質(zhì)發(fā)生泄漏挣跋。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,213評(píng)論 3 336
  • 文/蒙蒙 一狞换、第九天 我趴在偏房一處隱蔽的房頂上張望避咆。 院中可真熱鬧,春花似錦修噪、人聲如沸查库。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,700評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽樊销。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間围苫,已是汗流浹背裤园。 一陣腳步聲響...
    開封第一講書人閱讀 33,819評(píng)論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留剂府,地道東北人拧揽。 一個(gè)月前我還...
    沈念sama閱讀 49,304評(píng)論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像腺占,于是被迫代替她去往敵國和親淤袜。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,876評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容

  • 點(diǎn)擊這里進(jìn)入人工智能嘚吧嘚目錄衰伯,觀看全部文章 人工智能是研究什么的铡羡?—— 智能體Agent。 研究智能體的什么意鲸?—...
    zhyuzh3d閱讀 4,281評(píng)論 0 4
  • 點(diǎn)擊這里進(jìn)入人工智能嘚吧嘚目錄蓖墅,觀看全部文章 Ploly可以在Jupyter Notebook中顯示復(fù)雜的圖表,甚...
    zhyuzh3d閱讀 3,226評(píng)論 0 2
  • 今天是什么日子 起床:8:00 就寢:10:00 天氣:陰 心情:好 任務(wù)清單 昨日完成的任務(wù)临扮,最重要的三件事:1...
    臺(tái)州韓瑛閱讀 119評(píng)論 0 0
  • 愛自己 Day 2 今天是重陽论矾,又名敬老節(jié),感謝婆婆-孩子的奶奶辛苦為我們守店做飯杆勇,讓我們可以安心工作贪壳,隨意出門辦...
    Janewei閱讀 140評(píng)論 0 0
  • 幾年前,我在《南方周末》上看過一篇關(guān)于印度火車的報(bào)導(dǎo)蚜退,名字叫做《佛祖在火車上》闰靴。作者說,印度的火車上彌漫著一種“...
    superkaixin閱讀 167評(píng)論 0 0