網(wǎng)絡(luò)五子棋的設(shè)計與實現(xiàn)_第1頁
網(wǎng)絡(luò)五子棋的設(shè)計與實現(xiàn)_第2頁
網(wǎng)絡(luò)五子棋的設(shè)計與實現(xiàn)_第3頁
網(wǎng)絡(luò)五子棋的設(shè)計與實現(xiàn)_第4頁
網(wǎng)絡(luò)五子棋的設(shè)計與實現(xiàn)_第5頁
已閱讀5頁,還剩34頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、中國地質(zhì)大學(xué)(武漢)計算機科學(xué)與技術(shù)學(xué)院學(xué)院畢業(yè)設(shè)計(論文)摘 要五子棋起源于中國,是我國古代黑白棋種之一,據(jù)考究,五子棋的出現(xiàn)時間早于圍棋,是一種上手簡單但卻內(nèi)藏玄機的游戲。五子棋不但能夠鍛煉人的思維能力,和邏輯能力,而且我們通過下棋能領(lǐng)悟人生哲理。五子棋文化淵源流長,博大精深,經(jīng)過幾千年的傳播,結(jié)合中西方文化,不僅活躍在國際比賽,更是各個年齡段都喜歡的大眾游戲。隨著互聯(lián)網(wǎng)的發(fā)展,方便,快捷已經(jīng)成為了時代的主題,傳統(tǒng)五子棋方式已經(jīng)不能滿足廣大用戶的需求,網(wǎng)絡(luò)五子棋應(yīng)運而生。本設(shè)計的實現(xiàn)采用B-S結(jié)構(gòu),以Spring-SpringMVC-MyBatis框架為主體,結(jié)合Websocket技術(shù),實

2、現(xiàn)了人機對戰(zhàn),網(wǎng)絡(luò)雙人對戰(zhàn)兩種游戲模式,人機對戰(zhàn)側(cè)重于AI算法,而雙人對戰(zhàn)側(cè)重于網(wǎng)絡(luò)通信。關(guān)鍵詞:五子棋;SSM;WebsocketAbstractGoBang originated in China and is one of the ancient black and white chess species in China. According to the study, the appearance of GoBang is earlier than Go, which is a simple but hidden game.GoBang can not only train peop

3、les thinking ability, but also logical ability, and we can understand life philosophy by playing chess. The culture of GoBang has a long history and is profound and profound. After thousands of years of communication, combined with Chinese and Western culture, it is not only active in international

4、competitions, but also popular games of all ages.With the development of the Internet, convenience and speed have become the theme of the times. The traditional GoBang method can no longer meet the needs of the majority of users, and the network GoBang came into being. The implementation of this des

5、ign adopts the B-S structure, with the Spring-SpringMVC-MyBatis framework as the main body, combined with Websocket technology, realizes the human-machine battle, the network double-play game mode, the man-machine battle focuses on the AI algorithm, and the double-player focuses on network communica

6、tion.Keywords: GoBang; SSM; Websocket目錄第一章 緒論1第二章 開發(fā)工具、環(huán)境及技術(shù)支持22.1 涉及到的關(guān)鍵技術(shù)22.1.1 jsp22.1.3 WebSocket42.1.4 javascript52.1.5 Maven62.2 開發(fā)環(huán)境和開發(fā)工具6第三章 五子棋概要設(shè)計73.1 需求分析73.2 模塊化73.3 功能設(shè)計概述9第四章 詳細設(shè)計和實現(xiàn)過程124.1 登錄注冊具體實現(xiàn)過程124.1.1 注冊功能124.1.2 登錄功能134.2 人機對戰(zhàn)具體實現(xiàn)過程154.2.1 人機對戰(zhàn)棋盤畫法154.2.2 人機對戰(zhàn)輸贏的判定174.2.3 人機AI算

