答案:貌似我的这个游戏包含了一些三角概念,可以看看。比如扫雷的思维和五子棋的矩阵
代码如下:
#include<stdio.h>
#include<string.h>
#include<time.h>
#include<stdlib.h>
#define N 19int i,j,k,size=N;
int isBlack=1;//当前是黑方下子 isBlack=1 若为白方下子 isBlack=0
char state[N][N];
char x,y,temp[10];
char c; //用来存放显示黑白子的变量
void printState();void startGame()
{
//printf("\n潇洒易做图提示:此功能待开发...\n");
//当前初始化面板。
for(i=0;i<size;i++)
{
for(j=0;j<size;j++)
{
state[i][j]='*';
}
}
printState();
while(1)
{
printf("\n\t请%s方下子:",isBlack?"黑":"白");
fflush(stdin);
scanf("%s",temp);
if(!strcmp(strupr(temp),"OUT")) //如果在下的过程中输入OUT的话就返回主菜单
{
system("cls");
return;
}
if(!strcmp(temp,"BACK")) //悔棋... BACK
{
i=x-'A'; //这里i和j承担过循环控制变量!需要重新初始化
j=y-'A';
state[i][j]='*';
printState();
printf("\t 观棋不语真君子,落子不悔大丈夫!\n");
isBlack=!isBlack;
continue;
}
if(!strcmp(temp,"LOSE")) //认输... LOSE
{
printf("\n\t潇洒易做图提示:%s方认输,%s方胜!\n\n",isBlack?"黑":"白",isBlack?"白":"黑");
return;
}
x=temp[0]; //取前两个字符做处理。
y=temp[1];
if(x<'A'||x>'S'||y<'A'||y>'S') //避免下面相减的数组越界。
{
printf("\t输入有误,请输入属于<A-S>或正确的口令。\n");
continue;
}
i=x-'A'; //相减得到的差量正好是数组对应的元素
j=y-'A';
if(state[i][j]!='*'){ //该位置已经有子
printf("\t提示:该位置已经有子,请重新指定坐标!");
continue;
}
c=isBlack?'1':'2';
state[i][j]=c; //设置坐标子为当前下定子
printState(); //显示当前棋盘
//检查是否获胜。 待续... 第二阶段完毕!
isBlack=!isBlack;
}
}
void help()
{
system("cls");
printf("\n潇洒易做图关于本程序说明:\n\n");
printf("\t考虑到C语言图形用户界面的难度。\n\n");
printf("\t本程序采用19*19的游戏格式\n\n");
printf("\t输入格子的坐标下子: 先横坐标后纵坐标。比如输入:GG\n\n");
printf("\t在游戏中有外挂:out(退回主菜单)、back(悔棋)、lose(认输)\n\n");
printf("\n程序棋盘(网上信息) :\n");
printf("\n 与围棋的棋盘一样。\n\n");
printf("基本规则 : \n\n 1) 黑先、白后,从天元开始相互顺序落子。\n\n ");
printf("2) 白棋第一手应在天元为界自己一侧布子,之后双方可任意行子。\n\n ");
printf("3) 最先在棋盘横向、竖向、斜向形成连续的相同色五个棋子的一方为胜。\n\n ");
printf("4) 黑棋禁手判负、白棋无禁手。");
printf("黑棋禁手包括“三、三” “四、四” “长连”。黑方只能“四、三”胜。\n\n ");
printf("5) 如分不出胜负,则定为平局。\n\n ");
printf("6) 对局中中途退场均判为负。\n\n ");
printf("7) 五连与禁手同时形成,先五为胜。\n\n");
printf("棋型说明 : \n\n ");
printf("1) 长连:在一条直线或斜线上,连续下成五个以上的棋型\n\n ");
printf("2) 活三:在一条直线或斜线上,由三个子构成的,必须防守否则将成为“活四”");
printf("导致速胜的棋型。三只有下面两种棋型结构:\n\n ");
printf("3) 活四:指在一条直线或斜线上,由连续的四个字所构成的,");
printf("无论对方怎样防守,只要再走一手棋将必定成为五连的棋型:\n\n ");
printf("4) 四:在一条直线或斜线上,由四个同色子构成的,");
printf("必须防守否则下一步立刻成为“五连”导致速胜的棋型。活四也是四之一。\n\n");
printf("特殊规则 : \n\n ");
printf("黑棋先行的优势很大。因此,在五子棋中,对黑棋做了禁手限制。\n\n ");
printf("禁手:对局中禁止使用的着法,黑棋禁手包括“三三禁手”");
printf("“四四禁手”和“长连禁手”,白棋无禁手。\n\n");
printf("禁手的判断 : \n\n ");
printf("1) 长连禁手:当黑棋走一步棋,形成长连棋型,则此点为“禁手”\n\n ");
printf("2) 三三禁手:当黑棋走一步棋,同时形成两个或");
printf("两个以上的“活三”且没有形成“五连”时,那一步棋就是黑棋禁手。\n\n ");
printf("3) 四四禁手:当黑棋走一步棋,同时形成两个或");
printf("两个以上的“四”且没有形成“五连”时,那一步棋就是黑棋禁手。\n\n");
printf("胜负判断 : \n\n");
printf("胜局 :\n\n ");
printf("1) 最先在棋盘上形成五连,并得到系统认可的一方为胜。白棋长连视同五连。\n\n ");
printf("2) 黑方五连与禁手同时形成,禁手失效,黑方胜。\n\n ");
printf("3) 黑方易做图形成禁手,黑方输。\n\n ");
printf("4) 对局中,一方出现下列情况之一,系统判对方胜。\n\n ");
printf("(1)超过规定时限者;\n\n ");
printf("(2)一方宣布认输者;\n\n ");
printf("(3)中途退出比赛者即逃跑者。\n\n");
printf("和局 :\n\n ");
printf("1)对局双方一致同意和棋。\n\n ");
printf("2)对局双方同一回合均放弃行棋权。\n\n ");
printf("3)全盘均下满,已无空白交叉点。\n\n");
printf("提和 :\n\n ");
printf("1)欲提和者应在自己下着前提出。\n\n ");
printf("2)一方提和,对方可对提和建议表示同意,也可以拒绝。\n\n ");
printf("3)在一局中,一方提和次数不能超过对方三次\n\n");
printf("选材说明地址:中国游戏中心\n( http://www.chinagames.net/chinagames/2008-11/12/content_492703.htm)\n\n");
printf("\t\t\t说明完毕...\n\n ");
}void aboutThanks()
{
system("cls");
printf("\n 易做图鸣谢:\n\t1.我的C语言老师:叶煜老师。");
printf("\n\t2.成都金海洋教育。");
printf("\n\t3.所有关心我的兄弟姐妹。\n\n");
}int main()
{
system("color f1");
while(1)
{
printf("\n\t-----潇洒易做图五子棋C语言练习-----\n\n");
printf("\t\t 1.开始游戏。\n");
printf("\t\t 2.游戏说明。\n");
printf("\t\t 3.游戏鸣谢。\n");
printf("\t\t 4.退出程序。\n");
printf("\n\t请选择:");
L:k=scanf("%d",&i);
if(k==0) &n
上一个:c语言中的时钟问题
下一个:介绍下c语言的发展史?