- 18
- 0
- 约1.52万字
- 约 23页
- 2016-12-10 发布于贵州
- 举报
《四子棋游戏程序设计》
四子棋游戏程序设计
1设计任务及要求
1.1设计任务
设计一个四子棋游戏程序,棋盘为8X8(64格),先达到4子成一条线即结束游戏。 该程序在DOS下运行。
1.2任务要求
(1)画出棋盘界面。
(2)定义键盘的功能,可以实现棋子左右移动及落子。
(3)棋子不能悬空,落子后不能再移动。
(4)人、人分别落子。
(5)用不同的颜色区分各方的棋子。
(6)撰写设计说明书及调试心得。2程序设计思路
2.1 主程序及模块链接
四子棋的程序中包含许多模块,其中有棋盘的绘制,棋子的绘制以及棋子坐标位置的计算,棋子胜负的算法等等,在主程序中需要将这些模块链接起来。
程序主流程图:流程图是否程序运行界面图图2-1 程序运行界面截图2.2棋盘的绘制
本次课程设计要求是绘制8x8格的棋盘,在绘制过程中,需要调用dos 功能调用中的int 10h命令,利用该命令中的多项功能可以完成绘制棋盘中所需要的划线和填充颜色,从而绘制出8x8格棋盘!绘制棋盘程序代码:
ro rcolor,rrow,rcol,endcol;调用划线的命令local rline1; line horizonmov dx,rrowmov cx,rcol
rline1:mov al,rcolor;调用int 10h 中的och功能mov ah,0chint 10hinc cx;累加1的功能cmp cx,endcol;比较cx和endcol的大小jl rline1;小于就再循环执行一次endm
段程序中, dx的值没有变化,不断的累加cx的值,不断的写像素,从而达到画横线的功能.
cline macro color,crow,ccol,endrow;画竖线local cline1;line verticalmov dx,crowmov cx,ccol
cline1:;和上一段的程序相似mov al,colormov ah,0chint 10hinc dxcmp dx,endrowjl cline1endm
dx的值没有变化,不断的累加cx的值,不断的写像素,从而完成画横线的功能。
mainfrm proc near;主框架的设计rline 1,65,1,640;画横线rline 1,415,1,640cline 1,65,480,415;画竖线blockpos 9,64,640,1,1 ;for upbackground ;在整个的界面中有8个颜色区,
程序的功能就是在横向-纵向分别写像素,可以使的整块都有颜色.
linechess proc near;画棋盘mov dx,90 ;init rowhline:mov cx,90 ;init column
hdot:mov al,0fh ;set color
;调用的int 10h 的0f功能,使的画出的线可以用颜色.mov al,0fhint 10hinc cxcmp cx,250jle hdot;小于或等于就跳转,重新执行add dx,20;距离为20再画一条线cmp dx,250jle hline;不断的画,一共9条;end of 15 hlinemov cx,90;和上面的相似
vline:mov dx,90
vdot:mov al,0fhmov ah,0chint 10hinc dxcmp dx,250jle vdotadd cx,20cmp cx,250jle vline;end of 15 vlineretlinechess endp
2.3绘制棋子
绘制棋子模块的作用是根据鼠标返回的象素坐标写一级棋行表和界面对应的棋子,以准备进入二级棋行表进行判断。首先确定一个圆心,定义cx、dx,确定棋子半径R,将棋子半径R赋值给cx、dx,cx2+dx2-R2≤0则添加象素,否则dx减1,继续判断,直至dx为0,dx=R,cx依次减1,直至为0,如此作出的是1/4圆,其余3/4圆按对称的方法作出。
程序流程图:程序源代码:
showbchess proc near ;show black chess in panpush bppush sipush dimov chessrad,10mov ax,si;calculate x and yand ax,00ffhmov bl,20mul bladd ax,90mov x,axmov al,ccountmov bl,20mul bladd ax,90mov y,axcall mouseshut;鼠标调用mov al,chessradcbwmov di,ax
loopx:mov al,chessradcbwmov si,ax
loopy:cal si;calcuate x-x0*x-x0mov tempt1,axcal di;calcu
原创力文档

文档评论(0)