C语言课程设计实验报告.docx
- 文档编号:4494601
- 上传时间:2022-12-01
- 格式:DOCX
- 页数:15
- 大小:18.07KB
C语言课程设计实验报告.docx
《C语言课程设计实验报告.docx》由会员分享,可在线阅读,更多相关《C语言课程设计实验报告.docx(15页珍藏版)》请在冰豆网上搜索。
C语言课程设计实验报告
实验报告
课程名称:
C语言课程设计
实验项目:
五子棋游戏设计
专业班级:
计专1502
姓名:
孙奇学号:
实验室号:
实验组号:
实验时间:
批阅时间:
指导教师:
成绩:
沈阳工业大学实验报告
(适用计算机程序设计类)
专业班级:
计专1502学号:
姓名:
孙奇
实验名称:
五子棋游戏设计
1.实验内容:
(1)掌握C语言的基本语法结构、程序设计方法和一些常见的算法;
(2)掌握对程序排查错误的能力。
2.实验内容:
(1)实现双人对战的简单步骤和规则,能够判断输赢;
(2)双方轮流使用键盘的“↑”、“↓”、“←”、“→”键控制棋子在屏幕上的位置,按“空格”键放置棋子,判断棋子应放置在棋盘范围内且不能已经有棋子,否则使用扬声器提示不能放置;
(3)当一方的棋子数在行、列或对角线上连续达到5个(无禁手判断),则为胜方,在屏幕上显示胜利一方,按任意键退出程序。
3.实验方案(程序设计说明)
(1)算法设计思路
棋盘设计为19×19格,初始状态光标在棋盘的左上,黑棋先走,轮流落子,当一方连成五子或下满棋盘时,游戏结束。
当游戏一方胜利后显示胜利信息。
从程序表面看,这是一个二维平面图,所以数据用二维数组来表示,数组两个下标可以表示棋盘上的位置,数组元素的值代表棋格上的状态,共有三种情况,分别是0代表无棋子,1代表黑棋,2代表白棋。
这样程序的主要工作是接收棋手按键操作,双方轮流使用键盘的“↑”、“↓”、“←”、“→”键控制光标移动,空格键表示落子。
一旦接收到空格键,说明棋手落子,先判断是否是有效位置,也就是说棋子应在棋盘内或棋盘的空位置上,无效位置时利用扬声器发声警示。
落子成功后,马上判断以该位置为中心的八个方向相邻的是否有相同颜色的棋子连成五子,如果连成五子,则游戏结束,输出胜利一方的信息。
如果想在对弈的过程中退出游戏,可以按Esc键。
(2)程序功能流程图
4.程序运行结果
(1)规则界面
(2)对弈界面
(3)获胜界面
5.出现的问题及解决方法
(1)游戏开始时,棋子原来初始在棋盘中央,一旦中央落子后,初始棋子与已有棋子重叠,为了解决问题将初始棋子移动到棋盘左上方棋盘以外。
(2)棋子都为空心圆,在棋盘不好区分正在控制的棋子,改为已确定落子的棋子为实心圆,正在控制的棋子为空心圆。
附件A沈阳工业大学实验报告
(适用计算机程序设计类)
专业班级:
计专1502学号:
姓名:
孙奇
实验程序:
本程序在WindowsXPSP3操作系统及开发环境下调试通过。
#include<>
#include<>
#include<>
#include<>
#include<>
#defineLEFT0x4b00
#defineRIGHT0x4d00
#defineDOWN0x5000
#defineUP0x4800
#defineESC0x011b
#defineSPACE0x3920
#defineBILI20
#defineJZ4
#defineJS3
#defineSIZE19
intbox[SIZE][SIZE];
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);
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,25);
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+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++)
box[x1][y1]=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_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<0)
break;
else
{
for(i=step_x-1,j=step_y;i>=1;i--)
if(box[i][j]==0)
{
draw_circle(step_x,step_y,LIGHTBLUE);
break;
}
if(i<1)break;
step_x=i;
judgewho(step_x,step_y);
break;
}
caseRIGHT:
if(step_x+1>18)
break;
else
{
for(i=step_x+1,j=step_y;i<=18;i++)
if(box[i][j]==0)
{
draw_circle(step_x,step_y,LIGHTBLUE);
break;
}
if(i>18)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;j<=18;j++)
if(box[i][j]==0)
{
draw_circle(step_x,step_y,LIGHTBLUE);
break;
}
if(j>18)break;
step_y=j;
judgewho(step_x,step_y);
break;
}
caseUP:
if((step_y-1)<0)
break;
else
{
for(i=step_x,j=step_y-1;j>=1;j--)
if(box[i][j]==0)
{
draw_circle(step_x,step_y,LIGHTBLUE);
break;
}
if(j<1)break;
step_y=j;
judgewho(step_x,step_y);
break;
}
caseESC:
break;
caseSPACE:
if(step_x>=1&&step_x<=18&&step_y>=1&&step_y<=18)
{
if(box[step_x][step_y]==0)
{
box[step_x][step_y]=flag;
if(flag==1)
{
draw_slice(step_x,step_y,BLUE);
}
else
{
draw_slice(step_x,step_y,WHITE);
}
if(judgeresult(step_x,step_y)==1)
{
sound(1000);
delay(1000);
nosound();
gotoxy(30,4);
if(flag==1)
{
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);
outtextxy(20,20,"TheBlackWin!
");
setcolor(14);
settextstyle(3,0,5);
outtextxy(120,120,"TheBlackWin!
");
setcolor(14);
settextstyle(2,0,8);
getch();
closegraph();
exit(0);
}
if(flag==2)
{
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,8);
outtextxy(20,20,"TheWhiteWin!
");
setcolor(14);
settextstyle(3,0,5);
outtextxy(120,120,"TheWhiteWin!
");
setcolor(14);
settextstyle(2,0,8);
getch();
closegraph();
exit(0);
}
}
change();
break;
}
}
else
break;
}
}
voidchange()
{
if(flag==1)
flag=2;
else
flag=1;
}
voidjudgewho(intx,inty)
{
if(flag==1)
draw_circle(x,y,BLUE);
if(flag==2)
draw_circle(x,y,WHITE);
}
intjudgeresult(intx,inty)
{
intj,k,n1,n2;
while
(1)
{
n1=0;
n2=0;
/*
水平向左数
*/
for(j=x,k=y;j>=1;j--)
{
if(box[j][k]==flag)
n1++;
else
break;
}
/*
水平向右数
*/
for(j=x,k=y;j<=18;j++)
{
if(box[j][k]==flag)
n2++;
else
break;
}
if(n1+n2-1>=5)
{
return
(1);
break;
}
/*
垂直向上数
*/
n1=0;
n2=0;
for(j=x,k=y;k>=1;k--)
{
if(box[j][k]==flag)
n1++;
else
break;
}
/*
垂直向下数
*/
for(j=x,k=y;k<=18;k++)
{
if(box[j][k]==flag)
n2++;
else
break;
}
if(n1+n2-1>=5)
{
return
(1);
break;
}
/*
向左上方数
*/
n1=0;
n2=0;
for(j=x,k=y;j>=1,k>=1;j--,k--)
{
if(box[j][k]==flag)
n1++;
else
break;
}
/*
向右下方数
*/
for(j=x,k=y;j<=18,k<=18;j++,k++)
{
if(box[j][k]==flag)
n2++;
else
break;
}
if(n1+n2-1>=5)
{
return
(1);
break;
}
/*
向右上方数
*/
n1=0;
n2=0;
for(j=x,k=y;j<=18,k>=1;j++,k--)
{
if(box[j][k]==flag)
n1++;
else
break;
}
/*
向左下方数
*/
for(j=x,k=y;j>=1,k<=18;j--,k++)
{
if(box[j][k]==flag)
n2++;
else
break;
}
if(n1+n2-1>=5)
{
return
(1);
break;
}
return(0);
break;
}
}
voidmain()
{
intgdriver=VGA,gmode=VGAHI;
clrscr();
attention();
initgraph(&gdriver,&gmode,"c:
\\tc\\bgi");
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();
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 课程设计 实验 报告