7、法204.3 雙人網(wǎng)絡(luò)對戰(zhàn)五子棋的實現(xiàn)過程214.2.1 雙人在線對戰(zhàn)棋盤畫法214.2.2 雙人在線對戰(zhàn)輸贏判定234.2.3 將下棋過程存入數(shù)據(jù)庫中254.2.4 悔棋功能的實現(xiàn)264.2.5 WebSocket通信功能:264.4 數(shù)據(jù)庫設(shè)計27第五章 程序測試295.1 登陸、注冊模塊測試295.2 人機模塊測試315.3 網(wǎng)絡(luò)雙人對戰(zhàn)模式315.4 用戶注冊信息和棋盤日志表查看32第六章 結(jié)論33致謝34參考文獻35中國地質(zhì)大學(xué)(武漢)計算機科學(xué)與技術(shù)學(xué)院本科畢業(yè)設(shè)計(論文)第一章 緒論五子棋起源于古代中國,漢書記載名為連珠、連五子,魏晉南北朝時期傳入日本,經(jīng)日本改進后傳入歐美,在歐

8、美風(fēng)靡一時。五子棋經(jīng)過時間和異域文化的洗禮才變成今天我們熟知的五子棋。五子棋不僅僅是作為一種娛樂大眾的游戲出現(xiàn)我們生活中,五子棋吸收了古代數(shù)學(xué),哲學(xué)的精華,五子棋的黑白代表著陰陽,自古便有陰陽和諧,五子棋的玩法很大程度上體現(xiàn)了這一思想。五子棋現(xiàn)在已經(jīng)作為一種競技類游戲活躍在世界賽場,由此可見其價值之高。隨著互聯(lián)網(wǎng)時代的到來,游戲行業(yè)迎來了春天,各種類型的游戲?qū)映霾桓F,客戶端-服務(wù)器模式的游戲依然是時代的主流,但是僅限于那些畫面精美,制作精良的大型動作游戲,現(xiàn)在許多休閑游戲不再需要下載客戶端了,只需要打開瀏覽器,輸入網(wǎng)址,登陸即可開始游戲,這就是瀏覽器-服務(wù)器模式的便捷之處,此次開發(fā)的目的就是實

9、現(xiàn)基于瀏覽器-服務(wù)器模式下的網(wǎng)絡(luò)五子棋。在完成課題的同時,也能夠接觸現(xiàn)在主流的WEB開發(fā)模式和開發(fā)工具,熟悉開發(fā)流程和開發(fā)技術(shù),也是對自己也是一種鍛煉。第二章 開發(fā)工具、環(huán)境及技術(shù)支持2.1 涉及到的關(guān)鍵技術(shù)2.1.1 jspJSP全稱Java Server Pages,JSP的全名叫做Java Server Pages,JSP屬于一種動態(tài)網(wǎng)頁腳本語言,可以跨多個平臺進行實現(xiàn)系統(tǒng)功能,因此具備較好的兼容性,和ASP語言相比,JSP雖然也是基于HTML文件進行運行,但是可以更好地實現(xiàn)與系統(tǒng)用戶之間的互動,讓用戶獲得更好的體驗。JSP語言的技術(shù)基礎(chǔ)實際上為Java Servlet,Java Ser

10、vlet可以結(jié)合JSP共同實現(xiàn)大型軟件項目的開發(fā)。JSP腳本語言的優(yōu)勢非常鮮明,首先JSP適用于多種編程語言,尤其非常適合搭配JAVA語言一起使用,結(jié)尾的標(biāo)簽內(nèi)容為,可以最大程度地體現(xiàn)出JAVA語言的優(yōu)勢和特點,并且JSP語言本身也具備JAVA語言的一些特征。JSP語言還可以實現(xiàn)對Java web的UI部分,結(jié)合HTML文件、XML文件以及XHTML文件,采用嵌入式開發(fā)來進行前端設(shè)計。JSP語言還具備強大的兼容能力,只需要編輯一次,就可以在多個平臺間反復(fù)利用,極大地縮短了開發(fā)人員的開發(fā)時間,并且可以在多個編譯環(huán)境中進行開發(fā),方便開發(fā)人員對系統(tǒng)進行部署,有利于對系統(tǒng)環(huán)境進行擴充。JSP腳本語言還

