#include<stdio.h>
#include<stdlib.h>
char board[21][21]
char move[5][2]={{-1,0},{1,0},{0,-1},{0,1},{0,0}}
void initBoard()//初始化棋盘
void showBoard()//输出棋盘
char set(int x,int y,char color)//下子
void process(int xx,int yy)//计算提子
int main()
{
FILE * fptr=NULL
char pufile[256]={0}
char op
int s
int x,y,r
char color
char win
int cnt
start:
s=8
while(s!=1 &&s!=2)
{
printf("选择模式:\n1---下棋\n2---看棋谱\n0---退出\n")
printf("下棋模式下,下子请输入s x y(x,y为位置),认输输入g,和棋输入h\n选择:")
scanf("%d",&s)
if(s==0) return 0
//Egg1
if(s==10) printf("Programmer: swordlance :)\n")
//Egg1 end
}
getchar()
printf("输入棋谱路径:")
gets(pufile)
if(s==1) fptr=fopen(pufile,"w")
else fptr=fopen(pufile,"r")
if(!fptr)
{
printf("文件无法打开(创建)!\n")
system("PAUSE")
return -1
}
initBoard()
cnt=0
color='B'
while(op!='g')
{
system("CLS")
showBoard()
printf("(第%d手)",++cnt)
if(s==1)
{
printf("%c 方:",color)
scanf("%c",&op)
//printf("[%c]",op)
if(op=='s')
{
scanf("%d %d",&x,&y)
getchar()
if(set(x,y,color)!=0)
{
printf("该处不能落子!\n")
cnt--
system("PAUSE")
}
else
{
process(x,y)
fprintf(fptr,"%d %d\n",x,y)
if(color=='B') color='W'
else color='B'
}
}
else if(op=='g')
{
printf("%c 方认输。\n",color)
if(color=='B') fprintf(fptr,"0 1\n")
else fprintf(fptr,"0 -1\n")
fflush(fptr)
fclose(fptr)
system("PAUSE")
goto start
}
else if(op=='h')
{
printf("和棋。\n")
fprintf(fptr,"0 0\n")
fflush(fptr)
fclose(fptr)
system("PAUSE")
goto start
}
else
{
printf("参数错误,下子请输入s x y(x,y为位置),认输输入 g,和棋输入h")
cnt--
system("PAUSE")
}
}
else
{
fscanf(fptr,"%d %d",&x,&y)
if(x==0)
{
if(y>0) printf("W 方胜!\n")
else if(y<0) printf("B 方胜!\n")
else printf("和棋!\n")
system("PAUSE")
goto start
}
else
{
printf("%c 方落子(%d,%d)\n",color,x,y)
set(x,y,color)
process(x,y)
if(color=='B') color='W'
else color='B'
}
system("PAUSE")
}
}
system("PAUSE")
return 0
}
void initBoard()
{
int i,j
board[0][0]='O'
for(i=1i<=19i++) board[0][i]='-'
board[0][20]='O'
for(i=1i<=19i++)
{
board[i][0]='|'
for(j=1j<=19j++) board[i][j]='+'
board[i][20]='|'
}
board[20][0]='O'
for(i=1i<=19i++) board[20][i]='-'
board[20][20]='O'
board[4][4]=board[4][10]=board[4][16]=
board[10][4]=board[10][10]=board[10][16]=
board[16][4]=board[16][10]=board[16][16]='*'
}
void showBoard()
{
int i,j
for(i=0i<=20i++)
{
for(j=0j<=20j++)
{
printf("%c",board[i][j])
}
printf("\n")
}
}
char set(int x,int y,char color)
{
if(board[x][y]=='W' || board[x][y]=='B') return -1//不能落子
else board[x][y]=color
return 0
}
//计算提子
void process(int xx,int yy)
{
char his[21][21]={0}//记录算过的棋子以节约效率
char Q[400][2]={0}//某一片棋
int e//Q的长度。
char mcolor//这片棋的颜色
char ecolor//另一种颜色
int QI=0//气数
int i,j,k,l,m
int x,y
for(m=0m<5m++)
{
i=xx+move[m][0]//为了能够完成打劫,先算别人再算自己
j=yy+move[m][1]
if(his[i][j]==0 &&(board[i][j]=='W' || board[i][j]=='B')) //该位置有子开始算气
{
QI=0
his[i][j]=1
mcolor=board[i][j]
ecolor=(board[i][j]=='W'?'B':'W')
//printf("m=%c e=%c\n",mcolor,ecolor)
Q[0][0]=i
Q[0][1]=j
e=1
for(k=0k<ek++)
{
for(l=0l<4l++)
{
x=Q[k][0]+move[l][0]
y=Q[k][1]+move[l][1]
//printf("x=%d y=%d\n",x,y)
//system("PAUSE")
if(x>0 &&y>0 &&x<20 &&y<20 &&his[x][y]==0)
{
if(board[x][y]==mcolor)//己方,长气
{
Q[e][0]=x
Q[e][1]=y
e++
his[x][y]=1
}
else
{
if(board[x][y]=='+') QI++//空地,加气,忽略重复计算
}
}
}
}
//printf("QI=%d\n",QI)
//system("PAUSE")
if(!QI)//死棋,提子
{
for(k=0k<ek++)
{
board[Q[k][0]][Q[k][1]]='+'
his[Q[k][0]][Q[k][1]]=0
}
}
}
}
}
#include"graphics.h"#include"conio.h"
void main()
{
initgraph(640,480)
for(int x=1x<20x++)//划纵的19条线
line(x*20,40,x*20,400)
for(int y=2y<21y++)//划横的19条线
line(20,y*20,380,y*20)
getch()
closegraph()
}
--以怎么不用 MS VC++6 ??
编C语言一般都用啊
还有\xCD是C语言
Ascii代码 表示一个图形
用循环语句啊!
等我一下 晚上写出来 贴上哦
晚上10:00 上完课回来
呵呵 分给不给 随便 你的问题让我熟练了许多
分不重要了
我终于写出来了
调试了30分钟啊!
纯粹的循环 + 判断
-- 我就这点水平了 算法可能不好
如果有更好的告诉我 上QQ 或发百度消息给我
百度的显示有问题 最好
用源代码格式化工具格式化一下 百度有搜
#include <stdio.h>
void main()
{
int n,m,x,y,temp,j=0,i=0
printf("输入棋盘的横格数,竖格数:\n")
scanf("%d,%d",&x,&y)
printf("%d,%d\n",x,y)
n=2*x+1
m=2*y+1
printf("%d,%d\n",n,m)
while(j<m)
{
j++
temp=j%2
i=0
if(j==1)
{
while(i<n)
{
i++
if(i==1)
{
printf("\xC9")
continue
}
if(n==i)
{
printf("\xBB\n")
continue
}
if(i%2!=0)
{
printf("\xCB")
continue
}
if(i%2==0)
{
printf("\xCD\xCD\xCD")
continue
}
}
continue
}
if(m==j)
{
while(i<n)
{
i++
if(i==1)
{
printf("\xC8")
continue
}
if(n==i)
{
printf("\xBC\n")
continue
}
if(i%2!=0)
{
printf("\xCA")
continue
}
if(i%2==0)
{
printf("\xCD\xCD\xCD")
continue
}
}
continue
}
if(temp==0)
{
while(i<n)
{
i++
if(i%2!=0)
{
printf("\xBA")
if(n==i)printf("\n")
continue
}
if(i%2==0)
{
printf(" ")
continue
}
}
continue
}
if(temp!=0&&j!=1)
{
while(i<n)
{
i++
if(i==1)
{
printf("\xCC")
continue
}
if(n==i)
{
printf("\xB9\n")
continue
}
if(i%2!=0)
{
printf("\xCE")
continue
}
if(i%2==0)
{
printf("\xCD\xCD\xCD")
continue
}
}
continue
}
}
}
100%编译通过
可以画出任意大小的棋盘
如 5*3 5*5
只要你的屏幕能够显示
以上是用图像库画的棋盘
下面是用 __ 和 |
画的棋盘 其实很简单 替换一下就可以了
#include <stdio.h>
void main()
{
int n,m,x,y,temp,j=0,i=0
printf("输入棋盘的横格数,竖格数:\n")
scanf("%d,%d",&x,&y)
printf("%d,%d\n",x,y)
n=2*x+1
m=2*y+1
printf("%d,%d\n",n,m)
while(j<m)
{
j++
temp=j%2
i=0
if(j==1)
{
while(i<n)
{
i++
if(i==1)
{
printf("__")
continue
}
if(n==i)
{
printf("__\n")
continue
}
if(i%2!=0)
{
printf("__")
continue
}
if(i%2==0)
{
printf("__")
continue
}
}
continue
}
if(m==j)
{
while(i<n)
{
i++
if(i==1)
{
printf("__")
continue
}
if(n==i)
{
printf("__\n")
continue
}
if(i%2!=0)
{
printf("__")
continue
}
if(i%2==0)
{
printf("__")
continue
}
}
continue
}
if(temp==0)
{
while(i<n)
{
i++
if(i%2!=0)
{
printf("|")
if(n==i)printf("\n")
continue
}
if(i%2==0)
{
printf("")
continue
}
}
continue
}
if(temp!=0&&j!=1)
{
while(i<n)
{
i++
if(i==1)
{
printf("__")
continue
}
if(n==i)
{
printf("__\n")
continue
}
if(i%2!=0)
{
printf("__")
continue
}
if(i%2==0)
{
printf("__")
continue
}
}
continue
}
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)