1、C语言课程设计实验报告实验报告课程名称:C语言课程设计实验项目:五子棋游戏设计专业班级:计专1502姓名:孙奇学号:实验室号:实验组号:实验时间:批阅时间:指导教师:成绩:沈阳工业大学实验报告(适用计算机程序设计类)专业班级:计专1502学号:姓名:孙奇实验名称:五子棋游戏设计1.实验内容:(1)掌握C语言的基本语法结构、程序设计方法和一些常见的算法;(2)掌握对程序排查错误的能力。2.实验内容:(1)实现双人对战的简单步骤和规则,能够判断输赢;(2)双方轮流使用键盘的“”、“”、“”、“”键控制棋子在屏幕上的位置,按“空格”键放置棋子,判断棋子应放置在棋盘范围内且不能已经有棋子,否则使用扬声
2、器提示不能放置;(3)当一方的棋子数在行、列或对角线上连续达到5个(无禁手判断),则为胜方,在屏幕上显示胜利一方,按任意键退出程序。3.实验方案(程序设计说明)(1)算法设计思路棋盘设计为1919格,初始状态光标在棋盘的左上,黑棋先走,轮流落子,当一方连成五子或下满棋盘时,游戏结束。当游戏一方胜利后显示胜利信息。从程序表面看,这是一个二维平面图,所以数据用二维数组来表示,数组两个下标可以表示棋盘上的位置,数组元素的值代表棋格上的状态,共有三种情况,分别是0代表无棋子,1代表黑棋,2代表白棋。这样程序的主要工作是接收棋手按键操作,双方轮流使用键盘的“”、“”、“”、“”键控制光标移动,空格键表示
3、落子。一旦接收到空格键,说明棋手落子,先判断是否是有效位置,也就是说棋子应在棋盘内或棋盘的空位置上,无效位置时利用扬声器发声警示。落子成功后,马上判断以该位置为中心的八个方向相邻的是否有相同颜色的棋子连成五子,如果连成五子,则游戏结束,输出胜利一方的信息。如果想在对弈的过程中退出游戏,可以按Esc键。(2)程序功能流程图4程序运行结果(1)规则界面(2)对弈界面(3)获胜界面5出现的问题及解决方法(1)游戏开始时,棋子原来初始在棋盘中央,一旦中央落子后,初始棋子与已有棋子重叠,为了解决问题将初始棋子移动到棋盘左上方棋盘以外。(2)棋子都为空心圆,在棋盘不好区分正在控制的棋子,改为已确定落子的棋
4、子为实心圆,正在控制的棋子为空心圆。附件A沈阳工业大学实验报告(适用计算机程序设计类)专业班级:计专1502学号:姓名:孙奇实验程序:本程序在WindowsXPSP3操作系统及开发环境下调试通过。#include#include#include#include#include#defineLEFT0x4b00#defineRIGHT0x4d00#defineDOWN0x5000#defineUP0x4800#defineESC0x011b#defineSPACE0x3920#defineBILI20#defineJZ4#defineJS3#defineSIZE19intboxSIZESIZE;
5、intstep_x,step_y;intkey;intflag=1;voidattentoin();voiddraw_box();voiddraw_cicle(intx,inty,intcolor);voiddraw_slice(intx,inty,intcolor);voidchange();voidjudgewho(intx,inty);voidjudgekey();intjudgeresult(intx,inty);voidattention() charch; window(1,1,80,25); textbackground(LIGHTBLUE); textcolor(YELLOW)
6、; clrscr(); gotoxy(15,4); printf(PlayRules:); gotoxy(15,8); printf(,Right,Up,DownKeytomovePiece); gotoxy(15,12); printf(); gotoxy(15,16); printf(); gotoxy(15,20); printf(DoyouaccepttheabovePlayingRules?Y/N:); while(1) gotoxy(60,20); ch=getche(); if(ch=Y|ch=y) break; elseif(ch=N|ch=n) window(1,1,80,2
7、5); textbackground(BLACK); textcolor(LIGHTGRAY); clrscr(); exit(0); gotoxy(51,12); printf(); voiddraw_box() intx1,x2,y1,y2; setbkcolor(LIGHTBLUE); setcolor(YELLOW); gotoxy(7,2); printf(Left,Right,Up,DownKEYtomove,Spacetoput,ESC-quit.); for(x1=1,y1=1,y2=18;x1=18;x1+) line(x1+JZ)*BILI,(y1+JS)*BILI,(x1
8、+JZ)*BILI,(y2+JS)*BILI); for(x1=1,y1=1,x2=18;y1=18;y1+) line(x1+JZ)*BILI,(y1+JS)*BILI,(x2+JZ)*BILI,(y1+JS)*BILI); for(x1=1;x1=18;x1+) for(y1=1;y1=18;y1+) boxx1y1=0;voiddraw_circle(intx,inty,intcolor) setcolor(color); setlinestyle(SOLID_LINE,0,1); x=(x+JZ)*BILI; y=(y+JS)*BILI; circle(x,y,8);voiddraw_
9、slice(intx,inty,intcolor) x=(x+JZ)*BILI; y=(y+JS)*BILI; setcolor(color); setfillstyle(SOLID_FILL,color); circle(x,y,8); floodfill(x,y,color); setcolor(color); setfillstyle(SOLID_FILL,color); pieslice(x,y,0,360,8); setcolor(color);voidjudgekey() inti; intj; switch(key) caseLEFT: if(step_x-1=1;i-) if(
10、boxij=0) draw_circle(step_x,step_y,LIGHTBLUE); break; if(i18) break; else for(i=step_x+1,j=step_y;i18)break; step_x=i; judgewho(step_x,step_y); break; caseDOWN: if(step_y+1)18) break; else for(i=step_x,j=step_y+1;j18)break; step_y=j; judgewho(step_x,step_y); break; caseUP: if(step_y-1)=1;j-) if(boxi
11、j=0) draw_circle(step_x,step_y,LIGHTBLUE); break; if(j=1&step_x=1&step_y=1;j-) if(boxjk=flag) n1+; else break; /* 水平向右数 */ for(j=x,k=y;j=5) return(1); break; /* 垂直向上数 */ n1=0; n2=0; for(j=x,k=y;k=1;k-) if(boxjk=flag) n1+; else break; /* 垂直向下数 */ for(j=x,k=y;k=5) return(1); break; /* 向左上方数 */ n1=0; n
12、2=0; for(j=x,k=y;j=1,k=1;j-,k-) if(boxjk=flag) n1+; else break; /* 向右下方数 */ for(j=x,k=y;j=18,k=5) return(1); break; /* 向右上方数 */ n1=0; n2=0; for(j=x,k=y;j=1;j+,k-) if(boxjk=flag) n1+; else break; /* 向左下方数 */ for(j=x,k=y;j=1,k=5) return(1); break; return(0); break; voidmain() intgdriver=VGA,gmode=VGAHI; clrscr(); 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!=ESC); closegraph();
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1