版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、精選優(yōu)質(zhì)文檔-傾情為你奉上福建農(nóng)林大學(xué)計(jì)算機(jī)與信息學(xué)院課程設(shè)計(jì)報(bào)告課程名稱:面向?qū)ο蟪绦蛟O(shè)計(jì)課程設(shè)計(jì)課程設(shè)計(jì)題目:五子棋姓 名:系:計(jì)算機(jī)專 業(yè):軟件工程年 級:學(xué) 號:指導(dǎo)教師:職 稱:年 月 日福建農(nóng)林大學(xué)計(jì)算機(jī)與信息學(xué)院計(jì)算機(jī)類課程設(shè)計(jì)報(bào)告結(jié)果評定評語:評分項(xiàng)目分值得分課程設(shè)計(jì)報(bào)告符合規(guī)范10分類圖、用例圖、系統(tǒng)框圖合理30分主要技術(shù)線路正確30分設(shè)計(jì)報(bào)告條理清晰、重點(diǎn)突出20分有一定創(chuàng)新性、難易程度10分成績:指導(dǎo)教師簽字:任務(wù)下達(dá)日期:12 月6日評定日期:目 錄.7.7 類的介紹.84.5 (5) 各個(gè)模塊的介紹.84.6 (6)程序運(yùn)行圖示.145.總結(jié).16參考文獻(xiàn).17(a)
2、 1.設(shè)計(jì)目的(1)加深我對面向?qū)ο蟪绦蚧镜睦斫夂驼莆铡?2)熟練掌握基本流程圖的繪制。(3)熟練visio的一些操作方法。(4)能夠在調(diào)試程序中快速發(fā)現(xiàn)并排除程序中的錯(cuò)誤。(5)提高面向?qū)ο蟪绦蛘Z言解決實(shí)際中的問題的能力。(b) 2.設(shè)計(jì)要求五子棋是玩家在游戲棋盤上逐個(gè)輸入黑子或白子的坐標(biāo),因此游戲要求在DOS界面生成一個(gè)可供操作的棋盤。通過輸入坐標(biāo)完成對應(yīng)落子情況,在輸入過程中判斷落子是否正確、是否有一方勝利等情況。編寫代碼可以在VC6.0下編譯通過。游戲要能實(shí)現(xiàn)五子棋游戲的簡單操作。程序中要體現(xiàn)面向?qū)ο笏枷搿?(c) 3.設(shè)計(jì)方案(必須包含系統(tǒng)功能說明、用例圖和類圖)一、 用例圖落子基
3、于用戶的用例圖步數(shù)用例圖系統(tǒng)用例圖1)輸出棋盤界面菜單及圖像2)開始進(jìn)入控制3)黑白棋正確輸入格式控制4)判斷黑白輸贏控制5)正確計(jì)數(shù)對羿步數(shù)及下一步所要走的棋盤界面 二、 類圖(d) 4.設(shè)計(jì)內(nèi)容本系統(tǒng)的主要結(jié)構(gòu)和類結(jié)構(gòu)1)五子棋功能實(shí)現(xiàn)的主要結(jié)構(gòu)函數(shù)void getpointxy(); /白棋出子函數(shù)void getpointmn(); /黑棋出子函數(shù)void showqipan(); /實(shí)現(xiàn)20行20列正方形界面輸出void print(); /輸出下一棋盤界面及計(jì)數(shù)bool IsxyWin(); /白棋獲勝bool IsmnWin(); /黑棋獲勝void menu();/顯示開始菜單
4、界面(2)五子棋類的結(jié)構(gòu)class five int x,y,m,n,num_xy,num_mn; char qipan2020; /定義20行20列的數(shù)組public: five(int X = 0,int Y =0,int M = 0,int N = 0,int Num_xy = 0,int Num_mn = 0) /構(gòu)造函數(shù)初始化x = X; y = Y; m = M; n = N; num_xy = Num_xy; num_mn = Num_mn; for(int i = 0 ; i < 20 ; i +) /輸出20行20列的棋盤界面 for(int j = 0 ;j <
5、 20 ; j +) qipanij = '.' 系統(tǒng)工作流程介紹。 類的介紹:該類完成了對輸入棋子坐標(biāo)的初始化,通過for循環(huán)實(shí)現(xiàn)了一個(gè)20行20列的坐標(biāo),在公有成員中定義了相應(yīng)的功能函數(shù)void getpointxy(); /白棋出子及計(jì)數(shù)void getpointmn(); /黑棋出子及計(jì)數(shù)void showqipan(); /實(shí)現(xiàn)20行20列正方形界面輸出void print(); /輸出下一棋盤界面bool IsxyWin(); /白棋獲勝bool IsmnWin(); /黑棋獲勝void menu();/顯示開始菜單界面(5)各個(gè)模塊的介紹:)類的實(shí)現(xiàn):包括對數(shù)據(jù)成
6、員的賦值和成員函數(shù)的初始化還有通過for循環(huán)實(shí)現(xiàn)對20行20列坐標(biāo)的定義:源代碼如下class five int x,y,m,n,num_xy,num_mn; char qipan2020; /定義20行20列的數(shù)組public: five(int X = 0,int Y =0,int M = 0,int N = 0,int Num_xy = 0,int Num_mn = 0) /構(gòu)造函數(shù)初始化x = X; y = Y; m = M; n = N; num_xy = Num_xy; num_mn = Num_mn; for(int i = 0 ; i < 20 ; i +) /輸出20行
7、20列的棋盤界面 for(int j = 0 ;j < 20 ; j +) qipanij = '.' void getpointxy(); /白棋出子及計(jì)數(shù)void getpointmn(); /黑棋出子及計(jì)數(shù)void showqipan(); /實(shí)現(xiàn)20行20列正方形界面輸出void print(); /輸出下一棋盤界面bool IsxyWin(); /白棋獲勝bool IsmnWin(); /黑棋獲勝void menu();/顯示開始菜單界面;)白棋和黑棋落子情況的判斷的實(shí)現(xiàn),源代碼如下:void five:getpointxy() /判斷白棋出子情況及對其計(jì)數(shù) s
8、td:cout<<"請分別輸入第"<<num_xy+1<<"步白棋的橫坐標(biāo)和縱坐標(biāo):" std:cin >> y >> x; if (!(1<=x&&x<=20&&1<=y&&y<=20) std:cout << "輸入錯(cuò)誤,請重新輸入:"<<endl ; getpointxy(); else if(qipany-1x-1 != '.' ) std:cout <
9、;< "請所下的位置已經(jīng)有棋子,請重新輸入:" <<endl; getpointxy(); else if(num_xy+num_mn >= 400) std:cout << "棋盤已滿,平局!" << endl; exit(0); else qipany-1x-1 = 'O' num_xy+; void five:getpointmn() /判斷黑棋出子情況及對其計(jì)數(shù) std:cout<<"請分別輸入第"<<num_mn+1<<&qu
10、ot;步黑棋的橫坐標(biāo)和縱坐標(biāo):" std:cin >> n >> m; if (!(1<=m&&m<=20&&1<=n&&n<=20) std:cout << "輸入錯(cuò)誤,請重新輸入:"<<endl ; getpointmn(); else if(qipann-1m-1!='.') std:cout << "請所下的位置已經(jīng)有棋子,請重新輸入:" <<endl; getpointmn()
11、; else if(num_xy+num_mn >= 400) std:cout << "棋盤已滿,平局!" << endl; exit(0); else qipann-1m-1 = '*' num_mn+; 3)菜單界面模塊void five:menu()/進(jìn)入菜單界面char *q=new char9;cin>>q;if(strcmp(q,"c")five:showqipan();4)輸出模塊void five:showqipan() /輸出20行20列的坐標(biāo)數(shù)值 int p=0,q=0; f
12、or(int i = 0 ; i <= 20 ; i+) if(p<10) std:cout << p <<' ' else std:cout << p ; p+; cout << endl; for(i = 0 ; i < 20 ; i+) if(i>=0) q+; if(q<10) std:cout << q <<' ' else std:cout << q; for(int j = 0 ; j < 20 ; j +) std:cout &
13、lt;< qipanij<<' ' ; std:cout << endl; void five:print() int p=0,q=0; for(int i = 0 ; i <= 20 ; i+) if(p<10) std:cout << p <<' ' else std:cout << p ; p+; std:cout << endl; for(i = 0 ; i < 20 ; i+) if(i>=0) q+; if(q<10) std:cout <
14、;< q <<' ' else std:cout << q; for(int j = 0 ; j < 20 ; j +) std:cout << qipanij<<' ' ; std:cout << endl; 5)黑白棋輸贏的判斷,其源代碼如下:bool five:IsxyWin()/白棋獲勝實(shí)現(xiàn)函數(shù) int num1=1,num2=1,num3=1,num4=1; for(int i = x ; i < x+5&& x+5<20 ; i +) if(qipan
15、y-1i != 'O') break; if(qipany-1i = 'O') num1+; for(i = x-2; i >= 0 ; i -) if(qipany-1i != 'O') break; if(qipany-1i = 'O') num1+; for( i = y ; i < y+5 ; i +) if(qipanix-1 != 'O') break; if(qipanix-1 = 'O') num2+; for(i = y-2; i >= 0 ; i -) if(q
16、ipanix-1 != 'O') break; if(qipanix-1 = 'O') num2+; for(i = 0 ; i < 5 && x+i<20 && y+i<20; i+ ) if(qipany+ix+i != 'O') break; if(qipany+ix+i ='O') num3+; for(i = 0 ; x - i -2>=0 && y-i-2>=0 && i < 5;i+ ) if(qipany-i-2x-
17、i-2 != 'O') break; if(qipany-i-2x-i-2 = 'O') num3+; for(i = 0 ; x + i < 20 && y - i - 2 >= 0 && i < 5;i +) if(qipany-i-2x+i != 'O') break; if(qipany-i-2x+i = 'O') num4+; for(i = 0 ; y + i < 20 && x - i - 2 >= 0 && i <
18、5;i +) if(qipany+ix-i-2 != 'O') break; if(qipany+ix-i-2 = 'O') num4+; if(num1>=5|num2>=5|num3>=5|num4>=5)return 1; else return 0; 黑棋獲勝情況與白棋類似6)主函數(shù)模塊void main() std:cout<<"*歡迎使用*_*"<<endl;std:cout<<"_"<<endl;std:cout<<"
19、;|"<<endl; std:cout<<"|"<<endl;std:cout<<"|"<<endl;std:cout<<"|"<<endl;std:cout<<"|"<<endl;std:cout<<"|"<<endl;std:cout<<"|"<<endl;std:cout<<"|&qu
20、ot;<<endl;std:cout<<"|"<<endl;std:cout<<"|"<<endl;std:cout<<"|"<<endl;std:cout<<"|"<<endl;std:cout<<"|"<<endl;std:cout<<"|"<<endl;std:cout<<"|"<
21、;<endl;std:cout<<"|"<<endl;std:cout<<"|"<<endl;std:cout<<"|-"<<endl;std:cout<<"進(jìn)入按任意鍵"five a; /定義一個(gè)類的對象int temp; a.menu();std:cout << "這是本游戲的棋盤,請按坐標(biāo)輸入棋子:" << endl; a.showqipan(); /通過對象調(diào)用功能函數(shù)std
22、:cout << "確認(rèn)請按1,退出請按其他鍵:" std:cin >> temp; if(temp !=1) /游戲開始及退出控制exit(1); if(temp = 1) std:cout << "游戲開始:" << endl; for(int i = 0 ; ; i +) a.getpointxy(); a.print();if(a.IsxyWin() std:cout << "白棋勝!" << endl; break; a.getpointmn(); a.
23、print();if(a.IsmnWin() std:cout << "黑棋勝!" << endl; break; std:cout << "游戲結(jié)束n" (6)程序運(yùn)行圖示:進(jìn)入游戲界面棋盤界面通過輸入橫縱坐標(biāo)完成落子下在同一個(gè)地方的情況獲勝情況5.總結(jié))通過此次課程設(shè)計(jì),讓我產(chǎn)生對益智游戲編程的興趣,尤其是當(dāng)我真正把那程序運(yùn)行出來時(shí),那種興奮勁,無法比擬。)在這次課設(shè)的過程中當(dāng)然也讓我學(xué)到了很多東西,讓我學(xué)到了很多課外的相關(guān)+高層次的東西,當(dāng)然其中也復(fù)習(xí)到了+知識,尤其是通過類的運(yùn)用,更讓我體會面向?qū)ο笤诰幊痰倪^程
24、中的作用。3 )由于能力所限,所以該五子棋個(gè)相關(guān)功能還比較少,代碼還過于冗長,我相信接下去只要我繼續(xù)努力,一定可以克服次問題。參考文獻(xiàn)1 廉師友編著,C+面向?qū)ο蟪绦蛟O(shè)計(jì)簡明教程,西安電子科技大學(xué)出版社,19982 李師賢等編著,面向?qū)ο蟪绦蛟O(shè)計(jì)基礎(chǔ),高等教育出版社,19983 譚浩強(qiáng)編著,C+程序設(shè)計(jì),清華大學(xué)出版社,2004附加源代碼#include<iostream>using namespace std;class five int x,y,m,n,num_xy,num_mn; char qipan2020; /定義20行20列的數(shù)組public: five(int X =
25、 0,int Y =0,int M = 0,int N = 0,int Num_xy = 0,int Num_mn = 0) /構(gòu)造函數(shù)初始化x = X; y = Y; m = M; n = N; num_xy = Num_xy; num_mn = Num_mn; for(int i = 0 ; i < 20 ; i +) /輸出20行20列的棋盤界面 for(int j = 0 ;j < 20 ; j +) qipanij = '.' void getpointxy(); /白棋出子及計(jì)數(shù)void getpointmn(); /黑棋出子及計(jì)數(shù)void showqi
26、pan(); /實(shí)現(xiàn)20行20列正方形界面輸出void print(); /輸出下一棋盤界面bool IsxyWin(); /白棋獲勝bool IsmnWin(); /黑棋獲勝void menu();/顯示開始菜單界面; void five:getpointxy() /判斷白棋出子情況及對其計(jì)數(shù) std:cout<<"請分別輸入第"<<num_xy+1<<"步白棋的橫坐標(biāo)和縱坐標(biāo):" std:cin >> y >> x; if (!(1<=x&&x<=20&&
27、amp;1<=y&&y<=20) std:cout << "輸入錯(cuò)誤,請重新輸入:"<<endl ; getpointxy(); else if(qipany-1x-1 != '.' ) std:cout << "請所下的位置已經(jīng)有棋子,請重新輸入:" <<endl; getpointxy(); else if(num_xy+num_mn >= 400) std:cout << "棋盤已滿,平局!" << endl
28、; exit(0); else qipany-1x-1 = 'O' num_xy+; void five:getpointmn() /判斷黑棋出子情況及對其計(jì)數(shù) std:cout<<"請分別輸入第"<<num_mn+1<<"步黑棋的橫坐標(biāo)和縱坐標(biāo):" std:cin >> n >> m; if (!(1<=m&&m<=20&&1<=n&&n<=20) std:cout << "輸入錯(cuò)誤,
29、請重新輸入:"<<endl ; getpointmn(); else if(qipann-1m-1!='.') std:cout << "請所下的位置已經(jīng)有棋子,請重新輸入:" <<endl; getpointmn(); else if(num_xy+num_mn >= 400) std:cout << "棋盤已滿,平局!" << endl; exit(0); else qipann-1m-1 = '*' num_mn+; void five:me
30、nu()/進(jìn)入菜單界面char *q=new char9;cin>>q;if(strcmp(q,"c")five:showqipan();void five:showqipan() /輸出20行20列的坐標(biāo)數(shù)值 int p=0,q=0; for(int i = 0 ; i <= 20 ; i+) if(p<10) std:cout << p <<' ' else std:cout << p ; p+; cout << endl; for(i = 0 ; i < 20 ; i+) i
31、f(i>=0) q+; if(q<10) std:cout << q <<' ' else std:cout << q; for(int j = 0 ; j < 20 ; j +) std:cout << qipanij<<' ' ; std:cout << endl; void five:print() int p=0,q=0; for(int i = 0 ; i <= 20 ; i+) if(p<10) std:cout << p <<
32、;' ' else std:cout << p ; p+; std:cout << endl; for(i = 0 ; i < 20 ; i+) if(i>=0) q+; if(q<10) std:cout << q <<' ' else std:cout << q; for(int j = 0 ; j < 20 ; j +) std:cout << qipanij<<' ' ; std:cout << endl; bool f
33、ive:IsxyWin()/白棋獲勝實(shí)現(xiàn)函數(shù) int num1=1,num2=1,num3=1,num4=1; for(int i = x ; i < x+5&& x+5<20 ; i +) if(qipany-1i != 'O') break; if(qipany-1i = 'O') num1+; for(i = x-2; i >= 0 ; i -) if(qipany-1i != 'O') break; if(qipany-1i = 'O') num1+; for( i = y ; i <
34、; y+5 ; i +) if(qipanix-1 != 'O') break; if(qipanix-1 = 'O') num2+; for(i = y-2; i >= 0 ; i -) if(qipanix-1 != 'O') break; if(qipanix-1 = 'O') num2+; for(i = 0 ; i < 5 && x+i<20 && y+i<20; i+ ) if(qipany+ix+i != 'O') break; if(qipan
35、y+ix+i ='O') num3+; for(i = 0 ; x - i -2>=0 && y-i-2>=0 && i < 5;i+ ) if(qipany-i-2x-i-2 != 'O') break; if(qipany-i-2x-i-2 = 'O') num3+; for(i = 0 ; x + i < 20 && y - i - 2 >= 0 && i < 5;i +) if(qipany-i-2x+i != 'O') b
36、reak; if(qipany-i-2x+i = 'O') num4+; for(i = 0 ; y + i < 20 && x - i - 2 >= 0 && i < 5;i +) if(qipany+ix-i-2 != 'O') break; if(qipany+ix-i-2 = 'O') num4+; if(num1>=5|num2>=5|num3>=5|num4>=5) return 1; else return 0; bool five:IsmnWin() /黑棋
37、獲勝實(shí)現(xiàn)函數(shù) int num1=1,num2=1,num3=1,num4=1; for(int i = m ; i < m+5&& m+5<20 ; i +) if(qipann-1i != '*') break; if(qipann-1i = '*') num1+; for(i = m-2; i >= 0 ; i -) if(qipann-1i != '*') break; if(qipann-1i = '*') num1+; for( i = n ; i < n+5 ; i +) if(
38、qipanim-1 != '*') break; if(qipanim-1 = '*') num2+; for(i = n-2; i >= 0 ; i -) if(qipanim-1 != '*') break; if(qipanim-1 = '*') num2+; for(i = 0 ; i < 5 && m+i<20 && n+i<20; i+ ) if(qipann+im+i != '*') break; if(qipann+im+i ='*
39、39;) num3+; for(i = 0 ; m - i -2>=0 && n-i-2>=0 && i < 5;i+ ) if(qipann-i-2m-i-2 != '*') break; if(qipann-i-2m-i-2 = '*') num3+; for(i = 0 ; m + i < 20 && n - i - 2 >= 0 && i < 5;i +) if(qipann-i-2m+i != '*') break; if(qipann-
40、i-2m+i = '*') num4+; for(i = 0 ; n + i < 20 && m - i - 2 >= 0 && i < 5;i +) if(qipann+im-i-2 != '*') break; if(qipann+im-i-2 = '*') num4+; if(num1>=5|num2>=5|num3>=5|num4>=5) return 1; else return 0; void main() std:cout<<"*歡迎使用*_*"<<endl;std:cout<<"_"<<endl;std:c
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年建筑施工春節(jié)節(jié)后復(fù)工復(fù)產(chǎn)工作專項(xiàng)方案
- 《課堂教學(xué)研究的》課件
- 小學(xué)一年級20以內(nèi)數(shù)學(xué)口算強(qiáng)化練習(xí)題
- 《初中幾何課堂文化》課件
- 小學(xué)數(shù)學(xué)蘇教版三年級上冊第一單元《兩三位數(shù)乘一位數(shù)混合運(yùn)算》試題
- 學(xué)案美文如畫點(diǎn)題扣題升格學(xué)案
- 《綜合樓體報(bào)告前提》課件
- 《化學(xué)專利撰寫》課件
- 《樓宇設(shè)備監(jiān)控系統(tǒng)》課件
- 廣東省廣州市越秀區(qū)2023-2024學(xué)年高三上學(xué)期期末考試英語試題
- 華師大版八年級下冊數(shù)學(xué)全冊課件
- 慢性高血壓并發(fā)重度子癇前期1
- 常用工具的正確使用
- 管材管件供貨計(jì)劃、運(yùn)輸方案及保障措施及售后服務(wù)
- (2024年)腸梗阻完整版課件
- 國際視野開拓全球
- T-CARM 002-2023 康復(fù)醫(yī)院建設(shè)標(biāo)準(zhǔn)
- 工程機(jī)械租賃服務(wù)方案及保障措施范本
- 2024年不良資產(chǎn)處置相關(guān)項(xiàng)目投資計(jì)劃書
- 腸道支架植入術(shù)培訓(xùn)課件
- 數(shù)字政府建設(shè)行業(yè)分析
評論
0/150
提交評論