11、具有較為可靠的穩(wěn)定性和安全性,自帶很多功能強大的工具,可以保證開發(fā)人員開發(fā)過程的順暢和便利,并且系統(tǒng)具有較高的安全性,再加上JSP技術(shù)是可以免費下載的,這也讓JSP技術(shù)的應(yīng)用范圍不斷擴大。此外,JSP語言可以實現(xiàn)對數(shù)據(jù)庫、用戶操作和選擇的相關(guān)信息以及JavaBeans組件來進行訪問,并且實現(xiàn)多個網(wǎng)頁間的信息傳遞和信息共享。2.1.2 SSM框架SpringSpring是軟件開發(fā)領(lǐng)域中一種常見的設(shè)計框架,其源代碼是對外開放的,并且屬于面向接口編程思維,主要用于處理和解決業(yè)務(wù)邏輯層和其他層次的問題。早在2003年,Spring就開始在開發(fā)領(lǐng)域被人們所熟知,一開始的主要應(yīng)用在Java 語言的應(yīng)用程序

12、的開發(fā)上,創(chuàng)始人為Rod Johnson,因此,Spring框架不僅是JavaSE/EE分層,還是一種輕量級的全棧式框架 明日科技. JavaWeb項目開發(fā)實戰(zhàn)入門. 吉林大學(xué)出版社,2017.1。 Spring設(shè)計框架的核心為是IOC和AOP,其中IOC的全稱為Inversion of Control,表示控制反轉(zhuǎn),AOP的全稱為Aspect Oriented Programming,表示面向切面的編程方式??刂品崔D(zhuǎn),指的是對這些相互依賴對象的創(chuàng)建和協(xié)調(diào)工作都交由Spring容器來實現(xiàn),當(dāng)某個對象需要其他協(xié)作對象時,由Spring動態(tài)的通過依賴注入(DI, Dependency Inject

13、ion)的方式來提供協(xié)作對象,其只需要關(guān)注業(yè)務(wù)本身的邏輯即可。Spring從2004年的第一版發(fā)展到現(xiàn)在,已經(jīng)成為了一個生態(tài)帝國,經(jīng)過不斷的改進發(fā)展,現(xiàn)如今的SpringMVC、SpringBoot、Spring Cloud等解決方案共同構(gòu)成了Spring框架。有人親切的稱之為:Spring 全家桶。在本項目中我們后臺選擇了Spring,SpringMVC,MyBatis這一套框架,搭配Maven,開發(fā)效率成倍提高。SpringMVCSpringMVC框架主要基于web層的,其框架類型屬于MVC模式,適合對Servlet進行配合,從而快速處理web層的響應(yīng)和請求,還能快速獲取表單內(nèi)容,并且對表

14、單進行校驗 楊靜.基于JAVA WEB中MVC模式的研究和應(yīng)用J. 電腦知識與技術(shù),2014,9(28)68-71。SpringMVC的工作原理圖如圖1.1圖1.1SpringMVC框架根據(jù)配置來分,可以分為兩個啟動流程:1、對ontextLoaderListener進行初始化,完成對IoC容器的實例化后,將實例化的內(nèi)容注冊在ServletContext中。2、對DispatcherServlet進行始化,通過建立上下文,將上下文注冊在ServletContext中。由于本項目重點為算法和通信,故不再深究。 MyBatis MyBatis 一開始只是一個開源項目,由Apache軟件基金會推出,

15、直到2010年,apache software foundation 將MyBatis 項目添加進入到google code中,正式更名為MyBatis,MyBatis因此而來。2013,再次將MyBatis添加進入到Github。iBATIS源于“internet”和“abatis”這兩個意思,主要是基于Java語言的應(yīng)用在持久層上的一種設(shè)計框架,因此,iBATIS開源提供多種持久層的框架,主要包括DAOs(Data Access Objects)、SQL Maps等 王循. JavaWeb快速開發(fā)框架中部分關(guān)鍵技術(shù)初步研究D . 吉林大學(xué),2015。很多開發(fā)人員習(xí)慣采用MyBatis中的O

16、RM機制,因此MyBatis可以面對純粹的Java對象,還可以根據(jù)Hibernate 來實現(xiàn)ORM,Hibernate 還可以基于數(shù)據(jù)操作生成相應(yīng)的SQL語句,但是MyBatis 在對數(shù)據(jù)庫進行處理時,其優(yōu)勢在于對SQL工作量、數(shù)據(jù)庫具有較好的可移植性,從而保證系統(tǒng)在設(shè)計的過程中可以具備更高的靈活性。因此,MyBatis 可以對ORM 的功能進行有效補充和完善,具有非常重要的現(xiàn)實意義。本課題的設(shè)計屬于Maven項目,只需在pom.xml中引入依賴即可。pom.xml中的配置如下org.mybatismybatis3.2.8org.mybatismybatis-spring.3

