




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、攀枝花學院課程設計題 目: 黑白棋游戲 院 (系): 數(shù)學與計算機學院 年級專業(yè): 2014級軟件工程 姓 名: 田坤林 學 號: 201410804095 指導教師: 陳斌 二一五年一月十日攀枝花學院教務處制攀枝花學院本科學生課程設計任務書題目黑白棋游戲程序設計1、課程設計的目的通過完成一個完整項目,經(jīng)歷策劃、設計、開發(fā)、測試、驗收各階段,達到:(1)鞏固和實踐計算機圖形學課程中的理論和算法;(2)培養(yǎng)項目策劃、架構(gòu)設計、軟件開發(fā)和科研設計的能力;(3)培養(yǎng)認真學習、積極探索的工作態(tài)度和良好的合作精神。2、課程設計的內(nèi)容和要求(包括原始數(shù)據(jù)、技術(shù)要求、工作要求等)開發(fā)工具:TC或Visual
2、 C+開發(fā)人數(shù):1人實現(xiàn)內(nèi)容:設計開發(fā)一個黑白棋游戲程序功能要求:(1)盡量使用圖形用戶界面方式實現(xiàn)(不作硬性要求)(2)可以實現(xiàn)人機對戰(zhàn),自動判斷勝負(3)界面美觀3、主要參考文獻1 欽科技.Visual C+游戲設計M.北京:科海電子出版社,2003.1.2 何健輝.游戲軟件設計與開發(fā)大揭秘M.北京:人民郵電出版社.2000.3 坂本千尋.Visual C+專業(yè)游戲程序設計M.北京:中國鐵道出版社,2004.4 肖永亮等.計算機游戲程序設計M.北京:電子工業(yè)出版社,2005.等。4、課程設計工作進度計劃1、設計動員,布置任務,選題(1天) 2、查閱資料,分析、討論與設計(1天)3、編寫程序
3、,進行調(diào)試(4天)4、完成模塊聯(lián)調(diào),進行測試(2天)5、成果驗收,完成設計報告(2天)指導教師(簽字)日期年 月 日教研室意見:年 月 日學生(簽字): 接受任務時間: 2015 年 1 月 6 日注:任務書由指導教師填寫。課程設計(論文)指導教師成績評定表題目名稱評分項目分值得分評價內(nèi)涵工作表現(xiàn)20%01學習態(tài)度6遵守各項紀律,工作刻苦努力,具有良好的科學工作態(tài)度。02科學實踐、調(diào)研7通過實驗、試驗、查閱文獻、深入生產(chǎn)實踐等渠道獲取與課程設計有關(guān)的材料。03課題工作量7按期圓滿完成規(guī)定的任務,工作量飽滿。能力水平35%04綜合運用知識的能力10能運用所學知識和技能去發(fā)現(xiàn)與解決實際問題,能正確
4、處理實驗數(shù)據(jù),能對課題進行理論分析,得出有價值的結(jié)論。05應用文獻的能力5能獨立查閱相關(guān)文獻和從事其他調(diào)研;能提出并較好地論述課題的實施方案;有收集、加工各種信息及獲取新知識的能力。06設計(實驗)能力,方案的設計能力5能正確設計實驗方案,獨立進行裝置安裝、調(diào)試、操作等實驗工作,數(shù)據(jù)正確、可靠;研究思路清晰、完整。07計算及計算機應用能力5具有較強的數(shù)據(jù)運算與處理能力;能運用計算機進行資料搜集、加工、處理和輔助設計等。08對計算或?qū)嶒灲Y(jié)果的分析能力(綜合分析能力、技術(shù)經(jīng)濟分析能力)10具有較強的數(shù)據(jù)收集、分析、處理、綜合的能力。成果質(zhì)量45%09插圖(或圖紙)質(zhì)量、篇幅、設計(論文)規(guī)范化程度
5、5符合本專業(yè)相關(guān)規(guī)范或規(guī)定要求;規(guī)范化符合本文件第五條要求。10設計說明書(論文)質(zhì)量30綜述簡練完整,有見解;立論正確,論述充分,結(jié)論嚴謹合理;實驗正確,分析處理科學。11創(chuàng)新10對前人工作有改進或突破,或有獨特見解。成績指導教師評語指導教師簽名: 年月日攀枝花學院學生課程設計論文 摘要摘 要黑白棋,又叫反棋(Reversi)、奧賽羅棋(Othello)、蘋果棋或翻轉(zhuǎn)棋。黑白棋在西方和日本很流行。游戲通過相互翻轉(zhuǎn)對方的棋子,最后以棋盤上誰的棋子多來判斷勝負。棋子:黑白棋棋子每顆由黑白兩色組成,一面白,一面黑,共64個(包括棋盤中央的4個)。棋子呈圓餅形。 棋盤:黑白棋棋盤由64格的正方格組成
6、,游戲進行時棋子要下在格內(nèi)。棋盤可分為“角”、“邊”以及黑白棋“中腹”?,F(xiàn)今的棋盤多以8x8較為普遍。棋鐘:正式的比賽中可以使用棋鐘對選手的時間進行限制。非正式的對局中一般不使用棋鐘。 黑白棋的棋盤是一個有8*8方格的棋盤。下棋時將棋下在空格中間,而不是像圍棋一樣下在交叉點上。開始時在棋盤正中有兩白兩黑四個棋子交叉放置,黑棋總是先下子。 下子的方法把自己顏色的棋子放在棋盤的空格上,而當自己放下的棋子在橫、豎、斜八個方向內(nèi)有一個自己的棋子,則被夾在中間的全部翻轉(zhuǎn)會成為自己的棋子。并且,只有在可以翻轉(zhuǎn)棋子的地方才可以下子。如果玩家在棋盤上沒有地方可以下子,則該玩家對手可以連下。雙方都沒有棋子可以下
7、時棋局結(jié)束,以棋子數(shù)目來計算勝負,棋子多的一方獲勝。在棋盤還沒有下滿時,如果一方的棋子已經(jīng)被對方吃光,則棋局也結(jié)束。將對手棋子吃光的一方獲勝。 每個“翻轉(zhuǎn)棋”游戲開始時,棋盤上已經(jīng)交叉放好了四顆棋子。其中兩顆是黑棋,另兩顆是白棋。黑棋總是先走。 當您的棋子在某一直線方向包圍了對手的棋子時,就可以翻轉(zhuǎn)這些棋子的顏色,使它們成為您方的顏色。例如,如果您執(zhí)黑棋,并且看到在一排白棋的某一端是一顆黑棋,那么當您將一顆黑棋放在這一排的另一端時,所有的白棋都將翻轉(zhuǎn)并變?yōu)楹谄澹?所有的直線方向均有效:水平、垂直和斜線方向。 走棋的唯一規(guī)則是只能走包圍并翻轉(zhuǎn)對手的棋子。每一回合都必須至少翻轉(zhuǎn)一顆對手的棋子。 按
8、規(guī)則不能再走棋時,這一回合棄權(quán)。計算機會自動將控制權(quán)交給對方。關(guān)鍵詞 黑白棋 反棋(Reversi)奧賽羅棋(Othello)蘋果棋 翻轉(zhuǎn)棋II攀枝花學院學生課程設計論文 目錄目 錄摘 要I1 需求分析11.1 需求概述11.2 需求環(huán)境11.3 功能描述12 概要設計22.1 程序設計思路22.2 程序流程圖23 詳細設計33.1 程序源代碼33.1.1代碼功能33.1.2 所有源代碼34 測試與運行11結(jié)束語16III攀枝花學院學生課程設計論文 需求分析1 需求分析1.1 需求概述(1)收集資料,全面分析課題,分解問題,形成中體編程思路;(2)深入分析各個小問題,編寫個部分程序模塊;(3)
9、對于設計中用到的關(guān)鍵函數(shù),要聯(lián)系實際 問題進行具體介紹;(4)上機調(diào)試,確保程序能正確運行;(5)設計完成后提交課程設計報告;1.2 需求環(huán)境本課程設計需要的設備為硬件要求和軟件配置要求具體要求如下:硬件要求:一臺計算機。軟件配置:WINDOWS、C/VC+6.0。1.3 功能描述 編寫一個黑白棋游戲的C程序,包括以下功能:初始狀態(tài):在一個8*8的棋盤中央交叉排放黑白棋子各兩枚,白棋先走。(1)每個棋手下棋時,擺子的位置必須是以自己的棋子能包圍住對方一個或多個棋子,被包圍住的對方棋子將成為自己的棋子。包圍的方向可以是上下左右以及斜線8個方向,只要能連成一線即可。(2)當輪到某一個棋手下子,但是
10、他沒有可以包圍對方棋子的位置時,他必須停步,讓對方走棋,直到他可以走為止。(3)當棋盤上一方的棋子為0或者下滿64格,游戲結(jié)束,棋子少者輸。20攀枝花學院學生課程設計論文 概要設計2 概要設計2.1 程序設計思路(1) 首先設計程序進入界面。(2) 在說明玩家和電腦各自的棋子。(3) 詳細說明黑白棋的規(guī)則。并指引玩家開始游戲。(4) 初始棋盤。(5) 設計黑白棋程序的主體。2.2 程序流程圖 開始初始化棋盤界面棋手置棋棋盤變化分數(shù)處理輸出結(jié)果結(jié)束是否可繼續(xù)下棋重新開始否是 2 攀枝花學院學生課程設計論文 測試與運行3 詳細設計3.1 程序源代碼3.1.1 代碼功能#include <st
11、dio.h>#include <ctype.h> /定義了一批C語言字符分類函數(shù)/#define SIZE 8 /定義SIZE的值為8/void display(char boardSIZE); /顯示,輸出函數(shù)/int valid_moves(char boardSIZE,int movesSIZE,char player); /該函數(shù)將前一數(shù)組各項復制到后一數(shù)組當中。主要用于黑白棋的人工智能。/void make_move(char boardSIZE,int row,int col,char player); /該函數(shù)用于玩家的下棋位置行列的輸入/void comput
12、er_move(char boardSIZE,int movesSIZE,char player);int get_score(char boardSIZE,char player); /計算比賽結(jié)果/int best_move(char boardSIZE,int movesSIZE,char player);3.1.2 所有源代碼#include <stdio.h>#include <ctype.h>#define SIZE 8void display(char boardSIZE);int valid_moves(char boardSIZE,int movesS
13、IZE,char player);void make_move(char boardSIZE,int row,int col,char player);void computer_move(char boardSIZE,int movesSIZE,char player);int get_score(char boardSIZE,char player);int best_move(char boardSIZE,int movesSIZE,char player);int main()char boardSIZESIZE=0;int movesSIZESIZE=0;int row=0;int
14、col=0;int no_of_games=0;int no_of_moves=0;int invalid_moves=0;int comp_score=0;int user_score=0;char y=0;char x=0;char again=0;int player=0;printf("n黑白棋-奧賽羅棋-made by 田坤林nn");printf("歡迎來到黑白棋的世界!棋子有些奇怪哦,牢記住自己的棋子樣子吧!n");printf(" 你的棋子是這樣子的哦 - (o)n 電腦則是這這這樣子的 - (*).n");print
15、f("想在哪個方格落棋的話,請先輸入方格的行數(shù),n" "然后再輸入方格的列數(shù)哦!n");printf("n祝你好運哦,按回車鍵就開始咯。n");scanf("%c",&again);do player=+no_of_games%2; no_of_moves=4; for(row=0;row<SIZE;row+) for(col=0;col<SIZE;col+) boardrowcol=' ' boardSIZE/2-1SIZE/2-1=boardSIZE/2SIZE/2='
16、;o' boardSIZE/2-1SIZE/2=boardSIZE/2SIZE/2-1='*' do display(board); if(player+%2) if(valid_moves(board,moves,'o') for(;) fflush(stdin); printf("Please enter your move (行 列): "); scanf("%d%c",&x,&y); y=tolower(y)-'a' x-; if(x>=0&&y>
17、=0&&x<SIZE&&y<SIZE&&movesxy) make_move(board,x,y,'o'); no_of_moves+; break; else printf("莫法這樣子下的哦,換個地方試試。n"); else if(+invalid_moves<2) fflush(stdin); printf("n哦啊,我竟走投無路了,哎,你來吧!"); scanf("%c",&again); else printf("n(*_*)
18、 ,我們都沒法落子了,Game Over!看看誰的棋子多誰就贏啦.n"); else if(valid_moves(board,moves,'*') invalid_moves=0; computer_move(board,moves,'*'); no_of_moves+; else if(+invalid_moves<2) printf("n哦啊,我竟走投無路了,哎,你來吧!n"); else printf("n(*_*) ,我們都沒法落子了,Game Over!看看誰的棋子多誰就贏啦.n"); whil
19、e(no_of_moves<SIZE*SIZE&&invalid_moves<2); display(board); comp_score=user_score=0; for(row=0;row<SIZE;row+) for(col=0;col<SIZE;col+) comp_score+=boardrowcol='*' user_score+=boardrowcol='o' printf("The final score is:n"); printf("Computer %dn User %
20、dnn",comp_score,user_score); fflush(stdin); printf("你想再來一發(fā)么? (y/n): "); scanf("%c",&again);while(tolower(again)='y');printf("n嘻嘻,下次再見咯!n");void display(char boardSIZE)int row=0;int col=0;char col_label='a'printf("n ");for(col=0;col<
21、SIZE;col+) printf(" %c",col_label+col);printf("n");for(row=0;row<SIZE;row+) printf(" +"); for(col=0;col<SIZE;col+) printf("-+"); printf("n%2d|",row+1); for(col=0;col<SIZE;col+) printf(" %c |",boardrowcol); printf("n");pri
22、ntf(" +");for(col=0;col<SIZE;col+) printf("-+");printf("n");int valid_moves(char boardSIZE,int movesSIZE,char player)int rowdelta=0;int coldelta=0;int row=0;int col=0;int x=0;int y=0;int no_of_moves=0;char opponent=(player='o')?'*':'o'for(row=
23、0;row<SIZE;row+) for(col=0;col<SIZE;col+) movesrowcol=0;for(row=0;row<SIZE;row+) for(col=0;col<SIZE;col+) if(boardrowcol!=' ') continue; for(rowdelta=-1;rowdelta<=1;rowdelta+) for(coldelta=-1;coldelta<=1;coldelta+) if(row+rowdelta<0|row+rowdelta>=SIZE| col+coldelta<
24、;0|col+coldelta>=SIZE| (rowdelta=0&&coldelta=0) continue; if(boardrow+rowdeltacol+coldelta=opponent) x=row+rowdelta; y=col+coldelta; for(;) x+=rowdelta; y+=coldelta; if(x<0|x>=SIZE|y<0|y>=SIZE) break; if(boardxy=' ') break; if(boardxy=player) movesrowcol=1; no_of_moves
25、+; break; return no_of_moves;void make_move(char boardSIZE,int row,int col,char player)int rowdelta=0;int coldelta=0;int x=0;int y=0;char opponent=(player='o')?'*':'o'boardrowcol=player;for(rowdelta=-1;rowdelta<=1;rowdelta+) for(coldelta=-1;coldelta<=1;coldelta+) if(row
26、+rowdelta<0|row+rowdelta>=SIZE| col+coldelta<0|col+coldelta>=SIZE| (rowdelta=0&&coldelta=0) continue; if(boardrow+rowdeltacol+coldelta=opponent) x=row+rowdelta; y=col+coldelta; for(;) x+=rowdelta; y+=coldelta; if(x<0|x>=SIZE|y<0|y>=SIZE) break; if(boardxy=' ')
27、 break; if(boardxy=player) while(boardx-=rowdeltay-=coldelta=opponent) boardxy=player; break; int get_score(char boardSIZE,char player)int score=0;int row=0;int col=0;char opponent=player='o'?'*':'o'for(row=0;row<SIZE;row+) for(col=0;col<SIZE;col+) score-=boardrowcol=op
28、ponent; score+=boardrowcol=player; return score;int best_move(char boardSIZE,int movesSIZE,char player)int row=0;int col=0;int i=0;int j=0;char opponent=player='o'?'*':'o'char new_boardSIZESIZE=0;int score=0;int new_score=0;for(row=0;row<SIZE;row+) for(col=0;col<SIZE;co
29、l+) if(!movesrowcol) continue; for(i=0;i<SIZE;i+) for(j=0;j<SIZE;j+) new_boardij=boardij; make_move(new_board,row,col,player); new_score=get_score(new_board,player); if(score<new_score) score=new_score; return score;void computer_move(char boardSIZE,int movesSIZE,char player)int row=0;int c
30、ol=0;int best_row=0;int best_col=0;int i=0;int j=0;int new_score=0;int score=100;char temp_boardSIZESIZE;int temp_movesSIZESIZE;char opponent=player='o'?'*':'o'for(row=0;row<SIZE;row+) for(col=0;col<SIZE;col+) if(movesrowcol=0) continue; for(i=0;i<SIZE;i+) for(j=0;j&
31、lt;SIZE;j+) temp_boardij=boardij; make_move(temp_board,row,col,player); valid_moves(temp_board,temp_moves,opponent); new_score=best_move(temp_board,temp_moves,opponent); if(new_score<score) score=new_score; best_row=row; best_col=col; make_move(board,best_row,best_col,player); 結(jié)束語通過本次黑白棋程序設計,我覺得對自己有
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度專業(yè)車庫租賃與物業(yè)管理合同
- 服裝批發(fā)市場垃圾清運合同
- 2025年度多人共同經(jīng)營網(wǎng)店借款及利潤分配合同
- 二零二五年度玉器珠寶市場拓展與區(qū)域代理合同
- 2025年度安全無憂型個人租房合同
- 2025年度企業(yè)節(jié)能減排改造補貼協(xié)議書
- 2025年度員工心理健康關(guān)懷上班協(xié)議合同全新版
- 2025年度文化場館設施維護勞務協(xié)議書
- 2025年度影視演員場記助理職業(yè)素養(yǎng)培訓聘用合同
- 2025年佳木斯職業(yè)學院單招職業(yè)技能測試題庫新版
- 中國春節(jié)ppt英文版 Chinese New Year
- 高中數(shù)學《6.2 排列與組合》課件與導學案
- 腸道健康講座活動策劃
- 小學三年級下冊數(shù)學教案3篇
- 《云南紅色旅游》課件
- 孤殘兒童試題庫(含答案)
- 新人美版高中美術(shù)選擇性必修“繪畫”《認識多面繪畫-繪畫的工具與材料》教學設計
- premiere設計畢業(yè)論文
- 三年級體育教學進度表
- 醫(yī)務人員法律法規(guī)專題培訓
- 《紅樓夢第四回》課件
評論
0/150
提交評論