1、(2)双方轮流使用键盘的“”、“”、“”、“”键控制棋子在屏幕上的位置,按“空格”键放置棋子,判断棋子应放置在棋盘范围内且不能已经有棋子,否则使用扬声器提示不能放置;(3)当一方的棋子数在行、列或对角线上连续达到5个(无禁手判断),则为胜方,在屏幕上显示胜利一方,按任意键退出程序。3. 实验方案(程序设计说明)(1)算法设计思路棋盘设计为1919格,初始状态光标在棋盘的左上,黑棋先走,轮流落子,当一方连成五子或下满棋盘时,游戏结束。当游戏一方胜利后显示胜利信息。从程序表面看,这是一个二维平面图,所以数据用二维数组来表示,数组两个下标可以表示棋盘上的位置,数组元素的值代表棋格上的状态,共有三种情
2、况,分别是0代表无棋子,1代表黑棋,2代表白棋。这样程序的主要工作是接收棋手按键操作,双方轮流使用键盘的“”、“”、“”、“”键控制光标移动,空格键表示落子。一旦接收到空格键,说明棋手落子,先判断是否是有效位置,也就是说棋子应在棋盘内或棋盘的空位置上,无效位置时利用扬声器发声警示。落子成功后,马上判断以该位置为中心的八个方向相邻的是否有相同颜色的棋子连成五子,如果连成五子,则游戏结束,输出胜利一方的信息。如果想在对弈的过程中退出游戏,可以按Esc键。(2)程序功能流程图4程序运行结果(1)规则界面(2)对弈界面(3)获胜界面5出现的问题及解决方法(1)游戏开始时,棋子原来初始在棋盘中央,一旦中
3、央落子后,初始棋子与已有棋子重叠,为了解决问题将初始棋子移动到棋盘左上方棋盘以外。(2)棋子都为空心圆,在棋盘不好区分正在控制的棋子,改为已确定落子的棋子为实心圆,正在控制的棋子为空心圆。附件A 沈阳工业大学实验报告 计专1502 学号:248150203 姓名:实验程序:本程序在Windows XP SP3操作系统及Turbo C 2.0开发环境下调试通过。#includestdlib.hgraphics.hbios.hconio.h#define LEFT 0x4b00#define RIGHT 0x4d00#define DOWN 0x5000#define UP 0x4800#defi
4、ne ESC 0x011b#define SPACE 0x3920#define BILI 20#define JZ 4#define JS 3#define SIZE 19int boxSIZESIZE;int step_x,step_y;int key;int flag=1;void attentoin();void draw_box();void draw_cicle(int x,int y,int color);void draw_slice(int x,int y,int color);void change();void judgewho(int x,int y);void jud
5、gekey();int judgeresult(int x,int y);void attention() char ch; window(1,1,80,25); textbackground(LIGHTBLUE); textcolor(YELLOW); clrscr(); gotoxy(15,4); printf(Play Rules:); gotoxy(15,8);1.Press Left,Right,Up,Down Key to move Piece gotoxy(15,12);2.Press Space to place the Piece gotoxy(15,16);3.DO NOT
6、 press Space outside of the chessboard gotoxy(15,20);Do you accept the above Playing Rules? Y/N: while(1) gotoxy(60,20); ch=getche(); if (ch=Y | ch=y) break; else if(ch=Nn window(1,1,80,25); textbackground(BLACK); textcolor(LIGHTGRAY); clrscr(); exit(0); gotoxy(51,12); printf( void draw_box() int x1
7、,x2,y1,y2; setbkcolor(LIGHTBLUE); setcolor(YELLOW); gotoxy(7,2);Left, Right, Up, Down KEY to move, Space to put, ESC-quit. for(x1=1,y1=1,y2=18;x1=18;x1+) line(x1+JZ)*BILI,(y1+JS)*BILI,(x1+JZ)*BILI,(y2+JS)*BILI); for(x1=1,y1=1,x2=18;y1y1+) line(x1+JZ)*BILI,(y1+JS)*BILI,(x2+JZ)*BILI,(y1+JS)*BILI); for
8、(x1=1; for(y1=1; boxx1y1=0;void draw_circle(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 draw_slice(int x,int y,int color) setcolor(color) ; setfillstyle(SOLID_FILL,color); floodfill(x,y,color); pieslice(x,y,0,360,8);void judg
9、ekey() int i; int j; switch(key) case LEFT : if(step_x-1=1;i-) if(boxij=0) draw_circle(step_x,step_y,LIGHTBLUE); break; if (i18) for(i=step_x+1,j=step_y;i18) break; case DOWN : if(step_y+1) for(i=step_x,j=step_y+1;j18)break; step_y=j; case UP : if(step_y-1)j-) if(j=1 & step_x step_y=5) return(1); 垂直
10、向上数kk-) 垂直向下数kj-,k-) 向右下方数=18,kj+,k-) 向左下方数=1,kj-,k+) return(0); break;void main() int gdriver=VGA,gmode=VGAHI; attention(); initgraph(&gdriver,&gmode,c:tcbgi flag=1; 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! closegraph();
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1