《2022年汇编语言课程设计五子棋源代码 .pdf》由会员分享,可在线阅读,更多相关《2022年汇编语言课程设计五子棋源代码 .pdf(12页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、/* 加载头文件 */ #include #include #include #include #include /* 编译预处理 ,定义按键码 */ #define LEFT 0 x4b00 #define RIGHT 0 x4d00 #define DOWN 0 x5000 #define UP 0 x4800 /* 若想在游戏中途退出, 可按 Esc 键*/ #define ESC 0 x011b /*SPACE键表示落子 */ #define SPACE 0 x3920 /* 设置偏移量 */ #define OFFSET 20 #define OFFSET_x 4 #define O
2、FFSET_y 3 /* 定义数组大小 */ #define N 19 /* 定义全局变量 */ int statusNN。 /* 定义地数组 , 保存状态 */ int step_x,step_y。/* 行走地坐标 */ int key 。 /*获取按下地键盘地键*/ int flag。 /*玩家标志 */ /* 自定义函数原型*/ void DrawBoard()。void DrawCircle(int x,int y,int color)。void Alternation()。void JudgePlayer(int x,int y)。void Done()。int ResultChec
3、k(int x,int y)。void WelcomeInfo()。void ShowMessage() 。/* 定义函数 */ /* 显示欢迎信息函数*/ void WelcomeInfo() 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 1 页,共 12 页 char ch 。 /*移动光标到指定位置*/ gotoxy(12,4)。 /*显示欢迎信息*/ printf(Welcome you to gobang word!)。 gotoxy(12,6)。 printf(1.You can use the up,down,left and ri
4、ght key to move the chessman,) 。 gotoxy(12,8)。 printf( and you can press Space key 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 contin
5、ue ?(Y/N)。 ch=getchar()。 /*判断程序是否要继续进行*/ if(ch=n|ch=N) /*如果不继续进行,则推出程序 */ exit(0)。 /* 画棋盘函数 */ void DrawBoard() int x1,x2。 int y1,y2。 /*设置背景色 */ setbkcolor(2)。 /*设置线条颜色*/ setcolor(1)。 /*设置线条风格、宽度*/ setlinestyle(DOTTED_LINE,1,1)。 /*按照预设地偏移量开始画棋盘*/ for(x1=1,y1=1,y2=18。x1=18。x1+) line(x1+OFFSET_x)*OFFS
6、ET,(y1+OFFSET_y)*OFFSET,(x1+OFFSET_x)*OFFSET,(y2+OFFSET_y)*OFFSET)。 for(x1=1,y1=1,x2=18。y1=18。y1+) line(x1+OFFSET_x)*OFFSET,(y1+OFFSET_y)*OFFSET,(x2+OFFSET_x)*OFFSET,(y1+OFFSET_y)*OFFSET)。精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 2 页,共 12 页 /*将各个点地状态设置为0*/ for(x1=1。x1=18。x1+) for(y1=1。y1=1 。 j-
7、) if(statusjk=flag) n1+。 else break。 /*水平向右数 */ for(j=x,k=y。j=5) return(1)。 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 4 页,共 12 页 /*对垂直方向进行判断是否有5 个同色地圆 */ n1=0。 n2=0。 /*垂直向上数 */ for(j=x,k=y。k=1。 k-) if(statusjk=flag) n1+。 else break 。 /*垂直向下数 */ for(j=x,k=y。k=5) return(1)。 /*从左上方到右下方进行判断是否有5 个同色
8、地圆 */ n1=0。 n2=0。 /*向左上方数 */ for(j=x,k=y。(j=1)&(k=1)。j-,k-) if(statusjk=flag) n1+。 else break。 /*向右下方数 */ for(j=x,k=y。 (j=18)&(k=5) return(1)。 /*从右上方到左下方进行判断是否有5 个同色地圆 */ n1=0。 n2=0。 /*向右上方数 */ for(j=x,k=y。(j=1)。j+,k-) if(statusjk=flag) n1+。 else break。 /*向左下方数 */ for(j=x,k=y。(j=1)&(k=5) return(1)。
9、return(0)。 /* 执行下棋函数 */ void Done() int i 。 int j 。 /*根据不同地key 值进行不同地操作*/ switch(key) /*如果是向左移动地*/ case LEFT: /*如果下一步超出棋盘左边界则什么也不作*/ if(step_x-1=1 。i-) if(statusij=0) DrawCircle(step_x,step_y,2)。 break 。 if(i18) break 。 else for(i=step_x+1,j=step_y。i18)break 。 step_x=i 。 /*根据不同地行棋者画不同颜色地圆*/ JudgePla
10、yer(step_x,step_y)。 /*显示行棋一方是谁*/ break 。 /*如果是向下移动地*/ case DOWN : /*如果下一步超出棋盘下边界则什么也不作*/ if(step_y+1)18) break 。 else for(i=step_x,j=step_y+1。j18)break 。 step_y=j 。 JudgePlayer(step_x,step_y)。 break 。 /*如果是向上移动地*/ case UP : /*如果下一步超出棋盘上边界则什么也不作*/ if(step_y-1)=1 。j-) if(statusij=0) DrawCircle(step_x,
11、step_y,2)。 break 。 if(j=1&step_x=1&step_y=18) /*按下确定键后, 如果棋子当前位置地状态为0*/ if(statusstep_xstep_y=0) /*则更改棋子当前位置地状态在flag,表示是哪个行棋者行地棋*/ statusstep_xstep_y=flag 。 /*如果判断当前行棋者获胜*/ if(ResultCheck(step_x,step_y)=1) 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 8 页,共 12 页 /*以指定频率打开PC扬声器 */ sound(1000)。 /*扬声器
12、地发生时间, 为 1 秒钟 */ delay(1000)。 nosound()。 gotoxy(30,4)。 setbkcolor(BLUE)。 /*清除图形屏幕*/ cleardevice()。 /*为图形输出设置当前视口*/ 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)。 /*三重笔划字体, 水平放大 5 倍 */ out
13、textxy(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)。 settextstyle(2,
14、0,8)。 getch()。 exit(0)。 /*如果当前行棋者没有获胜, 则交换行棋方 */ Alternation()。 /*提示行棋方是谁*/ ShowMessage()。精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 9 页,共 12 页 break。 else break 。 /* 显示行棋方函数*/ void ShowMessage() /*轮到 Player1行棋 */ if(flag=1) setcolor(2)。 settextstyle(1,0,1)。 gotoxy(100,30)。 /*覆盖原有地字迹*/ outtextxy
15、(100,30,Its turn to Player2 !)。 setcolor(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
16、 to Player2 !)。 /* 主函数 */ int main() int gdriver。 int gmode。 int errorcode。精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 10 页,共 12 页 /*清空文本模式窗口*/ clrscr()。 /*显示欢迎信息*/ WelcomeInfo()。 gdriver=DETECT。 gmode=0。 /*初始化图形系统*/ initgraph(&gdriver,&gmode,)。 /*返回最后一次不成功地图形操作地错误代码*/ errorcode=graphresult()。 if
17、 (errorcode!= grOk) /*根据错误代码输出错误信息串*/ printf(nNotice:Error occured when grphics initialization: %sn,grapherrormsg(errorcode)。 printf(Press any key to quit!)。 getch()。 exit(1)。 /*设置 flag初始值 , 默认是 Player1先行 */ flag=1。 /*画棋盘 */ DrawBoard()。 ShowMessage()。 do step_x=0 。 step_y=0 。 JudgePlayer(step_x-1,s
18、tep_y-1)。 do /*如果没有键按下, 则 bioskey(1)函数将返回0*/ while(bioskey(1)=0)。 /*获取从键盘按下地键值*/ key=bioskey(0)。 /*根据获得地键值进行下棋操作*/ Done()。 while(key!=SPACE&key!=ESC)。 while(key!=ESC)。 /*关闭图形系统*/ closegraph()。 return 0。 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 11 页,共 12 页精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 12 页,共 12 页