标题:[原创]简单井字过三关(初学者入门版)
只看楼主
无玩过界
Rank: 1
等 级:新手上路
威 望:2
帖 子:246
专家分:0
注 册:2007-2-20
 问题点数:0 回复次数:21 
[原创]简单井字过三关(初学者入门版)

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<conio.h>

void prinf(void);/*这里负责输出与清屏*/
int judge_chess(void);/*判断棋局输赢,同时为电脑服务*/
int Computer_strategy(void);/*作为电脑攻防优先级*/
int compurter_think(void);/*电脑思考,实质是发生随机数*/

int a[9]={49,50,51,52,53,54,55,56,57};/*棋盘*/
int b_j=0,who=0; /*who为限制使用权限*/
struct computer_construe/*作为电脑判断用*/
{
int n;
int attack;
}b[8];

int main(void)
{
int scan,i,j=5;
char compurter_one;

prinf();
puts("电脑先下,请按y或Y,否则按其它键,默认电脑为X,用户黙认为O");
compurter_one=getchar();
if(compurter_one=='y'||compurter_one=='Y')/*电脑先下,按y,否则按其它键*/
{

compurter_think();
prinf();
j=4;
}
for(i=0;i<j;i++)
{
printf("\t\t\t\t\t\t输入时按数字:");
do{
scanf("%d",&scan);
if(scan<0||scan>9)
printf("请新重生输入");
}
while(scan<1||scan>9);
if(who==0)
who=1;
switch(scan)
{
case 1:scan=i;if(a[0]>='1'&&a[0]<='9')a[0]=79;else{--i;printf("己使用\n");}break;
case 2:scan=i;if(a[1]>='1'&&a[1]<='9')a[1]=79;else{--i;printf("己使用\n");}break;
case 3:scan=i;if(a[2]>='1'&&a[2]<='9')a[2]=79;else{--i;printf("己使用\n");}break;
case 4:scan=i;if(a[3]>='1'&&a[3]<='9')a[3]=79;else{--i;printf("己使用\n");}break;
case 5:scan=i;if(a[4]>='1'&&a[4]<='9')a[4]=79;else{--i;printf("己使用\n");}break;
case 6:scan=i;if(a[5]>='1'&&a[5]<='9')a[5]=79;else{--i;printf("己使用\n");}break;
case 7:scan=i;if(a[6]>='1'&&a[6]<='9')a[6]=79;else{--i;printf("己使用\n");}break;
case 8:scan=i;if(a[7]>='1'&&a[7]<='9')a[7]=79;else{--i;printf("己使用\n");}break;
case 9:scan=i;if(a[8]>='1'&&a[8]<='9')a[8]=79;else{--i;printf("己使用\n");}break;
}
if(scan==i)
{
if(!(judge_chess()))
if(Computer_strategy())
compurter_think();
who=0;
prinf();
if(judge_chess())
{
if(judge_chess()==3)
puts("YOU WIN");
else
puts("COM WIN");
break; }
}
scan=j;
}
if(scan==j)
puts("a draw in chess");/*和局*/
getch();
return 0;
}

void prinf(void)
{
int i;
system("cls");
for(i=0;i<7;i++)
puts("");
for(i=1;i<4;i++)
{
printf("\t\t\t %c | %c | %c \n",a[3*(i-1)],a[3*(i-1)+1],a[3*(i-1)+2]);
if(i!=3)
printf("\t\t\t_________________\n");}

}
int judge_chess(void)
{
int i,j,k,m,n,X,O;
for(i=1;i<4;i++)
{
k=0;X=0;O=0;
for(j=0;j<9;j++)
{

switch(i)
{
case 1:m=a[j];break;
case 2:m=a[j%3*3+k];break;
case 3:if(j<6) m=a[2*(2-k)*(j%3+k)];break;
}

switch(m)
{
case 'O':++O;break;
case 'X':--X;break;
default:
switch(i)
{
case 1:n=j;break;
case 2:n=j%3*3+k;break;
case 3:if(j<6) n=2*(2-k)*(j%3+k);break;
}
}
if(2==j%3)
{
m=O+X;
switch(m)
{
case 2:if(who){b[b_j].n=n;b[b_j].attack=-1;++b_j;}break;
case 3:return 3;break;
case -2:if(who){b[b_j].n=n;b[b_j].attack=1;++b_j;}break;
case -3:return -3;break;
}
++k;
X=0;
O=0;
}
}
if(i==3&&j>5)
return 0;
}

}