17、WebSocketWebSocket主要基于一個獨立的TCP連接,從而完成通信協(xié)議,協(xié)議的類型屬于全雙工模式。在2011年,WebSocket就被IET列入為標(biāo)準(zhǔn)RFC 6455,并且讓RFC936不斷對其內(nèi)容進行補充,因此,W3C將WebSocketAPI列為標(biāo)準(zhǔn) Chris Heilmann (December 8, 2010). WebSocket disabled in Firefox 4.Hacks.M. Retrieved 2011-05-09.。WebSocket可以簡化服務(wù)器和客戶端之間的數(shù)據(jù)交換和交互功能,讓服務(wù)器主動給客戶端發(fā)送數(shù)據(jù)內(nèi)容,因此,WebSo

18、cket API的瀏覽器和服務(wù)器在完成首次握手后,就可以持續(xù)連接和通信,雙向進行數(shù)據(jù)交互。選用Websocket技術(shù)作為服務(wù)器和客戶端交互手段的原因:HTML頁面早期是靜態(tài)的,不能進行交互,后來出現(xiàn)了JavaScript,在一定程度上解決了交互問題,但是JS在剛出現(xiàn)的時候并不能和服務(wù)器進行交互,直到Ajax的出現(xiàn)。Ajax解決了頁面和服務(wù)端進行交互的問題,但是Ajax所有的請求都必須由客戶端發(fā)起,服務(wù)器端響應(yīng),如果服務(wù)器端有最新消息難以及時發(fā)送到客戶端,在WebSocket出現(xiàn)之前,客戶端和服務(wù)器的信息交互方法主要有以下三種方式:1. 輪詢:客戶端定期持續(xù)向服務(wù)器發(fā)送請求內(nèi)容,從而判斷服務(wù)器是

19、否存在新數(shù)據(jù),如果有新數(shù)據(jù),需要傳送到客戶端進行顯示。服務(wù)端如果沒有就返回給一個空的json或者xml文檔,此方法實現(xiàn)方式簡單,但是會存在大量的無效請求,服務(wù)器端的資源占用過大 洪世勇. 高Java中基于Socket的網(wǎng)絡(luò)編程J. 軟件工程師,2013(01):61-622. 長連接:類似于輪詢,不同點在于服務(wù)器端不會每次都會響應(yīng)客戶端的請求,只有在服務(wù)器端有最新的數(shù)據(jù)時才會響應(yīng)客戶端的請求,這種方式解決了長連接存在無效請求的問題3. Applet和Flash:實現(xiàn)了真正意義上的全雙工通信,但存在安全問題,可移植性差WebSocket的優(yōu)勢:1. 由于WebSocket與HTTP使用的端口相同

20、,夸張的講幾乎所有防火墻都不會阻塞Websocket連接。2. WebSocket使用HTTP協(xié)議進行握手通信,因此它能夠輕而易舉的集成到瀏覽器中3. 使用WebSocket進行通信時,無論時服務(wù)器端還是客戶端都可以知道消息的啟動或者到達4. WebSocket支持跨域,可以避免Ajax的限制2.1.4 javascriptJavascript屬于一種較為常見的腳本語言,主要用于Web的開發(fā),為Web網(wǎng)頁設(shè)置多種動態(tài)效果和相關(guān)功能,因為原始的HTML語言功能性很差,只能實現(xiàn)一些靜態(tài)功能,而且界面單一。JavaScript的出現(xiàn)使得前端界面變得豐富多彩,通過精美的包裝,給用戶提供更流暢美觀的瀏覽

