版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
《程序設(shè)計(jì)基礎(chǔ)》
課程設(shè)計(jì)報(bào)告
題目:制作萬年歷井字棋游戲員工工資管理系統(tǒng)
院(系):_______________________
專業(yè)班級:_____________
學(xué)生姓名:________________________________
學(xué)號:__________________________
2012年6月日至2012年6月_22_日
華中科技大學(xué)武昌分校制
程序設(shè)計(jì)基礎(chǔ)課程設(shè)計(jì)任務(wù)書
一、設(shè)計(jì)(調(diào)查報(bào)告/論文)題目
制作萬年歷井字棋游戲員工工資管理系統(tǒng)
二、設(shè)計(jì)(調(diào)查報(bào)告/論文)主要內(nèi)容
1.制作萬年歷
主要內(nèi)容:
顯示公元后任何年份的日歷,日歷以月份順序排列,每月以星期順序排列,類似于
一般掛歷上的格式,可參考如下格式:
輸入年份:2010
2010年
一月
星期日星期一星期二星期三星期四星期五星期六
12
3456789
10111213141516
17181920212223
24252627282930
31
十二月
星期日星期一星期二星期三星期四星期五星期六
1234
567891011
12131415161718
19202122232425
262728293031
請按任意鍵繼續(xù)…
2.井字棋游戲
主要內(nèi)容:
井字棋游戲是小朋友經(jīng)常玩的小游戲,在正方形中有一個(gè)“井”字,把正方形分為
9個(gè)格,就形成一個(gè)棋盤,如圖1所示,實(shí)際上就是一個(gè)3X3方格的棋盤,一個(gè)玩家選
擇一個(gè)棋格畫X,緊接著另一個(gè)玩家選擇一個(gè)空棋格畫。,雙方輪流走棋,直到一個(gè)玩
家占領(lǐng)一行,一列或一條對角線獲勝,這時(shí)比賽結(jié)束,圖2為畫X的選手獲勝示意圖。
設(shè)計(jì)一個(gè)程序?qū)崿F(xiàn)人與計(jì)算機(jī)玩井字棋游戲,假設(shè)計(jì)算機(jī)畫X,人畫。,人可選擇
是否先走。
圖2畫X的選手獲勝示意圖
3.員工工資管理系統(tǒng)
主要內(nèi)容:
設(shè)計(jì)一個(gè)利用文件處理方式實(shí)現(xiàn)對員工工資(包括員工編號、員工姓名、應(yīng)發(fā)、扣
款和實(shí)發(fā))進(jìn)行管理,具有增加數(shù)據(jù)、更新數(shù)據(jù)、查詢數(shù)據(jù)、刪除數(shù)據(jù)、列表顯示數(shù)據(jù)
以及重組文件的功能。員工工資管理系統(tǒng)由六大功能模塊組成:
①增加數(shù)據(jù)
該模塊完成將輸入的數(shù)據(jù)存入數(shù)據(jù)文件中,用戶一次可輸入多個(gè)員工的信息。
②更新數(shù)據(jù)
該模塊用于實(shí)現(xiàn)對記錄的修改,首先用戶輸入員工的編號,然后查詢該員工的信息,
最后更新該員工的信息。
③查詢數(shù)據(jù)
該模塊可選擇按員工編號查詢,或者按員工姓名進(jìn)行查詢,然后列出滿足條件的且
未作刪除標(biāo)記的員工信息。
④刪除數(shù)據(jù)
該模塊用于刪除指定編號的員工工資信息,為提高效率,只作刪除標(biāo)記,不在物理
上刪除信息,可稱為邏輯刪除。
⑤顯示數(shù)據(jù)
2
該模塊用于以列表方式顯示所有未作刪除標(biāo)記的員工信息。
⑥重組文件
當(dāng)邏輯刪除的信息太多時(shí),將會降低查詢效率。重組文件模塊專門用于在物理上刪除作
有刪除標(biāo)記的信息,這樣不但提高查詢效率,同時(shí)也節(jié)約存儲空間。
課程設(shè)計(jì)要求:
課程設(shè)計(jì)共計(jì)三道必做題,其中第一題和第二題必做,由各位同學(xué)獨(dú)立完成,第三
道題由兩位同學(xué)協(xié)作共同完成。系統(tǒng)要求在MicrosoftVisualC++6.0編譯平臺上采
用C語言編程實(shí)現(xiàn)。
三、原始資料
1.游洪躍,彭駿,譚斌.C語言程序設(shè)計(jì)實(shí)驗(yàn)與課程設(shè)計(jì)教程.北京:清華大學(xué)出
版社,2011.
2.孫承愛,趙衛(wèi)東.程序設(shè)計(jì)基礎(chǔ)一基于C語言.第2版.北京:清華大學(xué)出版社,
2010.
四、要求的設(shè)計(jì)(調(diào)查/論文)成果
1.課程設(shè)計(jì)報(bào)告
2.課程設(shè)計(jì)軟件
3
五、進(jìn)程安排
布置任務(wù),查找資料、需求分析1天
總體設(shè)計(jì)1天
詳細(xì)設(shè)計(jì)1天
編制源程序?qū)崿F(xiàn)3天
測試與修改1天
撰寫課程設(shè)計(jì)報(bào)告2天
六、主要參考資料
[1]譚浩強(qiáng).C程序設(shè)計(jì).第四版.清華大學(xué)出版社,2010.
[2]蘇小紅.C語言大學(xué)實(shí)用教程.第2版.電子工業(yè)出版社,2008.
指導(dǎo)教師(簽名):
20年月日
4
目錄
1制作萬年歷..................................................................6
1.1需求與總體設(shè)計(jì)...........................................................6
1.2詳細(xì)設(shè)計(jì).................................................................7
1.3編碼實(shí)現(xiàn).................................................................9
2井字棋游戲..................................................................12
2.1需求與總體設(shè)計(jì)..........................................................12
2.2詳細(xì)設(shè)計(jì)...............................................................14
2.3編碼實(shí)現(xiàn)...............................................................19
3.員工工資管理系統(tǒng)...........................................................28
3.1需求與總體設(shè)計(jì)..........................................................28
3.2詳細(xì)設(shè)計(jì)...............................................................31
3.3編百馬實(shí)現(xiàn)...............................................................36
總結(jié)..........................................................................46
5
1制作萬年歷
1.1需求與總體設(shè)計(jì)
1)總體設(shè)計(jì)結(jié)構(gòu):計(jì)算某年前的所有天數(shù),確定這年的第一天為
星期兒。輸入這年的年份,通過函數(shù)運(yùn)算,顯示公元后任何年份的日歷,
日歷以月份順序排列,每月以星期順序排列。
根據(jù)歷法,得到:
閏年條件:年份可以被四整除,并且不能被100整除,或者可以被400
整除。
閏年:366天,二月有29天
平年:365天,二月有28天
通過函數(shù)求得年份的天數(shù)和那年二月的天數(shù)
2)函數(shù)的聲明:主要是通過定義一些函數(shù)來求天數(shù)
如:
intGetMonthDays(iny,ingm);/*y年m月的天數(shù)*/
intGetYeatDays(inty);/*年份y的天數(shù)*/
intDateToNum(intyear,intmonth,intday);返回從公元1年1月1日起的天數(shù)
intWeek(intyear,intmonth,intday);/*求日期是星期幾*/
3)界面設(shè)計(jì):
編譯好程序,運(yùn)行程序既可進(jìn)入以下的界面,在此界面中輸入需要查
詢的年份既可。
S3*C:documentsandSuttings\Administrator直面\C語言2杜海歷年歷。ebug\l.exe"
輸入年:
輸入年份后即出現(xiàn)要查詢的那年的12個(gè)月的月歷,因?yàn)槠介c年的不同,
平閏年的2月的天數(shù)也是不同的,如下圖就是2011年和2012年的2月
的月歷,2011年的2月有28天,2012年的2月有29天。
6
"C:documentsandSettings\Administrator理面\C語言2杜海歷年歷gebug\l.exe"
輸,1年:2011
2011年
一月
星期日星期一星期二星期三星期四星期五星期六
Xi
2345678
9101112131415
16171819202122
23242526272829
3031
1
二月
星期日星期一星期二星期三星期四星期五星期六
12345
6789101112
13141516171819
20212223242526
2728
1-----------------------------------------------------------------------------
國*C:documentsandSettings\Administrato「原面\C語言2杜海歷年歷Qubug'l
輸入年:2012
20L2年
一月
星期日星期一星期二星期三星期四星期五星期六
1234567
891011121314
15161718192021
22232425262728
293031
1________________________________1
二月
星期日星期一星期二星期三星期四星期五星期六
1234
567891011
12131415161718
19202122232425
26272829
.2詳細(xì)設(shè)計(jì):
下圖即為萬年歷制作的N-S圖:
Dmain函數(shù):先初始化指針數(shù)組的各個(gè)元素,再輸入的年份,對12個(gè)
月進(jìn)行循環(huán),在循環(huán)中:利用一個(gè)循環(huán)輸出若干空格,通過用一個(gè)循環(huán)
和GetMonehDays函數(shù)計(jì)算輸出第day天,當(dāng)Week(year,month,day)等
于。時(shí)換行。
7
初始化指針數(shù)組的元素
輸入year
Year<=0
顯示年份
for(month=1;month<=12;month++)
輸出一條橫線
輸出月份n=0
輸出星期日到星期六
for(y=1;y<year;y-H-)
for(i=0;i<Week(year,month,1);i++)
n+=GetMonthDays(y)
輸出若干空格
for(m=l;m<month;m-H-)
for(day=1;day<=GetMonthDays(year,month,1);i++)
n+=GetMonthDays(y,m)
day!=l&&Week(year,month,day)==0
YNn+=day
、/(2)DateToNum函數(shù)
換行
輸出第day天
輸出一條橫線
(1)main函數(shù)
2)
DateToNum函數(shù):通過循環(huán)累加到今年的天數(shù),載通過累加計(jì)算出到這個(gè)月的天數(shù)再
加上到今天的天數(shù)。
3)GetMonthDays函數(shù):通過switch函數(shù)對不同的月份進(jìn)行分類,再在不同的月份規(guī)定各
自的天數(shù),當(dāng)二月時(shí)再用if語句對平年和余年分別規(guī)定天數(shù)。
8
1.3編碼實(shí)現(xiàn):
#include<stdio.h>
#include<stdlib.h>
intGetMonthDays(inty,intm)/次y年m月份的天數(shù)*/
(
intn;
switch(m)
(
case1:
case3:
case5:
case7:
case8:
case10:
case12:n=31;break;
case4:
case6:
case9:
casell:n=30;break;
case2:if(y%4==0&&y%100!=0lly%400==0)
n=29;
elsen=28;
)
returnn;
)
intGetYearDays(inty)/*年份y的天數(shù)*/
(
if(y%4==0&&y%100!=0lly%400==0)
return366;
else
return365;
}
intDateToNum(intyear,intmonth,intday)/:返回從公元I年1月1日起的天數(shù)”/
inty,m,n=0;
9
fdr(y=1;y<year;y++)
n+=GetYearDays(y);
for(m=1;mvmonth;m++)
n+=GetMonthDays(y,m);
n+=day;
returnn;
)
intWeek(intyear,intmonth,intday)/*求日期是星期幾*/
(
returnDateIbNum(year,month,day)%7;
)
intmain(void)
(
char*monthName[]={”一月”,"二月","三月四月","五月","六月",”七月","八月九月
十月","H"一月",“十二月"};
intyear,month,day;
inti;
do
(
printf("輸入年:");
scanf("%d",&year);
}while(year<=0);
printf("%25d年\n”,year);
for(month=1;month<=12;month++)/*十二個(gè)月的循環(huán)輸出*/
(
printfC--------------------------------------------\n");
printf("%27s\n",monthNamefmonth-1]);
printf(“星期日星期一星期二星期三星期四星期五星期六\n");
for(i=0;i<Week(year,month,1);i++)
printf("");/*輸出若干空格*/
for(day=1;day<=GetMonthDays(year,month);day++)
(
if(day!=1&&Week(year,month,day)==0)/*星期日換行*/
printf("\n");
printf("%5d",day);/*輸出day天*/
10
printf(H\n
system("PAUSEn);/*調(diào)用庫函數(shù),輸出系統(tǒng)提示信息*/
return0;/*返回值0,返回操作系統(tǒng)*/
ii
2井字棋游戲
1.1需求與總體設(shè)計(jì)
1)總體設(shè)計(jì)結(jié)構(gòu):
在下棋過程中棋盤為棋局,對于一個(gè)棋局,某個(gè)選手的狀態(tài)可能的勝,
負(fù),平或沒結(jié)束。設(shè)計(jì)一個(gè)子函數(shù)讓選手進(jìn)行選擇是否先下,在定義一
個(gè)子函數(shù)輸出每次下棋后的棋盤狀態(tài),定義函數(shù)判斷選手和計(jì)算機(jī)的勝
利條件,最重要的是定義一個(gè)函數(shù)確定計(jì)算機(jī)的走法。通過main函數(shù)調(diào)
用子函數(shù)達(dá)到下棋的目的。
2)全局?jǐn)?shù)據(jù)結(jié)構(gòu):
某些變量,它們的取值被界定在一個(gè)有限的范圍內(nèi)。把這些變量定義為
字符型,整型或其它類型都不很合理,于是使用枚舉類型:
定義選手棋局狀態(tài)的類型:
typedefenum{WIN,LOSE,TIE,UNEND}StatusType;
定義選手:
typedefenum{HUMAN,COMPUTER}PlayerTapy;
此系統(tǒng)需要對一些類型不同但又相互關(guān)聯(lián)的數(shù)據(jù)進(jìn)行處理,所以定義結(jié)
構(gòu)體類型:
Typedefstruct
introw;/*行號*/
intcol;/*歹ij號*/
}PositionType;
3)函數(shù)的聲明:
StatusTypeChessStatus(PlayerTypeplayer);
/*選手player當(dāng)前棋局狀態(tài)*/
PositionTypeSelectByComputer(void);
/*計(jì)算機(jī)選擇的走法*/
PositionTypeSelectByHuman(void);/*人選擇的走法*/
voidDisplay(void);/*顯示棋局*/
3)界面設(shè)計(jì):
程序執(zhí)行后進(jìn)入如下的界面,這個(gè)界面,真人選手可以選擇是否先走。
12
WrC:documentsand52代(呼央必府打3匕「\桌面'仁語言2杜海講字游戲〈曲明\2.^^'
是否先走<Y/N)?
通過玩家的選擇可以分別進(jìn)入一下兩個(gè)界面,左邊一個(gè)是玩家選擇閑走,
則輸入要走的棋格的行列號,右邊的為計(jì)算機(jī)先走。
否先走<QDIC:'documentsandSettings\Administrat
旦走人后目S3彳具個(gè)骨■目勺了1三不口夕'J■
是否先走(Y/N>?n
!O11!討算機(jī)走的棋格是:1,2
?????---------------?--------1.
:8:X
;十球看L走蠶計(jì)其趨雉,2,0T---------->-------?-------f
-?--------------?—?------------?!!:X:
:O:::?--------->------?------->.
1111
tX111
轟走為4其箱的各號■不口歹U毋.套走法棋箱的薦號和列號:
到最后會出現(xiàn)三種結(jié)果,玩家勝利,計(jì)算機(jī)勝利,下和了。以下即為玩
家勝利,計(jì)算機(jī)勝利和下和了三種情況。
要走的棋格的行號和列號:
2,2
0:0!X
0
X:X!0
真人選壬勝,計(jì)算機(jī)也不過如此?
請按任意鍵繼臻….
計(jì)算機(jī)走的慎格是:2,2
過鬟秋勝,其人選手還需努力?
清轉(zhuǎn)在意鍵薯續(xù)..-一
13
計(jì)算機(jī)走的棋格是:1,0
0
0
下和了,
青隹任意鍵繼續(xù)一
1.2詳細(xì)設(shè)計(jì)
1)main函數(shù):首先確定玩家是否先走。如果人先走,通過SelectByHuman
確定人的走法,用while循環(huán)確定輸贏,在循環(huán)中通過SelectByComputer
函數(shù)確定計(jì)算機(jī)的走法,通過if函數(shù)判定是誰勝利。
2)StatusTypeChessStatus函數(shù):用if函數(shù)判定人和計(jì)算機(jī)的勝利,
輸和下和了的條件。
3)PositionTypeSeiectByComper函數(shù):為了計(jì)算機(jī)走棋,為棋盤上的
每個(gè)棋格打分,打分規(guī)則如下:
如果棋格上沒有棋子,則得0分。
如果棋格上沒有棋子,但棋格所在行、列或?qū)蔷€有兩個(gè)X,則得6分。
如果棋格上沒有棋子,但棋格所在行、列或?qū)蔷€有兩個(gè)0,則得5分。
如果棋格上沒有棋子,但棋格所在行、列或?qū)蔷€其中有一個(gè)X,一個(gè)沒
有棋子,則得4分。
如果棋格上沒有棋子,但棋格所在行、列或?qū)蔷€其中有個(gè)0,一個(gè)沒
有棋子,則得3分。
如果棋格上沒有棋子,但棋格所在行、列或?qū)蔷€沒有棋子,則得2分。
如果棋格上沒有棋子,但棋格所在行、列或?qū)蔷€其中有一個(gè)X,一個(gè)0,
則得1分。
選擇分值高的為計(jì)算機(jī)的走棋,為了更靈活,有兒個(gè)棋格的分值一樣都
最高,則隨機(jī)選擇一個(gè)分值最高的棋格作為計(jì)算機(jī)的走棋。
如果當(dāng)前的棋格的行號和列號為(i,j),則在同一行中其中兩個(gè)棋格的行
號和列號為(i,(j+l)%3)和(i,(j+2)%3),在同一列中其中兩個(gè)棋格的行
號和列號為((i+D%3,j)和((i+2)%3,j),在的、主對角線上的其他兩個(gè)棋
格的行號和列號為((i+l)%3,(j+l)%3)和((i+2)%3,(j+2)%3),在付對角
線上的其他兩個(gè)棋格的行號和列號為((i-l+3)%3,(j-l+3)%3)和
((i-2+3)%3,(j-2+3)%3).
4)PositionTypeSelectByHuman函數(shù):確定人的走法,如果不符合條
件則需要用do-while語句進(jìn)行循環(huán)輸入。
5)viodDisplay函數(shù):用printf函數(shù)輸出棋格線和棋格的行。
14
isFirst==Yl
isFirst==y
▼
I!00Qa
I0D
__________i__________
Chess|grid.row|[grid-co,=x,
Display110
<:ChessStatus|COMPUTER)』而二二
ChessStatus|COMPUTER)==LOSE
ChessStatusiCOMPUTER二二TIE
(2)StatuTypeChessStatus
DIDmain。0
15
16
▼
(3)PositionTypeSelectByComputer
17
顯示第二行
▼
輸出表格線
(4)PositionTypeSelectByHuman
顯示第三行
▼
輸出表格線
結(jié)束
(5)voidDisplay
18
1.3編碼實(shí)現(xiàn):
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
typedefenum{WIN,LOSE,TIE,UNEND}StatusType;/*狀態(tài):贏,負(fù),平,還沒結(jié)束*/
typedefenum{HUMAN,COMPUTER}PlayerType;/*選手:HUMEN(A),
COMPUTER(計(jì)算機(jī))*/
typedefstruct
(
introw;/*行號*/
intcol;/*列號*/
JPositionType;
StatusTypeChessStatus(PlayerTypeplayer);/*選手player當(dāng)前棋局狀態(tài)*/
PositionTypeSelectByComputer(void);/*計(jì)算機(jī)選擇的走法*/
PositionTypeSelectByHuman(void);/*人選擇的走法*/
voidDisplay(void);/*顯示棋局*/
charchess[3][3]={'}};/*棋盤*/
intmain(void)
(
PositionTypegrid;/*選手選擇的棋格*/
charisFirst;/*選手選擇是否先走*/
do
(
printf("是否先走(Y/N)?");/*人是否先走*/
scanf("%c",&isFirst);
while(getchar()!='\n');/*跳過當(dāng)前其他字符*/
}while(isFirst!="Y'&&isFirst!='y'&&isFirst!='N'&&isFirst!='n');
if(isFirst=='Y'llisFirst=='y')/*真人先走*/
19
grid=SelectByHuman();/*真人的走法*/
chess[grid.row][grid.col]=,O,;/*真人的棋子為O*/
DisplayO;/*顯示棋局*/
)
while(1)
grid=SelectByComputer();/*計(jì)算機(jī)的走法*/
printf("計(jì)算機(jī)走的棋格是:%d,%d\n",grid.row,grid.col);
chess[grid.row][grid.col]='X';/*計(jì)算機(jī)選手的棋子為X*/
DisplayO;
if(ChessStatus(COMPUTER)==WIN)/*計(jì)算機(jī)勝*/
{
printf("計(jì)算機(jī)勝,真人選手還需努力!\n");
break;/*棋局結(jié)束*/
)
elseif(ChessStatus(COMPUTER)=LOSE)/*真人選手勝*/
(
printf(“真人選手勝,計(jì)算機(jī)也不過如此!\n");
break;/*棋局結(jié)束*/
)
elseif(ChessStatus(COMPUTER)=TIE)/*和棋*/
(
printf("下和了!\n");
break;/*棋局結(jié)束*/
grid=SelectByHuman();/*真人選手的走法*/
chess[grid.row][grid.coll='O';/*真人選手的棋子為0*/
DisplayO;
if(ChessStatus(HUMAN)==WIN)/*真人選手勝*/
(
printf(“真人選手勝,計(jì)算機(jī)也不過如此!\n");
break;/*棋局結(jié)束*/
)
elseif(ChessStatus(HUMAN)=LOSE)/*計(jì)算機(jī)勝*/
20
printf(”計(jì)算機(jī)勝,真人選手還需努力!\n)
break;/*棋局結(jié)束*/
)
elseif(ChessStatus(HUMAN)==TIE)/*和棋*/
(
printf("下和了!\n");
break;/*棋局結(jié)束*/
system("PAUSE");/*調(diào)用庫函數(shù)system(),輸出系統(tǒng)提示信息*/
return0;/*返回值0,返回操作系統(tǒng)*/
StatusTypeChessStatus(PlayerTypeplayer)/*選手player當(dāng)前的棋局狀態(tài)*/
(
if(player==HUMAN)
if(chess[0][0]='0'&&chess[0][l]='0'&&chess[0]⑵='O'II/*第一行*/
chess[l][0]=='0'&&chess[l][l]=='0'&&chess[l][2]='O'II/*第二行*/
chess[2][0]='O'&&chess[2][1]=='0'&&chess[2][2]=='0'll/*第三行*/
chess[0][0]=='0'&&chess[l][0]=='0'&&chess[2][0]=='0'll/*第一列*/
chess[O][1]=='0'&&chess[1][1]=='0'&&chess[2][l]=='0'll/*第二列*/
chess[O][2]=='0'&&chess[1][2]=='O'&&chess[2][2]='O,ll/*第三列*/
chess⑼[0]=='0'&&chess[l][l]==0&&chess⑵⑵=='O'II/*主對角線*/
chess[O][2]=='0'&&chess[1][1]=='0'&&chess[2][0]=='O'/*副對角線*/
)retumWIN;/*真人選手勝*/
elseif(chess[O][O]=='X'&&chess[O][1]=='X'&&chess[O][2]=='X'II/*第一行*/
chessfl][O]='X'&&chess[l][l]=='X'&&chess[l][2]=='X'II/*第二行*/
chess[2][0]=='X'&&chess[2][lJ='X'&&chess[2][2]=='X'll/*第三行*/
chess[0][0]=='X'&&chess[l][0]='X'&&chess[2][0]=='X'll/*第一列*/
chess[O][l]=='X'&&chess[l][l]='X'&&chess[2][1]=='X'II/*第二列*/
21
chess[O][2]==X&&chess[1]出=又'&&g655[2][2]==XII/*第三列*/
chess[O][O]='X'&&chess[1][1]='X'&&chess[2][2]=='X'II/*主對角線*/
chess[O][2]=='X'&&chess[1][1]=='X'&&chess[2][0]=='X'/*副對角線*/
)returnLOSE;、/*真人選手負(fù)*/
elseif(chess[0][0]!=''&&chess[0][l]!=''&&chess[0][2]!=''&&/*第一行*/
chess[l][0]!=''&&chess[l][l]!=''&&chess[l][2]!=''&&/*第二行*/
chess[2][0]!=''&&chess[2][1]!=''&&chess[2][2]!=''&&/*第三行*/
chess[0][0]!=''&&chess[l][0]!=''&&chess[2][0]!=''&&/*第一列*/
chess[0][l]!=''&&chess[l][l]!=''&&chess[2][l]!=''&&/*第二列*/
chess[0][2]!=''&&chess[l][2]!=''&&chess[2][2]!=''&&/*第三列*/
chess[O]rO]!=''&&chess[l][l]!=''&&chess[2][2]!=''&&/*主對角線*/
chess[0][2]!=''&&chess[l][l]!=''&&chess[2][0]!=''/*副對角線*/
)returnTIE;/*和棋*/
else
returnUNEND;/*棋未下完*/
)
else
(
if(chess[0][0]=='X'&&chess[0][1]=='X'&&chess[0][2]=='X'II/*第一行*/
chess[l][O]=='X'&&chess[l][l]=='X'&&chess[l][2]='X'll/*第二行*/
chess[2][0]=='X'&&chess[2][1]=='X'&&chess[2][2]=='X'II/*第三行*/
chess[0][0]=='X'&&chess[1][0]=='X'&&chess[2][O]=='X'II/*第一列*/
chess[0][1]=='X'&&chess[1][1]=='X'&&chess[2][1]=='X'II/*第二列*/
chess[0][2]=='X'&&chess[1][2]=='X'&&chess[2]出==子'11/*第三列*/
chess[0][0]=='X'&&chess[1][1]=='X'&&chess[2][2]=='X'II/*主對角線*/
chess[0][2]=='X'&&chess[1][1]=='X'&&chess[2][0]=='X'/*副對角線*/
)returnWIN;/*計(jì)算機(jī)勝*/
elseif(chess[O][0]=='0'&&chess[0][1]=='0'&&chess[0][2]=='O'II/*第一行*/
chess[l][0]=='0'&&chess[l][l]=='0'&&chess[2][1]=='O'II/*第二行*/
chess[2][0]=='0'&&chess[2][l]=='0'&&chess[2][2]=='0'll/*第三行*/
chess[0][0]=,0'&&chess[l][0]='0'&&chess[2][0]='0,ll/*第一列*/
chess[0][l]='O'&&chess[l][1]=='0'&&chess[1][2]=='O'II/*第二列*/
chess[0][2]=='O'&&chess[l][2]=='0'&&chess⑵⑵=='O'II/*第三列*/
chess[0][0]=='0'&&chess[1][l]='O,&&chess[2][2]='O'll/*主對角線*/
chessfO][2]=='0'&&chess[1][1]=='0'&&chess[2][0]='O'/*副對角線*/
22
)returnLOSE;/*計(jì)算機(jī)負(fù)*/
elseif(chess[01[0]!=''&&chess[0][l]!=''&&chess[0][2]!=''&&/*第一行*/
chess[l][0]!=''&&chess[l][l]!=''&&chess[l][2]!=''&&/*第二行*/
chess[2][0]!=''&&chess[2][l]!=''&&chess⑵⑵!=''&&/*第三行*/
chess[0][0]!=''&&chess[l][0]!=''&&chess[2][0]!=''&&/*第一列*/
chess[0][l]!=''&&chess[l][l]!=''&&chess[2][l]!=''&&/*第二列*/
chess[0][2]!=''&&chess[l][2]!=''&&chess[2][2]!=''&&/*第三列*/
chess[0][0]!='&&chess[l][l]!=''&&chess[2][2]!=''&&/*主對角線*/
chess[0][2]!=''&&chess[1][1]!=''&&ehess[2][0]!=''/*副對角線*/
)returnTIE;/*和棋*/
else
returnUNEND;/*棋未下完*/
PositionTypeSelectByComputer(void)/*計(jì)算機(jī)選擇的走法*/
(
intscore[3][3]={0};/*棋盤合格的分值*/
inti,j,n=0,pos;/*臨時(shí)變量*/
intmax=0;/*最高分max*/
intcount=0;/*得最高分棋格的個(gè)數(shù)*/
PositionTypegrid;/*得最高分的隨機(jī)一個(gè)棋格*/
for(i=0;i<3;i++)
(
for(j=0;j<3;j++)
(
if(chess[i][j]!='')
score[i][j]=0;/*當(dāng)前格有棋子得0分*/
elseif(chess[i][(j+l)%3]=='X'&&chess[i][(j+2)%3]=,X'll/*行*/
chess[(i+l)%3][j]=='X'&&chess[(i+2)%3][j]=='X'll/*列*/
i==j&&
chess[(i+l)%3][(j+l)%3]='X'&&chess[(i+2)%3][(j+2)%3]==,X,ll/*主對角線*/
i+j==2&&
23
chess[(i+l)%3][(j-l+3)%3]=='X'&&chess[(i+2)%3][(j-2+3)%3]=='X'
)score[i][j]=6;/*行、列或?qū)蔷€有兩個(gè)X,得6分*/
elseif(chess[i][(j+1)%3]=='0'&&chess[i][(j+2)%3]=='O'll/行*/
chess[(i+l)%3][j]=='O'&&chess[(i+2)%3]U]=='O'll/系列*/
i==j&&
chess[(i+l)%3][(j+l)%3]='O'&&chess[(i+2)%3][(j+2)%3]==,O,ll
i+j==2&&
chess[(i+l)%3][(j-l+3)%3]='O'&&chess[(i+2)%3][(j-2+3)%3]='O'
)score[i][j]=5;
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 山西省大同市(2024年-2025年小學(xué)六年級語文)統(tǒng)編版小升初模擬(下學(xué)期)試卷及答案
- 2024年英國數(shù)學(xué)科學(xué)夏令營合同3篇
- 《酒水知識培訓(xùn)》課件
- 2024年航空航天器制造借款合同
- 2024年門窗施工協(xié)議標(biāo)準(zhǔn)文本版B版
- 2024年高科技農(nóng)業(yè)項(xiàng)目委托種植與加工合同參考3篇
- 2024年股權(quán)抵押借款協(xié)議3篇
- 2024年質(zhì)押借款合同:動產(chǎn)抵押3篇
- 2024房地產(chǎn)開發(fā)項(xiàng)目土方工程合同
- 2024年航天飛行器研發(fā)合同
- 數(shù)據(jù)中心電力設(shè)備調(diào)試方案
- 2024年度國際物流運(yùn)輸合同3篇
- 新入職員工年終工作總結(jié)課件
- 廣西南寧市第三十七中學(xué)2024-2025學(xué)年七年級上學(xué)期11月第一次月考語文試題(含答案)
- 靜脈導(dǎo)管維護(hù)
- 年度先進(jìn)員工選票標(biāo)準(zhǔn)格式
- 中小企業(yè)內(nèi)部控制與風(fēng)險(xiǎn)管理(第二版)項(xiàng)目五:銷售業(yè)務(wù)內(nèi)部控制與風(fēng)險(xiǎn)管理
- 中鐵二局工程項(xiàng)目全員安全教育培訓(xùn)考試試題(普工)附答案
- 08坦白檢舉教育
- 10、美的微波爐美食創(chuàng)意拍攝腳本
- 07FK02防空地下室通風(fēng)設(shè)備安裝PDF高清圖集
評論
0/150
提交評論