控制臺(tái)五子棋--讀書筆記(1).doc_第1頁
控制臺(tái)五子棋--讀書筆記(1).doc_第2頁
控制臺(tái)五子棋--讀書筆記(1).doc_第3頁
控制臺(tái)五子棋--讀書筆記(1).doc_第4頁
控制臺(tái)五子棋--讀書筆記(1).doc_第5頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

實(shí)踐出真知,為了學(xué)習(xí)JAVA編程,筆者購買了瘋狂JAVA實(shí)戰(zhàn)演義一書,打算從這本書開始學(xué)習(xí),選擇它的原因是書中介紹了15個(gè)Java項(xiàng)目,主要是一些游戲和工具。興趣是最好的老師,這些項(xiàng)目很吸引我,學(xué)習(xí)過程也快樂了許多。于是打算把我讀書和實(shí)踐的過程記錄下來,也算是一種積累,一種紀(jì)念。從遇到的第一個(gè)項(xiàng)目說起,“控制臺(tái)五子棋”。該項(xiàng)目的目的是幫助讀者掌握和理解Java編程的一些基本知識(shí),為了能更好的突出這一學(xué)習(xí)目的,這個(gè)項(xiàng)目沒有實(shí)現(xiàn)漂亮的界面和方便易用的人機(jī)交互功能,也沒有過多地考慮程序的擴(kuò)展以及設(shè)計(jì)模式的使用。作者在總結(jié)一節(jié)中寫得很清楚:讀者朋友,從這個(gè)項(xiàng)目里你可以學(xué)到數(shù)組、枚舉類的使用方法,獲取鍵盤輸入的方法,分支流程、循環(huán)流程,當(dāng)然還有獲得滿足感和快樂感。我問自己,我想從這個(gè)項(xiàng)目中得到什么?我想要解決一個(gè)問題,那就是:我要編程,我該從哪里開始,如何下手?第一步:理解五子棋的游戲規(guī)則中國象棋、國際象棋、圍棋也好,五子棋也好,在編程之前,要知道它們的游戲規(guī)則,五子棋我玩過,我將其游戲規(guī)則描述為“把自己的棋子連成五個(gè)就算贏 了”。我看完了書作者的描述,一方面我有一種坐享其成的感覺,一方面我覺得自己的描述實(shí)在是太草率了?!鞍炎约旱钠遄舆B成五個(gè)就算贏了”這種描述對編程實(shí) 在是沒有什么太大的作用!現(xiàn)在讓我再重新思考一下五子棋的游戲規(guī)則:玩五子棋之前的準(zhǔn)備工作:兩個(gè)人,一個(gè)棋盤,兩盒棋子(可能一盒是黑色的,另一盒是白色的)。棋盤有多大,棋子有多少呢?兩個(gè)人必須都很清楚游戲規(guī)則,也就是棋子下在哪里,誰先下,何種情況下算贏?首先在橫或豎或斜的方向上形成五個(gè)子相連的一方為贏。第二步:從現(xiàn)實(shí)世界到計(jì)算機(jī)世界,考慮程序輸入與輸出。為了簡單起見,兩人對弈改為人與“電腦”對弈。棋盤用一個(gè)二維字符串?dāng)?shù)組存儲(chǔ),玩家以(x,y)的方式從鍵盤輸入棋子落在棋盤上的坐標(biāo),棋盤和棋子 打印在控制臺(tái),黑棋子用形如黑色圓點(diǎn)的特殊字符表示,白棋子用形如白色圓點(diǎn)的特殊字符表示,棋盤的格子用十字表示,真是太有才了!棋子落在棋盤上就是用表 示棋子的字符代替十字。第三步:繪制游戲流程所謂一圖勝千言,注意圖中這幾類點(diǎn):開始點(diǎn)、結(jié)束點(diǎn)、判定點(diǎn)。從這張圖中,可以看出幾個(gè)我們在編程過程中要解決的明顯的問題:1.如何從鍵盤輸入x,y坐標(biāo)?2.如何判斷玩家或是“電腦”贏了?3.如何實(shí)現(xiàn)“電腦”自動(dòng)下棋?4.勝出后,如何開始一輪新的游戲?5.勝出后,如何退出游戲?還有一些不明顯的問題:1.如何驗(yàn)證玩家的輸入是否合法有效?2.如何實(shí)現(xiàn)玩家與“電腦”的輪流下棋?第四步:用面向?qū)ο蟮乃枷朐O(shè)計(jì)類棋盤類(Chessboard)、棋子類(Chessman)兩個(gè)類很容易想出來,但是光有這兩個(gè)類還不夠,有些操作這兩個(gè)類處理不了,比如玩家輸 入x,y坐標(biāo),放在棋盤類和棋子類中都不合適,于是我有一次坐享其成了,作者搞了個(gè)游戲類(GobangGame)出來,完成一系列的操作,比如游戲的開 始與結(jié)束、玩家坐標(biāo)輸入及驗(yàn)證、判斷游戲是否勝出、電腦下棋。游戲類(GobangGame)是最主要的一個(gè)類,它的方法最多,能改進(jìn)的地方也最多,下面 展示了五子棋類圖。第五步:實(shí)現(xiàn)類,搭積木棋盤類(Chessboard)的核心功能就是用來維護(hù)棋盤,在“第二步:從現(xiàn)實(shí)世界到計(jì)算機(jī)世界,考慮程序輸入與輸出”中已經(jīng)提到,棋盤在計(jì)算機(jī) 世界里是用一個(gè)二維字符串?dāng)?shù)組存儲(chǔ)的,所以維護(hù)棋盤,就是創(chuàng)建、初始化、修改、獲取這個(gè)二維字符串?dāng)?shù)組的過程,為什么選用數(shù)組,至少有兩點(diǎn),其一,棋盤的 大小是固定的,沒有人會(huì)去偷走棋盤上的格子對嗎?其二,二維數(shù)組的下標(biāo)正好表示了棋盤的位置(x,y),數(shù)組元素的值正好可以存儲(chǔ)棋盤的狀態(tài):黑子、白 子、無子。其三,可以通過數(shù)組的下標(biāo)很容易的找到數(shù)組元素。棋子類(Chessman)真是讓我著了下急,作者是用枚舉類實(shí)現(xiàn)的,枚舉類我不熟啊,很少用,但這種困難是對知識(shí)點(diǎn)不熟造成的,不能算作難點(diǎn)。作 者考慮用枚舉類來實(shí)現(xiàn)的原因思考了下,因?yàn)槠遄釉谟?jì)算機(jī)中使用固定的兩個(gè)字符串對象表示的,如何每次下一個(gè)棋子,都要重新創(chuàng)建一個(gè)字符串對象,是不是太浪 費(fèi)了,黑子和黑子在計(jì)算機(jī)里沒有差別的。之前兩個(gè)類講到了兩個(gè)在Java編程中很基本也很重要的知識(shí)點(diǎn):數(shù)組和字符串。下面看一看游戲類(GobangGame)。對于游戲類(GobangGame)的實(shí)現(xiàn)感覺有點(diǎn)面向過程,關(guān)鍵是要理順游戲的流程。使用while語句、continue、break來達(dá)到循環(huán)接收玩家輸入、跳出本次循環(huán)、跳出整個(gè)循環(huán)。使用標(biāo)志變量isOver來標(biāo)示本次游戲是否勝出。游戲類(GobangGame)在實(shí)現(xiàn)過程中值得注意的有:1.利用BufferedReader、InputStreamReader、System.in、readLine()獲取鍵盤的輸入;2.凡是涉及玩家輸入的部分,一定要對輸入的內(nèi)容進(jìn)行驗(yàn)證;3.判斷玩家或“電腦”是否贏了,需要一個(gè)勝出算法;4.如果游戲勝出,提示哪一方贏了,并提示玩家是否開始下一輪游戲或退出整個(gè)游程序;5.在合適的時(shí)機(jī)重新初始化棋盤。對于獲取鍵盤的輸入還有對輸入的內(nèi)容進(jìn)行驗(yàn)證是固定的套路,沒有什么可多說的。關(guān)鍵是勝出算法,可以說在這里算是一個(gè)難點(diǎn),需要?jiǎng)右粍?dòng)腦筋。我一直 以來對算法都是一種逃避的態(tài)度,總覺得那不是一般人能想出來的。這一次我也是皺起了眉頭。如果讓我下棋,我可以判斷是否勝出,但是讓計(jì)算機(jī)也能判斷勝出, 我就不會(huì)了。我盡力去回憶自己的大腦是如何判斷的,遍歷每一個(gè)方向并計(jì)數(shù),每次把當(dāng)前棋

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論