棋盤中的思維(動手畫個象棋棋盤)

2021-02-23 中學生計算思維與實踐

今天看到群裡有老師發的學生turtle作品,畫了一個象棋棋盤,於是下意識的想了想應該怎麼畫,然後就非常強迫症的去編碼實現了一下,效果如下。

具體怎麼實現呢,分享一下我的笨辦法:

這裡為了我首先考慮以turtle默認的中心點作為棋盤的左上角分別向右向下畫,但是左邊和上邊的空白就太浪費了,為了美觀一點,我們把所有繪製過程整體平移,具體來說,都平移棋盤大小的一半,以實現居中效果。

2、畫棋盤線

1import turtle as t
2w,h=t.screensize()
3print(w,h)
4drawLine=t.Turtle()
5
6#畫橫線
7for i in range(10):
8    drawLine.pu()
9    drawLine.goto(-200,i*(-50)+225)
10    drawLine.pd()
11    drawLine.fd(8*50)
12
13#畫豎線
14drawLine.right(90)
15for i in range(9):   
16    drawLine.pu()
17    drawLine.goto(i*50-200,225)
18    drawLine.pd()
19    if 0<i<8:
20        drawLine.fd(4*50)
21        drawLine.pu()
22        drawLine.fd(50)
23        drawLine.pd()
24        drawLine.fd(4*50)
25    else:
26        drawLine.fd(9*50)
27#畫斜線        
28def drawBias(ang,x,y):        
29    drawLine.seth(ang)
30    drawLine.pu()
31    drawLine.goto(x,y)
32    drawLine.pd()
33    drawLine.fd(142)
34
35drawBias(-45,150-200,225)
36drawBias(-135,250-200,225)
37drawBias(-45,150-200,225-7*50)
38drawBias(-135,250-200,225-7*50)

這裡的基本思想就是循環畫線,注意坐標間隔為50,豎向該跳過的短線部分單獨處理。

為實現圖形居中,需要簡單的計算:

棋盤高50*9=450,要想上下居中,需要上抬225。

棋盤寬50*8=400,要想左右居中,需要左移200。

畫斜線部分,歸納成函數:

斜邊長度一樣,只需要賦予角度和起點。

效果如下:

1import turtle as t
2w,h=t.screensize()
3drawLine=t.Turtle()#畫線畫筆
4drawChess=t.Turtle()#畫棋子畫筆
5
6#畫線部分代碼,同上,此處略去
7
8#畫棋子函數,注意字體顏色的區分,圓圈輪廓和填充同色
9def putChess(word,x,y,j):
10    drawChess.color("#ccc")
11    drawChess.pu()
12    drawChess.goto(x,y)
13    drawChess.pd()
14    drawChess.fillcolor("#ccc")
15    drawChess.begin_fill()
16    drawChess.circle(16)
17    drawChess.end_fill()
18    if j>5:
19        drawChess.color("red")
20    else:
21        drawChess.color("green")
22    drawChess.write(word, align="center", 
23    font=("Arial", 20, "normal"))
24
25#寫字函數,利用對稱節省部分代碼,j代表行序號
26def drawPart(words,j):    
27    words+=words[::-1][1:]#翻轉過來綴在後面湊一行
28    for i in range(len(words)):
29        if words[i]!="":#有字才寫
30            putChess(words[i],-200+50*i,j*(-50)+225-16,j)
31
32drawPart(["車","馬","象","仕","將"],0)
33drawPart(["","炮","","",""],2)
34drawPart(["卒","","卒","","卒"],3)
35
36drawPart(["車","馬","相","士","帥"],9)
37drawPart(["","炮","","",""],7)
38drawPart(["兵","","兵","","兵"],6)