21、效果。通常JavaScript腳本語言是嵌入在HTML中來實現(xiàn)各種動態(tài)的功能。Javascript的特點:1. 是一種解釋類型的腳本語言,簡單易懂,易編寫修改。2. 基于對象3. 可跨平臺,可移植性強2.1.5 Maven Apache Maven是一種常見的軟件項目管理工具,主要基于POM模型,主要用戶對項目的構(gòu)建,從而對項目的相關(guān)文件進行管理。除此之外也能提供中央倉庫,自動幫我們下載構(gòu)件,省去了自己配置項目時,需要下載工具的麻煩,如果想要引入jar包,根本無需手動添加,只要在pom.xml下添加依賴即可。上面已經(jīng)提到了引入了MyBatis,本項目還引入了websocket等依賴,依賴較多故

22、不一一說明。 2.2 開發(fā)環(huán)境和開發(fā)工具開發(fā)環(huán)境:win10 64位操作系統(tǒng)處理器:Intel(R) Core(TM) i5-4210U CPU 1.70GHz 2.40GHz內(nèi)存(RAM):12G開發(fā)工具:JDK 1.7 IntelliJ IDEA 2019.1.2版本Mysql 5.7.25版本Apache Tomcat 8.5.35版本Navicat Premium12.0.18版本第三章 五子棋概要設(shè)計3.1 需求分析通過分析,根據(jù)需求,要求實現(xiàn)以下功能:1. 賬號的登陸、注冊、退出、密碼修改等功能2. 人機對戰(zhàn)功能3. 雙人網(wǎng)絡(luò)對戰(zhàn)功能4. 重開對局功能5. 悔棋功能6. 認輸功能通

23、過將用戶要求轉(zhuǎn)化為具體功能,目的更加明確,將功能模塊化,以便更快更好的完成該項目。3.2 模塊化系統(tǒng)分為3個主要模塊1. 登陸、注冊模塊2. 人機對戰(zhàn)模塊3. 雙人網(wǎng)絡(luò)對戰(zhàn)各個模塊功能結(jié)構(gòu)圖:1. 登陸、注冊模塊如圖3.1圖3.1登陸模塊2. 人機對戰(zhàn)模塊如圖3-2圖3.2 人機模塊3. 雙人網(wǎng)絡(luò)對戰(zhàn)如下圖3-3圖3.33.3 功能設(shè)計概述本系統(tǒng)是基于瀏覽器服務(wù)器模式下網(wǎng)絡(luò)五子棋程序,能夠?qū)崿F(xiàn)人機對戰(zhàn),雙人網(wǎng)絡(luò)對戰(zhàn),完成了五子棋游戲的一些基礎(chǔ)操作,如落子、勝負判定、認輸、悔棋、棋盤保存等功能。游戲界面簡潔,邏輯性較強。1. 服務(wù)器端設(shè)計:處理用戶的登陸、注冊、密碼修改等信息,將用戶信息及時同步

24、到數(shù)據(jù)庫中。2. 瀏覽器端設(shè)計:對表單進行正確填寫,及時反饋給客戶端信息,使得用戶能夠進行正常的登陸和游戲,并且點擊相應(yīng)的button發(fā)出鼠標(biāo)點擊請求事件,服務(wù)器通過不同的事件,進行不同的反應(yīng)3. 用戶注冊:首次游戲的用戶需要填寫注冊信息,并將數(shù)據(jù)存入數(shù)據(jù)庫中。用戶通過注冊來創(chuàng)建自己的賬號,以便登錄后進行游戲。4. 用戶登錄:用已有的賬號信息登錄,通過和數(shù)據(jù)庫表User內(nèi)信息進行比較,驗證登錄,如果信息正確進入主頁面,否則彈出信息錯誤提示。5. 人機對戰(zhàn):選擇先手、后手,棋子顏色,重新開始等功能人機對戰(zhàn)模式的系統(tǒng)流程圖如下圖3.4 寧淑榮 楊國興. Java五子棋游戲制作. 清華大學(xué)出版社,2

