用C写一个井字棋程序,但第(1,1)格总是显示5,代码如下,望解答

用C写一个井字棋程序,但第(1,1)格总是显示5,代码如下,望解答,第1张

#include<stdio.h>

#include<ctype.h>

#include<conio.h>

int n=9, z=0, qp[10]={0}

int chkwin(int t[], int w)

{if (t[1]==w &&t[1]==t[2] &&t[2]==t[3]) return(w)

if (t[4]==w &&t[4]==t[5] &&t[5]==t[6]) return(w)

if (t[7]==w &&t[7]==t[8] &&t[8]==t[9]) return(w)

if (t[1]==w &&t[1]==t[4] &&t[4]==t[7]) return(w)

if (t[2]==w &&t[2]==t[5] &&t[5]==t[8]) return(w)

if (t[3]==w &&t[3]==t[6] &&t[6]==t[9]) return(w)

if (t[1]==w &&t[1]==t[5] &&t[5]==t[9]) return(w)

if (t[3]==w &&t[3]==t[5] &&t[5]==t[7]) return(w)

return(0)

}

long search(int n, int k, int t[])

{int i, h, f, g

long j

if (n==0) return(chkwin(t,k))

for (f=0, j=0,i=1i<10i++)

if (t[i]==0)

{t[i]=kh=chkwin(t,k)

if (h==k) f++

else j+=search(n-1,k*-1,t)

t[i]=0

}

if (f>z) for (j=k, g=ng>0j*=g--)

return(j)

}

/* 电脑选位置走棋,择位原则1.当前位置必须为空*/

/*2.若走当前位置电脑能赢,则走这一步,否则转(3) */

/* 3.若当前位置被人走电脑会输,则走这一步,否则转(4)*/

/*4.试走当前位置并调用 search()函数,求走当前位置电脑的有利程度 */

/*5.找对电脑有利程度最大的位置走 */

void cgo()

{int i, ti=0

long j=-8000000, t=0

for (ti=1ti>-2ti-=2) /*ti=1,先看自己能否赢;ti=-1,看对受能否赢*/

for (i=1i<10i++)

if (qp[i]==0)

{qp[i]=ti

if (chkwin(qp, ti)!=0) {n--qp[i]=1return}

qp[i]=0

}

for (i=1i<10i++)

if (qp[i]==0)

{qp[i]=1t=search(n-1,-1,qp)

if (t>j) {j=tti=i}

qp[i]=0

}

n--qp[ti]=1

}

/* 函数mgo(),人输入走棋位置 */

void mgo()

{int c=0

printf ("\nPlease enter the Num to go: ")

for (c=getche()printf("\n"), c=getche() )

if (isdigit(c) &&c!='0' &&qp[c-48]==0)

{n--qp[c-48]=-1return

}}

/* 屏幕输出函数display,在屏幕上输出当前的棋盘*/

void display(int x)

{int i

char t[10]={0}

for (i=1i<10i++)

{if (qp[i]>0) t[i]=88

if (qp[i]<0) t[i]=79

}

printf ("\n%c|%c|%c\n-----\n%c|%c", t[1], t[2], t[3], t[4], t[5])

printf ("|%c\n-----\n%c|%c|%c\n", t[6], t[7], t[8], t[9])

if (x==0) printf("\ndraw!\n")

if (x==1) printf("\ncomputer win!\n")

if (x==2) printf("\ncontinue \n")

}

main()

{char c

printf ("\nGo first? [Y/N]:")/*选择谁先走*/

for (c=getche()c!='Y'&&c!='y'&&c!='N'&&c!='n'c=getche())

if (c=='N'||c=='n') {cgo()z=1display(2)}

while (1)

{mgo()if (!n) {display(0)break} /*人走,若不是最后一步,继续;否则跳出*/

cgo()if (chkwin(qp,1)) {display(1)break} /*电脑走,若没赢,继续;否则跳出*/

if (n)display(2) /*还没走到最后一步,继续;否则跳出*/

else {display(0)break}

}

getchar()

return 0

}

汉子飞行棋制作步骤如下:

1、将纸均匀铺开,尽量成正方形,于纸张相接处用透明胶贴紧。注意要小心贴,减少褶子和裂缝的出现。

2、接下来就是设计版面,确定最中间的一个点,向四面各画一个箭头,然后在4个角落各画一个大小均等的长方形飞机场,将箭头尾与长方形相连,开始画赛道。

3、在赛道上依据原飞行棋把圈的个数补进赛道,如果位置不够,有的圈可以有一点相交,甚至有一小部分不画。然后根据自己喜欢的风格,可以画一些图案,写一些字在空白处。

4、补充完细节之后就是最复杂的一个程序了涂色。这个时候一定要静下心,根据相应的颜色涂进框内。

5、最后一步就是制作骰子了,按照学过的方法,在纸上画出图案,剪下来贴成正方体,标上数字,就完成了。

飞行棋的历史

1、关于飞行棋发明的年代和发明人,在网络上比较一致的意见是他至少发明于大约二战以后,因为它是关于飞行的。但也有人认为这一点没有说服力,因为它有可能是先有了规则再被冠上了飞行棋的名字,在飞机发明前就出现这一游戏是完全可能的。

2、这个应该是国人的原创,是中国玩具公司生产的,据说是为了纪念二战时飞虎队的卓越功勋,是pachisi游戏的变种。

3、飞行棋这种转圈式的路程设计来自于空战中的“拉弗伯雷圆圈”。法国人拉弗伯雷对德国的"大圆圈编队"战术作了改进,使参加编队的飞机不但保持在一个水平面上飞行,而且可绕圆圈盘旋爬高。这样就可以利用防御队形进行盘旋以取得高度优势,伺机进行攻击。

参考资料:百度百科-飞行棋

可以做10个图片框,一个大的九个小的,小的在大的里面,然后用图片资源弄出圈和叉来棚洞槐,再用一个单选框来确定你是圈还是叉,最后你鼠标点击的时候用九个子程序,如果单选框.....图片框.图片=圈/叉,最后一个是颤春时钟周期,如果有三个图片都为你选的图片,则信息框(你赢了)如果有三个图片都是电脑的,则信息框(你输了),可以用取随机数链友来模拟电脑


欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/yw/8269143.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-14
下一篇2023-04-14

发表评论

登录后才能评论

评论列表(0条)

    保存