歡迎來(lái)到裝配圖網(wǎng)! | 幫助中心 裝配圖網(wǎng)zhuangpeitu.com!
裝配圖網(wǎng)
ImageVerifierCode 換一換
首頁(yè) 裝配圖網(wǎng) > 資源分類(lèi) > DOC文檔下載  

《算法設(shè)計(jì)與分析》課程設(shè)計(jì)論文五子棋游戲

  • 資源ID:29624039       資源大?。?span id="an0vye5" class="font-tahoma">268.02KB        全文頁(yè)數(shù):19頁(yè)
  • 資源格式: DOC        下載積分:15積分
快捷下載 游客一鍵下載
會(huì)員登錄下載
微信登錄下載
三方登錄下載: 微信開(kāi)放平臺(tái)登錄 支付寶登錄   QQ登錄   微博登錄  
二維碼
微信掃一掃登錄
下載資源需要15積分
郵箱/手機(jī):
溫馨提示:
用戶名和密碼都是您填寫(xiě)的郵箱或者手機(jī)號(hào),方便查詢和重復(fù)下載(系統(tǒng)自動(dòng)生成)
支付方式: 支付寶    微信支付   
驗(yàn)證碼:   換一換

 
賬號(hào):
密碼:
驗(yàn)證碼:   換一換
  忘記密碼?
    
友情提示
2、PDF文件下載后,可能會(huì)被瀏覽器默認(rèn)打開(kāi),此種情況可以點(diǎn)擊瀏覽器菜單,保存網(wǎng)頁(yè)到桌面,就可以正常下載了。
3、本站不支持迅雷下載,請(qǐng)使用電腦自帶的IE瀏覽器,或者360瀏覽器、谷歌瀏覽器下載即可。
4、本站資源下載后的文檔和圖紙-無(wú)水印,預(yù)覽文檔經(jīng)過(guò)壓縮,下載后原文更清晰。
5、試題試卷類(lèi)文檔,如果標(biāo)題沒(méi)有明確說(shuō)明有答案則都視為沒(méi)有答案,請(qǐng)知曉。

《算法設(shè)計(jì)與分析》課程設(shè)計(jì)論文五子棋游戲