25、017.5圖3.46. 雙人網(wǎng)絡(luò)對戰(zhàn):認輸、悔棋、重開功能雙人網(wǎng)絡(luò)對戰(zhàn)模式系統(tǒng)流程圖如下圖3-5圖3.57. 修改密碼功能:輸入兩次新密碼即可修改密碼,將新密碼同步到數(shù)據(jù)庫User表中第四章 詳細設(shè)計和實現(xiàn)過程4.1 登錄注冊具體實現(xiàn)過程4.1.1 注冊功能注冊功能是由前臺的register.jsp頁面的form表單來實現(xiàn)的,通過點擊注冊提交form表單,再由controller接受表單信息,并作出響應(yīng)。代碼如下。 此時發(fā)出去的請求會被web.xml攔截下來,進而將請求內(nèi)容添加到相應(yīng)的RequestMapping中,RequestMapping屬于一種常見的注解方法,根據(jù)傳入的參數(shù)User 中

26、的username判斷用戶是否存在并注冊,代碼如下:UserController.java: RequestMapping(value = register.action) public String register(HttpServletRequest request, Model model, User user) User user1 = userService.selectUser(user); if (user1 != null) request.setAttribute(error, 該用戶已經(jīng)存在,請重新注冊!); return register; else userServi

27、ce.saveUser(user); return login; UserMapper.xml中用戶注冊的sql: insert into user (username, password, createtime, phone, states) values (#username,jdbcType=VARCHAR, #password,jdbcType=VARCHAR, #createtime,jdbcType=TIMESTAMP, #phone,jdbcType=BIGINT, #states,jdbcType=VARCHAR) 4.1.2 登錄功能登錄功能起始是由前臺的login.jsp頁

28、面的form表單開始,點擊登錄提交form表單 此時發(fā)出去的請求會在web.xml中被攔截,并且由相應(yīng)的RequestMapping方法來進行處理,參數(shù)username 主要用來對用戶的登錄狀態(tài)進行判斷,如果用戶已經(jīng)登錄成功,user將被添加到session中。所謂session,在軟件開發(fā)領(lǐng)域,主要是指會話控制,因此,Session 的對象一般就是對用戶會話相關(guān)信息的存儲,當(dāng)用戶在網(wǎng)頁中進行操作,從而讓網(wǎng)頁跳轉(zhuǎn)時,Session 對象對象依然存在,不會造成丟失的情況,如果用戶還沒有創(chuàng)建會話,在對web進行操作時, Web 服務(wù)器會自動為用戶進行創(chuàng)建,值得注意的是,如果Session 過期,

29、Web 服務(wù)會將其終止掉。代碼如下: RequestMapping(value = login.action) public String login(HttpServletRequest request, HttpServletResponse response, User user) response.setHeader(Content-type, text/html;charset=UTF-8); User user1 = userService.selectUser(user); if (user1 = null) request.setAttribute(erro, 密碼錯誤); r

30、eturn login; else request.getSession().setAttribute(user, user1); return redirect:main.action; 有了session,我們便可配置攔截器,根據(jù)session中User信息是否存在來判斷用戶的登錄狀態(tài),如果用戶處于登陸狀態(tài)登錄,則通過,否則將自動將其攔截到登錄頁面 public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object obj) throws Exception String url

