匯編語言課程設(shè)計五子棋源代碼_第1頁
匯編語言課程設(shè)計五子棋源代碼_第2頁
匯編語言課程設(shè)計五子棋源代碼_第3頁
匯編語言課程設(shè)計五子棋源代碼_第4頁
匯編語言課程設(shè)計五子棋源代碼_第5頁
已閱讀5頁,還剩8頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、/* 加載頭文件 */#include#include#include#include#include/* 編譯預(yù)處理 , 定義按鍵碼 */#define LEFT 0x4b00#define RIGHT 0x4d00#define DOWN 0x5000#define UP 0x4800/* 若想在游戲中途退出 , 可按 Esc 鍵 */#define ESC 0x011b/*SPACE 鍵表示落子 */#define SPACE 0x3920/* 設(shè)置偏移量 */#define OFFSET 20#define OFFSET_x 4#define OFFSET_y 3/* 定義數(shù)組大小 *

2、/#define N 19/* 定義全局變量 */int statusNN 。 /* 定義地數(shù)組 , 保存狀態(tài) */ int step_x,step_y。 /* 行走地坐標 */int key 。/*獲取按下地鍵盤地鍵 */int flag 。/*玩家標志 */* 自定義函數(shù)原型 */void DrawBoard() 。void DrawCircle(int x,int y,int color)。void Alternation() 。void JudgePlayer(int x,int y)。void Done() 。int ResultCheck(int x,int y)。void Wel