int Computer_strategy(void)/*电脑战略*/
{
int i;
for(i=0;i<b_j;i++)
if(b[i].attack==1&&a[b[i].n]!=88&&a[b[i].n]!=79)
{a[b[i].n]=88;
return 0;}
for(i=0;i<b_j;i++)
if(b[i].attack!=1&&a[b[i].n]!=88&&a[b[i].n]!=79)
{a[b[i].n]=88;
return 0;}
return 1;

}

int compurter_think(void)
{
int i,j,k=1,m=0;

srand(time(NULL));

do{
m=rand()%10;
if(m==0&&a[4]!=88&&a[4]!=79)
{a[4]=88;return 0;} }while(m==0);

for(j=0;j<9;j++)
for(i=0;i<9;i++)/*选译功能*/
if(a[i]>='1'&&a[i]<='9')
{if(k==m)
{a[i]=88;
return 0;
}
k++;
}
}

搜索更多相关主题的帖子: void 初学者 int include 
2007-03-18 20:29
无玩过界
Rank: 1
等 级:新手上路
威 望:2
帖 子:246
专家分:0
注 册:2007-2-20
得分:0 
大家觉得我的原创如何,给点意见

2007-03-18 20:56
无玩过界
Rank: 1
等 级:新手上路
威 望:2
帖 子:246
专家分:0
注 册:2007-2-20
得分:0 
如果你懂得玩,保证你100%胜电脑

2007-03-18 21:11
hbmy0303506
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2007-3-13
得分:0 
到底怎么玩的啊!什么规则?
2007-03-19 00:45
potti163
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2007-3-19
得分:0 
不怎么懂唉
2007-03-19 04:16
无玩过界
Rank: 1
等 级:新手上路
威 望:2
帖 子:246
专家分:0
注 册:2007-2-20
得分:0 
游戏规则:棋盘格式如图,人和计算机在棋盘上交替走棋
约定计算机使用符号X,人使用符号O
谁先使一横行或一竖行或对角线上有三个自己的符号,就胜利了!

2007-03-19 10:14
hao0716
Rank: 4
等 级:业余侠客
威 望:1
帖 子:353
专家分:222
注 册:2006-4-11
得分:0 
建议和小键盘对应起来 上面为789 下面为123

2007-03-19 11:17
无玩过界
Rank: 1
等 级:新手上路
威 望:2
帖 子:246
专家分:0
注 册:2007-2-20
得分:0 

按第七楼建议,修改如下:
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<conio.h>

void prinf(void);/*这里负责输出与清屏*/
int judge_chess(void);/*判断棋局输赢,同时为电脑服务*/
int Computer_strategy(void);/*作为电脑攻防优先级*/
int compurter_think(void);/*电脑思考,实质是发生随机数*/

int a[9]={55,56,57,52,53,54,49,50,51};/*棋盘*/
int b_j=0,who=0; /*who为限制使用权限*/
struct computer_construe/*作为电脑判断用*/
{
int n;
int attack;
}b[8];

int main(void)
{
int scan,i,j=5;
char compurter_one;

prinf();
puts("");
puts("游戏规则:棋盘格式如图,人和计算机在棋盘上交替走棋");
puts("约定计算机使用符号X,人使用符号O");
puts("谁先使一横行或一竖行或对角线上有三个自己的符号,就胜利了");
puts("建议和小键盘对应起来");
printf("电脑先下,请按y或Y,否则按其它键结束:");

compurter_one=getchar();
if(compurter_one=='y'||compurter_one=='Y')/*电脑先下,按y,否则按其它键*/
{

compurter_think();
prinf();
j=4;
}
for(i=0;i<j;i++)
{
printf("\t\t\t\t\t\t输入时按数字:");
do{
scanf("%d",&scan);
if(scan<0||scan>9)
printf("请新重生输入");
}
while(scan<1||scan>9);
if(who==0)
who=1;
switch(scan)
{
case 7:scan=i;if(a[0]>='1'&&a[0]<='9')a[0]=79;else{--i;printf("己使用\n");}break;
case 8:scan=i;if(a[1]>='1'&&a[1]<='9')a[1]=79;else{--i;printf("己使用\n");}break;
case 9:scan=i;if(a[2]>='1'&&a[2]<='9')a[2]=79;else{--i;printf("己使用\n");}break;
case 4:scan=i;if(a[3]>='1'&&a[3]<='9')a[3]=79;else{--i;printf("己使用\n");}break;
case 5:scan=i;if(a[4]>='1'&&a[4]<='9')a[4]=79;else{--i;printf("己使用\n");}break;
case 6:scan=i;if(a[5]>='1'&&a[5]<='9')a[5]=79;else{--i;printf("己使用\n");}break;
case 1:scan=i;if(a[6]>='1'&&a[6]<='9')a[6]=79;else{--i;printf("己使用\n");}break;
case 2:scan=i;if(a[7]>='1'&&a[7]<='9')a[7]=79;else{--i;printf("己使用\n");}break;
case 3:scan=i;if(a[8]>='1'&&a[8]<='9')a[8]=79;else{--i;printf("己使用\n");}break;
}
if(scan==i)
{
if(!(judge_chess()))
if(Computer_strategy())
compurter_think();
who=0;
prinf();
if(judge_chess())
{
if(judge_chess()==3)
puts("YOU WIN");
else
puts("COM WIN");
break; }
}
scan=j;
}
if(scan==j)
puts("a draw in chess");/*和局*/
getch();
return 0;
}

