制作萬年歷井字棋游戲員工工資管理系統(tǒng)_第1頁
制作萬年歷井字棋游戲員工工資管理系統(tǒng)_第2頁
制作萬年歷井字棋游戲員工工資管理系統(tǒng)_第3頁
制作萬年歷井字棋游戲員工工資管理系統(tǒng)_第4頁
制作萬年歷井字棋游戲員工工資管理系統(tǒng)_第5頁
已閱讀5頁,還剩43頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論