求一个C语言的黑白棋程序

作者&投稿:余谈 (若有异议请与网页底部的电邮联系)
求教!c语言黑白棋的程序~

private void handlePauseActivity(IBinder token, boolean finished,
boolean userLeaving, int configChanges, boolean dontReport) {
ActivityClientRecord r = mActivities.get(token);
if (r != null) {
//Slog.v(TAG, "userLeaving=" + userLeaving + " handling pause of " + r);
if (userLeaving) {
performUserLeavingActivity(r);
}

r.activity.mConfigChangeFlags |= configChanges;
performPauseActivity(token, finished, r.isPreHoneycomb());

// Make sure any pending writes are now committed.
if (r.isPreHoneycomb()) {
QueuedWork.waitToFinish();
}

// Tell the activity manager we have paused.
if (!dontReport) {
try {
ActivityManagerNative.getDefault().activityPaused(token);
} catch (RemoteException ex) {
}
}
mSomeActivitiesChanged = true;
}

我写的人机对战的:
#include
#include

#define SIZE 8

void display(char board[][SIZE]);
int valid_moves(char board[][SIZE],int moves[][SIZE],char player);
void make_move(char board[][SIZE],int row,int col,char player);
void computer_move(char board[][SIZE],int moves[][SIZE],char player);
int get_score(char board[][SIZE],char player);
int best_move(char board[][SIZE],int moves[][SIZE],char player);

void main()
{
char board[SIZE][SIZE]={0};
int moves[SIZE][SIZE]={0};
int row=0;
int col=0;
int no_of_games=0;
int no_of_moves=0;
int invalid_moves=0;
int comp_score=0;
int user_score=0;
char y=0;
char x=0;
char again=0;
int player=0;

printf("
REVERSI

");
printf("You can go first on the first game,then we will take truns.
");
printf(" You will be white - (0)
I will be black - (@).
");
printf("Select a square for your move by typing a digit for the row
"
"and a letter for the column with no spaces between.
");
printf("
Good luck! press Enter to start.
");
scanf("%c",&again);

do
{
player=++no_of_games%2;
no_of_moves=4;

for(row=0;row<SIZE;row++)
for(col=0;col<SIZE;col++)
board[row][col]=' ';

board[SIZE/2-1][SIZE/2-1]=board[SIZE/2][SIZE/2]='0';
board[SIZE/2-1][SIZE/2]=board[SIZE/2][SIZE/2-1]='@';

do
{
display(board);
if(player++%2)
{
if(valid_moves(board,moves,'0'))
{
for(;;)
{
fflush(stdin);
printf("Please enter your move (row column): ");
scanf("%d%c",&x,&y);
y=tolower(y)-'a';
x--;
if(x>=0&&y>=0&&x<SIZE&&y<SIZE&&moves[x][y])
{
make_move(board,x,y,'0');
no_of_moves++;
break;
}
else
printf("Not a valid move,try again.
");
}
}
else
if(++invalid_moves<2)
{
fflush(stdin);
printf("
You have to pass,press return");
scanf("%c",&again);
}
else
printf("
Neither of us can go, so the game is over.
");
}
else
{
if(valid_moves(board,moves,'@'))
{
invalid_moves=0;
computer_move(board,moves,'@');
no_of_moves++;
}
else
{
if(++invalid_moves<2)
printf("
I have to pass, your go
");
else
printf("
Neither of us can go, so the game is over.
");
}
}
}while(no_of_moves<SIZE*SIZE&&invalid_moves<2);

display(board);

comp_score=user_score=0;
for(row=0;row<SIZE;row++)
for(col=0;col<SIZE;col++)
{
comp_score+=board[row][col]=='@';
user_score+=board[row][col]=='0';
}
printf("The final score is:
");
printf("Computer %d
User %d

",comp_score,user_score);

fflush(stdin);
printf("Do you want to play again (y/n): ");
scanf("%c",&again);
}while(tolower(again)=='y');

printf("
Goodbye
");
}

void display(char board[][SIZE])
{
int row=0;
int col=0;
char col_label='a';

printf("
");
for(col=0;col<SIZE;col++)
printf(" %c",col_label+col);
printf("
");

for(row=0;row<SIZE;row++)
{
printf(" +");
for(col=0;col<SIZE;col++)
printf("---+");
printf("
%2d|",row+1);

for(col=0;col<SIZE;col++)
printf(" %c |",board[row][col]);
printf("
");
}

printf(" +");
for(col=0;col<SIZE;col++)
printf("---+");
printf("
");
}

int valid_moves(char board[][SIZE],int moves[][SIZE],char player)
{
int rowdelta=0;
int coldelta=0;
int row=0;
int col=0;
int x=0;
int y=0;
int no_of_moves=0;

char opponent=(player=='0')?'@':'0';

for(row=0;row<SIZE;row++)
for(col=0;col<SIZE;col++)
moves[row][col]=0;

for(row=0;row<SIZE;row++)
for(col=0;col<SIZE;col++)
{
if(board[row][col]!=' ')
continue;
for(rowdelta=-1;rowdelta<=1;rowdelta++)
for(coldelta=-1;coldelta<=1;coldelta++)
{
if(row+rowdelta=SIZE||
col+coldelta=SIZE||
(rowdelta==0&&coldelta==0))
continue;
if(board[row+rowdelta][col+coldelta]==opponent)
{
x=row+rowdelta;
y=col+coldelta;

for(;;)
{
x+=rowdelta;
y+=coldelta;

if(x=SIZE||y=SIZE)
break;

if(board[x][y]==' ')
break;
if(board[x][y]==player)
{
moves[row][col]=1;
no_of_moves++;
break;
}
}
}
}
}
return no_of_moves;
}

void make_move(char board[][SIZE],int row,int col,char player)
{
int rowdelta=0;
int coldelta=0;
int x=0;
int y=0;
char opponent=(player=='0')?'@':'0';

board[row][col]=player;

for(rowdelta=-1;rowdelta<=1;rowdelta++)
for(coldelta=-1;coldelta<=1;coldelta++)
{
if(row+rowdelta=SIZE||
col+coldelta=SIZE||
(rowdelta==0&&coldelta==0))
continue;

if(board[row+rowdelta][col+coldelta]==opponent)
{
x=row+rowdelta;
y=col+coldelta;

for(;;)
{
x+=rowdelta;
y+=coldelta;

if(x=SIZE||y=SIZE)
break;
if(board[x][y]==' ')
break;
if(board[x][y]==player)
{
while(board[x-=rowdelta][y-=coldelta]==opponent)
board[x][y]=player;
break;
}
}
}
}
}

int get_score(char board[][SIZE],char player)
{
int score=0;
int row=0;
int col=0;
char opponent=player=='0'?'@':'0';

for(row=0;row<SIZE;row++)
for(col=0;col<SIZE;col++)
{
score-=board[row][col]==opponent;
score+=board[row][col]==player;
}
return score;
}

int best_move(char board[][SIZE],int moves[][SIZE],char player)
{
int row=0;
int col=0;
int i=0;
int j=0;

char opponent=player=='0'?'@':'0';

char new_board[SIZE][SIZE]={0};
int score=0;
int new_score=0;

for(row=0;row<SIZE;row++)
for(col=0;col<SIZE;col++)
{
if(!moves[row][col])
continue;

for(i=0;i<SIZE;i++)
for(j=0;j<SIZE;j++)
new_board[i][j]=board[i][j];

make_move(new_board,row,col,player);

new_score=get_score(new_board,player);

if(score<new_score)
score=new_score;
}
return score;
}

void computer_move(char board[][SIZE],int moves[][SIZE],char player)
{
int row=0;
int col=0;
int best_row=0;
int best_col=0;
int i=0;
int j=0;
int new_score=0;
int score=100;
char temp_board[SIZE][SIZE];
int temp_moves[SIZE][SIZE];
char opponent=player=='0'?'@':'0';

for(row=0;row<SIZE;row++)
for(col=0;col<SIZE;col++)
{
if(moves[row][col]==0)
continue;

for(i=0;i<SIZE;i++)
for(j=0;j<SIZE;j++)
temp_board[i][j]=board[i][j];

make_move(temp_board,row,col,player);
valid_moves(temp_board,temp_moves,opponent);
new_score=best_move(temp_board,temp_moves,opponent);

if(new_score<score)
{
score=new_score;
best_row=row;
best_col=col;
}
}
make_move(board,best_row,best_col,player);
}
我已经用英文说明了如何操作了......看不懂的我在这个说一下.
先按回车开始游戏,然后输入行号和列号就可以了...一局结束之后,
会提示是否再来一盘输入大写的Y继续大写的N结束程序!!!
我已经对操作说的很明确了!~~~~~你控制的是白棋(0),首先按回车开始游戏,然后输入行号(数字),列号(字符)就行了.......如果还是不行的话,那就是你更本不懂黑白棋的规则....

#include "graphics.h" /*图形系统头文件*/
#define LEFT 0x4b00 /*光标左键值*/
#define RIGHT 0x4d00 /*光标右键值*/
#define DOWN 0x5000 /*光标下键值*/
#define UP 0x4800 /*光标上键值*/
#define ESC 0x011b /* ESC键值*/
#define ENTER 0x1c0d /* 回车键值*/

int a[8][8]={0},key,score1,score2;/*具体分数以及按键与存放棋子的变量*/
char playone[3],playtwo[3];/*两个人的得分转换成字符串输出*/
void playtoplay(void);/*人人对战函数*/
void DrawQp(void);/*画棋盘函数*/
void SetPlayColor(int x);/*设置棋子第一次的颜色*/
void MoveColor(int x,int y);/*恢复原来棋盘状态*/
int QpChange(int x,int y,int z);/*判断棋盘的变化*/
void DoScore(void);/*处理分数*/
void PrintScore(int n);/*输出成绩*/
void playWin(void);/*输出胜利者信息*/

/******主函数*********/
void main(void)
{
int gd=DETECT,gr;
initgraph(&gd,&gr,"c:\\tc"); /*初始化图形系统*/
DrawQp();/*画棋盘*/
playtoplay();/*人人对战*/
getch();
closegraph();/*关闭图形系统*/
}

void DrawQp()/*画棋盘*/
{
int i,j;
score1=score2=0;/*棋手一开始得分都为0*/
setbkcolor(BLUE);
for(i=100;i<=420;i+=40)
{
line(100,i,420,i);/*画水平线*/
line(i,100,i,420); /*画垂直线*/
}
setcolor(0);/*取消圆周围的一圈东西*/
setfillstyle(SOLID_FILL,15);/*白色实体填充模式*/
fillellipse(500,200,15,15); /*在显示得分的位置画棋*/
setfillstyle(SOLID_FILL,8); /*黑色实体填充模式*/
fillellipse(500,300,15,15);
a[3][3]=a[4][4]=1;/*初始两个黑棋*/
a[3][4]=a[4][3]=2;/*初始两个白棋*/
setfillstyle(SOLID_FILL,WHITE);
fillellipse(120+3*40,120+3*40,15,15);
fillellipse(120+4*40,120+4*40,15,15);
setfillstyle(SOLID_FILL,8);
fillellipse(120+3*40,120+4*40,15,15);
fillellipse(120+4*40,120+3*40,15,15);
score1=score2=2; /*有棋后改变分数*/
DoScore();/*输出开始分数*/
}

void playtoplay()/*人人对战*/
{
int x,y,t=1,i,j,cc=0;
while(1)/*换棋手走棋*/
{
x=120,y=80;/*每次棋子一开始出来的坐标,x为行坐标,y为列坐标*/
while(1) /*具体一个棋手走棋的过程*/
{
PrintScore(1);/*输出棋手1的成绩*/
PrintScore(2);/*输出棋手2的成绩*/
SetPlayColor(t);/*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
&&a[(x-120)/40][(y-120)/40]!=2)/*如果落子位置没有棋子*/
{
if(t%2==1)/*如果是棋手1移动*/
a[(x-120)/40][(y-120)/40]=1;
else/*否则棋手2移动*/
a[(x-120)/40][(y-120)/40]=2;
if(!QpChange(x,y,t))/*落子后判断棋盘的变化*/
{
a[(x-120)/40][(y-120)/40]=0;/*恢复空格状态*/
cc++;/*开始统计尝试次数*/
if(cc>=64-score1-score2) /*如果尝试超过空格数则停步*/
{
MoveColor(x,y);
fillellipse(x,y,15,15);
break;
}
else
continue;/*如果按键无效*/
}
DoScore();/*分数的改变*/
break;/*棋盘变化了,则轮对方走棋*/
}
else/*已经有棋子就继续按键*/
continue;
}
else /*四个方向按键的判断*/
if(key==LEFT&&x>120)/*左方向键*/
{
MoveColor(x,y);
fillellipse(x,y,15,15);
SetPlayColor(t);
x-=40;
fillellipse(x,y,15,15);
}
else
if(key==RIGHT&&x<400&&y>80)/*右方向键*/
{
MoveColor(x,y);
fillellipse(x,y,15,15);
SetPlayColor(t);
x+=40;
fillellipse(x,y,15,15);
}
else
if(key==UP&&y>120)/*上方向键*/
{
MoveColor(x,y);
fillellipse(x,y,15,15);
SetPlayColor(t);
y-=40;
fillellipse(x,y,15,15);
}
else
if(key==DOWN&&y<400)/*下方向键*/
{
MoveColor(x,y);
fillellipse(x,y,15,15);
SetPlayColor(t);
y+=40;
fillellipse(x,y,15,15);
}
}
if(key==ESC)/*结束游戏*/
break;
if((score1+score2)==64||score1==0||score2==0)/*格子已经占满或一方棋子为0判断胜负*/
{
playWin();/*输出最后结果*/
break;
}
t=t%2+1; /*一方走后,改变棋子颜色即轮对方走*/
cc=0; /*计数值恢复为0*/
} /*endwhile*/
}

void SetPlayColor(int t)/*设置棋子颜色*/
{
if(t%2==1)
setfillstyle(SOLID_FILL,15);/*白色*/
else
setfillstyle(SOLID_FILL,8);/*灰色*/
}

void MoveColor(int x,int y)/*走了一步后恢复原来格子的状态*/
{
if(y<100)/*如果是从起点出发就恢复蓝色*/
setfillstyle(SOLID_FILL,BLUE);
else/*其他情况如果是1就恢复白色棋子,2恢复黑色棋子,或恢复蓝色棋盘*/
switch(a[(x-120)/40][(y-120)/40])
{
case 1:
setfillstyle(SOLID_FILL,15);break; /*白色*/
case 2:
setfillstyle(SOLID_FILL,8);break; /*黑色*/
default:
setfillstyle(SOLID_FILL,BLUE); /*蓝色*/
}
}

int QpChange(int x,int y,int t)/*判断棋盘的变化*/
{
int i,j,k,kk,ii,jj,yes;
yes=0;
i=(x-120)/40; /*计算数组元素的行下标*/
j=(y-120)/40; /*计算数组元素的列下标*/
SetPlayColor(t);/*设置棋子变化的颜色*/
/*开始往8个方向判断变化*/
if(j<6)/*往右边*/
{
for(k=j+1;k<8;k++)
if(a[k]==a[j]||a[k]==0)/*遇到自己的棋子或空格结束*/
break;
if(a[k]!=0&&k<8)
{
for(kk=j+1;kk<k&&k<8;kk++)/*判断右边*/
{
a[kk]=a[j]; /*改变棋子颜色*/
fillellipse(120+i*40,120+kk*40,15,15);
}
if(kk!=j+1) /*条件成立则有棋子改变过颜色*/
yes=1;
}
}
if(j>1)/*判断左边*/
{
for(k=j-1;k>=0;k--)
if(a[k]==a[j]||!a[k])
break;
if(a[k]!=0&&k>=0)
{
for(kk=j-1;kk>k&&k>=0;kk--)
{
a[kk]=a[j];
fillellipse(120+i*40,120+kk*40,15,15);
}
if(kk!=j-1)
yes=1;
}
}
if(i<6)/*判断下边*/
{
for(k=i+1;k<8;k++)
if(a[k][j]==a[j]||!a[k][j])
break;
if(a[k][j]!=0&&k<8)
{
for(kk=i+1;kk<k&&k<8;kk++)
{
a[kk][j]=a[j];
fillellipse(120+kk*40,120+j*40,15,15);
}
if(kk!=i+1)
yes=1;
}
}
if(i>1)/*判断上边*/
{
for(k=i-1;k>=0;k--)
if(a[k][j]==a[j]||!a[k][j])
break;
if(a[k][j]!=0&&k>=0)
{
for(kk=i-1;kk>k&&k>=0;kk--)
{
a[kk][j]=a[j];
fillellipse(120+kk*40,120+j*40,15,15);
}
if(kk!=i-1)
yes=1;
}
}
if(i>1&&j<6)/*右上*/
{
for(k=i-1,kk=j+1;k>=0&&kk<8;k--,kk++)
if(a[k][kk]==a[j]||!a[k][kk])
break;
if(a[k][kk]&&k>=0&&kk<8)
{
for(ii=i-1,jj=j+1;ii>k&&k>=0;ii--,jj++)
{
a[ii][jj]=a[j];
fillellipse(120+ii*40,120+jj*40,15,15);
}
if(ii!=i-1)
yes=1;
}
}
if(i<6&&j>1)/*左下*/
{
for(k=i+1,kk=j-1;k<8&&kk>=0;k++,kk--)
if(a[k][kk]==a[j]||!a[k][kk])
break;
if(a[k][kk]!=0&&k<8&&kk>=0)
{
for(ii=i+1,jj=j-1;ii<k&&k<8;ii++,jj--)
{
a[ii][jj]=a[j];
fillellipse(120+ii*40,120+jj*40,15,15);
}
if(ii!=i+1)
yes=1;
}
}
if(i>1&&j>1)/*左上*/
{
for(k=i-1,kk=j-1;k>=0&&kk>=0;k--,kk--)
if(a[k][kk]==a[j]||!a[k][kk])
break;
if(a[k][kk]!=0&&k>=0&&kk>=0)
{
for(ii=i-1,jj=j-1;ii>k&&k>=0;ii--,jj--)
{
a[ii][jj]=a[j];
fillellipse(120+ii*40,120+jj*40,15,15);
}
if(ii!=i-1)
yes=1;
}
}
if(i<6&&j<6)/* 右下*/
{
for(k=i+1,kk=j+1;kk<8&&kk<8;k++,kk++)
if(a[k][kk]==a[j]||!a[k][kk])
break;
if(a[k][kk]!=0&&kk<8&&k<8)
{
for(ii=i+1,jj=j+1;ii<k&&k<8;ii++,jj++)
{
a[ii][jj]=a[j];
fillellipse(120+ii*40,120+jj*40,15,15);
}
if(ii!=i+1)
yes=1;
}
}
return yes;/*返回是否改变过棋子颜色的标记*/
}

void DoScore()/*处理分数*/
{
int i,j;
score1=score2=0;/*重新开始计分数*/
for(i=0;i<8;i++)
for(j=0;j<8;j++)
if(a[j]==1)/*分别统计两个人的分数*/
score1++;
else
if(a[j]==2)
score2++;
}

void PrintScore(int playnum)/*输出成绩*/
{
if(playnum==1)/*清除以前的成绩*/
{
setfillstyle(SOLID_FILL,BLUE);
bar(550,100,640,400);
}
setcolor(RED);
settextstyle(0,0,4);/*设置文本输出样式*/
if(playnum==1)/*判断输出哪个棋手的分,在不同的位置输出*/
{
sprintf(playone,"%d",score1);
outtextxy(550,200,playone);
}
else
{
sprintf(playtwo,"%d",score2);
outtextxy(550,300,playtwo);
}
setcolor(0);
}

void playWin()/*输出最后的胜利者结果*/
{
settextstyle(0,0,4);
setcolor(12);
if(score2>score1)/*开始判断最后的结果*/
outtextxy(100,50,"black win!");
else
if(score2<score1)
outtextxy(100,50,"white win!");
else
outtextxy(60,50,"you all win!");
}

人机对战

#include <stdio.h>
#include <ctype.h>

#define SIZE 8

void display(char board[][SIZE]);
int valid_moves(char board[][SIZE],int moves[][SIZE],char player);
void make_move(char board[][SIZE],int row,int col,char player);
void computer_move(char board[][SIZE],int moves[][SIZE],char player);
int get_score(char board[][SIZE],char player);
int best_move(char board[][SIZE],int moves[][SIZE],char player);

void main()
{
char board[SIZE][SIZE]={0};
int moves[SIZE][SIZE]={0};
int row=0;
int col=0;
int no_of_games=0;
int no_of_moves=0;
int invalid_moves=0;
int comp_score=0;
int user_score=0;
char y=0;
char x=0;
char again=0;
int player=0;

printf("\nREVERSI\n\n");
printf("You can go first on the first game,then we will take truns.\n");
printf(" You will be white - (0)\n I will be black - (@).\n");
printf("Select a square for your move by typing a digit for the row\n"
"and a letter for the column with no spaces between.\n");
printf("\nGood luck! press Enter to start.\n");
scanf("%c",&again);

do
{
player=++no_of_games%2;
no_of_moves=4;

for(row=0;row<SIZE;row++)
for(col=0;col<SIZE;col++)
board[row][col]=' ';

board[SIZE/2-1][SIZE/2-1]=board[SIZE/2][SIZE/2]='0';
board[SIZE/2-1][SIZE/2]=board[SIZE/2][SIZE/2-1]='@';

do
{
display(board);
if(player++%2)
{
if(valid_moves(board,moves,'0'))
{
for(;;)
{
fflush(stdin);
printf("Please enter your move (row column): ");
scanf("%d%c",&x,&y);
y=tolower(y)-'a';
x--;
if(x>=0&&y>=0&&x<SIZE&&y<SIZE&&moves[x][y])
{
make_move(board,x,y,'0');
no_of_moves++;
break;
}
else
printf("Not a valid move,try again.\n");
}
}
else
if(++invalid_moves<2)
{
fflush(stdin);
printf("\nYou have to pass,press return");
scanf("%c",&again);
}
else
printf("\nNeither of us can go, so the game is over.\n");
}
else
{
if(valid_moves(board,moves,'@'))
{
invalid_moves=0;
computer_move(board,moves,'@');
no_of_moves++;
}
else
{
if(++invalid_moves<2)
printf("\nI have to pass, your go\n");
else
printf("\nNeither of us can go, so the game is over.\n");
}
}
}while(no_of_moves<SIZE*SIZE&&invalid_moves<2);

display(board);

comp_score=user_score=0;
for(row=0;row<SIZE;row++)
for(col=0;col<SIZE;col++)
{
comp_score+=board[row][col]=='@';
user_score+=board[row][col]=='0';
}
printf("The final score is:\n");
printf("Computer %d\n User %d\n\n",comp_score,user_score);

fflush(stdin);
printf("Do you want to play again (y/n): ");
scanf("%c",&again);
}while(tolower(again)=='y');

printf("\nGoodbye\n");
}

void display(char board[][SIZE])
{
int row=0;
int col=0;
char col_label='a';

printf("\n ");
for(col=0;col<SIZE;col++)
printf(" %c",col_label+col);
printf("\n");

for(row=0;row<SIZE;row++)
{
printf(" +");
for(col=0;col<SIZE;col++)
printf("---+");
printf("\n%2d|",row+1);

for(col=0;col<SIZE;col++)
printf(" %c |",board[row][col]);
printf("\n");
}

printf(" +");
for(col=0;col<SIZE;col++)
printf("---+");
printf("\n");
}

int valid_moves(char board[][SIZE],int moves[][SIZE],char player)
{
int rowdelta=0;
int coldelta=0;
int row=0;
int col=0;
int x=0;
int y=0;
int no_of_moves=0;

char opponent=(player=='0')?'@':'0';

for(row=0;row<SIZE;row++)
for(col=0;col<SIZE;col++)
moves[row][col]=0;

for(row=0;row<SIZE;row++)
for(col=0;col<SIZE;col++)
{
if(board[row][col]!=' ')
continue;
for(rowdelta=-1;rowdelta<=1;rowdelta++)
for(coldelta=-1;coldelta<=1;coldelta++)
{
if(row+rowdelta<0||row+rowdelta>=SIZE||
col+coldelta<0||col+coldelta>=SIZE||
(rowdelta==0&&coldelta==0))
continue;
if(board[row+rowdelta][col+coldelta]==opponent)
{
x=row+rowdelta;
y=col+coldelta;

for(;;)
{
x+=rowdelta;
y+=coldelta;

if(x<0||x>=SIZE||y<0||y>=SIZE)
break;

if(board[x][y]==' ')
break;
if(board[x][y]==player)
{
moves[row][col]=1;
no_of_moves++;
break;
}
}
}
}
}
return no_of_moves;
}

void make_move(char board[][SIZE],int row,int col,char player)
{
int rowdelta=0;
int coldelta=0;
int x=0;
int y=0;
char opponent=(player=='0')?'@':'0';

board[row][col]=player;

for(rowdelta=-1;rowdelta<=1;rowdelta++)
for(coldelta=-1;coldelta<=1;coldelta++)
{
if(row+rowdelta<0||row+rowdelta>=SIZE||
col+coldelta<0||col+coldelta>=SIZE||
(rowdelta==0&&coldelta==0))
continue;

if(board[row+rowdelta][col+coldelta]==opponent)
{
x=row+rowdelta;
y=col+coldelta;

for(;;)
{
x+=rowdelta;
y+=coldelta;

if(x<0||x>=SIZE||y<0||y>=SIZE)
break;
if(board[x][y]==' ')
break;
if(board[x][y]==player)
{
while(board[x-=rowdelta][y-=coldelta]==opponent)
board[x][y]=player;
break;
}
}
}
}
}

int get_score(char board[][SIZE],char player)
{
int score=0;
int row=0;
int col=0;
char opponent=player=='0'?'@':'0';

for(row=0;row<SIZE;row++)
for(col=0;col<SIZE;col++)
{
score-=board[row][col]==opponent;
score+=board[row][col]==player;
}
return score;
}

int best_move(char board[][SIZE],int moves[][SIZE],char player)
{
int row=0;
int col=0;
int i=0;
int j=0;

char opponent=player=='0'?'@':'0';

char new_board[SIZE][SIZE]={0};
int score=0;
int new_score=0;

for(row=0;row<SIZE;row++)
for(col=0;col<SIZE;col++)
{
if(!moves[row][col])
continue;

for(i=0;i<SIZE;i++)
for(j=0;j<SIZE;j++)
new_board[i][j]=board[i][j];

make_move(new_board,row,col,player);

new_score=get_score(new_board,player);

if(score<new_score)
score=new_score;
}
return score;
}

void computer_move(char board[][SIZE],int moves[][SIZE],char player)
{
int row=0;
int col=0;
int best_row=0;
int best_col=0;
int i=0;
int j=0;
int new_score=0;
int score=100;
char temp_board[SIZE][SIZE];
int temp_moves[SIZE][SIZE];
char opponent=player=='0'?'@':'0';

for(row=0;row<SIZE;row++)
for(col=0;col<SIZE;col++)
{
if(moves[row][col]==0)
continue;

for(i=0;i<SIZE;i++)
for(j=0;j<SIZE;j++)
temp_board[i][j]=board[i][j];

make_move(temp_board,row,col,player);
valid_moves(temp_board,temp_moves,opponent);
new_score=best_move(temp_board,temp_moves,opponent);

if(new_score<score)
{
score=new_score;
best_row=row;
best_col=col;
}
}
make_move(board,best_row,best_col,player);
}
我已经用英文说明了如何操作了......看不懂的我在这个说一下.
先按回车开始游戏,然后输入行号和列号就可以了...一局结束之后,
会提示是否再来一盘输入大写的Y继续大写的N结束程序!!!
我已经对操作说的很明确了!~~~~~你控制的是白棋(0),首先按回车开始游戏,然后输入行号(数字),列号(字符)就行了.......如果还是不行的话,那就是你更本不懂黑白棋的规则....


如何学好C语言?
所有初学者面临的第一个问题便是:如何选择教材。好的开始是成功的一半,选择一本优秀的教材是事半功倍的关键因素。不幸的是,学校通常会帮你指定一本很差劲的C语言课本;而幸运的是,你还可以再次选择。没有学习交流地方可以来 大名鼎鼎的谭浩强教授出了一本《C语言程序设计》,据说发行量有超过400万,据我所知,很多...

如何自学编程?
选择一种编程语言。初学者一定要从主流语言开始学习,比如中级语言C和C++。这两种语言是任何一名合格、专业的程序员都必须掌握的,因为它们称得上是软件开发界的主流。但是最好不要从高级语言开始学,如Java,因为这些语言对于初学者来说难度未免太高(高级语言可以以后再学,但是C语言和C++应该作为你的基础)...

为什么我编程的时候感受不到那种乐趣,也不是程序难?要怎么培养啊_百度...
1) qq聊天软件是用什么语言写的(第二天要换个问题)答对的演讲结束后留下来,我要亲自给他传授宝贵经验,没人答的话,很遗憾2) 谁玩电脑游戏比较牛恩,人很多,大家很踊跃,很好展示下我写的人工智能黑白棋游戏,声明真正的编程高手基本从来不玩游戏(结合大四同学长期沉迷游戏最后找不到工作的例子,说明一个严肃的问题...

如何用C语言实现联机
如果再同一个局域网中 比较简单 使用socket方面的一些东西利用ip就可以 网上查查就行 我上学时做了个五子棋的 如果是网络的,要用到协议什么 较复杂 建议系统看下

怎么自学编程
选择一种编程语言。初学者一定要从主流语言开始学习,比如中级语言C和C++。这两种语言是任何一名合格、专业的程序员都必须掌握的,因为它们称得上是软件开发界的主流。但是最好不要从高级语言开始学,如Java,因为这些语言对于初学者来说难度未免太高(高级语言可以以后再学,但是C语言和C++应该作为你的基础)...

急求c语言游戏黑白棋的设计思路
楼上说的有理 鄙人就说说简单的双人对战吧 首先可以用二维数组表示棋盘(比方可以是int[][],元素为“1”表示玩家甲的棋子,“2”表示玩家乙...)然后写一个函数实现如下功能:每下一子,就利用下标检测此子周围8个元素(边上的没有这么多,就要通过下标的限制了)有没有相同的,有的话,累计(要...

C语言我能学吗
c语言绘图的笔记:http:\/\/post.baidu.com\/f?kz=67820967 交换变量值方法讨论:http:\/\/post.baidu.com\/f?kz=2752640 电脑对战黑白棋:http:\/\/post.baidu.com\/f?kz=67191514 定时开关机:http:\/\/post.baidu.com\/f?kz=67193477 242 回复 :【 C 语言吧 · 问题资料大全 】 Turbo C\/C++ 3.0 Build 0601 ...

零基础学习C语言
1个回答 #热议# 什么是淋病?哪些行为会感染淋病?深空游戏 2023-09-29 · 百度认证:东莞市深空信息咨询官方账号 深空游戏 向TA提问 关注 展开全部 零基础学习C语言:本人在网上找了很久关于如何学习C语言,本人也是新手不知该如何开始学习,无意中发现这本书慢慢的我找到了学习的头绪!推荐给大家学习目录 ...

用C语言编写小游戏
我发给你哈

C语言黑白棋
谁知道黑白棋人机对弈的C语言程序啊?... 谁知道黑白棋人机对弈的C语言程序啊? 展开  我来答 2个回答 #热议# 职场上受委屈要不要为自己解释?...#define ESC 0x011b \/* ESC键值*\/#define ENTER 0x1c0d \/* 回车键值*\/int a[8][8]={0},key,score1,score2;\/*具体分数以及按键与存放棋子...

嘉峪关市19151459960: 求一个简单的黑白棋程序 C语言编写 的 -
武康奈狄: //=====othello=====#include#include using namespace std; int board[8][8],saveboard[60][8][8]; int cx,cy,col,pass,empty,black,white; void init(){ //initialization memset(board,-1,sizeof(board)); board[3][3]=0; board[3][4]=1; board[4][4]=0; board[4][3]=1;...

嘉峪关市19151459960: 谁知道黑白棋人机对弈的C语言程序啊? -
武康奈狄: aa#include "graphics.h" /*图形系统头文件*/ #define LEFT 0x4b00 /*光标左键值*

嘉峪关市19151459960: 解答关于“用C语言编写黑白棋的算法”的问题 -
武康奈狄: 展开全部#include "stdio.h"#include "windows.h"#define empty 0#define white -1#define black 1#define a 8 int board[a][a]; int player; void InitBoard() { int i,j; for(j=0;j for(i=0;i board[i][j]=empty; board[4][4]=white; board[4][3]=black; board[3][3]=...

嘉峪关市19151459960: 我是初学C语言的,用C语言编黑白棋游戏绘制8*8棋盘书上说的看不懂请高手帮忙 -
武康奈狄: 设置填充模式和颜色后,再绘制是,显出的矩形就是你设置的样子了,如果你再想绘制别的你模式和颜色,必须在绘制前修改为你需要的模式.也就是讲,设置模式和颜色是全局的设置.不管你画圆或者矩形,都会是这个效果.

嘉峪关市19151459960: 谁有黑白棋的C语言程序
武康奈狄: 这个网址上有,可以参考下 http://haoxiai.net/bianchengyuyan/cyuyan/12116.html

嘉峪关市19151459960: 求救:需要一段黑白棋人机对战的c语言程序
武康奈狄:http://download.csdn.net/source/497103 CSDN上的一个源程序,去下载吧.

嘉峪关市19151459960: c语言小程序 -- 黑白棋 -
武康奈狄: 你想做什么?人人对战的代码我有,但是人机对战的AI写不好是个国际难题 //=====othello=====#include<iostream>#include<cstdio>using namespace std;int board[8][8],saveboard[60][8][8];int cx,cy,col,pass,empty,black,white;void init(){ //...

嘉峪关市19151459960: 急求 c语言游戏黑白棋的设计思路 -
武康奈狄: 楼上说的有理 鄙人就说说简单的双人对战吧 首先可以用二维数组表示棋盘(比方可以是int[][],元素为“1”表示玩家甲的棋子,“2”表示玩家乙...) 然后写一个函数实现如下功能:每下一子,就利用下标检测此子周围8个元素(边上的没有这么多,就要通过下标的限制了)有没有相同的,有的话,累计(要考虑分4种情况累计,横竖斜),并调用相应方向的函数检测那些相同的元素,没有就跳过继续. 再写四个函数(检测横竖斜4个方向的) 最后主函数 最最后...完善...!!!!!说的不对的请指教

嘉峪关市19151459960: 如何只用c语言系统做一个黑白棋游戏? -
武康奈狄: 我做过一个没界面的,用X代表黑子用O代表白子

嘉峪关市19151459960: 求C语言写一个简单的小游戏 -
武康奈狄: 如果是纯C语言的话那要用TC了,它有图形模式,不过具体的还得你自己去实现

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网