總的來說,雖然知識的實現工具是turtle,比較簡單。但是承載的思維,還是有一點的:分層分步思想,代碼優化策略,其實都是計算思維的體現。初中小學階段,學生學會的turtle,在高中階段作為思維的訓練工具,還是不錯的。除了本案例外,turtle還可用於讓學生體驗遞歸畫樹等其它思維案例。以上就是我寫的極簡版中國象棋棋盤,還沒寫「楚河漢界」,也沒考慮其它細節,比如上面的文字倒置。感覺是最基本的實現,代碼談不上精簡,還算能用。如果你來寫的話,會有什麼樣的思維火花呢?會不會有更精簡、高效的實現?歡迎各位交流指正。

相關焦點

  • 《棋盤上的英雄》遊戲評測 象棋融入戰棋玩法
    《棋盤上的英雄》是一款很有意思的融合了象棋玩法的戰棋策略遊戲,一款奇幻題材的遊戲,融合了中國象棋和撲克牌的元素,想法很大膽,也有心意。那麼這個遊戲怎麼玩呢?主角穿越到異世界冒險,闖關、戰鬥、結識新的夥伴,在這款遊戲中,象棋棋子成了各種職業,而象棋楚河漢界的關鍵規則,依舊存在。
  • Excel 如何製作象棋棋盤,來一起做,完全原始碼
    本篇介紹如何用Excel製作一個象棋棋盤並可以實現下棋功能關於這個功能,其實道理也十分簡單,無非就是一些圖形加幾個車馬將帥。通過對棋盤的了解,用直線畫出棋盤,然後添加棋子,最後就開始廝殺了。功能介紹設置了三個按鈕,一個繪製棋盤,一個繪製棋子,一個清除棋局。感覺已經可以完成一盤棋的功能了,當然了,為了公平合理,不設置悔棋。棋盤的樣子四平八穩,沒有一點特色,幾百年來就是這樣。
  • 港警總部新貌:大堂有象棋棋盤圖案 寫8個紅色大字
    圖為位於灣仔的香港警察總部大堂,電梯口設計成中國象棋棋盤樣式,上面寫有「忠誠勇毅 心繫社會」的口號。大堂中,有多張展臺和展板,用以展示市民送來的撐警賀卡、信件及小禮物。新華社香港1月2日電 走到香港警察總部3樓電梯大堂,一幅巨大的中國象棋棋盤圖案映入眼帘:棋盤一半豎著印在電梯門及牆壁上,頂部擺著八顆棋子,上面寫有「忠誠勇毅、心繫社會」八個紅色大字。另一半平鋪在電梯出口處大堂地面,上面散落著「車」「馬」「炮」「卒」「士」數顆綠色字體的棋子。
  • 用舊積木為孩子做個棋盤,樂高玩具大變身,玩就是如此簡單!
    經常有人問我,到底什麼是創意思維?說白了,就是讓自己的思維拐個彎,這套積木就是證明。棋盤是由兩個相同的長方體積木,合裝而成,並且裡面是中空的。這樣的設計,是為了節省空間。可以把棋子放在裡面保管,又可以區分不同顏色,不同類型的棋子。一個細節,就能看出設計師的細心。再用多個小正形積木,組裝成一個大的正方形,覆蓋到剛才的棋盒上,隨後就是拼裝各類棋子。
  • 12個行將消失的童年棋盤遊戲
    這個可以說是象棋的口訣或者「必殺技」。不禁讓我想起了很多小時候玩的地面棋盤遊戲,當然我們小時候玩的那些棋盤遊戲不像是象棋和圍棋一樣那麼高雅,就是大人們教給孩子們自娛自樂的棋種,大人們在田間勞作累了,也會有你一幫我一夥的玩,聊以休閒解乏。隨手在地面好線,撿起一些石子兒,木棍,或者粉筆頭,瓦片之類的代替棋子兒,雖然棋子看似其貌不揚,但是樂趣無窮。
  • 【懷舊】12個即將消失的童年棋盤遊戲
    這個可以說是象棋的口訣或者「必殺技」。不禁讓我想起了很多小時候玩的地面棋盤遊戲,當然我們小時候玩的那些棋盤遊戲不像是象棋和圍棋一樣那麼高雅,就是大人們教給孩子們自娛自樂的棋種,大人們在田間勞作累了,也會有你一幫我一夥的玩,聊以休閒解乏。隨手在地面好線,撿起一些石子兒,木棍,或者粉筆頭,瓦片之類的代替棋子兒,雖然棋子看似其貌不揚,但是樂趣無窮。
  • 中國民間十二個行將消失的童年棋盤遊戲
    這個可以說是象棋的口訣或者「必殺技」。不禁讓我想起了很多小時候玩的地面棋盤遊戲,當然我們小時候玩的那些棋盤遊戲不像是象棋和圍棋一樣那麼高雅,就是大人們教給孩子們自娛自樂的棋種,大人們在田間勞作累了,也會有你一幫我一夥的玩,聊以休閒解乏。隨手在地面好線,撿起一些石子兒,木棍,或者粉筆頭,瓦片之類的代替棋子兒,雖然棋子看似其貌不揚,但是樂趣無窮。
  • 生活中的象棋高手,戰場上是否能當一名將軍?
    棋盤上,雙方兵來將擋,見招折招,用智慧進行著你死我活的鬥爭,一個生活中的象棋高手,可以分析出棋盤上你的進攻方向,你下某一步具體的棋的目的,甚至即將會走那幾步棋,仿佛鑽進你的腦子一般,知道你在想什麼、準備做什麼,讓你自嘆不如,甘拜下風,有時你會想這些人要是到了戰場不知會成為一個令多少人害怕的將軍。但是,相對於某一場戰爭而言,象棋更像是一場局部的戰鬥。
  • 西洋棋世界冠軍謝軍講述「小棋盤 大學問」
    謝軍為家長和孩子們帶來了一場「小棋盤,大學問」的西洋棋專題講座。 鍾欣 攝中新網北京12月9日電 (記者 劉旭)由中國宋慶齡基金會舉辦的「未來講堂」第一講7日晚間在中國宋慶齡青少年科技文化交流中心舉行。
  • Vans棋盤格:潮圈永不消逝的黑白電波
    棋盤格也許就是黑白最好的代名詞,作為Vans的經典元素之一風靡多年,本季還特別發售棋盤格系列,趕緊pick這永不消逝的電波吧!而說到黑白則不得不提一下黑白撞色的格子元素,潮人 er 首先就會同 Vans 棋盤格元素聯想起來。其實最早棋盤格是出現在象棋棋盤上的,而且也是在賽車場上到達終點線或者比賽結束的標誌。
  • 吳清源籤名的榧木棋盤
    賈勝楠如果一塊棋盤由日本圍棋名宿瀨越憲作親筆題寫「蓬萊」之名,巖本薰、吳清源、橋本宇太郎三位圍棋大家亦在棋盤上簽名,這塊棋盤價值多少?很難有答案。因為這塊棋盤極可能是絕版,上述四位圍棋大家均已過世。他們當中的任何一個人親筆籤名的棋盤都非常珍貴,何況四人同時籤名。瀨越憲作在日本棋史上是一位舉足輕重的人物,生於1889年,卒於1972年。
  • 遊戲人生:棋盤遊戲的前世與今生!
    可以肯定的是,西方對棋盤遊戲和周圍文化的廣泛興趣可以歸功於網際網路,網際網路使粉絲專頁,大眾市場銷售乃至眾籌創新成為可能。這在美國著名的融資平臺Kickstarter的統計數據中顯而易見,棋盤遊戲是眾籌項目中資金最多的類別之一。2019年的Kickstarter眾籌活動中,棋盤遊戲《爆炸小貓》籌集了接近六千多萬人民幣的資金,機遇之門從未如此開放。
  • 代表象棋的經典復古元素棋盤格,其實和賽車、音樂都有不解之緣
    我們常常見到時尚界出現各式各樣的棋盤格圖樣,很多人以為是代表著下棋的棋盤,那你就想簡單了。它背後的文化講究可是大有來頭,和賽車和音樂大有關係。棋盤格,英文叫Checkerboard,這種元素最早其實就是源自西洋棋的棋盤,由64個黑白相間的八乘八網格組成,分為1至8行及A至H列。
  • Vans棋盤格:潮圈永不消逝的黑白電波
    棋盤格也許就是黑白最好的代名詞,作為Vans的經典元素之一風靡多年,本季還特別發售棋盤格系列,趕緊pick這永不消逝的電波吧!其實最早棋盤格是出現在象棋棋盤上的,而且也是在賽車場上到達終點線或者比賽結束的標誌。棋盤格也代表著冠軍的榮耀,對青年來講也是一種熱血與激情的存在。
  • 北京小眾寶藏公園,銀杏林足球場,巨型棋盤很是震撼
    庭院裡有3個休閒廣場、10個野外桌球事件、40個健身設備,此外還有近千平方米的兒童廣場,還有掩體、鞦韆等遊樂設施,非常適合散步和散步。公園南門旁邊有免費停車場,公園裡有五個小足球場,很多市民和孩子們在裡面踢球。公園中心廣場中央建了一個巨大的棋盤,上面放著直徑40釐米的黑白棋盤。
  • Vans棋盤格穿搭指南來了,這麼穿準沒錯
    Vans棋盤格是Vans系列產品中極其經典的鞋型了,以一腳蹬為基本藍底,再添加國際性象棋的棋盤設計構思。讓這鞋鞋子在許多潮人中變成了必不可少的單品,極高的性價比加舒適感及其百搭能力,也讓棋盤格變成了最經典的設計構思之一。
  • 中國象棋、圍棋和西洋棋的戰略思維以及思想深度如何對比?
    國象和中國象棋難度相似,了解了解規則,就能上手下了;但是圍棋不同,了解完規則,下是能下,不過在會玩人的眼中,你就跟往棋盤上扔石子一樣;必須經過大量的死活、官子、定式、布局訓練之後,才能下出像模像樣的棋(我就剛剛處於這個階段);並且相比較國象和中象,圍棋更需要一個老師帶著你,不然你一個人看圍棋書自學,最開始真的是感覺「滿紙荒唐言」,從而「一把辛酸淚」(別問我是怎麼知道的)。
  • "古李十番"棋盤價值驚人 榧木棋盤約60萬人民幣
    總共將有10塊棋盤,大約是從三個獨木本榧棋墩上切割下來的,做棋盤的,是關西棋院有名的倉橋正藏八段和倉橋正行九段父子,他們是做榧木棋盤的世家。」昨天,遠在日本的棋聖聶衛平之子孔令文接受本報記者採訪時如是說。  據悉,「古李十番」之所以要以十塊棋盤作賽,是因為每局棋結束都會將棋盤籤名留作紀念。  對棋迷而言,獨木本榧棋盤堪稱寶貝。
  • Vans棋盤格:續寫南加州的經典
    從南加州掀起的 Vans 棋盤格潮流經過半個世紀的洗禮後,仍具魅力及大批忠實粉絲。本月, Vans 延續經典,釋出了經典出格服飾 Checkerboard Pack 系列,再一次為我們演繹棋盤格時尚。在上世紀 70 年代,Vans 為了鼓勵年輕人創意表達自我,曾多次在南加州舉辦創意大賽,比賽時許多年輕人都喜歡在鞋子中底上畫上黑白棋盤格圖案,個性又好看。
  • 從埃及女王到大富翁:棋盤桌遊大歷史
    到了古埃及早王朝時期,棋盤遊戲已經以象形文字出現。公元前12或13世紀為拉美西斯二世之妻妮菲塔莉建造的陵墓牆上,畫著王后在玩流傳至今的三種古埃及棋盤遊戲之一:《塞尼特棋》,另外兩個遊戲分別為《盤蛇圖》和《獵狗與豺狼》。古希臘人則擁有現代雙陸棋的原型《白板棋》,而羅馬人發明了西洋棋的祖先《羅馬棋》。在整個古代近東地區,人們都在玩一種叫《二十格》的遊戲。