C语言黑白棋实验报告Word下载.docx
- 文档编号:22226508
- 上传时间:2023-02-03
- 格式:DOCX
- 页数:14
- 大小:18.13KB
C语言黑白棋实验报告Word下载.docx
《C语言黑白棋实验报告Word下载.docx》由会员分享,可在线阅读,更多相关《C语言黑白棋实验报告Word下载.docx(14页珍藏版)》请在冰豆网上搜索。
棋钟:
正式的比赛中可以使用棋钟对选手的时间进行限制。
非正式的对局中一般不使用棋钟。
黑白棋的棋盘是一个有8*8方格的棋盘。
下棋时将棋下在空格中间,而不是像围棋一样下在交叉点上。
开始时在棋盘正中有两白两黑四个棋子交叉放置,黑棋总是先下子。
下子的方法把自己颜色的棋子放在棋盘的空格上,而当自己放下的棋子在横、竖、斜八个方向内有一个自己的棋子,则被夹在中间的全部翻转会成为自己的棋子。
并且,只有在可以翻转棋子的地方才可以下子。
如果玩家在棋盘上没有地方可以下子,则该玩家对手可以连下。
双方都没有棋子可以下时棋局结束,以棋子数目来计算胜负,棋子多的一方获胜。
在棋盘还没有下满时,如果一方的棋子已经被对方吃光,则棋局也结束。
将对手棋子吃光的一方获胜。
每个“翻转棋”游戏开始时,棋盘上已经交叉放好了四颗棋子。
其中两颗是黑棋,另两颗是白棋。
黑棋总是先走。
当您的棋子在某一直线方向包围了对手的棋子时,就可以翻转这些棋子的颜色,使它们成为您方的颜色。
例如,如果您执黑棋,并且看到在一排白棋的某一端是一颗黑棋,那么当您将一颗黑棋放在这一排的另一端时,所有的白棋都将翻转并变为黑棋!
所有的直线方向均有效:
水平、垂直和斜线方向。
走棋的唯一规则是只能走包围并翻转对手的棋子。
每一回合都必须至少翻转一颗对手的棋子。
按规则不能再走棋时,这一回合弃权。
计算机会自动将控制权交给对方。
得分
“翻转棋”的计分方法非常简单。
游戏过程中随时都显示黑棋数与白棋数。
结束时棋数最多的一方就是赢家。
实验步骤与内容
1、主要设计思想;
(1)画棋盘
(2)画分数板
(3)控制棋子颜色变化
(4)吃掉对手棋子
(5)分数变化
(6)判断输赢
(7)显示胜负信息
2、所有函数的简要说明;
voidVS();
/*对战函数*/
voidDrawChessBoard();
/*画棋盘函数*/
voidSetPlayColor(intx);
/*控制棋子颜色函数*/
voidRestoreBoardShape(intx,inty);
/*回复棋盘状态*/
intChessBoardChange(intx,inty,intz);
/*吃掉对方棋子*/
voidProcessingScores();
/*分数控制*/
voidPrintScore();
/*打印分数*/
voidPlayWin();
/*显示胜负信息*/
3、所有源代码;
#include<
graphics.h>
#defineESC0x011b
#defineENTER0x1c0d
#defineUP0x4800
#defineDOWN0x5000
#defineLEFT0x4b00
#defineRIGHT0x4d00
inta[8][8]={0},key,score1,score2;
charPlayOne[3],PlayTwo[3];
intmain()
{
intgdrive=VGA,gmode=VGAHI;
initgraph(&
gdrive,&
gmode,"
"
);
DrawChessBoard();
VS();
getch();
}
voidDrawChessBoard()
inti,j;
score1=0;
score2=0;
for(i=100;
i<
=420;
i=i+40)
{
line(100,i,420,i);
line(i,100,i,420);
}
setcolor(BLACK);
setfillstyle(SOLID_FILL,WHITE);
fillellipse(500,200,15,15);
setfillstyle(SOLID_FILL,DARKGRAY);
fillellipse(500,300,15,15);
a[3][3]=1;
a[3][4]=2;
a[4][3]=2;
a[4][4]=1;
fillellipse(240,240,15,15);
fillellipse(280,280,15,15);
fillellipse(240,280,15,15);
fillellipse(280,240,15,15);
score1=2;
score2=2;
voidVS()
intx,y,t=1,i,j,cc=0;
while
(1)
x=120;
y=80;
PrintScore();
SetPlayColor(t);
fillellipse(x,y,15,15);
key=bioskey(0);
if(key==ESC)
break;
else
if(key==ENTER)
if(y!
=80&
&
a[(x-120)/40][(y-120)/40]!
=1&
=2)
if(t%2==1)
a[(x-120)/40][(y-120)/40]=1;
a[(x-120)/40][(y-120)/40]=2;
if(ChessBoardChange(x,y,t)==0)
a[(x-120)/40][(y-120)/40]=0;
cc++;
if(cc>
=64-score1-score2)
RestoreBoardShape(x,y);
continue;
ProcessingScores();
elseif(key==LEFT&
x>
120)
x=x-40;
elseif(key==RIGHT&
x<
400&
y>
80)
x=x+40;
elseif(key==DOWN&
y<
400)
y=y+40;
elseif(key==UP&
y=y-40;
if((score1+score2)==64||score1==0||score2==0)
PlayWin();
t=t%2+1;
cc=0;
voidPrintScore()
setfillstyle(SOLID_FILL,BLACK);
bar(550,100,640,400);
setcolor(RED);
settextstyle(DEFAULT_FONT,HORIZ_DIR,3);
sprintf(PlayOne,"
%d"
score1);
outtextxy(550,190,PlayOne);
sprintf(PlayTwo,"
score2);
outtextxy(550,290,PlayTwo);
voidSetPlayColor(intx)
if(x%2==1)
intChessBoardChange(intx,inty,intz)
inti,j,k,kk,ii,jj,yes;
yes=0;
i=(x-120)/40;
j=(y-120)/40;
SetPlayColor(z);
if(i>
1)
for(k=i-1;
k>
=0;
k--)
if(a[k][j]==a[i][j]||!
a[k][j])
if(a[k][j]!
=0&
=0)
for(kk=i-1;
kk>
k&
kk--)
a[kk][j]=a[i][j];
fillellipse(120+kk*40,120+j*40,15,15);
if(kk!
=i-1)
yes=1;
if(i<
6)
for(k=i+1;
k<
8;
k++)
8)
for(kk=i+1;
kk<
kk++)
=i+1)
if(j>
for(k=j-1;
if(a[i][k]==a[i][j]||!
a[i][k])
if(a[i][k]!
for(kk=j-1;
a[i][kk]=a[i][j];
fillellipse(120+i*40,120+kk*40,15,15);
=j-1)
if(j<
for(k=j+1;
if(a[i][k]==a[i][j]||a[i][k]==0)
{
for(kk=j+1;
=j+1)
1&
j>
for(k=i-1,kk=j-1;
k--,kk--)
if(a[k][kk]==a[i][j]||!
a[k][kk])
if(a[k][kk]!
for(ii=i-1,jj=j-1;
ii>
ii--,jj--)
a[ii][jj]=a[i][j];
fillellipse(120+ii*40,120+jj*40,15,15);
if(ii!
j<
for(k=i-1,kk=j+1;
k--,kk++)
if(a[k][kk]&
for(ii=i-1,jj=j+1;
ii--,jj++)
6&
for(k=i+1,kk=j-1;
8&
k++,kk--)
for(ii=i+1,jj=j-1;
ii<
ii++,jj--)
for(k=i+1,kk=j+1;
k++,kk++)
for(ii=i+1,jj=j+1;
ii++,jj++)
returnyes;
voidRestoreBoardShape(intx,inty)
if(y<
100)
switch(a[(x-120)/40][(y-120)/40])
case1:
setfillstyle(SOLID_FILL,WHITE);
break;
case2:
setfillstyle(SOLID_FILL,DARKGRAY);
default:
setfillstyle(SOLID_FILL,BLACK);
voidProcessingScores()
for(i=0;
i++)
for(j=0;
j++)
if(a[i][j]==1)
score1++;
elseif(a[i][j]==2)
score2++;
voidPlayWin()
setcolor(LIGHTRED);
if(score2>
score1)
outtextxy(100,50,"
BlackWin!
if(score2<
WhiteWin!
outtextxy(60,50,"
YouallWin!
试验过程记录
记录试验中遇到的困难及解决方法;
实验结果记录以及与预期结果比较以及分析
记录每次实验结果以及分析情况
总结以及心得体会
指导老师评阅意见
指导老师:
年月日
填写内容时,可把表格扩大。
实验的源程序代码(要有注释)附在表后。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 白棋 实验 报告