c语言小程序--黑白棋 用c语言写黑白棋。程序怎么分析

C\u8bed\u8a00\u9ed1\u767d\u68cb\u7a0b\u5e8f\u8bbe\u8ba1\u4ee3\u7801\u3002\u521d\u5b66\u8005\u3002\u3002\u6025\u3002\u5fc5\u6709\u91cd\u8c22

ascII\u7801\u7f51\u4e0a\u6709\u5417\uff1f\u8981\u600e\u4e48\u67e5\u5440\uff1f

\u4f60\u597d\uff01\u4f60\u7684\u7a0b\u5e8f\u5462\uff0c\u53d1\u4e0a\u6765

你想做什么?
人人对战的代码我有,但是人机对战的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(){ //initialization
memset(board,-1,sizeof(board));
board[3][3]=0;
board[3][4]=1;
board[4][4]=0;
board[4][3]=1;
col=0;
pass=0;
empty=60;
black=2;
white=2;
}

int input(){
char s[1000]="";
scanf("%s",&s);
if(s[0]>='a' && s[0]<='h')
cy=s[0]-'a';
else if(s[0]>='A' && s[0]<='H')
cy=s[0]-'A';
else return 0;
if(s[1]>='1' && s[1]<='8'){
cx=s[1]-'1';
return 1;
}
return 0;
}

int judge(int x,int y){
int i,j,temp;
temp=(col+1)%2;
//left && up
if(board[x-1][y-1]==temp){
for(i=x-1,j=y-1; i>=0 && j>=0; i--,j--){
if(board[i][j]<0) break;
if(col==board[i][j]) return 1;
}
}
//up
if(board[x-1][y]==temp){
for(i=x-1; i>=0; i--){
if(board[i][y]<0) break;
if(col==board[i][y]) return 1;
}
}
//right && up
if(board[x-1][y+1]==temp){
for(i=x-1,j=y+1; i>=0 && j<8; i--,j++){
if(board[i][j]<0) break;
if(col==board[i][j]) return 1;
}
}
//right
if(board[x][y+1]==temp){
for(j=y+1; j<8; j++){
if(board[x][j]<0) break;
if(col==board[x][j]) return 1;
}
}
//right && down
if(board[x+1][y+1]==temp){
for(i=x+1,j=y+1; i<8 && j<8; i++,j++){
if(board[i][j]<0) break;
if(col==board[i][j]) return 1;
}
}
//down
if(board[x+1][y]==temp){
for(i=x+1; i<8; i++){
if(board[i][y]<0) break;
if(col==board[i][y]) return 1;
}
}
//left && down
if(board[x+1][y-1]==temp){
for(i=x+1,j=y-1; i<8 && j>=0; i++,j--){
if(board[i][j]<0) break;
if(col==board[i][j]) return 1;
}
}
//left
if(board[x][y-1]==temp){
for(j=y-1; j>=0; j--){
if(board[x][j]<0) break;
if(col==board[x][j]) return 1;
}
}
return 0;
}

void move(int x,int y){
int i,j,temp,count;
temp=(col+1)%2;
count=0;
//left && up
if(board[x-1][y-1]==temp){
for(i=x-1,j=y-1; i>=0 && j>=0; i--,j--){
if(board[i][j]<0) break;
if(col==board[i][j]){
while(i!=x){
board[++i][++j]=col;
count++;
}
count--;
break;
}
}
}
//up
if(board[x-1][y]==temp){
for(i=x-1; i>=0; i--){
if(board[i][y]<0) break;
if(col==board[i][y]){
while(i!=x){
board[++i][y]=col;
count++;
}
count--;
break;
}
}
}
//right && up
if(board[x-1][y+1]==temp){
for(i=x-1,j=y+1; i>=0 && j<8; i--,j++){
if(board[i][j]<0) break;
if(col==board[i][j]){
while(i!=x){
board[++i][--j]=col;
count++;
}
count--;
break;
}
}
}
//right
if(board[x][y+1]==temp){
for(j=y+1; j<8; j++){
if(board[x][j]<0) break;
if(col==board[x][j]){
while(j!=y){
board[x][--j]=col;
count++;
}
count--;
break;
}
}
}
//right && down
if(board[x+1][y+1]==temp){
for(i=x+1,j=y+1; i<8 && j<8; i++,j++){
if(board[i][j]<0) break;
if(col==board[i][j]){
while(i!=x){
board[--i][--j]=col;
count++;
}
count--;
break;
}
}
}
//down
if(board[x+1][y]==temp){
for(i=x+1; i<8; i++){
if(board[i][y]<0) break;
if(col==board[i][y]){
while(i!=x){
board[--i][y]=col;
count++;
}
count--;
break;
}
}
}
//left && down
if(board[x+1][y-1]==temp){
for(i=x+1,j=y-1; i<8 && j>=0; i++,j--){
if(board[i][j]<0) break;
if(col==board[i][j]){
while(i!=x){
board[--i][++j]=col;
count++;
}
count--;
break;
}
}
}
//left
if(board[x][y-1]==temp){
for(j=y-1; j>=0; j--){
if(board[x][j]<0) break;
if(col==board[x][j]){
while(j!=y){
board[x][++j]=col;
count++;
}
count--;
break;
}
}
}
board[x][y]=col;
if(col){
black+=count;
white-=count;
black++;
}
else{
black-=count;
white+=count;
white++;
}
empty--;
}

void output(){
char c;
printf(" ");
for(int i=0; i<8; i++){
c='A'+i;
printf("%2c",c);
}
printf("\n");

for(int i=0; i<8; i++){
printf("%d",i+1);
for(int j=0; j<8; j++){
if(board[i][j]==-1)
c=' ';
else if(board[i][j]==0)
c='O';
else
c='X';
printf("%2c",c);
}
printf("\n");
}
printf("Black:%3d White:%3d\n",black,white);
}