算法設(shè)計(jì)與分析課程設(shè)計(jì)論文五子棋游戲?qū)W生姓名: 學(xué)生學(xué)號(hào): 200710802017 院(系): 計(jì)算機(jī)學(xué)院 年級(jí)專業(yè): 2007級(jí)信息與計(jì)算科學(xué) 指導(dǎo)教師: 2010-6-11 目錄摘要21問(wèn)題的提出32 問(wèn)題的分析33 程序及流程的設(shè)計(jì)43.1概要設(shè)計(jì)43.2模塊及其功能介紹53.2.1定義全局變量53.2.2Main()主函數(shù)53.2.3drawqp()畫(huà)棋盤(pán)函數(shù)53.2.4win()判斷是否勝出函數(shù)53.2.5Gameplay()雙人對(duì)戰(zhàn)函數(shù)53.2.6Xandy()顯示光標(biāo)縱橫坐標(biāo)函數(shù)63.2.7圖形功能函數(shù)64 調(diào)試分析7總結(jié)8參考文獻(xiàn)9附 錄: 源程序10摘要本問(wèn)介紹的一個(gè)五子棋游戲的編寫(xiě)和設(shè)計(jì),本游戲的依據(jù)就是下棋的雙方各持黑白棋子,當(dāng)某方在橫、縱或?qū)欠较蜻B成五個(gè)棋子,則認(rèn)為該玩家勝利,游戲結(jié)束。該程序用C語(yǔ)言編寫(xiě),主要有C語(yǔ)言函數(shù)的調(diào)用(其中包括圖形函數(shù),判斷函數(shù)等)和可視化編程,還有數(shù)組的應(yīng)用,比如在該程序中就是用一個(gè)二維數(shù)組來(lái)表示棋盤(pán)。從程序表面看,這是一個(gè)二維平面圖,所以數(shù)據(jù)用二維數(shù)組來(lái)表示,數(shù)組兩個(gè)下標(biāo)可以表示棋盤(pán)上的位置,數(shù)組元素的值代表棋格上的狀態(tài),共有三種情況,分別是0代表空格,1代表白棋,2代表黑棋。這樣程序的主要工作是接收棋手按鍵操作,棋手1用Up、Down、Left、Right控制光標(biāo)移動(dòng),回車(chē)鍵表示落子。棋手2用W、S、A、D控制光標(biāo)移動(dòng),空格鍵表示落子。一旦接收到回車(chē)鍵或空格鍵,說(shuō)明棋手落子,先判斷是否是有效位置,也就是說(shuō)已經(jīng)有棋子的位置不能重疊落子。落子成功后,馬上判斷以該位置為中心的八個(gè)方向:上、下、左、右、左上、左下、右上、右下是否有相同顏色的棋子連成五子,如果連成五子,則游戲結(jié)束,輸出相應(yīng)的信息。如果想退出游戲,可以按Esc鍵。關(guān)鍵詞 五子棋,C語(yǔ)言,二維數(shù)組,函數(shù) 五子棋游戲設(shè)計(jì)1問(wèn)題的提出連珠(五子棋)是有兩個(gè)人在一盤(pán)棋上進(jìn)行對(duì)抗的競(jìng)技運(yùn)動(dòng)。在對(duì)局開(kāi)始時(shí),先由用戶選擇哪方先開(kāi)局,先開(kāi)局一方將一枚棋子落在一點(diǎn)上,然后由另一方在對(duì)方棋周?chē)慕徊纥c(diǎn)上落子,如此輪流落子,直到某一方首先在棋盤(pán)的直線、橫線或斜線上形成連續(xù)的五子則該方就算獲勝。此時(shí),算法結(jié)束。當(dāng)有任何一方想退出時(shí),都可在算法中實(shí)現(xiàn)。2 問(wèn)題的分析為了要實(shí)現(xiàn)五子棋的人和人的對(duì)戰(zhàn),我們就首先要實(shí)現(xiàn)通過(guò)鍵盤(pán)對(duì)棋子的操作。因此我們必須要先定義一個(gè)鍵盤(pán),并用二維數(shù)組來(lái)表示棋盤(pán)并把它用圖形函數(shù)輸出在屏幕上。因此我們可以定義結(jié)構(gòu)體來(lái)表示一個(gè)完整的棋盤(pán)。為了讓人可以移動(dòng)光標(biāo)來(lái)選擇下棋位置,我們必須要定義函數(shù)來(lái)輸出光標(biāo)的位置(既橫縱坐標(biāo))。我們實(shí)現(xiàn)了人和人的對(duì)戰(zhàn)就要?jiǎng)儇?fù),因此我分析要定義一個(gè)判斷函數(shù)來(lái)判斷誰(shuí)勝誰(shuí)負(fù)。要是我們?cè)诙x一個(gè)游戲開(kāi)始函數(shù)來(lái)控制游戲的還是和一個(gè)游戲結(jié)束函數(shù)來(lái)控制游戲的結(jié)束,那么我們這就是一個(gè)完整的游戲過(guò)程,則我們這個(gè)程序就基本實(shí)現(xiàn)了人和人的對(duì)戰(zhàn)。3 程序及流程的設(shè)計(jì) 開(kāi)始西 安 工 業(yè) 大 學(xué)計(jì)算機(jī)科學(xué)與工程學(xué)院算 法 設(shè) 計(jì) 與 分 析 課 程 設(shè) 計(jì)題 目: 五子棋 班 級(jí): 050606 人 數(shù): 13人 成 員: 陳瑋 高謙 侯夕杰 馬濤 宋文彬 王偉 周仁文 邵文清趙瑞紅 李盈超 尉建明 陳建軍 張祥雄 學(xué) 號(hào): 時(shí) 間: 2008年元月16日 目 錄1課程設(shè)計(jì)報(bào)告-1 1.1問(wèn)題描述-1 1.2需求分析-1 1.3概要設(shè)計(jì)-1 1.4詳細(xì)設(shè)計(jì)-頁(yè)碼 1.5調(diào)試分析-頁(yè)碼2源程序-頁(yè)碼3程序的說(shuō)明文件-頁(yè)碼4課設(shè)總結(jié)-頁(yè)碼1. 課程設(shè)計(jì)報(bào)告1.1問(wèn)題描述連珠(五子棋)是有兩個(gè)人在一盤(pán)棋上進(jìn)行對(duì)抗的競(jìng)技運(yùn)動(dòng)。在對(duì)局開(kāi)始時(shí),先由用戶選擇哪方先開(kāi)局,先開(kāi)局一方將一枚棋子落在一點(diǎn)上,然后由另一方在對(duì)方棋周?chē)慕徊纥c(diǎn)上落子,如此輪流落子,直到某一方首先在棋盤(pán)的直線、橫線或斜線上形成連續(xù)的五子則該方就算獲勝。此時(shí),算法結(jié)束。當(dāng)有任何一方想退出時(shí),都可在算法中實(shí)現(xiàn)。 1.2需求分析 (1)、輸出游戲規(guī)則并由用戶決定是否遵守并開(kāi)局。 (2)、要求動(dòng)態(tài)畫(huà)出棋盤(pán)大小。(3)、畫(huà)棋子并確定其顏色。 (4)、玩家輪流下棋。(5)、判斷鍵盤(pán)輸入哪個(gè)鍵按規(guī)則執(zhí)行操作 (6)、判斷誰(shuí)先落棋。 (7)判斷贏家1.3概要設(shè)計(jì) 流程圖:Y Y N Y N Y N Y 1.4詳細(xì)設(shè)計(jì) 1.5調(diào)試分析 運(yùn)行結(jié)果:屏幕顯示:Please input who is first:1 or 2 當(dāng)輸入1時(shí),白棋先走;當(dāng)輸入2時(shí),紅棋先走。屏幕顯示:Please input the size of chessbox:從鍵盤(pán)輸入t值,則棋盤(pán)大小為t*t型。屏幕顯示:Left, Right, Up, Down KEY to move, Space to put, ESC-quit 及棋盤(pán),棋子,用上下左右鍵控制棋子向,用空格鍵確定棋子的落點(diǎn) 。當(dāng)白棋贏時(shí),顯示The White Win ! 當(dāng)紅棋贏時(shí),顯示The Red Win !遇到的問(wèn)題:算法改進(jìn)思想:將棋盤(pán)由原先的固定大小改進(jìn)為可動(dòng)態(tài)變化,由原來(lái)固定的白棋先走改進(jìn)為讓用戶可以選擇哪方先落子。2源程序#include<stdio.h>#include<stdlib.h>#include<graphics.h>#include<bios.h>#include<conio.h>#define LEFT 0x4b00#define RIGHT 0x4d00#define DOWN 0x5000#define UP 0x4800#define ESC 0x011b#define SPACE 0x3920#define BILI 20#define JZ 4#define JS 3#define N 19int boxNN,s; /*落子點(diǎn)*/int step_x,step_y ;int key ;int flag,i,j ;void draw_box();void draw_cicle(int x,int y,int color);void change();void judgewho(int x,int y);void judgekey();int judgeresult(int x,int y);void attentoin();void attentoin() /*游戲規(guī)則*/ char ch ; printf("Play attentoins:nn"); printf("1. Press Left,Right,Up,Down Key to move Piecenn"); printf("2. Press Space to place the Piecenn"); printf("3. DO NOT press Space outside of the draw_boxnn"); printf("Do you accept the above Playing attentoins? Y/Other:"); while(1) ch=getche(); if(ch=Y|ch=y) break ; else exit(0); printf("nnwhat size of the draw_box:"); scanf("%d",&s); printf("nnwho is the frist:1 or 2? "); while(1) scanf("%d",&flag); if(flag!=1&&flag!=2) printf("Error!n"); else break; void draw_box() /*畫(huà)出棋盤(pán)*/ int x1,x2,y1,y2 ; setbkcolor(LIGHTBLUE); setcolor(YELLOW); gotoxy(7,2); printf("Left, Right, Up, Down KEY to move, Space to put, ESC-quit."); for(x1=1,y1=1,y2=s;x1<=s;x1+) line(x1+JZ)*BILI,(y1+JS)*BILI,(x1+JZ)*BILI,(y2+JS)*BILI); for(x1=1,y1=1,x2=s;y1<=s;y1+) line(x1+JZ)*BILI,(y1+JS)*BILI,(x2+JZ)*BILI,(y1+JS)*BILI); for(x1=1;x1<=s;x1+) for(y1=1;y1<=s;y1+) boxx1y1=0 ;void draw_cicle(int x,int y,int color) /*棋子*/ setcolor(color); setlinestyle(SOLID_LINE,0,1); x=(x+JZ)*BILI ; y=(y+JS)*BILI ; circle(x,y,8);void judgekey() switch(key) case LEFT : if(step_x-1<0) break ; else for(i=step_x-1,j=step_y;i>=1;i-) if(boxij=0) draw_cicle(step_x,step_y,LIGHTBLUE); break ; if(i<1)break ; step_x=i ; judgewho(step_x,step_y); break ; case RIGHT : if(step_x+1>s) break ; else for(i=step_x+1,j=step_y;i<=s;i+) if(boxij=0) draw_cicle(step_x,step_y,LIGHTBLUE); break ; if(i>s)break ; step_x=i ; judgewho(step_x,step_y); break ; case DOWN : if(step_y+1>s) break ; else for(i=step_x,j=step_y+1;j<=s;j+) if(boxij=0) draw_cicle(step_x,step_y,LIGHTBLUE);break ; if(j>s)break ; step_y=j ; judgewho(step_x,step_y); break ; case UP : if(step_y-1<0) break ; else for(i=step_x,j=step_y-1;j>=1;j-) if(boxij=0) draw_cicle(step_x,step_y,LIGHTBLUE); break ; if(j<1)break ; step_y=j ; judgewho(step_x,step_y); break ; case ESC : break ; case SPACE : if(step_x>=1&&step_x<=s&&step_y>=1&&step_y<=s) if(boxstep_xstep_y=0) boxstep_xstep_y=flag ; if(judgeresult(step_x,step_y)=1) sound(1000); delay(1000); nosound(); gotoxy(30,4); cleardevice(); if(flag=1) settextstyle(3,0,5); outtextxy(120,120,"The White Win !"); setcolor(14); if(flag=2) settextstyle(3,0,5); outtextxy(120,120,"The Red Win !"); setcolor(15); settextstyle(3,0,5); getch(); exit(0); change(); break ; else break ; void change() if(flag=1) flag=2 ; else flag=1 ;void judgewho(int x,int y) if(flag=1) draw_cicle(x,y,15); if(flag=2) draw_cicle(x,y,4);int judgeresult(int x,int y) int j,k,n; while(1) n=0 ; for(j=x,k=y;j>=1;j-) /*水平向左數(shù)*/ if(boxjk=flag) n+; else break ; for(j=x,k=y;j<=s;j+) /*水平向右數(shù)*/ if(boxjk=flag) n+; else break ; if(n>5) return(1); n=0 ; for(j=x,k=y;k>=1;k-) /*垂直向上數(shù)*/ if(boxjk=flag) n+; else break ; for(j=x,k=y;k<=s;k+) /*垂直向下數(shù)*/ if(boxjk=flag) n+; else break ; if(n>5) return(1); n=0 ; for(j=x,k=y;j>=1,k>=1;j-,k-) /*向左上方數(shù)*/ if(boxjk=flag) n+; else break ; for(j=x,k=y;j<=s,k<=s;j+,k+) /*向右下方數(shù)*/ if(boxjk=flag) n+; else break ; if(n>5) return(1); n=0 ; for(j=x,k=y;j<=s,k>=1;j+,k-) /*向右上方數(shù)*/ if(boxjk=flag) n+; else break ; for(j=x,k=y;j>=1,k<=s;j-,k+) /*向左下方數(shù)*/ if(boxjk=flag) n+; else break ; if(n>5) return(1); return(0); void main() int gdriver=VGA,gmode=VGAHI; clrscr(); attentoin(); initgraph(&gdriver,&gmode,"c:tc"); draw_box(); do step_x=0,step_y=0 ; judgewho(step_x-1,step_y-1); do while(bioskey(1)=0); key=bioskey(0); judgekey(); while(key!=SPACE&&key!=ESC); while(key!=ESC); closegraph();_3程序的說(shuō)明文件 本程序中包含一個(gè)主函數(shù)和七個(gè)子函數(shù),它們的函數(shù)名及功能分別如下:void draw_box();畫(huà)棋盤(pán)void draw_cicle(int x,int y,int color);畫(huà)棋子并確定其顏色void change();改變玩家void judgewho(int x,int y);判斷誰(shuí)落棋void judgekey();判斷鍵盤(pán)輸入哪個(gè)鍵按規(guī)則執(zhí)行操作int judgeresult(int x,int y);判斷贏家void attentoin();顯示游戲規(guī)則4課設(shè)總結(jié) 從1月14日開(kāi)始,我們進(jìn)行了為期一周的算法課程設(shè)計(jì)。通過(guò)這次課程設(shè)計(jì),我們拓寬了知識(shí)面,鍛煉了能力,綜合素質(zhì)得到較大提高。 本次課程設(shè)計(jì),使我們對(duì)從五子棋設(shè)計(jì)方案到設(shè)計(jì)的基本過(guò)程的設(shè)計(jì)方法、步驟、思路、有一定的了解與認(rèn)識(shí)。在課程設(shè)計(jì)過(guò)程中,我們基本能按照規(guī)定的程序進(jìn)行,先針對(duì)五子棋的設(shè)計(jì)收集、調(diào)查有關(guān)資料,其間,同組成員之間進(jìn)行幾次方案的討論、修改,再討論、再修改,最后定案。設(shè)計(jì)方案確定后,又在老師指導(dǎo)下進(jìn)行擴(kuò)充詳細(xì)設(shè)計(jì),最終用c語(yǔ)言實(shí)現(xiàn)了可視化的五子棋算法。整個(gè)過(guò)程周密有序,對(duì)我們按時(shí)高質(zhì)完成課程設(shè)計(jì)非常有利! 對(duì)我們計(jì)算機(jī)專業(yè)的本科生來(lái)說(shuō),實(shí)際能力的培養(yǎng)至關(guān)重要,而這種實(shí)際能力的培養(yǎng)單靠課堂教學(xué)是遠(yuǎn)遠(yuǎn)不夠的,必須從課堂走向?qū)嵺`。通過(guò)課程設(shè)計(jì),讓我們找出自身狀況與實(shí)際需要的差距,并在以后的學(xué)習(xí)期間及時(shí)補(bǔ)充相關(guān)知識(shí),為求職與正式工作做好充分的知識(shí)、能力準(zhǔn)備,從而縮短從校園走向社會(huì)的心理轉(zhuǎn)型期。 課程設(shè)計(jì)達(dá)到了專業(yè)學(xué)習(xí)的預(yù)期目的。課程設(shè)計(jì)之后,我們普遍感到不僅實(shí)際動(dòng)手能力有所提高,更重要的是進(jìn)一步激發(fā)了我們對(duì)專業(yè)知識(shí)的興趣,并能夠結(jié)合實(shí)際存在的問(wèn)題在專業(yè)領(lǐng)域內(nèi)進(jìn)行更深入的學(xué)習(xí)。 3.1概要設(shè)計(jì) 流程圖:輸出游戲規(guī)則 Error!玩家遵守?NY誰(shuí)先下棋,輸入棋盤(pán)大小s畫(huà)出s*s大小的棋盤(pán) 用戶決定誰(shuí)先走白棋先走?N畫(huà)紅棋 畫(huà)白棋 Y 下棋 改變玩家 下棋 橫豎斜有五個(gè)相同顏色的棋子相連? N 白棋?Y 輸出:The white win!輸出:The red win! N 3.2模塊及其功能介紹3.2.1定義全局變量int gamespeed=5000; int i,j,key; struct Sor int x; int y;/*x,y表示當(dāng)前光標(biāo)的位置*/ int yesNN;/* 0表示無(wú)棋子,1表示白色棋子,2表示黑色棋子*/ int kao;/* 1表示白棋準(zhǔn)備落子,2表示黑棋落子*/ int ok;/*1表示白棋勝出,2表示黑棋勝出*/ sor; 3.2.2Main()主函數(shù)按照語(yǔ)法規(guī)則,首先定義使用到的常數(shù)、全局變量、函數(shù)原型說(shuō)明。棋盤(pán)狀態(tài)用數(shù)組yes2020,初值為0,表示空格。函數(shù)的實(shí)體比較簡(jiǎn)單,調(diào)用圖形驅(qū)動(dòng)、畫(huà)棋盤(pán)、人人對(duì)弈等自定義函數(shù),一旦游戲結(jié)束后,關(guān)閉圖形驅(qū)動(dòng),程序結(jié)束。3.2.3drawqp()畫(huà)棋盤(pán)函數(shù)背景顏色設(shè)為黑色,從坐標(biāo)(100,100)開(kāi)始每隔20個(gè)單位用綠色畫(huà)一條水平直線,一條垂直線,構(gòu)成棋盤(pán),用循環(huán)語(yǔ)句實(shí)現(xiàn)。畫(huà)線函數(shù)line()的參數(shù)為線的起點(diǎn)和終點(diǎn)坐標(biāo),注意要計(jì)算正確。函數(shù)setfillstyle()可以設(shè)置填充模式和填充顏色,fillellipse(int x,int xradius,int yradius)以x和y為圓心,xradius和yradius為水平和垂直軸畫(huà)一填充橢圓,當(dāng)xradius和yradius相等時(shí),則畫(huà)出的是圓,用它表示棋子。3.2.4win()判斷是否勝出函數(shù)本函數(shù)根據(jù)每次落子的位置,分別向上、下、左、右、左上、左下、右上、右下八個(gè)方向判斷是否有相同顏色的棋子連成五子,如果成立,游戲就結(jié)束,并顯示提示信息(如:紅方獲勝),否則繼續(xù)落子。3.2.5Gameplay()雙人對(duì)戰(zhàn)函數(shù)這是游戲進(jìn)行的函數(shù),主要是接收棋手的按鍵消息,其處理過(guò)程如下:(1) 按Esc鍵程序可以隨時(shí)結(jié)束。(2) 按上下左右光標(biāo)鍵,則改變棋子移動(dòng)的坐標(biāo)值。(3) 按回車(chē)鍵后判斷:(4) 如落子的位置已經(jīng)有棋則無(wú)效,繼續(xù)按鍵。(5) 如落子位置是空格,可以將棋子落入格內(nèi),調(diào)用win()函數(shù)。(6) 如果棋子變化后,棋盤(pán)已下滿了棋子,則游戲結(jié)束。顯示平局信息。(7) 重復(fù)上述步驟,直到游戲結(jié)束。3.2.6Xandy()顯示光標(biāo)縱橫坐標(biāo)函數(shù)該函數(shù)的作用是在每次移動(dòng)光標(biāo)后,在屏幕左下角顯示出光標(biāo)的縱橫坐標(biāo)。3.2.7圖形功能函數(shù)以下函數(shù)原形都在graphics.h中。(1)registerbgidriver():(2)initgraph(int *driver, int *mode, char *path):用于初始化圖形系統(tǒng),并裝入相應(yīng)的圖形驅(qū)動(dòng)器。該函數(shù)把由driver所指向的圖形驅(qū)動(dòng)器代碼裝入內(nèi)存。如果圖形驅(qū)動(dòng)器未裝入內(nèi)存,圖形函數(shù)將不能操作。圖形函數(shù)所用的屏顯模式由mode所指向的整數(shù)值確定。最后,圖形驅(qū)動(dòng)器的路徑是由path所指向的字符串給出。如果沒(méi)有指定路徑,就在當(dāng)前工作路徑上尋找。(3)rectangle(int left,int top,int right,int bottom):函數(shù)rectangle()用當(dāng)前畫(huà)出由坐標(biāo)left,top及right,bottom所定義的矩形。(4)setcolor(int color):把當(dāng)前畫(huà)線顏色設(shè)置為color所指定的顏色。每個(gè)圖形顯示卡的有效顏色由setpalette()提供。(5)closegraph():該函數(shù)使圖形狀態(tài)失效,并且釋放用于保存圖形驅(qū)動(dòng)器和字體的系統(tǒng)內(nèi)存。當(dāng)你的程序既用到圖形輸出又用到非圖形輸出時(shí),應(yīng)該用此函數(shù)。該函數(shù)還把系統(tǒng)屏顯模式返回到調(diào)用initgragh()前的狀態(tài)。4 調(diào)試分析 該程序運(yùn)行后就會(huì)在電腦屏幕上顯示下面所示圖象。該界面上邊顯示了兩個(gè)玩家的控制鍵盤(pán),和下棋方法。所以程序運(yùn)行之后我們就夠完成人和人的對(duì)戰(zhàn)了,其結(jié)果如下圖所示: 總結(jié)為期一周的算法課程設(shè)計(jì)到這里就要結(jié)束了,這次課程設(shè)計(jì)由于我本人對(duì)游戲的興趣,我選擇了五子棋游戲。在這為期一周的時(shí)間里,我不斷的向同學(xué)和老師尋求幫助,不斷的在網(wǎng)上和圖書(shū)館查閱資料,感覺(jué)收獲很大。這個(gè)程序是對(duì)編程基本功的一個(gè)訓(xùn)練,將分支、循環(huán)、數(shù)組、函數(shù)綜合應(yīng)用,而不僅限于編制獨(dú)立的小程序,通過(guò)游戲過(guò)程增加編程的興趣,提高編程水平。編制該程序我對(duì)以下的知識(shí)點(diǎn)進(jìn)行的鞏固和掌握:1.數(shù)組元素為結(jié)構(gòu)體的數(shù)組應(yīng)用。2.全局變量應(yīng)用。3.按鍵的處理。4.數(shù)組元素圖形坐標(biāo)的對(duì)應(yīng)。5.圖形方式等等。雖然該程序是一個(gè)普通而又簡(jiǎn)單的程序,但是對(duì)于一C語(yǔ)言初級(jí)階段的學(xué)生來(lái)說(shuō),是一個(gè)很好的鍛煉甚至可以說(shuō)是一個(gè)很好的提高。由于個(gè)人能力的限制該程序還有許多的缺陷,若要進(jìn)一步的完善還需要對(duì)C語(yǔ)言更深一步的學(xué)習(xí)。該五子棋游戲由于要實(shí)現(xiàn)在屏幕上的可視化顯示,所以要用到C語(yǔ)言里面的圖象函數(shù),在圖象函數(shù)這一快,以前學(xué)習(xí)C語(yǔ)言的時(shí)候就沒(méi)有接觸過(guò),所以在編制這個(gè)程序的時(shí)候我遇到了很多困難。但是在老師和同學(xué)的幫助下我還是粗略的完成這次任務(wù),所以我在這里我要感謝在這個(gè)過(guò)程中一直幫助我的老師和同學(xué)。參考文獻(xiàn)1數(shù)據(jù)結(jié)構(gòu)(C語(yǔ)言版),嚴(yán)蔚敏,清華大學(xué)出版社,20052算法設(shè)計(jì)與分析,王曉東主編,清華大學(xué)出版社,20053汪詩(shī)林等譯,數(shù)據(jù)結(jié)構(gòu)、算法與應(yīng)用,(美)Sartaj Sahni著,機(jī)械工業(yè)出版社, 19994數(shù)據(jù)結(jié)構(gòu)與算法分析,CLIFFORD A. SHAFFER著,張銘、劉曉丹譯,電子工業(yè)出版社,19985 C語(yǔ)言完全手冊(cè),楊峰編著,科學(xué)出版社,20086 C語(yǔ)言程序設(shè)計(jì)應(yīng)用教程,劉玲,西南師范大學(xué)出版社,2006 附 錄: 源程序#include<stdio.h>#include<stdlib.h>#include<graphics.h>#include<bios.h>#include<conio.h>#define LEFT 0x4b00#define RIGHT 0x4d00#define DOWN 0x5000#define UP 0x4800#define ESC 0x011b#define SPACE 0x3920#define BILI 20#define JZ 4#define JS 3#define N 19int boxNN,s; /*落子點(diǎn)*/int step_x,step_y ;int key ;int flag,i,j ;void draw_box();void draw_cicle(int x,int y,int color);void change();void judgewho(int x,int y);void judgekey();int judgeresult(int x,int y);void attentoin();void attentoin() /*游戲規(guī)則*/ char ch ; printf("Play attentoins:nn"); printf("1. Press Left,Right,Up,Down Key to move Piecenn");/*方向鍵移動(dòng)棋子*/ printf("2. Press Space to place the Piecenn");/*空格鍵確定棋子落點(diǎn)*/ printf("3. DO NOT press Space outside of the draw_boxnn");/*棋盤(pán)外不能落棋*/ printf("Do you accept the above Playing attentoins? Y/Other:");/*是否遵守*/ while(1) ch=getche(); if(ch=Y|ch=y) break ; else exit(0); printf("nnwhat size of the draw_box:"); scanf("%d",&s); /*輸出棋盤(pán)大小*/ printf("nnwho is the frist:1 or 2? "); /*誰(shuí)先落子*/ while(1) scanf("%d",&flag); if(flag!=1&&flag!=2) printf("Error!n"); else break; void draw_box() /*畫(huà)出棋盤(pán)*/ int x1,x2,y1,y2 ; setbkcolor(LIGHTBLUE); /*背景色*/ setcolor(YELLOW); /*文本色*/ gotoxy(7,2); printf("Left, Right, Up, Down KEY to move, Space to put, ESC-quit."); for(x1=1,y1=1,y2=s;x1<=s;x1+) line(x1+JZ)*BILI,(y1+JS)*BILI,(x1+JZ)*BILI,(y2+JS)*BILI);/*畫(huà)豎線*/ for(x1=1,y1=1,x2=s;y1<=s;y1+) line(x1+JZ)*BILI,(y1+JS)*BILI,(x2+JZ)*BILI,(y1+JS)*BILI); /*畫(huà)橫線*/ for(x1=1;x1<=s;x1+) for(y1=1;y1<=s;y1+) boxx1y1=0 ; /*棋盤(pán)初始化*/void draw_cicle(int x,int y,int color) /*棋子*/ setcolor(color); /*棋子顏色*/ setlinestyle(SOLID_LINE,0,1); /*線條類(lèi)型*/ x=(x+JZ)*BILI ; y=(y+JS)*BILI ; circle(x,y,8); /*畫(huà)半徑為8的棋子*/void judgekey() switch(key) case LEFT : /*左鍵控制棋子左移*/ if(step_x-1<0) break ; else for(i=step_x-1,j=step_y;i>=1;i-) if(boxij=0) draw_cicle(step_x,step_y,LIGHTBLUE); break ; if(i<1)break ; step_x=i ; judgewho(step_x,step_y); break ; case RIGHT : /*右鍵控制棋子右移*/ if(step_x+1>s) break ; else for(i=step_x+1,j=step_y;i<=s;i+) if(boxij=0) draw_cicle(step_x,step_y,LIGHTBLUE); break ; if(i>s)break ; step_x=i ; judgewho(step_x,step_y); break ; case DOWN : /*下鍵控制棋子下移*/ if(step_y+1>s) break ; else for(i=step_x,j=step_y+1;j<=s;j+) if(boxij=0) draw_cicle(step_x,step_y,LIGHTBLUE);break ; if(j>s)break ; step_y=j ; judgewho(step_x,step_y); break ; case UP : /*上鍵控制棋子上移*/ if(step_y-1<0) break ; else for(i=step_x,j=step_y-1;j>=1;j-) if(boxij=0) draw_cicle(step_x,step_y,LIGHTBLUE); break ; if(j<1)break ; step_y=j ; judgewho(step_x,step_y); break ; case ESC : break ; /*ESC鍵退出游戲*/ case SPACE : /*空格鍵控制落子*/ if(step_x>=1&&step_x<=s&&step_y>=1&&step_y<=s) if(boxstep_xstep_y=0) boxstep_xstep_y=flag ; if(judgeresult(step_x,step_y)=1) sound(1000); delay(1000); nosound(); gotoxy(30,4); cleardevice(); if(flag=1) settextstyle(3,0,5); outtextxy(120,120,"The White Win !"); /*顯示白棋贏*/ setcolor(14); if(flag=2) settextstyle(3,0,5); outtextxy(120,120,"The Red Win !"); /*顯示紅棋贏*/ setcolor(15); settextstyle(3,0,5); getch(); exit(0); change(); break ; else break ; void change() /*改變玩家*/ if(flag=1) flag=2 ; else flag=1 ;void judgewho(int x,int y) if(flag=1) draw_cicle(x,y,15); /*畫(huà)白棋*/ if(flag=2) draw_cicle(x,y,4); /*畫(huà)紅棋*/int judgeresult(int x,int y) int j,k,n; while(1) n

注意事項(xiàng)

本文(《算法設(shè)計(jì)與分析》課程設(shè)計(jì)論文五子棋游戲)為本站會(huì)員(仙***)主動(dòng)上傳,裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)上載內(nèi)容本身不做任何修改或編輯。 若此文所含內(nèi)容侵犯了您的版權(quán)或隱私,請(qǐng)立即通知裝配圖網(wǎng)(點(diǎn)擊聯(lián)系客服),我們立即給予刪除!

溫馨提示:如果因?yàn)榫W(wǎng)速或其他原因下載失敗請(qǐng)重新下載,重復(fù)下載不扣分。




關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號(hào):ICP2024067431號(hào)-1 川公網(wǎng)安備51140202000466號(hào)


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺(tái),本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請(qǐng)立即通知裝配圖網(wǎng),我們立即給予刪除!