31、 = request.getRequestURI(); User user = (User) request.getSession().getAttribute(user); if (user != null) /如果用戶已經(jīng)登錄 直接放行 return true; else /如果用戶訪問的是登錄 注冊就放行,其他的攔截到登錄頁面 if (url.contains(login.action) | url.contains(register.action)| url.contains(index.action) return true; else response.sendRedirect(l

32、ogin.jsp); return false; 以下是修改密碼的sql,流程基本如上,故不詳細說明 update user set password = #password,jdbcType=VARCHAR, createtime = #createtime,jdbcType=TIMESTAMP, phone = #phone,jdbcType=BIGINT, states = #states,jdbcType=VARCHAR where username = #username,jdbcType=VARCHAR 4.2 人機對戰(zhàn)具體實現(xiàn)過程4.2.1 人機對戰(zhàn)棋盤畫法導(dǎo)入背景圖片,根據(jù)圖片

33、像素大小,將背景圖片分割成15*15的正方形網(wǎng)格作為棋盤棋盤的邊框,每個小格子的長,寬像素設(shè)置如下:div.chessboard margin: 30px 0 0 50px; width: 542px; background: url(img/chessboard.png) no-repeat 14px 14px rgb(250, 250, 250); overflow: hidden; box-shadow: 2px 2px 8px #888; -webkit-box-shadow: 2px 2px 8px #888; -moz-box-shadow: 2px 2px 8px #888;di

34、v.chessboard div float: left; width: 36px; height: 36px; border-top: 0px solid #ccc; border-left: 0px solid #ccc; border-right: 0; border-bottom: 0; cursor: pointer;棋盤畫法:重復(fù)topline的畫法依次將背景圖片分割成15*15的網(wǎng)格 4.2.2 人機對戰(zhàn)輸贏的判定根據(jù)最后的落子來判斷輸贏,依次從X軸方向、Y軸方向、左斜方向、和右斜方向統(tǒng)計同一方向上的相同顏色連續(xù)棋子數(shù)目,如果在同一方向上相同連續(xù)棋子的數(shù)目等于5時持該顏色棋子的一

35、方獲勝具體實現(xiàn)的代碼如下:playerWinOrNot: function (i, j) var nums = 1, /連續(xù)棋子個數(shù) chessColor = this.humanPlayer = black ? this.BLACK_CHESS : this.WHITE_CHESS, m, n; /x方向 for (m = j - 1; m = 0; m-) if (this.chessArrim = chessColor) nums+; else break; for (m = j + 1; m = 5) this.playerWin(); return; else nums = 1; /

36、y方向 for (m = i - 1; m = 0; m-) if (this.chessArrmj = chessColor) nums+; else break; for (m = i + 1; m = 5) this.playerWin(); return; else nums = 1; /左斜方向 for (m = i - 1, n = j - 1; m = 0 & n = 0; m-, n-) if (this.chessArrmn = chessColor) nums+; else break; for (m = i + 1, n = j + 1; m 15 & n = 5) th

37、is.playerWin(); return; else nums = 1; /右斜方向 for (m = i - 1, n = j + 1; m = 0 & n 15; m-, n+) if (this.chessArrmn = chessColor) nums+; else break; for (m = i + 1, n = j - 1; m = 0; m+, n-) if (this.chessArrmn = chessColor) nums+; else break; if (nums = 5) this.playerWin(); return; this.AImoveChess()

38、;,4.2.3 人機AI算法各個玩家每下一步棋時,AI算法會遍歷整個棋盤,通過計算出每個位置的權(quán)重值,再將權(quán)重值進行比較,根據(jù)不同權(quán)重比,確定棋局的形式,規(guī)定固定棋型的分數(shù),根據(jù)棋型,確定棋盤每個位置空子的分值,然后就下分值最高的那個點 裴博文. 五子棋人工智能權(quán)重估值算法J.電腦編程技巧與維護, 2008 (06):69-73 。computeWeight: function (i, j) var weight = 14 - (Math.abs(i - 7) + Math.abs(j - 7), /基于棋盤位置權(quán)重 pointInfo = , /某點下子后連子信息 chessColor =

39、this.AIPlayer = black ? this.BLACK_CHESS : this.WHITE_CHESS; /x方向 pointInfo = this.putDirectX(i, j, chessColor); weight += this.weightStatus(pointInfo.nums, pointInfo.side1, pointInfo.side2, true);/AI下子權(quán)重 pointInfo = this.putDirectX(i, j, -chessColor); weight += this.weightStatus(pointInfo.nums, poi

40、ntInfo.side1, pointInfo.side2, false);/player下子權(quán)重 /y方向 pointInfo = this.putDirectY(i, j, chessColor); weight += this.weightStatus(pointInfo.nums, pointInfo.side1, pointInfo.side2, true); pointInfo = this.putDirectY(i, j, -chessColor); weight += this.weightStatus(pointInfo.nums, pointInfo.side1, poin

41、tInfo.side2, false); /左斜方向 pointInfo = this.putDirectXY(i, j, chessColor); weight += this.weightStatus(pointInfo.nums, pointInfo.side1, pointInfo.side2, true); pointInfo = this.putDirectXY(i, j, -chessColor); weight += this.weightStatus(pointInfo.nums, pointInfo.side1, pointInfo.side2, false); /右斜方向 pointInfo = this.putDirectYX(i, j, chessColor); weight += this.weightStatus(pointInfo.nums, pointInfo.side1, pointInfo.side2, true); pointInfo = this.putDirectYX(i, j, -chess

溫馨提示

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

評論

0/150

提交評論