3、comeInfo() 。void ShowMessage() 。/* 定義函數(shù) */* 顯示歡迎信息函數(shù) */void WelcomeInfo()char ch 。/* 移動光標到指定位置 */gotoxy(12,4) 。/* 顯示歡迎信息 */printf(Welcome you to gobang word!) 。gotoxy(12,6) 。printf(1.You can use the up,down,left and right key to move the chessman,) 。gotoxy(12,8) 。printf( and you can press Space key

4、to enter after you move it !)。gotoxy(12,10) 。printf(2.You can use Esc key to exit the game too !) 。gotoxy(12,12) 。printf(3.Don not move the pieces out of the chessboard !)。gotoxy(12,14) 。printf(DO you want to continue ?(Y/N)。ch=getchar() 。/* 判斷程序是否要繼續(xù)進行 */if(ch=n|ch=N)/* 如果不繼續(xù)進行 , 則推出程序 */exit(0) 。/

5、* 畫棋盤函數(shù) */void DrawBoard()int x1,x2。int y1,y2。/* 設(shè)置背景色 */setbkcolor(2) 。/* 設(shè)置線條顏色 */setcolor(1) 。/* 設(shè)置線條風格、寬度 */ setlinestyle(DOTTED_LINE,1,1) 。/* 按照預(yù)設(shè)地偏移量開始畫棋盤 */ for(x1=1,y1=1,y2=18。 x1=18。 x1+)line(x1+OFFSET_x)*OFFSET,(y1+OFFSET_y)*OFFSET,(x1+OFFSET_x)*OFFSET,(y2+OFFSET_y )*OFFSET)。for(x1=1,y1=1,

6、x2=18。 y1=18。 y1+)line(x1+OFFSET_x)*OFFSET,(y1+OFFSET_y)*OFFSET,(x2+OFFSET_x)*OFFSET,(y1+OFFSET_y )*OFFSET)。/* 將各個點地狀態(tài)設(shè)置為 0*/for(x仁1。x1=18。x1+)for(y1=1 。 y1=1。j-)if(statusjk=flag)n1+ 。elsebreak。/* 水平向右數(shù) */for(j=x,k=y。 j=5)return(1)。/* 對垂直方向進行判斷是否有 5 個同色地圓 */ n1=0 。n2=0 。/* 垂直向上數(shù) */ for(j=x,k=y。 k=1。

7、 k-)if(statusjk=flag) n1+ 。elsebreak 。/* 垂直向下數(shù) */ for(j=x,k=y。 k=5)return(1) 。/* 從左上方到右下方進行判斷是否有 5 個同色地圓 */ n1=0 。n2=0 。/* 向左上方數(shù) */ for(j=x,k=y。 (j=1)&(k=1) 。 j-,k-)if(statusjk=flag) n1+ 。elsebreak 。/* 向右下方數(shù) */ for(j=x,k=y 。 (j=18)&(k=5) return(1) 。/* 從右上方到左下方進行判斷是否有 5 個同色地圓 */ n1=0 。n2=0 。/* 向右上方數(shù)

8、*/for(j=x,k=y 。 (j=1) 。 j+,k-) if(statusjk=flag) n1+ 。else break 。/* 向左下方數(shù) */for(j=x,k=y 。 (j=1)&(k=5) return(1) 。return(0) 。/* 執(zhí)行下棋函數(shù) */void Done()int i。int j。/* 根據(jù)不同地 key 值進行不同地操作 */ switch(key)/* 如果是向左移動地 */case LEFT:/* 如果下一步超出棋盤左邊界則什么也不作 */ if(step_x-1=1。i-)if(statusij=0)DrawCircle(step_x,step_y

9、,2)。break。if(i18)break。elsefor(i=step_x+1,j=step_y。 i18)break。step_x=i。/*根據(jù)不同地行棋者畫不同顏色地圓*/JudgePlayer(step_x,step_y)。/*顯示行棋一方是誰 */break。/* 如果是向下移動地 */case DOWN :/* 如果下一步超出棋盤下邊界則什么也不作 */if(step_y+1)18)break。elsefor(i=step_x,j=step_y+1。 j18)break 。step_y=j 。JudgePlayer(step_x,step_y) 。 break 。/* 如果是向上

10、移動地 */case UP :/* 如果下一步超出棋盤上邊界則什么也不作 */ if(step_y-1)=1。j-)if(statusij=0)DrawCircle(step_x,step_y,2)。break。if(j=1&step_x=1&step_y=18)0*/表示是哪個行棋者行地棋 */* 按下確定鍵后 , 如果棋子當前位置地狀態(tài)為 if(statusstep_xstep_y=0)/*則更改棋子當前位置地狀態(tài)在flag,statusstep_xstep_y=flag。/*如果判斷當前行棋者獲勝 */if(ResultCheck(step_x,step_y)=1)/*以指定頻率打開 P

11、C揚聲器*/sound(1000)。/*揚聲器地發(fā)生時間 ,為 1 秒鐘*/delay(1000)。nosound() 。gotoxy(30,4) 。setbkcolor(BLUE) 。/* 清除圖形屏幕 */cleardevice() 。/*為圖形輸出設(shè)置當前視口 */setviewport(100,100,540,380,1) 。/*綠色實填充 */setfillstyle(1,2) 。 setcolor(YELLOW) 。 rectangle(0,0,439,279) 。 floodfill(50,50,14)。setcolor(12) 。settextstyle(1,0,5)。/* 三

12、重筆劃字體 , 水平放大 5 倍 */ outtextxy(20,20,Congratulation !) setcolor(15) 。settextstyle(3,0,4) 。/*如果是 Player1 獲勝, 顯示獲勝信息 */if(flag=1)/* 無襯筆劃字體 , 水平放大 5 倍*/ outtextxy(20,120,Player1 win the game !)/*如果是 Player1 獲勝, 顯示獲勝信息 */if(flag=2)/* 無襯筆劃字體 , 水平放大 5 倍*/ outtextxy(20,120,Player2 win the game !)setcolor(14

13、) 。settextstyle(2,0,8) 。getch() 。exit(0) 。/* 如果當前行棋者沒有獲勝 , 則交換行棋方 */ Alternation() 。/* 提示行棋方是誰 */ShowMessage() 。breakelsebreak 。/* 顯示行棋方函數(shù) */void ShowMessage()/* 輪到 Player1 行棋 */if(flag=1)setcolor(2) 。 settextstyle(1,0,1) 。gotoxy(100,30) 。/* 覆蓋原有地字跡 */ outtextxy(100,30,Its turn to Player2 !) setcolo

14、r(12) 。 settextstyle(1,0,1) 。 outtextxy(100,30,Its turn to Player1 !)/* 輪到 Player2 行棋 */if(flag=2)setcolor(2) 。 settextstyle(1,0,1) 。/* 覆蓋原有地字跡 */ outtextxy(100,30,Its turn to Player1 !) setcolor(12) 。 settextstyle(1,0,1) 。 gotoxy(100,20) 。outtextxy(100,30,Its turn to Player2 !)/* 主函數(shù) */int main()in

15、t gdriver 。int gmode 。int errorcode 。/* 清空文本模式窗口 */clrscr() 。/* 顯示歡迎信息 */WelcomeInfo() 。gdriver=DETECT 。gmode=0 。/* 初始化圖形系統(tǒng) */ initgraph(&gdriver,&gmode,) 。/* 返回最后一次不成功地圖形操作地錯誤代碼 */ errorcode=graphresult() 。if (errorcode!= grOk)/* 根據(jù)錯誤代碼輸出錯誤信息串 */grphicsprintf(nNotice:Erroroccuredwheninitialization: %sn,grapherrormsg(errorcode)。printf(Press any key to quit!)。getch()。exit(1)。/* 設(shè)置 flag 初始值 , 默認是 Player1 先行 */flag=1 。/* 畫棋盤 */DrawBoard() 。ShowMessage() 。dost

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論