int passjudge(){
int f=0;
for(int i=0; i<8; i++)
for(int j=0; j<8; j++)
if(board[i][j]<0)
f+=judge(i,j);
return f;
}

void startprint(){
printf("1、New game\n2、setboard\n0、Exit\n");
}

void pvp(){
while(empty && pass<2){
//black or white
col++;
col%=2;
output();
//input
if(!input()){
if(!passjudge()){
printf("Pass!\n");
pass++;
}
else {
col++;
printf("No pass!\nPlease input right stone!\n");
}
continue;
}
if(judge(cx,cy)){
move(cx,cy);
pass=0;
}
else{
col++;
printf("Miss stone\n");
}
}
output();
if(black>white)
printf("Black Win!\n");
else if(black<white)
printf("White Win!\n");
else
printf("Draw Game!\n");
startprint();
}

void setboard(){
char c;
for(int i=0; i<8; i++)
for(int j=0; scanf("%c",&c) && c!='\n'; j++){
if(j>=8) continue;
if(c=='o' && c=='O')
board[i][j]=0;
else if(c=='x' && c=='X')
board[i][j]=1;
}
printf("White start or Black start?\n(W/B)");
scanf("%c",&c);
if(c=='w' || c=='W')
col=1;
if(c=='b' || c=='B')
col=0;
}

int main(int argc, char* argv[]){
int n;
startprint();
while(scanf("%d",&n) && n){
init();
if(n==1)
pvp();
if(n==2){
setboard();
pvp();
}
}
return 0;
}

什么?

  • c璇█灏忕▼搴--榛戠櫧妫
    绛旓細浜轰汉瀵规垬鐨勪唬鐮佹垜鏈夛紝浣嗘槸浜烘満瀵规垬鐨凙I鍐欎笉濂 鏄釜鍥介檯闅鹃 //===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(){ //initialization memset(board,-1,sizeof(board));board...
  • 浼C璇█鐨勬湅鍙嬪府涓繖鍟 甯垜缂栦釜灏忕▼搴
    绛旓細7. 缁撴瀯浣撳拰鍏辩敤浣撶殑绋嬪簭璁捐 8.鏂囦欢鐨勪娇鐢ㄥ叿浣撹姹:1. 绠楁硶璁捐鍚堢悊,鍑嗙‘銆2. 绋嬪簭缁撴灉姝g‘銆3. 绋嬪簭鐢辨彁渚涘缁勬祴璇曟暟鎹,涓旂▼搴忔纭4. 鎸夌収瑕佹眰瀹屾垚璇剧▼璁捐鎶ュ憡銆備笁銆佹姤鍛婃牸寮忔姤鍛婃槸鏈熸湯瀵C璇█鐭ヨ瘑瀛︿範鐨勬荤粨鍜屾彁楂,搴旇鍙嶆槧鍑轰綔鑰呭湪绋嬪簭璁捐杩囩▼涓墍鍋氱殑涓昏宸ヤ綔鍙婂彇寰楃殑涓昏鎴愭灉,浠ュ強浣滆呭湪璁捐杩囩▼涓殑蹇...
  • 姹C璇█灏忕▼搴婧愪唬鐮,300琛屽乏鍙
    绛旓細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) /*鍏蜂綋涓...
  • 鏂版墜濡備綍瀛︿範缂栫▼?
    绛旓細瀛︾紪绋嬪叆闂ㄥ缓璁細1.瀛︾紪绋嬭浠庢牴鏈嚭鍙戯紝浠庣悊璁轰笂鏉ヨ锛岄渶瑕佸箍娉涚殑闃呰銆備簡瑙g畻娉曠殑鍗氬ぇ绮炬繁鍜岃绠楁満鐨勫熀鏈悊璁恒2.浠庡疄璺典笂鏉ヨ锛岄渶瑕佹湁骞挎硾鐨勭粌涔狅紝缁冧範鐨勫箍娉涘湪浜庣粌涔犱笉鍚岀殑鍐呭銆傜劧鍚庡氨鏄垱鏂扮簿绁炲拰鏁板鎬濈淮鑳藉姏锛岃繖浜涢兘鏄渶瑕佸煿鍏荤殑銆傚熀纭瑕佹墦濂藉缂栫▼瑕佸叿澶囦竴瀹氱殑鍩虹銆3.閫昏緫鎬濈淮鑳藉姏鐨勫煿鍏汇佸...
  • 濡備綍瀛﹀ソC璇█?
    绛旓細鐢C璇█鍐欎竴涓灏忕▼搴杩滄瘮瀛︿範ls銆乧at绛夊懡浠ゆ湁瓒,鍐典笖鎴戜滑瑕佷笓娉ㄤ簬C璇█鏈韩,灏变笉寰椾笉鏆傛椂蹇界暐涓浜涗笢瑗,姣斿缂栬瘧閾炬帴鐨勮繃绋嬨丮akefile鐨勫啓娉曠瓑绛夌瓑绛夈 鎵浠ユ垜寤鸿鍒濆鑰呭簲璇ヤ互Visual C++ 6.0(涓嶆槸VisualC++ .NET)鎴栬匘ev C++浣滀负涓昏鐨勫涔犵幆澧,鑰屼笖鍗冧竾涓嶈鍦↖DE鐨勪娇鐢ㄦ妧宸т笂杩囧绾犵紶,鍥犱负浠婂悗浣犱竴瀹氳杞悜Unix...
  • 扩展阅读:c语言编译器手机版app ... c语言搜题神器app ... c语言代码生成器 ... c语言考试题及答案 ... c++编程 ... python编程入门自学 ... c语言在线编译器 ... 中国象棋真人版 ... c语言程序设计谭浩强 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网