下載本文檔
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、中國(guó)地質(zhì)大學(xué)(武漢)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院學(xué)院畢業(yè)設(shè)計(jì)(論文)題目:網(wǎng)絡(luò)五子棋的設(shè)計(jì)與實(shí)現(xiàn)摘 要五子棋起源于中國(guó),是我國(guó)古代黑白棋種之一,據(jù)考究,五子棋的出現(xiàn)時(shí)間早于圍棋,是一種上手簡(jiǎn)單但卻內(nèi)藏玄機(jī)的游戲。五子棋不但能夠鍛煉人的思維能力,和邏輯能力,而且我們通過(guò)下棋能領(lǐng)悟人生哲理。五子棋文化淵源流長(zhǎng),博大精深,經(jīng)過(guò)幾千年的傳播,結(jié)合中西方文化,不僅活躍在國(guó)際比賽,更是各個(gè)年齡段都喜歡的大眾游戲。隨著互聯(lián)網(wǎng)的發(fā)展,方便,快捷已經(jīng)成為了時(shí)代的主題,傳統(tǒng)五子棋方式已經(jīng)不能滿足廣大用戶的需求,網(wǎng)絡(luò)五子棋應(yīng)運(yùn)而生。本設(shè)計(jì)的實(shí)現(xiàn)采用B-S結(jié)構(gòu),以Spring-SpringMVC-MyBatis框架為主體,結(jié)
2、合Websocket技術(shù),實(shí)現(xiàn)了人機(jī)對(duì)戰(zhàn),網(wǎng)絡(luò)雙人對(duì)戰(zhàn)兩種游戲模式,人機(jī)對(duì)戰(zhàn)側(cè)重于AI算法,而雙人對(duì)戰(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 o
3、nly train peoples 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
4、international 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 implementati
5、on of this design 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 net
6、work communication.Keywords: GoBang; SSM; Websocket目錄第一章 緒論1第二章 開(kāi)發(fā)工具、環(huán)境及技術(shù)支持22.1 涉及到的關(guān)鍵技術(shù)22.1.1 jsp22.1.3 WebSocket42.1.4 javascript52.1.5 Maven62.2 開(kāi)發(fā)環(huán)境和開(kāi)發(fā)工具6第三章 五子棋概要設(shè)計(jì)73.1 需求分析73.2 模塊化73.3 功能設(shè)計(jì)概述9第四章 詳細(xì)設(shè)計(jì)和實(shí)現(xiàn)過(guò)程124.1 登錄注冊(cè)具體實(shí)現(xiàn)過(guò)程124.1.1 注冊(cè)功能124.1.2 登錄功能134.2 人機(jī)對(duì)戰(zhàn)具體實(shí)現(xiàn)過(guò)程154.2.1 人機(jī)對(duì)戰(zhàn)棋盤(pán)畫(huà)法154.2.2 人機(jī)對(duì)戰(zhàn)輸贏的判
7、定174.2.3 人機(jī)AI算法204.3 雙人網(wǎng)絡(luò)對(duì)戰(zhàn)五子棋的實(shí)現(xiàn)過(guò)程214.2.1 雙人在線對(duì)戰(zhàn)棋盤(pán)畫(huà)法214.2.2 雙人在線對(duì)戰(zhàn)輸贏判定234.2.3 將下棋過(guò)程存入數(shù)據(jù)庫(kù)中254.2.4 悔棋功能的實(shí)現(xiàn)264.2.5 WebSocket通信功能:264.4 數(shù)據(jù)庫(kù)設(shè)計(jì)27第五章 程序測(cè)試295.1 登陸、注冊(cè)模塊測(cè)試295.2 人機(jī)模塊測(cè)試315.3 網(wǎng)絡(luò)雙人對(duì)戰(zhàn)模式315.4 用戶注冊(cè)信息和棋盤(pán)日志表查看32第六章 結(jié)論33致謝34參考文獻(xiàn)35第一章 緒論五子棋起源于古代中國(guó),漢書(shū)記載名為連珠、連五子,魏晉南北朝時(shí)期傳入日本,經(jīng)日本改進(jìn)后傳入歐美,在歐美風(fēng)靡一時(shí)。五子棋經(jīng)過(guò)時(shí)間和異域
8、文化的洗禮才變成今天我們熟知的五子棋。五子棋不僅僅是作為一種娛樂(lè)大眾的游戲出現(xiàn)我們生活中,五子棋吸收了古代數(shù)學(xué),哲學(xué)的精華,五子棋的黑白代表著陰陽(yáng),自古便有陰陽(yáng)和諧,五子棋的玩法很大程度上體現(xiàn)了這一思想。五子棋現(xiàn)在已經(jīng)作為一種競(jìng)技類(lèi)游戲活躍在世界賽場(chǎng),由此可見(jiàn)其價(jià)值之高。隨著互聯(lián)網(wǎng)時(shí)代的到來(lái),游戲行業(yè)迎來(lái)了春天,各種類(lèi)型的游戲?qū)映霾桓F,客戶端-服務(wù)器模式的游戲依然是時(shí)代的主流,但是僅限于那些畫(huà)面精美,制作精良的大型動(dòng)作游戲,現(xiàn)在許多休閑游戲不再需要下載客戶端了,只需要打開(kāi)瀏覽器,輸入網(wǎng)址,登陸即可開(kāi)始游戲,這就是瀏覽器-服務(wù)器模式的便捷之處,此次開(kāi)發(fā)的目的就是實(shí)現(xiàn)基于瀏覽器-服務(wù)器模式下的網(wǎng)絡(luò)
9、五子棋。在完成課題的同時(shí),也能夠接觸現(xiàn)在主流的WEB開(kāi)發(fā)模式和開(kāi)發(fā)工具,熟悉開(kāi)發(fā)流程和開(kāi)發(fā)技術(shù),也是對(duì)自己也是一種鍛煉。第二章 開(kāi)發(fā)工具、環(huán)境及技術(shù)支持2.1 涉及到的關(guān)鍵技術(shù)2.1.1 jspJSP全稱(chēng)Java Server Pages,JSP的全名叫做Java Server Pages,JSP屬于一種動(dòng)態(tài)網(wǎng)頁(yè)腳本語(yǔ)言,可以跨多個(gè)平臺(tái)進(jìn)行實(shí)現(xiàn)系統(tǒng)功能,因此具備較好的兼容性,和ASP語(yǔ)言相比,JSP雖然也是基于HTML文件進(jìn)行運(yùn)行,但是可以更好地實(shí)現(xiàn)與系統(tǒng)用戶之間的互動(dòng),讓用戶獲得更好的體驗(yàn)。JSP語(yǔ)言的技術(shù)基礎(chǔ)實(shí)際上為Java Servlet,Java Servlet可以結(jié)合JSP共同實(shí)現(xiàn)大
10、型軟件項(xiàng)目的開(kāi)發(fā)。JSP腳本語(yǔ)言的優(yōu)勢(shì)非常鮮明,首先JSP適用于多種編程語(yǔ)言,尤其非常適合搭配JAVA語(yǔ)言一起使用,結(jié)尾的標(biāo)簽內(nèi)容為,可以最大程度地體現(xiàn)出JAVA語(yǔ)言的優(yōu)勢(shì)和特點(diǎn),并且JSP語(yǔ)言本身也具備JAVA語(yǔ)言的一些特征。JSP語(yǔ)言還可以實(shí)現(xiàn)對(duì)Java web的UI部分,結(jié)合HTML文件、XML文件以及XHTML文件,采用嵌入式開(kāi)發(fā)來(lái)進(jìn)行前端設(shè)計(jì)。JSP語(yǔ)言還具備強(qiáng)大的兼容能力,只需要編輯一次,就可以在多個(gè)平臺(tái)間反復(fù)利用,極大地縮短了開(kāi)發(fā)人員的開(kāi)發(fā)時(shí)間,并且可以在多個(gè)編譯環(huán)境中進(jìn)行開(kāi)發(fā),方便開(kāi)發(fā)人員對(duì)系統(tǒng)進(jìn)行部署,有利于對(duì)系統(tǒng)環(huán)境進(jìn)行擴(kuò)充。JSP腳本語(yǔ)言還具有較為可靠的穩(wěn)定性和安全性,自
11、帶很多功能強(qiáng)大的工具,可以保證開(kāi)發(fā)人員開(kāi)發(fā)過(guò)程的順暢和便利,并且系統(tǒng)具有較高的安全性,再加上JSP技術(shù)是可以免費(fèi)下載的,這也讓JSP技術(shù)的應(yīng)用范圍不斷擴(kuò)大。此外,JSP語(yǔ)言可以實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)、用戶操作和選擇的相關(guān)信息以及JavaBeans組件來(lái)進(jìn)行訪問(wèn),并且實(shí)現(xiàn)多個(gè)網(wǎng)頁(yè)間的信息傳遞和信息共享。2.1.2 SSM框架SpringSpring是軟件開(kāi)發(fā)領(lǐng)域中一種常見(jiàn)的設(shè)計(jì)框架,其源代碼是對(duì)外開(kāi)放的,并且屬于面向接口編程思維,主要用于處理和解決業(yè)務(wù)邏輯層和其他層次的問(wèn)題。早在2003年,Spring就開(kāi)始在開(kāi)發(fā)領(lǐng)域被人們所熟知,一開(kāi)始的主要應(yīng)用在Java 語(yǔ)言的應(yīng)用程序的開(kāi)發(fā)上,創(chuàng)始人為Rod Joh
12、nson,因此,Spring框架不僅是JavaSE/EE分層,還是一種輕量級(jí)的全棧式框架 明日科技. JavaWeb項(xiàng)目開(kāi)發(fā)實(shí)戰(zhàn)入門(mén). 吉林大學(xué)出版社,2017.1。 Spring設(shè)計(jì)框架的核心為是IOC和AOP,其中IOC的全稱(chēng)為Inversion of Control,表示控制反轉(zhuǎn),AOP的全稱(chēng)為Aspect Oriented Programming,表示面向切面的編程方式??刂品崔D(zhuǎn),指的是對(duì)這些相互依賴(lài)對(duì)象的創(chuàng)建和協(xié)調(diào)工作都交由Spring容器來(lái)實(shí)現(xiàn),當(dāng)某個(gè)對(duì)象需要其他協(xié)作對(duì)象時(shí),由Spring動(dòng)態(tài)的通過(guò)依賴(lài)注入(DI, Dependency Injection)的方式來(lái)提供協(xié)作對(duì)象,其
13、只需要關(guān)注業(yè)務(wù)本身的邏輯即可。Spring從2004年的第一版發(fā)展到現(xiàn)在,已經(jīng)成為了一個(gè)生態(tài)帝國(guó),經(jīng)過(guò)不斷的改進(jìn)發(fā)展,現(xiàn)如今的SpringMVC、SpringBoot、Spring Cloud等解決方案共同構(gòu)成了Spring框架。有人親切的稱(chēng)之為:Spring 全家桶。在本項(xiàng)目中我們后臺(tái)選擇了Spring,SpringMVC,MyBatis這一套框架,搭配Maven,開(kāi)發(fā)效率成倍提高。SpringMVCSpringMVC框架主要基于web層的,其框架類(lèi)型屬于MVC模式,適合對(duì)Servlet進(jìn)行配合,從而快速處理web層的響應(yīng)和請(qǐng)求,還能快速獲取表單內(nèi)容,并且對(duì)表單進(jìn)行校驗(yàn) 楊靜.基于JAVA
14、WEB中MVC模式的研究和應(yīng)用J. 電腦知識(shí)與技術(shù),2014,9(28)68-71。SpringMVC的工作原理圖如圖1.1圖1.1SpringMVC框架根據(jù)配置來(lái)分,可以分為兩個(gè)啟動(dòng)流程:1、對(duì)ontextLoaderListener進(jìn)行初始化,完成對(duì)IoC容器的實(shí)例化后,將實(shí)例化的內(nèi)容注冊(cè)在ServletContext中。2、對(duì)DispatcherServlet進(jìn)行始化,通過(guò)建立上下文,將上下文注冊(cè)在ServletContext中。由于本項(xiàng)目重點(diǎn)為算法和通信,故不再深究。 MyBatis MyBatis 一開(kāi)始只是一個(gè)開(kāi)源項(xiàng)目,由Apache軟件基金會(huì)推出,直到2010年,apache s
15、oftware foundation 將MyBatis 項(xiàng)目添加進(jìn)入到google code中,正式更名為MyBatis,MyBatis因此而來(lái)。2013,再次將MyBatis添加進(jìn)入到Github。iBATIS源于“internet”和“abatis”這兩個(gè)意思,主要是基于Java語(yǔ)言的應(yīng)用在持久層上的一種設(shè)計(jì)框架,因此,iBATIS開(kāi)源提供多種持久層的框架,主要包括DAOs(Data Access Objects)、SQL Maps等 王循. JavaWeb快速開(kāi)發(fā)框架中部分關(guān)鍵技術(shù)初步研究D . 吉林大學(xué),2015。很多開(kāi)發(fā)人員習(xí)慣采用MyBatis中的ORM機(jī)制,因此MyBatis可以
16、面對(duì)純粹的Java對(duì)象,還可以根據(jù)Hibernate 來(lái)實(shí)現(xiàn)ORM,Hibernate 還可以基于數(shù)據(jù)操作生成相應(yīng)的SQL語(yǔ)句,但是MyBatis 在對(duì)數(shù)據(jù)庫(kù)進(jìn)行處理時(shí),其優(yōu)勢(shì)在于對(duì)SQL工作量、數(shù)據(jù)庫(kù)具有較好的可移植性,從而保證系統(tǒng)在設(shè)計(jì)的過(guò)程中可以具備更高的靈活性。因此,MyBatis 可以對(duì)ORM 的功能進(jìn)行有效補(bǔ)充和完善,具有非常重要的現(xiàn)實(shí)意義。本課題的設(shè)計(jì)屬于Maven項(xiàng)目,只需在pom.xml中引入依賴(lài)即可。pom.xml中的配置如下org.mybatismybatis3.2.8org.mybatismybatis-spring.3 WebSocketWebSock
17、et主要基于一個(gè)獨(dú)立的TCP連接,從而完成通信協(xié)議,協(xié)議的類(lèi)型屬于全雙工模式。在2011年,WebSocket就被IET列入為標(biāo)準(zhǔn)RFC 6455,并且讓RFC936不斷對(duì)其內(nèi)容進(jìn)行補(bǔ)充,因此,W3C將WebSocketAPI列為標(biāo)準(zhǔn) Chris Heilmann (December 8, 2010). WebSocket disabled in Firefox 4.Hacks.M. Retrieved 2011-05-09.。WebSocket可以簡(jiǎn)化服務(wù)器和客戶端之間的數(shù)據(jù)交換和交互功能,讓服務(wù)器主動(dòng)給客戶端發(fā)送數(shù)據(jù)內(nèi)容,因此,WebSocket API的瀏覽器和服務(wù)器
18、在完成首次握手后,就可以持續(xù)連接和通信,雙向進(jìn)行數(shù)據(jù)交互。選用Websocket技術(shù)作為服務(wù)器和客戶端交互手段的原因:HTML頁(yè)面早期是靜態(tài)的,不能進(jìn)行交互,后來(lái)出現(xiàn)了JavaScript,在一定程度上解決了交互問(wèn)題,但是JS在剛出現(xiàn)的時(shí)候并不能和服務(wù)器進(jìn)行交互,直到Ajax的出現(xiàn)。Ajax解決了頁(yè)面和服務(wù)端進(jìn)行交互的問(wèn)題,但是Ajax所有的請(qǐng)求都必須由客戶端發(fā)起,服務(wù)器端響應(yīng),如果服務(wù)器端有最新消息難以及時(shí)發(fā)送到客戶端,在WebSocket出現(xiàn)之前,客戶端和服務(wù)器的信息交互方法主要有以下三種方式:1. 輪詢(xún):客戶端定期持續(xù)向服務(wù)器發(fā)送請(qǐng)求內(nèi)容,從而判斷服務(wù)器是否存在新數(shù)據(jù),如果有新數(shù)據(jù),需要
19、傳送到客戶端進(jìn)行顯示。服務(wù)端如果沒(méi)有就返回給一個(gè)空的json或者xml文檔,此方法實(shí)現(xiàn)方式簡(jiǎn)單,但是會(huì)存在大量的無(wú)效請(qǐng)求,服務(wù)器端的資源占用過(guò)大 洪世勇. 高Java中基于Socket的網(wǎng)絡(luò)編程J. 軟件工程師,2013(01):61-622. 長(zhǎng)連接:類(lèi)似于輪詢(xún),不同點(diǎn)在于服務(wù)器端不會(huì)每次都會(huì)響應(yīng)客戶端的請(qǐng)求,只有在服務(wù)器端有最新的數(shù)據(jù)時(shí)才會(huì)響應(yīng)客戶端的請(qǐng)求,這種方式解決了長(zhǎng)連接存在無(wú)效請(qǐng)求的問(wèn)題3. Applet和Flash:實(shí)現(xiàn)了真正意義上的全雙工通信,但存在安全問(wèn)題,可移植性差WebSocket的優(yōu)勢(shì):1. 由于WebSocket與HTTP使用的端口相同,夸張的講幾乎所有防火墻都不會(huì)阻
20、塞Websocket連接。2. WebSocket使用HTTP協(xié)議進(jìn)行握手通信,因此它能夠輕而易舉的集成到瀏覽器中3. 使用WebSocket進(jìn)行通信時(shí),無(wú)論時(shí)服務(wù)器端還是客戶端都可以知道消息的啟動(dòng)或者到達(dá)4. WebSocket支持跨域,可以避免Ajax的限制2.1.4 javascriptJavascript屬于一種較為常見(jiàn)的腳本語(yǔ)言,主要用于Web的開(kāi)發(fā),為Web網(wǎng)頁(yè)設(shè)置多種動(dòng)態(tài)效果和相關(guān)功能,因?yàn)樵嫉腍TML語(yǔ)言功能性很差,只能實(shí)現(xiàn)一些靜態(tài)功能,而且界面單一。JavaScript的出現(xiàn)使得前端界面變得豐富多彩,通過(guò)精美的包裝,給用戶提供更流暢美觀的瀏覽效果。通常JavaScript腳
21、本語(yǔ)言是嵌入在HTML中來(lái)實(shí)現(xiàn)各種動(dòng)態(tài)的功能。Javascript的特點(diǎn):1. 是一種解釋類(lèi)型的腳本語(yǔ)言,簡(jiǎn)單易懂,易編寫(xiě)修改。2. 基于對(duì)象3. 可跨平臺(tái),可移植性強(qiáng)2.1.5 Maven Apache Maven是一種常見(jiàn)的軟件項(xiàng)目管理工具,主要基于POM模型,主要用戶對(duì)項(xiàng)目的構(gòu)建,從而對(duì)項(xiàng)目的相關(guān)文件進(jìn)行管理。除此之外也能提供中央倉(cāng)庫(kù),自動(dòng)幫我們下載構(gòu)件,省去了自己配置項(xiàng)目時(shí),需要下載工具的麻煩,如果想要引入jar包,根本無(wú)需手動(dòng)添加,只要在pom.xml下添加依賴(lài)即可。上面已經(jīng)提到了引入了MyBatis,本項(xiàng)目還引入了websocket等依賴(lài),依賴(lài)較多故不一一說(shuō)明。 2.2 開(kāi)發(fā)環(huán)境和
22、開(kāi)發(fā)工具開(kāi)發(fā)環(huán)境:win10 64位操作系統(tǒng)處理器:Intel(R) Core(TM) i5-4210U CPU 1.70GHz 2.40GHz內(nèi)存(RAM):12G開(kāi)發(fā)工具:JDK 1.7 IntelliJ IDEA 2019.1.2版本Mysql 5.7.25版本Apache Tomcat 8.5.35版本Navicat Premium12.0.18版本第三章 五子棋概要設(shè)計(jì)3.1 需求分析通過(guò)分析,根據(jù)需求,要求實(shí)現(xiàn)以下功能:1. 賬號(hào)的登陸、注冊(cè)、退出、密碼修改等功能2. 人機(jī)對(duì)戰(zhàn)功能3. 雙人網(wǎng)絡(luò)對(duì)戰(zhàn)功能4. 重開(kāi)對(duì)局功能5. 悔棋功能6. 認(rèn)輸功能通過(guò)將用戶要求轉(zhuǎn)化為具體功能,目的
23、更加明確,將功能模塊化,以便更快更好的完成該項(xiàng)目。3.2 模塊化系統(tǒng)分為3個(gè)主要模塊1. 登陸、注冊(cè)模塊2. 人機(jī)對(duì)戰(zhàn)模塊3. 雙人網(wǎng)絡(luò)對(duì)戰(zhàn)各個(gè)模塊功能結(jié)構(gòu)圖:1. 登陸、注冊(cè)模塊如圖3.1圖3.1登陸模塊2. 人機(jī)對(duì)戰(zhàn)模塊如圖3-2圖3.2 人機(jī)模塊3. 雙人網(wǎng)絡(luò)對(duì)戰(zhàn)如下圖3-3圖3.33.3 功能設(shè)計(jì)概述本系統(tǒng)是基于瀏覽器服務(wù)器模式下網(wǎng)絡(luò)五子棋程序,能夠?qū)崿F(xiàn)人機(jī)對(duì)戰(zhàn),雙人網(wǎng)絡(luò)對(duì)戰(zhàn),完成了五子棋游戲的一些基礎(chǔ)操作,如落子、勝負(fù)判定、認(rèn)輸、悔棋、棋盤(pán)保存等功能。游戲界面簡(jiǎn)潔,邏輯性較強(qiáng)。1. 服務(wù)器端設(shè)計(jì):處理用戶的登陸、注冊(cè)、密碼修改等信息,將用戶信息及時(shí)同步到數(shù)據(jù)庫(kù)中。2. 瀏覽器端設(shè)計(jì):
24、對(duì)表單進(jìn)行正確填寫(xiě),及時(shí)反饋給客戶端信息,使得用戶能夠進(jìn)行正常的登陸和游戲,并且點(diǎn)擊相應(yīng)的button發(fā)出鼠標(biāo)點(diǎn)擊請(qǐng)求事件,服務(wù)器通過(guò)不同的事件,進(jìn)行不同的反應(yīng)3. 用戶注冊(cè):首次游戲的用戶需要填寫(xiě)注冊(cè)信息,并將數(shù)據(jù)存入數(shù)據(jù)庫(kù)中。用戶通過(guò)注冊(cè)來(lái)創(chuàng)建自己的賬號(hào),以便登錄后進(jìn)行游戲。4. 用戶登錄:用已有的賬號(hào)信息登錄,通過(guò)和數(shù)據(jù)庫(kù)表User內(nèi)信息進(jìn)行比較,驗(yàn)證登錄,如果信息正確進(jìn)入主頁(yè)面,否則彈出信息錯(cuò)誤提示。5. 人機(jī)對(duì)戰(zhàn):選擇先手、后手,棋子顏色,重新開(kāi)始等功能人機(jī)對(duì)戰(zhàn)模式的系統(tǒng)流程圖如下圖3.4 寧淑榮 楊國(guó)興. Java五子棋游戲制作. 清華大學(xué)出版社,2017.5圖3.46. 雙人網(wǎng)絡(luò)
25、對(duì)戰(zhàn):認(rèn)輸、悔棋、重開(kāi)功能雙人網(wǎng)絡(luò)對(duì)戰(zhàn)模式系統(tǒng)流程圖如下圖3-5圖3.57. 修改密碼功能:輸入兩次新密碼即可修改密碼,將新密碼同步到數(shù)據(jù)庫(kù)User表中第四章 詳細(xì)設(shè)計(jì)和實(shí)現(xiàn)過(guò)程4.1 登錄注冊(cè)具體實(shí)現(xiàn)過(guò)程4.1.1 注冊(cè)功能注冊(cè)功能是由前臺(tái)的register.jsp頁(yè)面的form表單來(lái)實(shí)現(xiàn)的,通過(guò)點(diǎn)擊注冊(cè)提交form表單,再由controller接受表單信息,并作出響應(yīng)。代碼如下。 此時(shí)發(fā)出去的請(qǐng)求會(huì)被web.xml攔截下來(lái),進(jìn)而將請(qǐng)求內(nèi)容添加到相應(yīng)的RequestMapping中,RequestMapping屬于一種常見(jiàn)的注解方法,根據(jù)傳入的參數(shù)User 中的username判斷用戶是否存
26、在并注冊(cè),代碼如下: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)存在,請(qǐng)重新注冊(cè)!); return register; else userService.saveUser(user
27、); return login; UserMapper.xml中用戶注冊(cè)的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 登錄功能登錄功能起始是由前臺(tái)的login.jsp頁(yè)面的form表單開(kāi)始,點(diǎn)擊登錄提
28、交form表單 此時(shí)發(fā)出去的請(qǐng)求會(huì)在web.xml中被攔截,并且由相應(yīng)的RequestMapping方法來(lái)進(jìn)行處理,參數(shù)username 主要用來(lái)對(duì)用戶的登錄狀態(tài)進(jìn)行判斷,如果用戶已經(jīng)登錄成功,user將被添加到session中。所謂session,在軟件開(kāi)發(fā)領(lǐng)域,主要是指會(huì)話控制,因此,Session 的對(duì)象一般就是對(duì)用戶會(huì)話相關(guān)信息的存儲(chǔ),當(dāng)用戶在網(wǎng)頁(yè)中進(jìn)行操作,從而讓網(wǎng)頁(yè)跳轉(zhuǎn)時(shí),Session 對(duì)象對(duì)象依然存在,不會(huì)造成丟失的情況,如果用戶還沒(méi)有創(chuàng)建會(huì)話,在對(duì)web進(jìn)行操作時(shí), Web 服務(wù)器會(huì)自動(dòng)為用戶進(jìn)行創(chuàng)建,值得注意的是,如果Session 過(guò)期, Web 服務(wù)會(huì)將其終止掉。代碼如
29、下: 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, 密碼錯(cuò)誤); return login; els
30、e request.getSession().setAttribute(user, user1); return redirect:main.action; 有了session,我們便可配置攔截器,根據(jù)session中User信息是否存在來(lái)判斷用戶的登錄狀態(tài),如果用戶處于登陸狀態(tài)登錄,則通過(guò),否則將自動(dòng)將其攔截到登錄頁(yè)面 public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object obj) throws Exception String url = request.getRe
31、questURI(); User user = (User) request.getSession().getAttribute(user); if (user != null) /如果用戶已經(jīng)登錄 直接放行 return true; else /如果用戶訪問(wèn)的是登錄 注冊(cè)就放行,其他的攔截到登錄頁(yè)面 if (url.contains(login.action) | url.contains(register.action)| url.contains(index.action) return true; else response.sendRedirect(login.jsp); retur
32、n false; 以下是修改密碼的sql,流程基本如上,故不詳細(xì)說(shuō)明 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 人機(jī)對(duì)戰(zhàn)具體實(shí)現(xiàn)過(guò)程4.2.1 人機(jī)對(duì)戰(zhàn)棋盤(pán)畫(huà)法導(dǎo)入背景圖片,根據(jù)圖片像素大小,將背景圖片分割成15*
33、15的正方形網(wǎng)格作為棋盤(pán)棋盤(pán)的邊框,每個(gè)小格子的長(zhǎ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;div.chessboard div
34、 float: left; width: 36px; height: 36px; border-top: 0px solid #ccc; border-left: 0px solid #ccc; border-right: 0; border-bottom: 0; cursor: pointer;棋盤(pán)畫(huà)法:重復(fù)topline的畫(huà)法依次將背景圖片分割成15*15的網(wǎng)格 4.2.2 人機(jī)對(duì)戰(zhàn)輸贏的判定根據(jù)最后的落子來(lái)判斷輸贏,依次從X軸方向、Y軸方向、左斜方向、和右斜方向統(tǒng)計(jì)同一方向上的相同顏色連續(xù)棋子數(shù)目,如果在同一方向上相同連續(xù)棋子的數(shù)目等于5時(shí)持該顏色棋子的一方獲勝具體實(shí)現(xiàn)的代碼如下:pla
35、yerWinOrNot: function (i, j) var nums = 1, /連續(xù)棋子個(gè)數(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; /y方向 for (m = i -
36、 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) this.playerWin();
37、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();,4.2.3 人機(jī)AI算法各個(gè)
38、玩家每下一步棋時(shí),AI算法會(huì)遍歷整個(gè)棋盤(pán),通過(guò)計(jì)算出每個(gè)位置的權(quán)重值,再將權(quán)重值進(jìn)行比較,根據(jù)不同權(quán)重比,確定棋局的形式,規(guī)定固定棋型的分?jǐn)?shù),根據(jù)棋型,確定棋盤(pán)每個(gè)位置空子的分值,然后就下分值最高的那個(gè)點(diǎn) 裴博文. 五子棋人工智能權(quán)重估值算法J.電腦編程技巧與維護(hù), 2008 (06):69-73 。computeWeight: function (i, j) var weight = 14 - (Math.abs(i - 7) + Math.abs(j - 7), /基于棋盤(pán)位置權(quán)重 pointInfo = , /某點(diǎn)下子后連子信息 chessColor = this.AIPlayer =
39、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, pointInfo.side1, po
40、intInfo.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, pointInfo.side2, fal
41、se); /左斜方向 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, -chessCol
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 智能電網(wǎng)故障預(yù)警-深度研究
- 個(gè)人隱私保密合同2024:個(gè)人信息安全守護(hù)者3篇
- 天然氣交易市場(chǎng)分析-深度研究
- 可持續(xù)時(shí)尚材料創(chuàng)新應(yīng)用-深度研究
- 二零二五年度戶外電影放映搭棚服務(wù)合同3篇
- 字面常量在文本挖掘算法評(píng)估中的應(yīng)用-深度研究
- 2025年度智能停車(chē)設(shè)備產(chǎn)權(quán)車(chē)位銷(xiāo)售及維護(hù)合同4篇
- 2025年廣元中核職業(yè)技術(shù)學(xué)院高職單招高職單招英語(yǔ)2016-2024歷年頻考點(diǎn)試題含答案解析
- 2025年廣東行政職業(yè)學(xué)院高職單招高職單招英語(yǔ)2016-2024歷年頻考點(diǎn)試題含答案解析
- 專(zhuān)屬2024版委托商業(yè)運(yùn)營(yíng)合同版B版
- 2024山西廣播電視臺(tái)招聘專(zhuān)業(yè)技術(shù)崗位編制人員20人歷年高頻500題難、易錯(cuò)點(diǎn)模擬試題附帶答案詳解
- 新材料行業(yè)系列深度報(bào)告一:新材料行業(yè)研究框架
- 人教版小學(xué)英語(yǔ)各冊(cè)單詞表(帶英標(biāo))
- 廣東省潮州市潮安區(qū)2023-2024學(xué)年六年級(jí)上學(xué)期期末考試數(shù)學(xué)試題
- 鄉(xiāng)村治理中正式制度與非正式制度的關(guān)系解析
- 智能護(hù)理:人工智能助力的醫(yī)療創(chuàng)新
- 國(guó)家中小學(xué)智慧教育平臺(tái)培訓(xùn)專(zhuān)題講座
- 5G+教育5G技術(shù)在智慧校園教育專(zhuān)網(wǎng)系統(tǒng)的應(yīng)用
- VI設(shè)計(jì)輔助圖形設(shè)計(jì)
- 淺談小學(xué)勞動(dòng)教育的開(kāi)展與探究 論文
- 2023年全國(guó)4月高等教育自學(xué)考試管理學(xué)原理00054試題及答案新編
評(píng)論
0/150
提交評(píng)論