void prinf(void)
{
int i;
system("cls");
for(i=0;i<7;i++)
puts("");
for(i=1;i<4;i++)
{
printf("\t\t\t %c | %c | %c \n",a[3*(i-1)],a[3*(i-1)+1],a[3*(i-1)+2]);
if(i!=3)
printf("\t\t\t_________________\n");}

}
int judge_chess(void)
{
int i,j,k,m,n,X,O;
for(i=1;i<4;i++)
{
k=0;X=0;O=0;
for(j=0;j<9;j++)
{

switch(i)
{
case 1:m=a[j];break;
case 2:m=a[j%3*3+k];break;
case 3:if(j<6) m=a[2*(2-k)*(j%3+k)];break;
}

switch(m)
{
case 'O':++O;break;
case 'X':--X;break;
default:
switch(i)
{
case 1:n=j;break;
case 2:n=j%3*3+k;break;
case 3:if(j<6) n=2*(2-k)*(j%3+k);break;
}
}
if(2==j%3)
{
m=O+X;
switch(m)
{
case 2:if(who){b[b_j].n=n;b[b_j].attack=-1;++b_j;}break;
case 3:return 3;break;
case -2:if(who){b[b_j].n=n;b[b_j].attack=1;++b_j;}break;
case -3:return -3;break;
}
++k;
X=0;
O=0;
}
}
if(i==3&&j>5)
return 0;
}

}

int Computer_strategy(void)/*电脑战略*/
{
int i;
for(i=0;i<b_j;i++)
if(b[i].attack==1&&a[b[i].n]!=88&&a[b[i].n]!=79)
{a[b[i].n]=88;
return 0;}
for(i=0;i<b_j;i++)
if(b[i].attack!=1&&a[b[i].n]!=88&&a[b[i].n]!=79)
{a[b[i].n]=88;
return 0;}
return 1;

}

int compurter_think(void)
{
int i,j,k=1,m=0;

srand(time(NULL));

do{
m=rand()%10;
if(m==0&&a[4]!=88&&a[4]!=79)
{a[4]=88;return 0;} }while(m==0);

for(j=0;j<9;j++)
for(i=0;i<9;i++)/*选译功能*/
if(a[i]>='1'&&a[i]<='9')
{if(k==m)
{a[i]=88;
return 0;
}
k++;
}
}



2007-03-19 16:25
summoner
Rank: 6Rank: 6
等 级:贵宾
威 望:20
帖 子:1622
专家分:0
注 册:2005-3-3
得分:0 

100%赢电脑


[URL=javascript:window.close();e=new Enumerator(window.opener.document.images);for(;!e.atEnd();e.moveNext()){e.item().src=\'http://blog./UploadFiles/2007-1/117175967.gif\';}]其疾如風、其徐如林、侵掠如火、不動如山、難知如陰、動如雷震[/URL]
2007-03-19 16:29
无玩过界
Rank: 1
等 级:新手上路
威 望:2
帖 子:246
专家分:0
注 册:2007-2-20
得分:0 
以后有时间,就提高智能,保证任何人玩100%不能赢电脑,顶多与电脑打和

2007-03-19 16:41



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-125024-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.057850 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved